@bodynarf/react.components 1.3.11 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/common.scss +3 -0
  2. package/components/anchor/components/anchorWithIcon/index.d.ts +1 -0
  3. package/components/anchor/components/anchorWithIcon/index.d.ts.map +1 -1
  4. package/components/anchor/components/simpleAnchor/index.d.ts +0 -1
  5. package/components/anchor/components/simpleAnchor/index.d.ts.map +1 -1
  6. package/components/button/components/buttonWithIcon/index.d.ts +1 -0
  7. package/components/button/components/buttonWithIcon/index.d.ts.map +1 -1
  8. package/components/button/components/simpleButton/index.d.ts +0 -1
  9. package/components/button/components/simpleButton/index.d.ts.map +1 -1
  10. package/components/dropdown/index.d.ts +1 -0
  11. package/components/dropdown/index.d.ts.map +1 -1
  12. package/components/primitives/checkbox/checkbox.scss +1 -1
  13. package/components/primitives/checkbox/index.d.ts +7 -3
  14. package/components/primitives/checkbox/index.d.ts.map +1 -1
  15. package/components/primitives/checkbox/index.js +8 -8
  16. package/components/primitives/date/index.d.ts +4 -3
  17. package/components/primitives/date/index.d.ts.map +1 -1
  18. package/components/primitives/date/index.js +25 -22
  19. package/components/primitives/multiline/components/multilineWithLabel/index.d.ts +2 -2
  20. package/components/primitives/multiline/components/multilineWithLabel/index.d.ts.map +1 -1
  21. package/components/primitives/multiline/components/multilineWithLabel/index.js +23 -21
  22. package/components/primitives/multiline/components/multilineWithoutLabel/index.d.ts +2 -2
  23. package/components/primitives/multiline/components/multilineWithoutLabel/index.d.ts.map +1 -1
  24. package/components/primitives/multiline/components/multilineWithoutLabel/index.js +18 -17
  25. package/components/primitives/multiline/index.d.ts +2 -1
  26. package/components/primitives/multiline/index.d.ts.map +1 -1
  27. package/components/primitives/multiline/index.js +4 -3
  28. package/components/primitives/text/components/textWithLabel/index.d.ts +2 -2
  29. package/components/primitives/text/components/textWithLabel/index.d.ts.map +1 -1
  30. package/components/primitives/text/components/textWithLabel/index.js +22 -20
  31. package/components/primitives/text/components/textWithoutLabel/index.d.ts +2 -2
  32. package/components/primitives/text/components/textWithoutLabel/index.d.ts.map +1 -1
  33. package/components/primitives/text/components/textWithoutLabel/index.js +18 -15
  34. package/components/primitives/text/index.d.ts +2 -1
  35. package/components/primitives/text/index.d.ts.map +1 -1
  36. package/components/primitives/text/index.js +4 -3
  37. package/components/primitives/types/baseProps.d.ts +30 -0
  38. package/components/primitives/types/baseProps.d.ts.map +1 -0
  39. package/components/primitives/{types.js → types/baseProps.js} +0 -0
  40. package/components/primitives/types/enums.d.ts +29 -0
  41. package/components/primitives/types/enums.d.ts.map +1 -0
  42. package/components/primitives/types/enums.js +31 -0
  43. package/components/primitives/types/index.d.ts +5 -0
  44. package/components/primitives/types/index.d.ts.map +1 -0
  45. package/components/primitives/types/index.js +4 -0
  46. package/components/primitives/types/label.d.ts +14 -0
  47. package/components/primitives/types/label.d.ts.map +1 -0
  48. package/components/primitives/types/label.js +1 -0
  49. package/components/primitives/types/validation/index.d.ts +3 -0
  50. package/components/primitives/types/validation/index.d.ts.map +1 -0
  51. package/components/primitives/types/validation/index.js +2 -0
  52. package/components/primitives/types/validation/state.d.ts +9 -0
  53. package/components/primitives/types/validation/state.d.ts.map +1 -0
  54. package/components/primitives/types/validation/state.js +2 -0
  55. package/components/primitives/types/validation/status.d.ts +10 -0
  56. package/components/primitives/types/validation/status.d.ts.map +1 -0
  57. package/components/primitives/types/validation/status.js +11 -0
  58. package/package.json +2 -2
  59. package/utils/formValidation.d.ts +16 -0
  60. package/utils/formValidation.d.ts.map +1 -0
  61. package/utils/formValidation.js +35 -0
  62. package/utils/index.d.ts +2 -0
  63. package/utils/index.d.ts.map +1 -0
  64. package/utils/index.js +1 -0
  65. package/components/primitives/index.d.ts +0 -6
  66. package/components/primitives/index.d.ts.map +0 -1
  67. package/components/primitives/index.js +0 -5
  68. package/components/primitives/types.d.ts +0 -44
  69. package/components/primitives/types.d.ts.map +0 -1
package/common.scss ADDED
@@ -0,0 +1,3 @@
1
+ .help.m-help {
2
+ white-space: pre-line;
3
+ }
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { AnchorWithIconProps } from "../../types";
2
3
  /** Anchor with icon component */
3
4
  export declare const AnchorWithIcon: ({ href, className, onClick, caption, title, target, icon }: AnchorWithIconProps) => JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/anchor/components/anchorWithIcon/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,iCAAiC;AACjC,eAAO,MAAM,cAAc,+DAAgE,mBAAmB,KAAG,WAqChH,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/anchor/components/anchorWithIcon/index.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,iCAAiC;AACjC,eAAO,MAAM,cAAc,+DAAgE,mBAAmB,KAAG,WAqChH,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { SimpleAnchorProps } from "../../types";
3
2
  /** Simple anchor component, without icon */
4
3
  export declare const SimpleAnchor: ({ href, className, onClick, caption, title, target }: SimpleAnchorProps) => JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/anchor/components/simpleAnchor/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,4CAA4C;AAC5C,eAAO,MAAM,YAAY,yDAA0D,iBAAiB,KAAG,WAYtG,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/anchor/components/simpleAnchor/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,4CAA4C;AAC5C,eAAO,MAAM,YAAY,yDAA0D,iBAAiB,KAAG,WAYtG,CAAC"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { ButtonWithIconProps } from '../../types';
2
3
  /** Button with icon component */
3
4
  export declare const ButtonWithIcon: ({ className, disabled, onClick, caption, title, icon }: ButtonWithIconProps) => JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/button/components/buttonWithIcon/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,iCAAiC;AACjC,eAAO,MAAM,cAAc,2DAA4D,mBAAmB,KAAG,WAsC5G,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/button/components/buttonWithIcon/index.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,iCAAiC;AACjC,eAAO,MAAM,cAAc,2DAA4D,mBAAmB,KAAG,WAsC5G,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { SimpleButtonProps } from '../../types';
