@onewelcome/react-lib-components 2.1.0 → 2.2.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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../../Button/IconButton.cjs.js"),t=require("../../Form/Toggle/Toggle.cjs.js"),l=require("../../Icon/Icon.cjs.js"),o=require("../../Popover/Popover.cjs.js"),r=require("../../Typography/Typography.cjs.js"),n=require("../../src/util/helper.cjs.js"),c=require("./DataGridColumnsToggle.module.cjs.js"),s=require("react-dom");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e);const i=d.default.forwardRef((({open:u,headers:i,titleLabel:m="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:g,onToggleClicked:p,className:j,domRoot:h=document.body,...v},y)=>{const[T]=e.useState(n.generateID()),q=T+"_header",E=i.map((e=>d.default.createElement(t.Toggle,{key:e.name,name:e.name,checked:!e.hidden,onChange:()=>p(e.name)},e.headline)));return d.default.createElement(o.Popover,{...v,ref:y,className:`${c.default.popover} ${j}`,show:u,role:"dialog","aria-modal":"true","aria-labelledby":q},u&&s.createPortal(d.default.createElement("div",{className:c.default.backdrop,onClick:()=>g()}),h),u&&d.default.createElement(e.Fragment,null,d.default.createElement("div",{className:c.default.header},d.default.createElement(r.Typography,{id:q,className:c.default.title,tag:"span",variant:"h4"},m),d.default.createElement(a.IconButton,{onClick:g,className:`${c.default["close-btn"]}`,title:f},d.default.createElement(l.Icon,{icon:l.Icons.Times}))),d.default.createElement("div",{className:c.default.content},E)))}));exports.DataGridColumnsToggle=i;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../../Button/IconButton.cjs.js"),t=require("../../Form/Toggle/Toggle.cjs.js"),l=require("../../Icon/Icon.cjs.js"),o=require("../../Popover/Popover.cjs.js"),r=require("../../Typography/Typography.cjs.js"),n=require("../../src/util/helper.cjs.js"),c=require("./DataGridColumnsToggle.module.cjs.js"),s=require("react-dom");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e);const i=d.default.forwardRef((({open:u,headers:i,titleLabel:m="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:g,onToggleClicked:p,className:j,domRoot:h=document.body,...v},y)=>{const[T]=e.useState(n.generateID()),b=T+"_header",q=i.map((e=>d.default.createElement(t.Toggle,{key:e.name,name:e.name,checked:!e.hidden,onChange:()=>p(e.name),label:e.headline})));return d.default.createElement(o.Popover,{...v,ref:y,className:`${c.default.popover} ${j}`,show:u,role:"dialog","aria-modal":"true","aria-labelledby":b},u&&s.createPortal(d.default.createElement("div",{className:c.default.backdrop,onClick:()=>g()}),h),u&&d.default.createElement(e.Fragment,null,d.default.createElement("div",{className:c.default.header},d.default.createElement(r.Typography,{id:b,className:c.default.title,tag:"span",variant:"h4"},m),d.default.createElement(a.IconButton,{onClick:g,className:`${c.default["close-btn"]}`,title:f},d.default.createElement(l.Icon,{icon:l.Icons.Times}))),d.default.createElement("div",{className:c.default.content},q)))}));exports.DataGridColumnsToggle=i;
2
2
  //# sourceMappingURL=DataGridColumnsToggle.cjs.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../Icon/Icon.cjs.js"),o=require("./Checkbox.module.cjs.js"),t=require("../../src/hooks/useFormSelector.cjs.js"),a=require("../FormSelectorWrapper/FormSelectorWrapper.cjs.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=n(e);const l=e=>{var r;return null===(r=null==e?void 0:e.props)||void 0===r?void 0:r["data-toggle"]},s=c.default.forwardRef((({children:n,name:d,helperText:i,helperProps:p,indeterminate:u,parentErrorId:f,errorMessage:h,disabled:m,label:b,parentHelperId:k,className:x,error:I,checked:y=!1,formSelectorWrapperProps:E,onChange:j,...v},C)=>{const{errorId:g,identifier:w,describedBy:S}=t.useFormSelector({name:d,helperText:i,parentErrorId:f,errorMessage:h,error:I,parentHelperId:k});e.useEffect((()=>{if(!d)throw new Error("Please pass a 'name' prop to your <Checkbox> component.");if("object"==typeof n&&!l(n)&&void 0===u)throw new Error("If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.")}),[]);const q=[o.default.input,m?o.default.disabled:""];return c.default.createElement(a.FormSelectorWrapper,{...E,className:`${o.default["checkbox-wrapper"]} ${x||""}`,containerProps:{className:o.default["checkbox-container"]},helperText:i,helperProps:p,parentErrorId:f,errorId:g,errorMessage:h,error:I,disabled:m,identifier:w,nestedChildren:"object"==typeof n&&!l(n)&&c.default.createElement("ul",{className:o.default["checkbox-list"]},c.default.Children.map(n,(e=>c.default.createElement("li",null,c.default.createElement(s,{...e.props,parentHelperId:k,parentErrorId:f,error:I,disabled:e.props.disabled?e.props.disabled:m},e.props.children)))))},c.default.createElement("input",{...v,ref:C,disabled:m,className:`${o.default["native-input"]} ${I?o.default.error:""}`,checked:y,onChange:e=>{m||null==j||j(e)},"aria-invalid":I,"aria-checked":u?"mixed":y,"aria-describedby":S,id:`${w}-checkbox`,name:d,type:"checkbox"}),c.default.Children.toArray(n).filter(l),u&&c.default.createElement(r.Icon,{className:q.join(" "),icon:r.Icons.MinusSquare}),y&&!u&&c.default.createElement(r.Icon,{className:q.join(" "),icon:r.Icons.CheckmarkSquare}),!y&&!u&&c.default.createElement(r.Icon,{className:q.join(" "),icon:r.Icons.Square}),c.default.createElement("label",{htmlFor:`${w}-checkbox`},(()=>{if(b)return b;if(void 0===n)throw new Error("Please make sure to pass either a string or more Checkbox components as a child of your Checkbox component.");if("string"==typeof n||"object"==typeof n&&"span"===n.type)return n;throw new Error("If you pass Checkboxes as a child component (to create nested checkbox tree) you need to pass a label to the parent checkbox.")})()))}));exports.Checkbox=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../Icon/Icon.cjs.js"),a=require("./Checkbox.module.cjs.js"),t=require("../../src/hooks/useFormSelector.cjs.js"),o=require("../FormSelectorWrapper/FormSelectorWrapper.cjs.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=l(e);const c=e=>{var r;return!!(null===(r=null==e?void 0:e.props)||void 0===r?void 0:r["data-toggle"])},d=n.default.forwardRef((({children:l,name:s,helperText:i,helperProps:p,indeterminate:u,parentErrorId:f,errorMessage:m,disabled:h,label:b,parentHelperId:I,className:k,error:x,checked:E=!1,formSelectorWrapperProps:j,onChange:v,...y},g)=>{const{errorId:C,identifier:S,describedBy:q}=t.useFormSelector({name:s,helperText:i,parentErrorId:f,errorMessage:m,error:x,parentHelperId:I});e.useEffect((()=>{if(!s)throw new Error("Please pass a 'name' prop to your <Checkbox> component.");if("object"==typeof l&&!c(l)&&void 0===u)throw new Error("If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.")}),[]);const N=[a.default.input,h?a.default.disabled:""];return n.default.createElement(o.FormSelectorWrapper,{...j,className:`${a.default["checkbox-wrapper"]} ${k||""}`,containerProps:{className:a.default["checkbox-container"]},helperText:i,helperProps:p,parentErrorId:f,errorId:C,errorMessage:m,error:x,disabled:h,identifier:S,nestedChildren:"object"==typeof l&&!c(l)&&n.default.createElement("ul",{className:a.default["checkbox-list"]},n.default.Children.map(l,(e=>n.default.createElement("li",null,n.default.createElement(d,{...e.props,parentHelperId:I,parentErrorId:f,error:x,disabled:e.props.disabled?e.props.disabled:h},e.props.children)))))},n.default.createElement("input",{...y,ref:g,disabled:h,className:`${a.default["native-input"]} ${x?a.default.error:""}`,checked:E,onChange:e=>{h||null==v||v(e)},"aria-invalid":x,"aria-checked":u?"mixed":E,"aria-describedby":q,id:`${S}-checkbox`,name:s,type:"checkbox"}),n.default.Children.toArray(l).filter(c),u&&n.default.createElement(r.Icon,{className:N.join(" "),icon:r.Icons.MinusSquare}),E&&!u&&n.default.createElement(r.Icon,{className:N.join(" "),icon:r.Icons.CheckmarkSquare}),!E&&!u&&n.default.createElement(r.Icon,{className:N.join(" "),icon:r.Icons.Square}),n.default.createElement("label",{htmlFor:`${S}-checkbox`},b||("string"==typeof l?l:void 0)))}));exports.Checkbox=d;
