@sebgroup/green-react 1.4.0 → 1.6.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/index.js CHANGED
@@ -333,10 +333,10 @@ var store$2 = sharedStore;
333
333
  (shared$3.exports = function (key, value) {
334
334
  return store$2[key] || (store$2[key] = value !== undefined ? value : {});
335
335
  })('versions', []).push({
336
- version: '3.29.1',
336
+ version: '3.30.1',
337
337
  mode: 'global',
338
338
  copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',
339
- license: 'https://github.com/zloirock/core-js/blob/v3.29.1/LICENSE',
339
+ license: 'https://github.com/zloirock/core-js/blob/v3.30.1/LICENSE',
340
340
  source: 'https://github.com/zloirock/core-js'
341
341
  });
342
342
 
@@ -2432,36 +2432,13 @@ const FormItem = ({
2432
2432
  const useInput = (props, onChanges, onChangeInput) => {
2433
2433
  const id = useMemo(() => props.id || randomId(), [props.id]);
2434
2434
  const ref = useRef(null);
2435
- const [value, setValue] = useState(props.value ? props.value : '');
2436
- const [checked, setChecked] = useState(props.checked ? props.checked : false);
2437
- useEffect(() => {
2438
- if (props.value !== undefined) setValue(props.value);
2439
- if (ref.current && ref.current.form) {
2440
- const resetListener = () => {
2441
- setValue(props.value ? props.value : '');
2442
- setChecked(props.checked ? props.checked : false);
2443
- };
2444
- const form = ref.current.form;
2445
- form.addEventListener('reset', resetListener);
2446
- return () => form.removeEventListener('reset', resetListener);
2447
- } else {
2448
- // eslint-disable-next-line @typescript-eslint/no-empty-function
2449
- return () => {};
2450
- }
2451
- }, [props]);
2452
2435
  const onChange = event => {
2453
- if (props.value === undefined) {
2454
- setValue(event.target.value);
2455
- }
2456
- setChecked(event.currentTarget.checked);
2457
2436
  onChanges && onChanges(event);
2458
2437
  onChangeInput && onChangeInput(event.target.value);
2459
2438
  };
2460
2439
  return Object.assign(Object.assign({}, props), {
2461
2440
  id,
2462
2441
  ref,
2463
- value,
2464
- checked,
2465
2442
  onChange
2466
2443
  });
2467
2444
  };
@@ -3092,8 +3069,23 @@ const OptionGroup = ({
3092
3069
  }));
3093
3070
  };
3094
3071
 