3
2
  /** Simple button component, without icon */
4
3
  export declare const SimpleButton: ({ className, disabled, onClick, caption, title }: SimpleButtonProps) => JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/button/components/simpleButton/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,4CAA4C;AAC5C,eAAO,MAAM,YAAY,qDAAsD,iBAAiB,KAAG,WAWlG,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/button/components/simpleButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,4CAA4C;AAC5C,eAAO,MAAM,YAAY,qDAAsD,iBAAiB,KAAG,WAWlG,CAAC"}
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import './dropdown.scss';
2
3
  import { SelectableItem } from './types';
3
4
  import { BaseElementProps } from '../types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/index.tsx"],"names":[],"mappings":"AAIA,OAAO,iBAAiB,CAAC;AAIzB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK5C,oBAAY,aAAa,GAAG,gBAAgB,GAAG;IAC3C,kCAAkC;IAClC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAE7B;;;MAGE;IACF,KAAK,CAAC,EAAE,cAAc,CAAC;IAEvB;;MAEE;IACF,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAE1C;;;MAGE;IACF,OAAO,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,gBAAgB,EAAE,OAAO,CAAC;IAE1B,wBAAwB;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAA;AAED,yBAAyB;AACzB,QAAA,MAAM,QAAQ,kGAAmG,aAAa,KAAG,WA4FhI,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/index.tsx"],"names":[],"mappings":";AAIA,OAAO,iBAAiB,CAAC;AAIzB,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK5C,oBAAY,aAAa,GAAG,gBAAgB,GAAG;IAC3C,kCAAkC;IAClC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAE7B;;;MAGE;IACF,KAAK,CAAC,EAAE,cAAc,CAAC;IAEvB;;MAEE;IACF,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IAE1C;;;MAGE;IACF,OAAO,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,gBAAgB,EAAE,OAAO,CAAC;IAE1B,wBAAwB;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAA;AAED,yBAAyB;AACzB,QAAA,MAAM,QAAQ,kGAAmG,aAAa,KAAG,WA4FhI,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,4 +1,4 @@