2
2
  //# sourceMappingURL=Checkbox.cjs.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../Checkbox/Checkbox.cjs.js"),l=require("./Toggle.module.cjs.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e);const d=r.default.forwardRef((({children:e,checked:t,disabled:d,helperProps:c,...s},o)=>r.default.createElement("div",{className:l.default["toggle-wrapper"]},r.default.createElement(a.Checkbox,{...s,ref:o,checked:t,className:l.default.checkbox,helperProps:{className:l.default["toggle-helper"],...c},disabled:d,label:e},r.default.createElement("span",{"data-toggle":!0,"aria-hidden":"true",className:`${l.default.toggle} ${t?l.default.checked:""} ${d?l.default.disabled:""} `})))));exports.Toggle=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../Checkbox/Checkbox.cjs.js"),l=require("./Toggle.module.cjs.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e);const d=r.default.forwardRef((({checked:e,disabled:t,helperProps:d,className:c,label:s,...u},o)=>{const f=[l.default["toggle-wrapper"]];return c&&f.push(c),r.default.createElement("div",{className:f.join(" ")},r.default.createElement(a.Checkbox,{...u,ref:o,checked:e,className:l.default.checkbox,helperProps:{className:l.default["toggle-helper"],...d},disabled:t,label:s},r.default.createElement("span",{"data-toggle":"true","aria-hidden":"true",className:`${l.default.toggle} ${e?l.default.checked:""} ${t?l.default.disabled:""} `})))}));exports.Toggle=d;