3072
+ const InputWrapper = ({
3073
+ children,
3074
+ unitLabel
3075
+ }) => jsx(Fragment, {
3076
+ children: unitLabel ? jsxs("div", Object.assign({
3077
+ className: "group group-border"
3078
+ }, {
3079
+ children: [children, jsx("span", Object.assign({
3080
+ className: "form-text"
3081
+ }, {
3082
+ children: unitLabel
3083
+ }))]
3084
+ })) : children
3085
+ });
3095
3086
  function Slider({
3096
3087
  name = `${randomId()}-slider`,
3088
+ value,
3097
3089
  defaultValue,
3098
3090
  min = 0,
3099
3091
  max = 100,
@@ -3102,11 +3094,13 @@ function Slider({
3102
3094
  instruction,
3103
3095
  errorMessage,
3104
3096
  hasTextbox = false,
3097
+ unitLabel,
3105
3098
  disabled = false,
3106
3099
  onChange
3107
3100
  }) {
3101
+ var _a;
3108
3102
  const [background, setBackground] = React.useState();
3109
- const [sliderValue, setSliderValue] = React.useState(defaultValue !== null && defaultValue !== void 0 ? defaultValue : 0);
3103
+ const [sliderValue, setSliderValue] = React.useState((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : 0);
3110
3104
  React.useLayoutEffect(() => {
3111
3105
  if (disabled) {
3112
3106
  setBackground(sliderColors.disabled);
@@ -3115,6 +3109,9 @@ function Slider({
3115
3109
  const percent = (sliderValue - min) / (max - min) * 100;
3116
3110
  setBackground(getSliderTrackBackground(percent));
3117
3111
  }, [disabled, sliderValue]);
3112
+ React.useEffect(() => {
3113
+ setSliderValue(Number(value));
3114
+ }, [value]);
3118
3115
  const handleChange = e => {
3119
3116
  const {
3120
3117
  value
@@ -3134,10 +3131,10 @@ function Slider({
3134
3131
  })), instruction && jsx("p", {
3135
3132
  children: instruction
3136
3133
  })]
3137
- }), hasTextbox && jsxs("div", Object.assign({
3138
- className: "form-group"
3134
+ }), hasTextbox && jsx(InputWrapper, Object.assign({
3135
+ unitLabel: unitLabel
3139
3136
  }, {
3140
- children: [jsx("input", {
3137
+ children: jsx("input", {
3141
3138
  type: "number",
3142
3139
  value: sliderValue,
3143
3140
  id: `${name}-textbox`,
@@ -3145,9 +3142,7 @@ function Slider({
3145
3142
  className: errorMessage ? 'is-invalid' : '',
3146
3143
  disabled: disabled,
3147
3144
  onChange: handleChange
3148
- }), jsx("span", {
3149
- className: "form-info"
3150
- })]
3145
+ })
3151
3146
  }))]
3152
3147
  })), jsx("input", {
3153
3148
  type: "range",
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sebgroup/green-react",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "peerDependencies": {
5
5
  "react": "^17 || ^18",
6
6
  "react-dom": "^17 || ^18"
7
7
  },
8
8
  "dependencies": {
9
- "@sebgroup/chlorophyll": "^1.7.0",
9
+ "@sebgroup/chlorophyll": "^1.8.0",
10
10
  "@sebgroup/extract": "^1.3.1",
11
11
  "classnames": "^2.3.2"
12
12
  },
@@ -7,7 +7,7 @@ interface HookArgs extends DropdownArgs {
7
7
  onChange?: OnChange;
8
8
  validator?: IValidator;
9
9
  }
10
- type Props = HTMLAttributes<HTMLElement>;
10
+ declare type Props = HTMLAttributes<HTMLElement>;
11
11
  interface CheckboxItem {
12
12
  labelProps: Props;
13
13
  inputProps: InputHTMLAttributes<HTMLInputElement>;
@@ -1,10 +1,10 @@
1
1
  import React, { InputHTMLAttributes } from 'react';
2
2
  import { IValidator } from '@sebgroup/extract';
3
3
  import { CheckboxProps, NumberInputProps, RadioButtonProps, TextInputProps } from '../types';
4
- export type Renderer = (type: string, props: InputHTMLAttributes<HTMLInputElement>, onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void, onChangeInput?: (value: string) => string, label?: string, info?: string, validator?: IValidator, expandableInfo?: string, expandableInfoButtonLabel?: string, testId?: string) => JSX.Element;
4
+ export declare type Renderer = (type: string, props: InputHTMLAttributes<HTMLInputElement>, onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void, onChangeInput?: (value: string) => string, label?: string, info?: string, validator?: IValidator, expandableInfo?: string, expandableInfoButtonLabel?: string, testId?: string) => JSX.Element;
5
5
  export declare const RenderInput: Renderer;
6
6
  export declare const TextInput: ({ label, info, testId, onChange, onChangeInput, validator, expandableInfo, expandableInfoButtonLabel, ...props }: TextInputProps) => JSX.Element;
7
7
  export declare const EmailInput: ({ label, info, onChange, onChangeInput, validator, testId, ...props }: TextInputProps) => JSX.Element;
8
8
  export declare const NumberInput: ({ label, info, onChange, onChangeInput, validator, expandableInfo, expandableInfoButtonLabel, testId, ...props }: NumberInputProps) => JSX.Element;
9
9
  export declare const Checkbox: ({ label, onChange, validator, testId, ...props }: CheckboxProps) => JSX.Element;
10
- export declare const RadioButton: React.ForwardRefExoticComponent<Pick<RadioButtonProps, "label" | "testId" | "onChange" | "validator" | "type" | "accept" | "acceptCharset" | "action" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "cite" | "classID" | "cols" | "colSpan" | "content" | "controls" | "coords" | "crossOrigin" | "data" | "dateTime" | "default" | "defer" | "disabled" | "download" | "encType" | "form" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "height" | "high" | "href" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "list" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "max" | "maxLength" | "media" | "mediaGroup" | "method" | "min" | "minLength" | "multiple" | "muted" | "name" | "noValidate" | "open" | "optimum" | "pattern" | "placeholder" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "required" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "selected" | "shape" | "size" | "sizes" | "span" | "src" | "srcDoc" | "srcLang" | "srcSet" | "start" | "step" | "summary" | "target" | "useMap" | "value" | "width" | "wmode" | "wrap" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "nonce" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "key"> & React.RefAttributes<HTMLInputElement>>;
10
+ export declare const RadioButton: React.ForwardRefExoticComponent<Omit<RadioButtonProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
@@ -28,4 +28,4 @@ export interface RadioButtonProps extends HTMLProps<HTMLInputElement> {
28
28
  validator?: string;
29
29
  value: string;
30
30
  }
31
- export type InputListener<T> = (newValue?: T) => unknown;
31
+ export declare type InputListener<T> = (newValue?: T) => unknown;
@@ -1,5 +1,5 @@
1
- export type AlignContentType = 'start' | 'between' | 'center' | 'stretch' | 'around' | 'end' | 'sm-start' | 'sm-between' | 'sm-center' | 'sm-stretch' | 'sm-around' | 'sm-end' | 'md-start' | 'md-between' | 'md-center' | 'md-stretch' | 'md-around' | 'md-end' | 'lg-start' | 'lg-between' | 'lg-center' | 'lg-stretch' | 'lg-around' | 'lg-end' | 'xl-start' | 'xl-between' | 'xl-center' | 'xl-stretch' | 'xl-around' | 'xl-end' | 'xxl-start' | 'xxl-between' | 'xxl-center' | 'xxl-stretch' | 'xxl-around' | 'xxl-end';
2
- export type AlignType = 'start' | 'end' | 'center' | 'baseline' | 'stretch' | 'sm-start' | 'sm-end' | 'sm-center' | 'sm-baseline' | 'sm-stretch' | 'md-start' | 'md-end' | 'md-center' | 'md-baseline' | 'md-stretch' | 'lg-start' | 'lg-end' | 'lg-center' | 'lg-baseline' | 'lg-stretch' | 'xl-start' | 'xl-end' | 'xl-center' | 'xl-baseline' | 'xl-stretch' | 'xxl-start' | 'xxl-end' | 'xxl-center' | 'xxl-baseline' | 'xxl-stretch';
3
- export type JustifyContentType = 'start' | 'between' | 'center' | 'evenly' | 'around' | 'end' | 'sm-start' | 'sm-between' | 'sm-center' | 'sm-evenly' | 'sm-around' | 'sm-end' | 'md-start' | 'md-between' | 'md-center' | 'md-evenly' | 'md-around' | 'md-end' | 'lg-start' | 'lg-between' | 'lg-center' | 'lg-evenly' | 'lg-around' | 'lg-end' | 'xl-start' | 'xl-between' | 'xl-center' | 'xl-evenly' | 'xl-around' | 'xl-end' | 'xxl-start' | 'xxl-between' | 'xxl-center' | 'xxl-evenly' | 'xxl-around' | 'xxl-end';
4
- export type FlexDirectionType = 'row' | 'row-reverse' | 'column' | 'column-reverse' | 'sm-row' | 'sm-row-reverse' | 'sm-column' | 'sm-column-reverse' | 'md-row' | 'md-row-reverse' | 'md-column' | 'md-column-reverse' | 'lg-row' | 'lg-row-reverse' | 'lg-column' | 'lg-column-reverse' | 'xl-row' | 'xl-row-reverse' | 'xl-column' | 'xl-column-reverse' | 'xxl-row' | 'xxl-row-reverse' | 'xxl-column' | 'xxl-column-reverse';
5
- export type FlexWrapType = 'nowrap' | 'wrap' | 'wrap-reverse' | 'sm-nowrap' | 'sm-wrap' | 'sm-wrap-reverse' | 'md-nowrap' | 'md-wrap' | 'md-wrap-reverse' | 'lg-nowrap' | 'lg-wrap' | 'lg-wrap-reverse' | 'xl-nowrap' | 'xl-wrap' | 'xl-wrap-reverse' | 'xxl-nowrap' | 'xxl-wrap' | 'xxl-wrap-reverse';
1
+ export declare type AlignContentType = 'start' | 'between' | 'center' | 'stretch' | 'around' | 'end' | 'sm-start' | 'sm-between' | 'sm-center' | 'sm-stretch' | 'sm-around' | 'sm-end' | 'md-start' | 'md-between' | 'md-center' | 'md-stretch' | 'md-around' | 'md-end' | 'lg-start' | 'lg-between' | 'lg-center' | 'lg-stretch' | 'lg-around' | 'lg-end' | 'xl-start' | 'xl-between' | 'xl-center' | 'xl-stretch' | 'xl-around' | 'xl-end' | 'xxl-start' | 'xxl-between' | 'xxl-center' | 'xxl-stretch' | 'xxl-around' | 'xxl-end';
2
+ export declare type AlignType = 'start' | 'end' | 'center' | 'baseline' | 'stretch' | 'sm-start' | 'sm-end' | 'sm-center' | 'sm-baseline' | 'sm-stretch' | 'md-start' | 'md-end' | 'md-center' | 'md-baseline' | 'md-stretch' | 'lg-start' | 'lg-end' | 'lg-center' | 'lg-baseline' | 'lg-stretch' | 'xl-start' | 'xl-end' | 'xl-center' | 'xl-baseline' | 'xl-stretch' | 'xxl-start' | 'xxl-end' | 'xxl-center' | 'xxl-baseline' | 'xxl-stretch';
3
+ export declare type JustifyContentType = 'start' | 'between' | 'center' | 'evenly' | 'around' | 'end' | 'sm-start' | 'sm-between' | 'sm-center' | 'sm-evenly' | 'sm-around' | 'sm-end' | 'md-start' | 'md-between' | 'md-center' | 'md-evenly' | 'md-around' | 'md-end' | 'lg-start' | 'lg-between' | 'lg-center' | 'lg-evenly' | 'lg-around' | 'lg-end' | 'xl-start' | 'xl-between' | 'xl-center' | 'xl-evenly' | 'xl-around' | 'xl-end' | 'xxl-start' | 'xxl-between' | 'xxl-center' | 'xxl-evenly' | 'xxl-around' | 'xxl-end';
4
+ export declare type FlexDirectionType = 'row' | 'row-reverse' | 'column' | 'column-reverse' | 'sm-row' | 'sm-row-reverse' | 'sm-column' | 'sm-column-reverse' | 'md-row' | 'md-row-reverse' | 'md-column' | 'md-column-reverse' | 'lg-row' | 'lg-row-reverse' | 'lg-column' | 'lg-column-reverse' | 'xl-row' | 'xl-row-reverse' | 'xl-column' | 'xl-column-reverse' | 'xxl-row' | 'xxl-row-reverse' | 'xxl-column' | 'xxl-column-reverse';
5
+ export declare type FlexWrapType = 'nowrap' | 'wrap' | 'wrap-reverse' | 'sm-nowrap' | 'sm-wrap' | 'sm-wrap-reverse' | 'md-nowrap' | 'md-wrap' | 'md-wrap-reverse' | 'lg-nowrap' | 'lg-wrap' | 'lg-wrap-reverse' | 'xl-nowrap' | 'xl-wrap' | 'xl-wrap-reverse' | 'xxl-nowrap' | 'xxl-wrap' | 'xxl-wrap-reverse';
@@ -1,6 +1,6 @@
1
1
  import { ModalType, Size } from '@sebgroup/extract';
2
2
  import { MouseEvent, ReactNode } from 'react';
3
- type ModalEventListener = (event: MouseEvent<HTMLButtonElement>) => unknown;
3
+ declare type ModalEventListener = (event: MouseEvent<HTMLButtonElement>) => unknown;
4
4
  export interface ModalProps {
5
5
  type?: ModalType;
6
6
  header?: string;
@@ -1,3 +1,3 @@
1
1
  import { SliderProps } from '../../types';
2
- export declare function Slider({ name, defaultValue, min, max, step, label, instruction, errorMessage, hasTextbox, disabled, onChange, }: SliderProps): JSX.Element;
2
+ export declare function Slider({ name, value, defaultValue, min, max, step, label, instruction, errorMessage, hasTextbox, unitLabel, disabled, onChange, }: SliderProps): JSX.Element;
3
3
  export default Slider;
@@ -15,7 +15,7 @@ export interface LabelProps {
15
15
  }
16
16
  export interface SliderProps {
17
17
  name?: string;
18
- defaultValue?: number;
18
+ value?: number;
19
19
  min?: number;
20
20
  max?: number;
21
21
  step?: number;
@@ -23,6 +23,11 @@ export interface SliderProps {
23
23
  instruction?: string;
24
24
  errorMessage?: string;
25
25
  hasTextbox?: boolean;
26
+ unitLabel?: string;
26
27
  disabled?: boolean;
27
28
  onChange?: (value: number) => void;
29
+ /**
30
+ * @deprecated Use `value` instead
31
+ */
32
+ defaultValue?: number;
28
33
  }