1
- .is-checkradio[type="checkbox"].has-background-color.m-has-background-color:not(:checked) + label::before {
1
+ .is-checkradio[type="checkbox"].m-check-radio.has-background-color.m-has-background-color:not(:checked) + label::before {
2
2
  border-color: #dbdbdb !important;
3
3
  background-color: transparent !important;
4
4
  }
@@ -1,15 +1,19 @@
1
- import './checkbox.scss';
1
+ import "./checkbox.scss";
2
2
  import { BaseInputElementProps } from "../types";
3
3
  export declare type CheckBoxProps = BaseInputElementProps<boolean> & {
4
4
  /** Is full colored checkbox */
5
5
  block?: boolean;
6
6
  /** Remove the checkbox border */
7
7
  withoutBorder?: boolean;
8
- /** Checkbox has background color */
8
+ /**
9
+ * Checkbox has background color.
10
+ * Only works if style is set
11
+ */
9
12
  hasBackgroundColor?: boolean;
10
13
  /**
11
14
  * Set unchecked background as transparent.
12
- * Only used with `hasBackgroundColor`
15
+ * Only used with `hasBackgroundColor` set as `true`
16
+ * @example `{ style: InputColor.Info, hasBackgrounColor: true, fixBackgroundColor: true }` -
13
17
  */
14
18
  fixBackgroundColor?: boolean;
15
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/checkbox/index.tsx"],"names":[],"mappings":"AAIA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,oBAAY,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG;IACzD,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,iCAAiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,oCAAoC;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;MAGE;IACF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,QAAA,MAAM,QAAQ,+IAKX,aAAa,KAAG,WAsClB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/checkbox/index.tsx"],"names":[],"mappings":"AAIA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,oBAAY,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG;IACzD,+BAA+B;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,iCAAiC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;MAGE;IACF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;MAIE;IACF,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,QAAA,MAAM,QAAQ,+IAKX,aAAa,KAAG,WAsClB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1,20 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback } from "react";
3
3
  import { generateGuid, getClassName, isNullOrUndefined } from "@bodynarf/utils";
4
- import './checkbox.scss';
4
+ import "./checkbox.scss";
5
5
  const CheckBox = ({ label, onValueChange, defaultValue, name, disabled, rounded, size, style, block, withoutBorder, hasBackgroundColor, fixBackgroundColor }) => {
6
6
  const onChecked = useCallback((event) => onValueChange(event.target.checked), [onValueChange]);
7
7
  const id = name || generateGuid();
8
8
  const className = getClassName([
9
- "m-check-radio",
10
9
  "is-checkradio",
11
- hasBackgroundColor == true ? "has-background-color" : "",
12
- fixBackgroundColor === true && hasBackgroundColor == true ? "m-has-background-color" : "",
13
- isNullOrUndefined(style) ? "" : size === 'normal' ? "" : `is-${size}`,
14
- rounded === true ? "is-circle" : "",
10
+ "m-check-radio",
11
+ (hasBackgroundColor ?? false) ? "has-background-color" : "",
12
+ (fixBackgroundColor ?? false) && (hasBackgroundColor ?? false) ? "m-has-background-color" : "",
13
+ isNullOrUndefined(size) ? "" : size === "normal" ? "" : `is-${size}`,
14
+ (rounded ?? false) ? "is-circle" : "",
15
15
  isNullOrUndefined(style) ? "" : `is-${style}`,
16
- block === true ? "is-block" : "",
17
- withoutBorder === true ? "has-no-border" : "",
16
+ (block ?? false) ? "is-block" : "",
17
+ (withoutBorder ?? false) ? "has-no-border" : "",
18
18
  ]);
19
19
  return (_jsxs("div", { className: "field", children: [_jsx("input", { type: "checkbox", name: id, id: id, disabled: disabled, onChange: onChecked, className: className, defaultChecked: defaultValue }), _jsx("label", { htmlFor: id, children: label?.caption })] }));
20
20
  };
@@ -1,12 +1,13 @@
1
- import { BaseInputElementProps, InputLabel } from '../types';
1
+ import "../../../common.scss";
2
+ import { BaseInputElementProps, InputLabel } from "../types";
2
3
  /** Date input conponent props type */
3
- export declare type DateProps = Omit<BaseInputElementProps<Date | undefined>, 'placeholder'> & {
4
+ export declare type DateProps = Omit<BaseInputElementProps<Date | undefined>, "placeholder"> & {
4
5
  /** Label configuration */
5
6
  label: InputLabel;
6
7
  /** Focus out event handler */
7
8
  onBlur?: () => void;
8
9
  };
9
10
  /** Date input component */
10
- declare const DatePicker: (props: DateProps) => JSX.Element;
11
+ declare const DatePicker: ({ defaultValue, onValueChange, readonly, disabled, validationState, name, size, className, rounded, loading, style, label, onBlur }: DateProps) => JSX.Element;
11
12
  export default DatePicker;
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/date/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE7D,sCAAsC;AACtC,oBAAY,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG;IACnF,0BAA0B;IAC1B,KAAK,EAAE,UAAU,CAAC;IAElB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAA;AAED,2BAA2B;AAC3B,QAAA,MAAM,UAAU,UAAW,SAAS,KAAG,WAwGtC,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/date/index.tsx"],"names":[],"mappings":"AAIA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAa,MAAM,UAAU,CAAC;AAGxE,sCAAsC;AACtC,oBAAY,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,aAAa,CAAC,GAAG;IACnF,0BAA0B;IAC1B,KAAK,EAAE,UAAU,CAAC;IAElB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAA;AAED,2BAA2B;AAC3B,QAAA,MAAM,UAAU,wIAMb,SAAS,KAAG,WA4Gd,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1,45 +1,48 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
3
- import { generateGuid, getClassName, isStringEmpty } from '@bodynarf/utils';
2
+ import { useCallback } from "react";
3
+ import { generateGuid, getClassName, getValueOrDefault, isStringEmpty } from "@bodynarf/utils";
4
+ import "../../../common.scss";
5
+ import { InputSize } from "../types";
6
+ import { getValidationValues } from "../../../utils";
4
7
  /** Date input component */
5
- const DatePicker = (props) => {
6
- const onValueChange = useCallback((event) => props.onValueChange(isStringEmpty(event.target.value)
8
+ const DatePicker = ({ defaultValue, onValueChange, readonly, disabled, validationState, name, size, className, rounded, loading, style, label, onBlur }) => {
9
+ const onChange = useCallback((event) => onValueChange(isStringEmpty(event.target.value)
7
10
  ? undefined
8
- : new Date(event.target.value)),
9
- // eslint-disable-next-line react-hooks/exhaustive-deps
10
- [props.onValueChange]);
11
- const id = props.name || generateGuid();
12
- const size = `is-${(props.size || 'normal')}`;
13
- const className = getClassName([
14
- props.className,
15
- size,
16
- props.rounded === true ? 'is-rounded' : '',
11
+ : new Date(event.target.value)), [onValueChange]);
12
+ const id = name || generateGuid();
13
+ const elSizeClassName = "is-{0}".format(getValueOrDefault(size, InputSize.Normal));
14
+ const [isValidationDefined, styleClassName, validationMessages] = getValidationValues(style, validationState);
15
+ const elClassName = getClassName([
16
+ className,
17
+ elSizeClassName,
18
+ styleClassName,
19
+ rounded === true ? "is-rounded" : "",
17
20
  "input",
18
21
  ]);
19
22
  const inputContainerClassName = getClassName([
20
23
  "control",
21
- props.loading === true ? 'is-loading' : '',
22
- (props.style || 'default') === 'default' ? '' : `is-${props.style}`
24
+ loading === true ? "is-loading" : "",
23
25
  ]);
24
- const label = props.label;
25
- const defaultValue = props.defaultValue?.toISOString().split("T")[0];
26
+ const stingifiedDefValue = defaultValue?.toISOString().split("T")[0];
26
27
  const labelClassName = getClassName([
27
28
  "label",
28
- label.horizontal !== true ? size : "",
29
+ !label.horizontal ? elSizeClassName : "",
29
30
  label.className
30
31
  ]);
31
- if (label.horizontal === true) {
32
+ if (label.horizontal) {
32
33
  const labelContainerClassName = getClassName([
33
34
  "field-label",
34
- size,
35
+ elSizeClassName,
35
36
  label.horizontalContainerClassName
36
37
  ]);
37
38
  const fieldContainerClassName = getClassName([
38
39
  "field-body",
39
40
  label.horizontalFieldContainerClassName
40
41
  ]);
41
- return (_jsxs("div", { className: "app-input field is-horizontal", children: [_jsx("div", { className: labelContainerClassName, children: _jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }) }), _jsx("div", { className: fieldContainerClassName, children: _jsx("div", { className: "field", children: _jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "date", className: className, readOnly: props.readonly, disabled: props.disabled, defaultValue: defaultValue, onChange: onValueChange, onBlur: props.onBlur, name: id, id: id }) }) }) })] }));
42
+ return (_jsxs("div", { className: "field is-horizontal", children: [_jsx("div", { className: labelContainerClassName, children: _jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }) }), _jsx("div", { className: fieldContainerClassName, children: _jsxs("div", { className: "field", children: [_jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "date", className: elClassName, readOnly: readonly, disabled: disabled, defaultValue: stingifiedDefValue, onChange: onChange, onBlur: onBlur, name: id, id: id }) }), isValidationDefined && validationMessages.length > 0 &&
43
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }) })] }));
42
44
  }