2
2
  //# sourceMappingURL=Toggle.cjs.js.map
@@ -1,10 +1,9 @@
1
- import React, { ComponentPropsWithRef, ReactNode } from "react";
1
+ import React, { ComponentPropsWithRef } from "react";
2
2
  import { Props as FormHelperTextProps } from "../FormHelperText/FormHelperText";
3
3
  import { Props as FormSelectorWrapperProps } from "../FormSelectorWrapper/FormSelectorWrapper";
4
4
  import { FormSelector } from "../form.interfaces";
5
5
  export interface Props extends ComponentPropsWithRef<"input">, FormSelector {
6
- children: ReactNode;
7
- label?: string;
6
+ label?: string | React.ReactElement;
8
7
  indeterminate?: boolean;
9
8
  helperProps?: FormHelperTextProps;
10
9
  formSelectorWrapperProps?: FormSelectorWrapperProps;
@@ -1,6 +1,6 @@
1
1
  import React, { ComponentPropsWithRef } from "react";
2
2
  import { Props as CheckboxProps } from "../Checkbox/Checkbox";
3
- export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "children" | "label"> {
4
- children: string;
3
+ export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "label"> {
4
+ label?: string | React.ReactElement;
5
5
  }
6
6
  export declare const Toggle: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLInputElement>>;
@@ -1,2 +1,2 @@
1
- import e,{useState as o,Fragment as m}from"react";import{IconButton as t}from"../../Button/IconButton.esm.js";import{Toggle as a}from"../../Form/Toggle/Toggle.esm.js";import{Icon as r,Icons as l}from"../../Icon/Icon.esm.js";import{Popover as s}from"../../Popover/Popover.esm.js";import{Typography as n}from"../../Typography/Typography.esm.js";import{generateID as c}from"../../src/util/helper.esm.js";import i from"./DataGridColumnsToggle.module.esm.js";import{createPortal as d}from"react-dom";const p=e.forwardRef((({open:p,headers:g,titleLabel:h="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:u,onToggleClicked:E,className:T,domRoot:j=document.body,...v},y)=>{const[C]=o(c()),N=C+"_header",b=g.map((o=>e.createElement(a,{key:o.name,name:o.name,checked:!o.hidden,onChange:()=>E(o.name)},o.headline)));return e.createElement(s,{...v,ref:y,className:`${i.popover} ${T}`,show:p,role:"dialog","aria-modal":"true","aria-labelledby":N},p&&d(e.createElement("div",{className:i.backdrop,onClick:()=>u()}),j),p&&e.createElement(m,null,e.createElement("div",{className:i.header},e.createElement(n,{id:N,className:i.title,tag:"span",variant:"h4"},h),e.createElement(t,{onClick:u,className:`${i["close-btn"]}`,title:f},e.createElement(r,{icon:l.Times}))),e.createElement("div",{className:i.content},b)))}));export{p as DataGridColumnsToggle};
1
+ import e,{useState as o,Fragment as m}from"react";import{IconButton as t}from"../../Button/IconButton.esm.js";import{Toggle as a}from"../../Form/Toggle/Toggle.esm.js";import{Icon as r,Icons as l}from"../../Icon/Icon.esm.js";import{Popover as s}from"../../Popover/Popover.esm.js";import{Typography as n}from"../../Typography/Typography.esm.js";import{generateID as c}from"../../src/util/helper.esm.js";import i from"./DataGridColumnsToggle.module.esm.js";import{createPortal as d}from"react-dom";const p=e.forwardRef((({open:p,headers:g,titleLabel:h="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:u,onToggleClicked:E,className:T,domRoot:b=document.body,...j},v)=>{const[y]=o(c()),C=y+"_header",N=g.map((o=>e.createElement(a,{key:o.name,name:o.name,checked:!o.hidden,onChange:()=>E(o.name),label:o.headline})));return e.createElement(s,{...j,ref:v,className:`${i.popover} ${T}`,show:p,role:"dialog","aria-modal":"true","aria-labelledby":C},p&&d(e.createElement("div",{className:i.backdrop,onClick:()=>u()}),b),p&&e.createElement(m,null,e.createElement("div",{className:i.header},e.createElement(n,{id:C,className:i.title,tag:"span",variant:"h4"},h),e.createElement(t,{onClick:u,className:`${i["close-btn"]}`,title:f},e.createElement(r,{icon:l.Times}))),e.createElement("div",{className:i.content},N)))}));export{p as DataGridColumnsToggle};
2
2
  //# sourceMappingURL=DataGridColumnsToggle.esm.js.map
@@ -1,2 +1,2 @@
1
- import e,{useEffect as r}from"react";import{Icon as o,Icons as a}from"../../Icon/Icon.esm.js";import t from"./Checkbox.module.esm.js";import{useFormSelector as n}from"../../src/hooks/useFormSelector.esm.js";import{FormSelectorWrapper as s}from"../FormSelectorWrapper/FormSelectorWrapper.esm.js";const c=e=>{var r;return null===(r=null==e?void 0:e.props)||void 0===r?void 0:r["data-toggle"]},i=e.forwardRef((({children:l,name:p,helperText:d,helperProps:m,indeterminate:h,parentErrorId:b,errorMessage:u,disabled:f,label:k,parentHelperId:x,className:E,error:y,checked:I=!1,formSelectorWrapperProps:g,onChange:C,...j},v)=>{const{errorId:w,identifier:N,describedBy:S}=n({name:p,helperText:d,parentErrorId:b,errorMessage:u,error:y,parentHelperId:x});r((()=>{if(!p)throw new Error("Please pass a 'name' prop to your <Checkbox> component.");if("object"==typeof l&&!c(l)&&void 0===h)throw new Error("If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.")}),[]);const P=[t.input,f?t.disabled:""];return e.createElement(s,{...g,className:`${t["checkbox-wrapper"]} ${E||""}`,containerProps:{className:t["checkbox-container"]},helperText:d,helperProps:m,parentErrorId:b,errorId:w,errorMessage:u,error:y,disabled:f,identifier:N,nestedChildren:"object"==typeof l&&!c(l)&&e.createElement("ul",{className:t["checkbox-list"]},e.Children.map(l,(r=>e.createElement("li",null,e.createElement(i,{...r.props,parentHelperId:x,parentErrorId:b,error:y,disabled:r.props.disabled?r.props.disabled:f},r.props.children)))))},e.createElement("input",{...j,ref:v,disabled:f,className:`${t["native-input"]} ${y?t.error:""}`,checked:I,onChange:e=>{f||null==C||C(e)},"aria-invalid":y,"aria-checked":h?"mixed":I,"aria-describedby":S,id:`${N}-checkbox`,name:p,type:"checkbox"}),e.Children.toArray(l).filter(c),h&&e.createElement(o,{className:P.join(" "),icon:a.MinusSquare}),I&&!h&&e.createElement(o,{className:P.join(" "),icon:a.CheckmarkSquare}),!I&&!h&&e.createElement(o,{className:P.join(" "),icon:a.Square}),e.createElement("label",{htmlFor:`${N}-checkbox`},(()=>{if(k)return k;if(void 0===l)throw new Error("Please make sure to pass either a string or more Checkbox components as a child of your Checkbox component.");if("string"==typeof l||"object"==typeof l&&"span"===l.type)return l;throw new Error("If you pass Checkboxes as a child component (to create nested checkbox tree) you need to pass a label to the parent checkbox.")})()))}));export{i as Checkbox};
1
+ import e,{useEffect as r}from"react";import{Icon as o,Icons as a}from"../../Icon/Icon.esm.js";import t from"./Checkbox.module.esm.js";import{useFormSelector as n}from"../../src/hooks/useFormSelector.esm.js";import{FormSelectorWrapper as s}from"../FormSelectorWrapper/FormSelectorWrapper.esm.js";const c=e=>{var r;return!!(null===(r=null==e?void 0:e.props)||void 0===r?void 0:r["data-toggle"])},i=e.forwardRef((({children:l,name:p,helperText:d,helperProps:m,indeterminate:h,parentErrorId:b,errorMessage:u,disabled:f,label:k,parentHelperId:E,className:x,error:I,checked:y=!1,formSelectorWrapperProps:g,onChange:v,...j},C)=>{const{errorId:N,identifier:S,describedBy:w}=n({name:p,helperText:d,parentErrorId:b,errorMessage:u,error:I,parentHelperId:E});r((()=>{if(!p)throw new Error("Please pass a 'name' prop to your <Checkbox> component.");if("object"==typeof l&&!c(l)&&void 0===h)throw new Error("If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.")}),[]);const $=[t.input,f?t.disabled:""];return e.createElement(s,{...g,className:`${t["checkbox-wrapper"]} ${x||""}`,containerProps:{className:t["checkbox-container"]},helperText:d,helperProps:m,parentErrorId:b,errorId:N,errorMessage:u,error:I,disabled:f,identifier:S,nestedChildren:"object"==typeof l&&!c(l)&&e.createElement("ul",{className:t["checkbox-list"]},e.Children.map(l,(r=>e.createElement("li",null,e.createElement(i,{...r.props,parentHelperId:E,parentErrorId:b,error:I,disabled:r.props.disabled?r.props.disabled:f},r.props.children)))))},e.createElement("input",{...j,ref:C,disabled:f,className:`${t["native-input"]} ${I?t.error:""}`,checked:y,onChange:e=>{f||null==v||v(e)},"aria-invalid":I,"aria-checked":h?"mixed":y,"aria-describedby":w,id:`${S}-checkbox`,name:p,type:"checkbox"}),e.Children.toArray(l).filter(c),h&&e.createElement(o,{className:$.join(" "),icon:a.MinusSquare}),y&&!h&&e.createElement(o,{className:$.join(" "),icon:a.CheckmarkSquare}),!y&&!h&&e.createElement(o,{className:$.join(" "),icon:a.Square}),e.createElement("label",{htmlFor:`${S}-checkbox`},k||("string"==typeof l?l:void 0)))}));export{i as Checkbox};
2
2
  //# sourceMappingURL=Checkbox.esm.js.map
@@ -1,2 +1,2 @@
1
- import e from"react";import{Checkbox as r}from"../Checkbox/Checkbox.esm.js";import a from"./Toggle.module.esm.js";const l=e.forwardRef((({children:l,checked:c,disabled:o,helperProps:s,...t},d)=>e.createElement("div",{className:a["toggle-wrapper"]},e.createElement(r,{...t,ref:d,checked:c,className:a.checkbox,helperProps:{className:a["toggle-helper"],...s},disabled:o,label:l},e.createElement("span",{"data-toggle":!0,"aria-hidden":"true",className:`${a.toggle} ${c?a.checked:""} ${o?a.disabled:""} `})))));export{l as Toggle};
1
+ import e from"react";import{Checkbox as a}from"../Checkbox/Checkbox.esm.js";import r from"./Toggle.module.esm.js";const l=e.forwardRef((({checked:l,disabled:s,helperProps:o,className:c,label:t,...m},d)=>{const p=[r["toggle-wrapper"]];return c&&p.push(c),e.createElement("div",{className:p.join(" ")},e.createElement(a,{...m,ref:d,checked:l,className:r.checkbox,helperProps:{className:r["toggle-helper"],...o},disabled:s,label:t},e.createElement("span",{"data-toggle":"true","aria-hidden":"true",className:`${r.toggle} ${l?r.checked:""} ${s?r.disabled:""} `})))}));export{l as Toggle};
2
2
  //# sourceMappingURL=Toggle.esm.js.map
@@ -1,10 +1,9 @@
1
- import React, { ComponentPropsWithRef, ReactNode } from "react";
1
+ import React, { ComponentPropsWithRef } from "react";
2
2
  import { Props as FormHelperTextProps } from "../FormHelperText/FormHelperText";
3
3
  import { Props as FormSelectorWrapperProps } from "../FormSelectorWrapper/FormSelectorWrapper";
4
4
  import { FormSelector } from "../form.interfaces";
5
5
  export interface Props extends ComponentPropsWithRef<"input">, FormSelector {
6
- children: ReactNode;
7
- label?: string;
6
+ label?: string | React.ReactElement;
8
7
  indeterminate?: boolean;
9
8
  helperProps?: FormHelperTextProps;
10
9
  formSelectorWrapperProps?: FormSelectorWrapperProps;
@@ -1,6 +1,6 @@
1
1
  import React, { ComponentPropsWithRef } from "react";
2
2
  import { Props as CheckboxProps } from "../Checkbox/Checkbox";
3
- export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "children" | "label"> {
4
- children: string;
3
+ export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "label"> {
4
+ label?: string | React.ReactElement;
5
5
  }
6
6
  export declare const Toggle: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLInputElement>>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "homepage": "http://onewelcome.github.io/react-lib-components",
3
3
  "name": "@onewelcome/react-lib-components",
4
- "version": "2.1.0",
4
+ "version": "2.2.0",
5
5
  "license": "Apache-2.0",
6
6
  "author": "OneWelcome B.V.",
7
7
  "main": "dist/cjs/src/index.cjs.js",
@@ -58,9 +58,8 @@ const DataGridColumnsToggleComponent: ForwardRefRenderFunction<HTMLDivElement, P
58
58
  name={item.name}
59
59
  checked={!item.hidden}
60
60
  onChange={() => onToggleClicked(item.name)}
61
- >
62
- {item.headline}
63
- </Toggle>
61
+ label={item.headline}
62
+ />
64
63
  ));
65
64
 
66
65
  const handleBackdropClick = () => onClose();
@@ -159,7 +159,7 @@ describe("Checkbox should have proper attributes", () => {
159
159
  it("should have a correctly linked label element", () => {
160
160
  const { checkbox, container } = createCheckbox(defaultParams => ({
161
161
  ...defaultParams,
162
- children: "Label"
162
+ label: "Label"
163
163
  }));
164
164
 
165
165
  const id = checkbox.getAttribute("id");
@@ -168,6 +168,19 @@ describe("Checkbox should have proper attributes", () => {
168
168
  expect(label).toBeTruthy();
169
169
  expect(label).toHaveTextContent("Label");
170
170
  });
171
+
172
+ it("should have a react element as label", () => {
173
+ const { checkbox, container } = createCheckbox(defaultParams => ({
174
+ ...defaultParams,
175
+ label: <span>Label element</span>
176
+ }));
177
+
178
+ const id = checkbox.getAttribute("id");
179
+ const label = container.querySelector(`label[for=${id}]`);
180
+
181
+ expect(label).toBeTruthy();
182
+ expect(label).toHaveTextContent("Label element");
183
+ });
171
184
  });
172
185
 
173
186
  describe("Checkbox should be interactive", () => {
@@ -207,7 +220,6 @@ describe("missing attributes gets us errors", () => {
207
220
  // @ts-ignore: mandatory props (test for non-typescript react projects)
208
221
  createCheckbox(defaultParams => ({
209
222
  ...defaultParams,
210
- name: "testing",
211
223
  children: <Checkbox name="test">Test</Checkbox>
212
224
  }));
213
225
  } catch (e: any) {
@@ -215,7 +227,7 @@ describe("missing attributes gets us errors", () => {
215
227
  }
216
228
 
217
229
  const expected =
218
- "If you pass Checkboxes as a child component (to create nested checkbox tree) you need to pass a label to the parent checkbox.";
230
+ "If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.";
219
231
 
220
232
  expect(actual).toEqual(expected);
221
233
 
@@ -264,8 +276,7 @@ describe("missing attributes gets us errors", () => {
264
276
  actual = e.message;
265
277
  }
266
278
 
267
- const expected =
268
- "Please make sure to pass either a string or more Checkbox components as a child of your Checkbox component.";
279
+ const expected = "Please pass a 'name' prop to your <Checkbox> component.";
269
280
 
270
281
  expect(actual).toEqual(expected);
271
282
 
@@ -31,11 +31,10 @@ import {
31
31
  } from "../FormSelectorWrapper/FormSelectorWrapper";
32
32
  import { FormSelector } from "../form.interfaces";
33
33
 
34
- const isToggle = (children: ReactNode) => (children as ReactElement)?.props?.["data-toggle"];
34
+ const isToggle = (children: ReactNode) => !!(children as ReactElement)?.props?.["data-toggle"];
35
35
 
36
36
  export interface Props extends ComponentPropsWithRef<"input">, FormSelector {
37
- children: ReactNode;
38
- label?: string;
37
+ label?: string | React.ReactElement;
39
38
  indeterminate?: boolean;
40
39
  helperProps?: FormHelperTextProps;
41
40
  formSelectorWrapperProps?: FormSelectorWrapperProps;
@@ -85,24 +84,13 @@ const CheckboxComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
85
84
  }, []);
86
85
 
87
86
  const determineLabel = () => {
87
+ // this should be temporary, for backwards compatibility;
88
+ // once the components implementing checkboxes in microfrontends are updated, only label should be returned
88
89
  if (label) {
89
90
  return label;
90
- } else if (children === undefined) {
91
- throw new Error(
92
- "Please make sure to pass either a string or more Checkbox components as a child of your Checkbox component."
93
- );
94
- }
95
-
96
- if (
97
- typeof children === "string" ||
98
- (typeof children === "object" && (children as ReactElement).type === "span")
99
- ) {
91
+ } else if (typeof children === "string") {
100
92
  return children;
101
93
  }
102
-
103
- throw new Error(
104
- "If you pass Checkboxes as a child component (to create nested checkbox tree) you need to pass a label to the parent checkbox."
105
- );
106
94
  };
107
95
 
108
96
  const renderNestedCheckboxes = () => (
@@ -17,10 +17,12 @@
17
17
  import React, { useRef, useEffect } from "react";
18
18
  import { Toggle, Props } from "./Toggle";
19
19
  import { render } from "@testing-library/react";
20
+ import { Checkbox } from "../Checkbox/Checkbox";
20
21
 
21
22
  const defaultParams: Props = {
22
- children: "label",
23
- name: "example toggle"
23
+ children: "Helper text",
24
+ name: "example toggle",
25
+ label: "Label"
24
26
  };
25
27
 
26
28
  const createToggle = (params?: (defaultParams: Props) => Props) => {
@@ -28,11 +30,7 @@ const createToggle = (params?: (defaultParams: Props) => Props) => {
28
30
  if (params) {
29
31
  parameters = params(defaultParams);
30
32
  }
31
- const queries = render(
32
- <Toggle {...parameters} data-testid="toggle">
33
- toggle content
34
- </Toggle>
35
- );
33
+ const queries = render(<Toggle {...parameters} data-testid="toggle"></Toggle>);
36
34
  const toggle = queries.getByTestId("toggle");
37
35
 
38
36
  return {
@@ -72,7 +70,11 @@ describe("ref should work", () => {
72
70
  }
73
71
  }, [ref]);
74
72
 
75
- return <Toggle {...defaultParams} data-ref="testing" ref={ref} />;
73
+ return (
74
+ <Toggle {...defaultParams} data-ref="testing" ref={ref}>
75
+ test label
76
+ </Toggle>
77
+ );
76
78
  };
77
79
 
78
80
  const refCheck = (ref: React.RefObject<HTMLElement>) => {
@@ -20,33 +20,37 @@ import classes from "./Toggle.module.scss";
20
20
 
21
21
  export interface Props
22
22
  extends ComponentPropsWithRef<"input">,
23
- Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "children" | "label"> {
24
- children: string;
23
+ Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "label"> {
24
+ label?: string | React.ReactElement;
25
25
  }
26
26
 
27
27
  const ToggleComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
28
- { children, checked, disabled, helperProps, ...rest }: Props,
28
+ { checked, disabled, helperProps, className, label, ...rest }: Props,
29
29
  ref
30
- ) => (
31
- <div className={classes["toggle-wrapper"]}>
32
- <Checkbox
33
- {...rest}
34
- ref={ref}
35
- checked={checked}
36
- className={classes["checkbox"]}
37
- helperProps={{ className: classes["toggle-helper"], ...helperProps }}
38
- disabled={disabled}
39
- label={children}
40
- >
41
- <span
42
- data-toggle
43
- aria-hidden="true"
44
- className={`${classes["toggle"]} ${checked ? classes["checked"] : ""} ${
45
- disabled ? classes["disabled"] : ""
46
- } `}
47
- ></span>
48
- </Checkbox>
49
- </div>
50
- );
30
+ ) => {
31
+ const classNames = [classes["toggle-wrapper"]];
32
+ className && classNames.push(className);
33
+ return (
34
+ <div className={classNames.join(" ")}>
35
+ <Checkbox
36
+ {...rest}
37
+ ref={ref}
38
+ checked={checked}
39
+ className={classes["checkbox"]}
40
+ helperProps={{ className: classes["toggle-helper"], ...helperProps }}
41
+ disabled={disabled}
42
+ label={label}
43
+ >
44
+ <span
45
+ data-toggle="true"
46
+ aria-hidden="true"
47
+ className={`${classes["toggle"]} ${checked ? classes["checked"] : ""} ${
48
+ disabled ? classes["disabled"] : ""
49
+ } `}
50
+ ></span>
51
+ </Checkbox>
52
+ </div>
53
+ );
54
+ };
51
55
 
52
56
  export const Toggle = React.forwardRef(ToggleComponent);