43
- return (_jsxs("div", { className: "app-input field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "date", className: className, readOnly: props.readonly, disabled: props.disabled, defaultValue: props.defaultValue?.toLocaleDateString(), onChange: onValueChange, onBlur: props.onBlur, name: id, id: id }) })] }));
45
+ return (_jsxs("div", { className: "field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "date", className: elClassName, readOnly: readonly, disabled: disabled, defaultValue: stingifiedDefValue, onChange: onChange, onBlur: onBlur, name: id, id: id }) }), isValidationDefined && validationMessages.length > 0 &&
46
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }));
44
47
  };
45
48
  export default DatePicker;
@@ -1,5 +1,5 @@
1
- import { MultilineProps } from '../..';
1
+ import { MultilineProps } from "../..";
2
2
  /** Multiline textual input component with describing label */
3
- declare const MultilineWithLabel: (props: MultilineProps) => JSX.Element;
3
+ declare const MultilineWithLabel: ({ defaultValue, onValueChange, validationState, readonly, disabled, name, className, size, style, rounded, loading, label, placeholder, fixed, rows, onBlur }: MultilineProps) => JSX.Element;
4
4
  export default MultilineWithLabel;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/multiline/components/multilineWithLabel/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,8DAA8D;AAC9D,QAAA,MAAM,kBAAkB,UAAW,cAAc,KAAG,WAqGnD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/multiline/components/multilineWithLabel/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGvC,8DAA8D;AAC9D,QAAA,MAAM,kBAAkB,kKAOrB,cAAc,KAAG,WAyGnB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,43 +1,45 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
3
- import { generateGuid, getClassName } from '@bodynarf/utils';
2
+ import { useCallback } from "react";
3
+ import { generateGuid, getClassName, getValueOrDefault } from "@bodynarf/utils";
4
+ import { InputSize } from "../../../types";
5
+ import { getValidationValues } from "../../../../../utils";
4
6
  /** Multiline textual input component with describing label */
5
- const MultilineWithLabel = (props) => {
6
- const onValueChange = useCallback((event) => props.onValueChange(event.target.value),
7
- // eslint-disable-next-line react-hooks/exhaustive-deps
8
- [props.onValueChange]);
9
- const id = props.name || generateGuid();
10
- const size = `is-${(props.size || 'normal')}`;
11
- const className = getClassName([
12
- props.className,
13
- size,
14
- props.rounded === true ? 'is-rounded' : '',
7
+ const MultilineWithLabel = ({ defaultValue, onValueChange, validationState, readonly, disabled, name, className, size, style, rounded, loading, label, placeholder, fixed, rows, onBlur }) => {
8
+ const onChange = useCallback((event) => onValueChange(event.target.value), [onValueChange]);
9
+ const id = name || generateGuid();
10
+ const elSizeClassName = "is-{0}".format(getValueOrDefault(size, InputSize.Normal));
11
+ const [isValidationDefined, styleClassName, validationMessages] = getValidationValues(style, validationState);
12
+ const elClassName = getClassName([
13
+ className,
14
+ elSizeClassName,
15
+ rounded === true ? "is-rounded" : "",
16
+ styleClassName,
15
17
  "textarea",
16
- props.fixed === true ? 'has-fixed-size' : '',
18
+ fixed === true ? "has-fixed-size" : "",
17
19
  ]);
18
20
  const inputContainerClassName = getClassName([
19
21
  "control",
20
- props.loading === true ? 'is-loading' : '',
21
- (props.style || 'default') === 'default' ? '' : `is-${props.style}`
22
+ loading === true ? "is-loading" : "",
22
23
  ]);
23
- const label = props.label;
24
24
  const labelClassName = getClassName([
25
25
  "label",
26
- label.horizontal !== true ? size : "",
26
+ !label.horizontal ? elSizeClassName : "",
27
27
  label.className
28
28
  ]);
29
- if (label.horizontal === true) {
29
+ if (label.horizontal) {
30
30
  const labelContainerClassName = getClassName([
31
31
  "field-label",
32
- size,
32
+ elSizeClassName,
33
33
  label.horizontalContainerClassName
34
34
  ]);
35
35
  const fieldContainerClassName = getClassName([
36
36
  "field-body",
37
37
  label.horizontalFieldContainerClassName
38
38
  ]);
39
- return (_jsxs("div", { className: "app-input field is-horizontal", children: [_jsx("div", { className: labelContainerClassName, children: _jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }) }), _jsx("div", { className: fieldContainerClassName, children: _jsx("div", { className: "field", children: _jsx("div", { className: inputContainerClassName, children: _jsx("textarea", { className: className, placeholder: props.placeholder, readOnly: props.readonly, disabled: props.disabled, defaultValue: props.defaultValue, onChange: onValueChange, onBlur: props.onBlur, name: id, id: id, rows: props.rows }) }) }) })] }));
39
+ return (_jsxs("div", { className: "app-input field is-horizontal", children: [_jsx("div", { className: labelContainerClassName, children: _jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }) }), _jsx("div", { className: fieldContainerClassName, children: _jsxs("div", { className: "field", children: [_jsx("div", { className: inputContainerClassName, children: _jsx("textarea", { className: elClassName, placeholder: placeholder, readOnly: readonly, disabled: disabled, defaultValue: defaultValue, onChange: onChange, onBlur: onBlur, name: id, id: id, rows: rows }) }), isValidationDefined && validationMessages.length > 0 &&
40
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }) })] }));
40
41
  }
41
- return (_jsxs("div", { className: "app-input field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsx("div", { className: inputContainerClassName, children: _jsx("textarea", { className: className, placeholder: props.placeholder, readOnly: props.readonly, disabled: props.disabled, defaultValue: props.defaultValue, onChange: onValueChange, onBlur: props.onBlur, name: id, id: id, rows: props.rows }) })] }));
42
+ return (_jsxs("div", { className: "app-input field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsx("div", { className: inputContainerClassName, children: _jsx("textarea", { className: elClassName, placeholder: placeholder, readOnly: readonly, disabled: disabled, defaultValue: defaultValue, onChange: onChange, onBlur: onBlur, name: id, id: id, rows: rows }) }), isValidationDefined && validationMessages.length > 0 &&
43
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }));
42
44
  };
43
45
  export default MultilineWithLabel;
@@ -1,5 +1,5 @@
1
- import { MultilineProps } from '../..';
1
+ import { MultilineProps } from "../..";
2
2
  /** Multiline textual input component without describing label*/
3
- declare const MultilineWithoutLabel: (props: MultilineProps) => JSX.Element;
3
+ declare const MultilineWithoutLabel: ({ onValueChange, defaultValue, validationState, name, placeholder, onBlur, className, size, style, rounded, loading, fixed, rows, }: MultilineProps) => JSX.Element;
4
4
  export default MultilineWithoutLabel;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/multiline/components/multilineWithoutLabel/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,gEAAgE;AAChE,QAAA,MAAM,qBAAqB,UAAW,cAAc,KAAG,WAyCtD,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/multiline/components/multilineWithoutLabel/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAGvC,gEAAgE;AAChE,QAAA,MAAM,qBAAqB,wIAMxB,cAAc,KAAG,WA0CnB,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1,25 +1,26 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
3
- import { generateGuid, getClassName } from '@bodynarf/utils';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from "react";
3
+ import { generateGuid, getClassName, getValueOrDefault } from "@bodynarf/utils";
4
+ import { InputSize } from "../../../types";
5
+ import { getValidationValues } from "../../../../../utils";
4
6
  /** Multiline textual input component without describing label*/
5
- const MultilineWithoutLabel = (props) => {
6
- const onValueChange = useCallback((event) => props.onValueChange(event.target.value),
7
- // eslint-disable-next-line react-hooks/exhaustive-deps
8
- [props.onValueChange]);
9
- const id = props.name || generateGuid();
10
- const size = `is-${(props.size || 'normal')}`;
11
- const className = getClassName([
12
- props.className,
13
- size,
14
- props.rounded === true ? 'is-rounded' : '',
7
+ const MultilineWithoutLabel = ({ onValueChange, defaultValue, validationState, name, placeholder, onBlur, className, size, style, rounded, loading, fixed, rows, }) => {
8
+ const onChange = useCallback((event) => onValueChange(event.target.value), [onValueChange]);
9
+ const id = name || generateGuid();
10
+ const [isValidationDefined, styleClassName, validationMessages] = getValidationValues(style, validationState);
11
+ const elClassName = getClassName([
12
+ className,
13
+ "is-{0}".format(getValueOrDefault(size, InputSize.Normal)),
14
+ rounded === true ? "is-rounded" : "",
15
+ styleClassName,
15
16
  "textarea",
16
- props.fixed === true ? 'has-fixed-size' : '',
17
+ fixed === true ? "has-fixed-size" : "",
17
18
  ]);
18
19
  const inputContainerClassName = getClassName([
19
20
  "control",
20
- props.loading === true ? 'is-loading' : '',
21
- (props.style || 'default') === 'default' ? '' : `is-${props.style}`
21
+ loading === true ? "is-loading" : "",
22
22
  ]);
23
- return (_jsx("div", { className: "field", children: _jsx("div", { className: inputContainerClassName, children: _jsx("textarea", { className: className, placeholder: props.placeholder, defaultValue: props.defaultValue, onChange: onValueChange, onBlur: props.onBlur, id: id, name: id, rows: props.rows }) }) }));
23
+ return (_jsxs("div", { className: "field", children: [_jsx("div", { className: inputContainerClassName, children: _jsx("textarea", { className: elClassName, placeholder: placeholder, defaultValue: defaultValue, onChange: onChange, onBlur: onBlur, id: id, name: id, rows: rows }) }), isValidationDefined && validationMessages.length > 0 &&
24
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }));
24
25
  };
25
26
  export default MultilineWithoutLabel;
@@ -1,4 +1,5 @@
1
- import { BaseInputElementProps } from '../types';
1
+ import "../../../common.scss";
2
+ import { BaseInputElementProps } from "../types";
2
3
  /** Multiline textual input conponent props type */
3
4
  export declare type MultilineProps = BaseInputElementProps<string> & {
4
5
  /** Is input should be resizable */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/multiline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKjD,mDAAmD;AACnD,oBAAY,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG;IACzD,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,wCAAwC;AACxC,QAAA,MAAM,SAAS,UAAW,cAAc,KAAG,WAQ1C,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/multiline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKjD,mDAAmD;AACnD,oBAAY,cAAc,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG;IACzD,mCAAmC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,wCAAwC;AACxC,QAAA,MAAM,SAAS,UAAW,cAAc,KAAG,WAQ1C,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { isNullOrUndefined } from '@bodynarf/utils';
3
- import MultilineWithoutLabel from './components/multilineWithoutLabel';
4
- import MultilineWithLabel from './components/multilineWithLabel';
2
+ import { isNullOrUndefined } from "@bodynarf/utils";
3
+ import "../../../common.scss";
4
+ import MultilineWithoutLabel from "./components/multilineWithoutLabel";
5
+ import MultilineWithLabel from "./components/multilineWithLabel";
5
6
  /** Multiline textual input component */
6
7
  const Multiline = (props) => {
7
8
  if (isNullOrUndefined(props.label)) {
@@ -1,5 +1,5 @@
1
- import { TextProps } from '../..';
1
+ import { TextProps } from "../..";
2
2
  /** Textual input with describing label */
3
- declare const TextWithLabel: (props: TextProps) => JSX.Element;
3
+ declare const TextWithLabel: ({ onValueChange, readonly, disabled, defaultValue, validationState, name, className, size, style, rounded, loading, label, placeholder, onBlur, }: TextProps) => JSX.Element;
4
4
  export default TextWithLabel;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/text/components/textWithLabel/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,0CAA0C;AAC1C,QAAA,MAAM,aAAa,UAAW,SAAS,KAAG,WAoGzC,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/text/components/textWithLabel/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,0CAA0C;AAC1C,QAAA,MAAM,aAAa,sJAMhB,SAAS,KAAG,WAwGd,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1,42 +1,44 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
3
- import { generateGuid, getClassName, } from '@bodynarf/utils';
2
+ import { useCallback } from "react";
3
+ import { generateGuid, getClassName, getValueOrDefault, } from "@bodynarf/utils";
4
+ import { InputSize } from "../../../types";
5
+ import { getValidationValues } from "../../../../../utils";
4
6
  /** Textual input with describing label */
5
- const TextWithLabel = (props) => {
6
- const onValueChange = useCallback((event) => props.onValueChange(event.target.value),
7
- // eslint-disable-next-line react-hooks/exhaustive-deps
8
- [props.onValueChange]);
9
- const id = props.name || generateGuid();
10
- const size = `is-${(props.size || 'normal')}`;
11
- const className = getClassName([
12
- props.className,
13
- size,
14
- props.rounded === true ? 'is-rounded' : '',
7
+ const TextWithLabel = ({ onValueChange, readonly, disabled, defaultValue, validationState, name, className, size, style, rounded, loading, label, placeholder, onBlur, }) => {
8
+ const onChange = useCallback((event) => onValueChange(event.target.value), [onValueChange]);
9
+ const id = name || generateGuid();
10
+ const elSizeClassName = "is-{0}".format(getValueOrDefault(size, InputSize.Normal));
11
+ const [isValidationDefined, styleClassName, validationMessages] = getValidationValues(style, validationState);
12
+ const elClassName = getClassName([
13
+ className,
14
+ elSizeClassName,
15
+ rounded === true ? "is-rounded" : "",
16
+ styleClassName,
15
17
  "input",
16
18
  ]);
17
19
  const inputContainerClassName = getClassName([
18
20
  "control",
19
- props.loading === true ? 'is-loading' : '',
20
- (props.style || 'default') === 'default' ? '' : `is-${props.style}`
21
+ loading === true ? "is-loading" : "",
21
22
  ]);
22
- const label = props.label;
23
23
  const labelClassName = getClassName([
24
24
  "label",
25
- label.horizontal !== true ? size : "",
25
+ !label.horizontal ? elSizeClassName : "",
26
26
  label.className
27
27
  ]);
28
- if (label.horizontal === true) {
28
+ if (label.horizontal) {
29
29
  const labelContainerClassName = getClassName([
30
30
  "field-label",
31
- size,
31
+ elSizeClassName,
32
32
  label.horizontalContainerClassName
33
33
  ]);
34
34
  const fieldContainerClassName = getClassName([
35
35
  "field-body",
36
36
  label.horizontalFieldContainerClassName
37
37
  ]);
38
- return (_jsxs("div", { className: "app-input field is-horizontal", children: [_jsx("div", { className: labelContainerClassName, children: _jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }) }), _jsx("div", { className: fieldContainerClassName, children: _jsx("div", { className: "field", children: _jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "text", className: className, placeholder: props.placeholder, readOnly: props.readonly, disabled: props.disabled, defaultValue: props.defaultValue, onChange: onValueChange, onBlur: props.onBlur, name: id, id: id }) }) }) })] }));
38
+ return (_jsxs("div", { className: "app-input field is-horizontal", children: [_jsx("div", { className: labelContainerClassName, children: _jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }) }), _jsx("div", { className: fieldContainerClassName, children: _jsxs("div", { className: "field", children: [_jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "text", className: elClassName, placeholder: placeholder, readOnly: readonly, disabled: disabled, defaultValue: defaultValue, onChange: onChange, onBlur: onBlur, name: id, id: id }) }), isValidationDefined && validationMessages.length > 0 &&
39
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }) })] }));
39
40
  }
40
- return (_jsxs("div", { className: "app-input field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "text", className: className, placeholder: props.placeholder, readOnly: props.readonly, disabled: props.disabled, defaultValue: props.defaultValue, onChange: onValueChange, onBlur: props.onBlur, name: id, id: id }) })] }));
41
+ return (_jsxs("div", { className: "field", children: [_jsx("label", { className: labelClassName, htmlFor: id, children: label.caption }), _jsx("div", { className: inputContainerClassName, children: _jsx("input", { type: "text", className: elClassName, placeholder: placeholder, readOnly: readonly, disabled: disabled, defaultValue: defaultValue, onChange: onChange, onBlur: onBlur, name: id, id: id }) }), isValidationDefined && validationMessages.length > 0 &&
42
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }));
41
43
  };
42
44
  export default TextWithLabel;
@@ -1,5 +1,5 @@
1
- import { TextProps } from '../..';
1
+ import { TextProps } from "../..";
2
2
  /** Textual input without describing label */
3
- declare const TextWithoutLabel: (props: TextProps) => JSX.Element;
3
+ declare const TextWithoutLabel: ({ onValueChange, readonly, disabled, defaultValue, validationState, name, className, size, style, rounded, loading, placeholder, onBlur, }: TextProps) => JSX.Element;
4
4
  export default TextWithoutLabel;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/text/components/textWithoutLabel/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,6CAA6C;AAC7C,QAAA,MAAM,gBAAgB,UAAW,SAAS,KAAG,WAuC5C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/primitives/text/components/textWithoutLabel/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,6CAA6C;AAC7C,QAAA,MAAM,gBAAgB,+IAMnB,SAAS,KAAG,WA6Cd,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,24 +1,27 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useCallback } from 'react';
3
- import { generateGuid, getClassName } from '@bodynarf/utils';
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from "react";
3
+ import { generateGuid, getClassName, getValueOrDefault } from "@bodynarf/utils";
4
+ import { InputSize } from "../../../types";
5
+ import { getValidationValues } from "../../../../../utils";
4
6
  /** Textual input without describing label */
5
- const TextWithoutLabel = (props) => {
6
- const onValueChange = useCallback((event) => props.onValueChange(event.target.value),
7
+ const TextWithoutLabel = ({ onValueChange, readonly, disabled, defaultValue, validationState, name, className, size, style, rounded, loading, placeholder, onBlur, }) => {
8
+ const onChange = useCallback((event) => onValueChange(event.target.value),
7
9
  // eslint-disable-next-line react-hooks/exhaustive-deps
8
- [props.onValueChange]);
9
- const className = getClassName([
10
- props.className,
11
- `is-${(props.size || 'normal')}`,
12
- props.rounded === true ? 'is-rounded' : '',
10
+ [onValueChange]);
11
+ const [isValidationDefined, styleClassName, validationMessages] = getValidationValues(style, validationState);
12
+ const elClassName = getClassName([
13
+ className,
14
+ "is-{0}".format(getValueOrDefault(size, InputSize.Normal)),
15
+ rounded === true ? "is-rounded" : "",
16
+ styleClassName,
13
17
  "input",
14
18
  ]);
15
19
  const containerClassName = getClassName([
16
- "app-input",
17
20
  "control",
18
- props.loading === true ? 'is-loading' : '',
19
- (props.style || 'default') === 'default' ? '' : `is-${props.style}`
21
+ loading === true ? "is-loading" : "",
20
22
  ]);
21
- const id = props.name || generateGuid();
22
- return (_jsx("div", { className: containerClassName, children: _jsx("input", { className: className, type: "text", placeholder: props.placeholder, readOnly: props.readonly, disabled: props.disabled, defaultValue: props.defaultValue, onChange: onValueChange, onBlur: props.onBlur, name: id, id: id }) }));
23
+ const id = name || generateGuid();
24
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: containerClassName, children: _jsx("input", { className: elClassName, type: "text", placeholder: placeholder, readOnly: readonly, disabled: disabled, defaultValue: defaultValue, onChange: onChange, onBlur: onBlur, name: id, id: id }) }), isValidationDefined && validationMessages.length > 0 &&
25
+ _jsx("p", { className: `help m-help ${styleClassName}`, children: validationMessages.join("\n") })] }));
23
26
  };
24
27
  export default TextWithoutLabel;
@@ -1,4 +1,5 @@
1
- import { BaseInputElementProps } from '../types';
1
+ import "../../../common.scss";
2
+ import { BaseInputElementProps } from "../types";
2
3
  /** Text input conponent props type */
3
4
  export declare type TextProps = BaseInputElementProps<string> & {
4
5
  /** Focus out event handler */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/text/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKjD,sCAAsC;AACtC,oBAAY,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG;IACpD,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,8BAA8B;AAC9B,QAAA,MAAM,IAAI,UAAW,SAAS,KAAG,WAOhC,CAAC;AAEF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/text/index.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKjD,sCAAsC;AACtC,oBAAY,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG;IACpD,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB,CAAC;AAEF,8BAA8B;AAC9B,QAAA,MAAM,IAAI,UAAW,SAAS,KAAG,WAOhC,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { isNullOrUndefined } from '@bodynarf/utils';
3
- import TextWithLabel from './components/textWithLabel';
4
- import TextWithoutLabel from './components/textWithoutLabel';
2
+ import { isNullOrUndefined } from "@bodynarf/utils";
3
+ import "../../../common.scss";
4
+ import TextWithLabel from "./components/textWithLabel";
5
+ import TextWithoutLabel from "./components/textWithoutLabel";
5
6
  /** Textual input component */
6
7
  const Text = (props) => {
7
8
  if (isNullOrUndefined(props.label)) {
@@ -0,0 +1,30 @@
1
+ import { InputColor, InputLabel, InputSize, ValidationState } from ".";
2
+ import { BaseElementProps } from "../../types";
3
+ /** Base properties for input components */
4
+ export declare type BaseInputElementProps<TValue> = BaseElementProps & {
5
+ /** Value change handler. Changed value must be stored outside of component */
6
+ onValueChange: (value: TValue) => void;
7
+ /** Default value of input component*/
8
+ defaultValue?: TValue;
9
+ /** Input element placeholder */
10
+ placeholder?: string;
11
+ /** Is component borders are rounded */
12
+ rounded?: boolean;
13
+ /** Should be component disabled. Selecting is not allowed */
14
+ disabled?: boolean;
15
+ /** Should be component int read only mode. Selecting is allowed */
16
+ readonly?: boolean;
17
+ /** Component size */
18
+ size?: InputSize;
19
+ /** Label configuration */
20
+ label?: InputLabel;
21
+ /** Displaying loading state of component as spinner in right end of component */
22
+ loading?: boolean;
23
+ /** Style. Colors the border */
24
+ style?: InputColor;
25
+ /** Name of element. Required for form elements */
26
+ name?: string;
27
+ /** Current validation state */
28
+ validationState?: ValidationState;
29
+ };
30
+ //# sourceMappingURL=baseProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseProps.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/types/baseProps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,2CAA2C;AAC3C,oBAAY,qBAAqB,CAAC,MAAM,IAAI,gBAAgB,GAAG;IAC3D,8EAA8E;IAC9E,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qBAAqB;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,+BAA+B;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;CACrC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /** Input component size variety */
2
+ export declare enum InputSize {
3
+ /** Font size is 0.75rem */
4
+ Small = "small",
5
+ /** Font size is 1rem */
6
+ Normal = "normal",
7
+ /** Font size is 1.25rem */
8
+ Medium = "medium",
9
+ /** Font size is 1.5rem */
10
+ Large = "large"
11
+ }
12
+ /** Input component border-color type */
13
+ export declare enum InputColor {
14
+ /** color: transparent */
15
+ Default = "default",
16
+ /** color: seawave green */
17
+ Primary = "primary",
18
+ /** color: blue-violet */
19
+ Link = "link",
20
+ /** color: sky-blue */
21
+ Info = "info",
22
+ /** color: green */
23
+ Success = "success",
24
+ /** color: yellow */
25
+ Warning = "warning",
26
+ /** color: red */
27
+ Danger = "danger"
28
+ }
29
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/types/enums.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,oBAAY,SAAS;IACjB,2BAA2B;IAC3B,KAAK,UAAU;IAEf,wBAAwB;IACxB,MAAM,WAAW;IAEjB,2BAA2B;IAC3B,MAAM,WAAW;IAEjB,0BAA0B;IAC1B,KAAK,UAAU;CAClB;AAED,wCAAwC;AACxC,oBAAY,UAAU;IAClB,yBAAyB;IACzB,OAAO,YAAY;IAEnB,2BAA2B;IAC3B,OAAO,YAAY;IAEnB,yBAAyB;IACzB,IAAI,SAAS;IAEb,sBAAsB;IACtB,IAAI,SAAS;IAEb,mBAAmB;IACnB,OAAO,YAAY;IAEnB,oBAAoB;IACpB,OAAO,YAAY;IAEnB,iBAAiB;IACjB,MAAM,WAAW;CACpB"}
@@ -0,0 +1,31 @@
1
+ /** Input component size variety */
2
+ export var InputSize;
3
+ (function (InputSize) {
4
+ /** Font size is 0.75rem */
5
+ InputSize["Small"] = "small";
6
+ /** Font size is 1rem */
7
+ InputSize["Normal"] = "normal";
8
+ /** Font size is 1.25rem */
9
+ InputSize["Medium"] = "medium";
10
+ /** Font size is 1.5rem */
11
+ InputSize["Large"] = "large";
12
+ })(InputSize || (InputSize = {}));
13
+ /** Input component border-color type */
14
+ export var InputColor;
15
+ (function (InputColor) {
16
+ /** color: transparent */
17
+ InputColor["Default"] = "default";
18
+ /** color: seawave green */
19
+ InputColor["Primary"] = "primary";
20
+ /** color: blue-violet */
21
+ InputColor["Link"] = "link";
22
+ /** color: sky-blue */
23
+ InputColor["Info"] = "info";
24
+ /** color: green */
25
+ InputColor["Success"] = "success";
26
+ /** color: yellow */
27
+ InputColor["Warning"] = "warning";
28
+ /** color: red */
29
+ InputColor["Danger"] = "danger";
30
+ })(InputColor || (InputColor = {}));
31
+ ;
@@ -0,0 +1,5 @@
1
+ export * from './baseProps';
2
+ export * from './label';
3
+ export * from './enums';
4
+ export * from './validation';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './baseProps';
2
+ export * from './label';
3
+ export * from './enums';
4
+ export * from './validation';
@@ -0,0 +1,14 @@
1
+ /** Input label configuration */
2
+ export declare type InputLabel = {
3
+ /** Label textual content to describe input requirements */
4
+ caption: string;
5
+ /** Should component be on same line with label */
6
+ horizontal: boolean;
7
+ /** Additional class names */
8
+ className?: string;
9
+ /** Class name for label parent container in horizontal mode */
10
+ horizontalContainerClassName?: string;
11
+ /** Class name for input parent container in horizontal mode */
12
+ horizontalFieldContainerClassName?: string;
13
+ };
14
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../../src/components/primitives/types/label.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,oBAAY,UAAU,GAAG;IACrB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAEhB,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IAEpB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAEtC,+DAA+D;IAC/D,iCAAiC,CAAC,EAAE,MAAM,CAAC;CAC9C,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ export * from "./status";
2
+ export * from "./state";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/primitives/types/validation/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./status";
2
+ export * from "./state";
@@ -0,0 +1,9 @@
1
+ import { ValidationStatus } from "./status";
2
+ /** Form component value validation state */
3
+ export interface ValidationState {
4
+ /** Current status */
5
+ status: ValidationStatus;
6
+ /** Current status messages */
7
+ messages: Array<string>;
8
+ }
9
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/components/primitives/types/validation/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC5B,qBAAqB;IACrB,MAAM,EAAE,gBAAgB,CAAC;IAEzB,8BAA8B;IAC9B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ ;
2
+ export {};
@@ -0,0 +1,10 @@
1
+ /** Input component value validation status */
2
+ export declare enum ValidationStatus {
3
+ /** Validation wasn"t been performed */
4
+ None = "none",
5
+ /** Value is valid */
6
+ Valid = "valid",
7
+ /** Value is invalid due some validator check */
8
+ Invalid = "invalid"
9
+ }
10
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../../src/components/primitives/types/validation/status.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,oBAAY,gBAAgB;IACxB,uCAAuC;IACvC,IAAI,SAAS;IAEb,qBAAqB;IACrB,KAAK,UAAU;IAEf,gDAAgD;IAChD,OAAO,YAAY;CACtB"}
@@ -0,0 +1,11 @@
1
+ /** Input component value validation status */
2
+ export var ValidationStatus;
3
+ (function (ValidationStatus) {
4
+ /** Validation wasn"t been performed */
5
+ ValidationStatus["None"] = "none";
6
+ /** Value is valid */
7
+ ValidationStatus["Valid"] = "valid";
8
+ /** Value is invalid due some validator check */
9
+ ValidationStatus["Invalid"] = "invalid";
10
+ })(ValidationStatus || (ValidationStatus = {}));
11
+ ;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bodynarf/react.components",
3
- "version": "1.3.11",
3
+ "version": "1.4.1",
4
4
  "author": {
5
5
  "name": "Artem",
6
6
  "email": "bodynar@gmail.com"
@@ -30,7 +30,7 @@
30
30
  "typescript": "^4.7.3"
31
31
  },
32
32
  "dependencies": {
33
- "@bodynarf/utils": "^1.0.10",
33
+ "@bodynarf/utils": "^1.0.14",
34
34
  "bulma": "^0.9.4",
35
35
  "react": "^18.1.0",
36
36
  "react-dom": "^18.1.0"
@@ -0,0 +1,16 @@
1
+ import { InputColor, ValidationState } from "../components/primitives";
2
+ /**
3
+ * Get current validation state values
4
+ * @param style Component style color
5
+ * @param validationState Current form item validation state
6
+ * @returns [Is validation applicable; classname attribute value; validation messages]
7
+ */
8
+ export declare const getValidationValues: (style?: InputColor, validationState?: ValidationState) => [boolean, string, Array<string>];
9
+ /**
10
+ * Get classname attribute value based on current validation state and form item component style prop
11
+ * @param style Component style color
12
+ * @param validationState Current form item validation state
13
+ * @returns Classname attribute value
14
+ */
15
+ export declare const getStyleClassName: (style?: InputColor, validationState?: ValidationState) => string;
16
+ //# sourceMappingURL=formValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formValidation.d.ts","sourceRoot":"","sources":["../../src/utils/formValidation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAoB,MAAM,0BAA0B,CAAC;AAEzF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,WAAY,UAAU,oBAAoB,eAAe,KAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC,CAO1H,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,WAAY,UAAU,oBAAoB,eAAe,KAAG,MAgBzF,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { isNullOrUndefined } from "@bodynarf/utils";
2
+ import { ValidationStatus } from "../components/primitives";
3
+ /**
4
+ * Get current validation state values
5
+ * @param style Component style color
6
+ * @param validationState Current form item validation state
7
+ * @returns [Is validation applicable; classname attribute value; validation messages]
8
+ */
9
+ export const getValidationValues = (style, validationState) => {
10
+ const validationStateDefined = !isNullOrUndefined(validationState) && validationState.status !== ValidationStatus.None;
11
+ const styleClassName = getStyleClassName(style, validationState);
12
+ const messages = validationState?.messages ?? [];
13
+ return [validationStateDefined, styleClassName, messages];
14
+ };
15
+ /**
16
+ * Get classname attribute value based on current validation state and form item component style prop
17
+ * @param style Component style color
18
+ * @param validationState Current form item validation state
19
+ * @returns Classname attribute value
20
+ */
21
+ export const getStyleClassName = (style, validationState) => {
22
+ if (isNullOrUndefined(validationState)) {
23
+ return isNullOrUndefined(style) ? "" : `is-${style}`;
24
+ }
25
+ const { status } = validationState;
26
+ switch (status) {
27
+ case ValidationStatus.Valid: {
28
+ return "is-success";
29
+ }
30
+ case ValidationStatus.Invalid: {
31
+ return "is-danger";
32
+ }
33
+ }
34
+ return isNullOrUndefined(style) ? "" : `is-${style}`;
35
+ };
@@ -0,0 +1,2 @@
1
+ export * from './formValidation';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
package/utils/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from './formValidation';
@@ -1,6 +0,0 @@
1
- export * from './date';
2
- export * from './multiline';
3
- export * from './text';
4
- export * from './checkbox';
5
- export * from './types';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
@@ -1,5 +0,0 @@
1
- export * from './date';
2
- export * from './multiline';
3
- export * from './text';
4
- export * from './checkbox';
5
- export * from './types';
@@ -1,44 +0,0 @@
1
- import { BaseElementProps } from "../types";
2
- /** Base properties for input components */
3
- export declare type BaseInputElementProps<TValue> = BaseElementProps & {
4
- /** Value change handler. Changed value must be stored outside of component */
5
- onValueChange: (value: TValue) => void;
6
- /** Default value of input component*/
7
- defaultValue?: TValue;
8
- /** Input element placeholder */
9
- placeholder?: string;
10
- /** Is component borders are rounded */
11
- rounded?: boolean;
12
- /** Should be component disabled. Selecting is not allowed */
13
- disabled?: boolean;
14
- /** Should be component int read only mode. Selecting is allowed */
15
- readonly?: boolean;
16
- /** Component size */
17
- size?: InputSize;
18
- /** Label configuration */
19
- label?: InputLabel;
20
- /** Displaying loading state of component as spinner in right end of component */
21
- loading?: boolean;
22
- /** Style. Colors the border */
23
- style?: InputColor;
24
- /** Name of element. Required for form elements */
25
- name?: string;
26
- };
27
- /** Input label configuration */
28
- export declare type InputLabel = {
29
- /** Label textual content to describe input requirements */
30
- caption: string;
31
- /** Should component be on same line with label */
32
- horizontal?: boolean;
33
- /** Additional class names */
34
- className?: string;
35
- /** Class name for label parent container in horizontal mode */
36
- horizontalContainerClassName?: string;
37
- /** Class name for input parent container in horizontal mode */
38
- horizontalFieldContainerClassName?: string;
39
- };
40
- /** Input component size variety */
41
- export declare type InputSize = 'small' | 'normal' | 'medium' | 'large';
42
- /** Input component border-color type */
43
- export declare type InputColor = 'default' /** color: transparent */ | 'primary' /** color: seawave green */ | 'link' /** color: blue-violet */ | 'info' /** color: sky-blue */ | 'success' /** color: green */ | 'warning' /** color: yellow */ | 'danger' /** color: red */;
44
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/primitives/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,2CAA2C;AAC3C,oBAAY,qBAAqB,CAAC,MAAM,IAAI,gBAAgB,GAAG;IAC3D,8EAA8E;IAC9E,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,qBAAqB;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,UAAU,CAAC;IAEnB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,gCAAgC;AAChC,oBAAY,UAAU,GAAG;IACrB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAEhB,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAEtC,+DAA+D;IAC/D,iCAAiC,CAAC,EAAE,MAAM,CAAC;CAC9C,CAAC;AAEF,mCAAmC;AACnC,oBAAY,SAAS,GACf,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,CACR;AAEL,wCAAwC;AACxC,oBAAY,UAAU,GAChB,SAAS,CAAC,yBAAyB,GACnC,SAAS,CAAC,2BAA2B,GACrC,MAAM,CAAC,yBAAyB,GAChC,MAAM,CAAC,sBAAsB,GAC7B,SAAS,CAAC,mBAAmB,GAC7B,SAAS,CAAC,oBAAoB,GAC9B,QAAQ,CAAC,iBAAiB,CAC3B"}