@snack-uikit/fields 0.28.0 → 0.29.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/CHANGELOG.md +16 -0
- package/README.md +9 -0
- package/dist/components/FieldColor/FieldColor.d.ts +1 -1
- package/dist/components/FieldColor/FieldColor.js +3 -3
- package/dist/components/FieldDate/FieldDate.js +11 -5
- package/dist/components/FieldSecure/FieldSecure.d.ts +1 -1
- package/dist/components/FieldSecure/FieldSecure.js +3 -3
- package/dist/components/FieldSelect/FieldSelectMultiple.d.ts +3 -1
- package/dist/components/FieldSelect/FieldSelectMultiple.js +7 -5
- package/dist/components/FieldSelect/FieldSelectSingle.d.ts +3 -1
- package/dist/components/FieldSelect/FieldSelectSingle.js +8 -6
- package/dist/components/FieldSelect/hooks.d.ts +1 -1
- package/dist/components/FieldSelect/hooks.js +3 -3
- package/dist/components/FieldSelect/types.d.ts +5 -1
- package/dist/components/FieldSlider/FieldSlider.d.ts +6 -2
- package/dist/components/FieldSlider/FieldSlider.js +13 -11
- package/dist/components/FieldStepper/FieldStepper.d.ts +5 -1
- package/dist/components/FieldStepper/FieldStepper.js +6 -4
- package/dist/components/FieldText/FieldText.d.ts +9 -2
- package/dist/components/FieldText/FieldText.js +46 -8
- package/dist/components/FieldText/helpers.d.ts +4 -0
- package/dist/components/FieldText/helpers.js +9 -0
- package/dist/components/FieldTextArea/FieldTextArea.d.ts +1 -1
- package/dist/components/FieldTextArea/FieldTextArea.js +3 -3
- package/dist/constants.d.ts +6 -0
- package/dist/constants.js +6 -0
- package/dist/helperComponents/ButtonField/ButtonField.d.ts +18 -0
- package/dist/helperComponents/ButtonField/ButtonField.js +10 -0
- package/dist/helperComponents/ButtonField/index.d.ts +1 -0
- package/dist/helperComponents/ButtonField/index.js +1 -0
- package/dist/helperComponents/ButtonField/styles.module.css +96 -0
- package/dist/helperComponents/ButtonFieldList/ButtonFieldList.d.ts +4 -0
- package/dist/helperComponents/ButtonFieldList/ButtonFieldList.js +27 -0
- package/dist/helperComponents/ButtonFieldList/helpers.d.ts +5 -0
- package/dist/helperComponents/ButtonFieldList/helpers.js +8 -0
- package/dist/helperComponents/ButtonFieldList/index.d.ts +1 -0
- package/dist/helperComponents/ButtonFieldList/index.js +1 -0
- package/dist/helperComponents/ButtonFieldList/styles.module.css +3 -0
- package/dist/helperComponents/FieldContainerPrivate/FieldContainerPrivate.d.ts +5 -4
- package/dist/helperComponents/FieldContainerPrivate/FieldContainerPrivate.js +2 -2
- package/dist/helperComponents/FieldContainerPrivate/styles.module.css +56 -5
- package/dist/helperComponents/index.d.ts +2 -0
- package/dist/helperComponents/index.js +2 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/styles.module.css +13 -0
- package/dist/hooks/useCopyButton.d.ts +3 -1
- package/dist/hooks/useCopyButton.js +4 -3
- package/dist/hooks/useHideButton.js +1 -0
- package/dist/hooks/usePostfix.d.ts +6 -0
- package/dist/hooks/usePostfix.js +11 -0
- package/dist/hooks/usePostfixButton.d.ts +11 -0
- package/dist/hooks/usePostfixButton.js +28 -0
- package/dist/hooks/usePrefix.d.ts +6 -0
- package/dist/hooks/usePrefix.js +11 -0
- package/dist/hooks/usePrefixButton.d.ts +11 -0
- package/dist/hooks/usePrefixButton.js +28 -0
- package/dist/types.d.ts +12 -1
- package/package.json +6 -5
- package/src/components/FieldColor/FieldColor.tsx +6 -3
- package/src/components/FieldDate/FieldDate.tsx +17 -10
- package/src/components/FieldSecure/FieldSecure.tsx +3 -3
- package/src/components/FieldSelect/FieldSelectMultiple.tsx +17 -4
- package/src/components/FieldSelect/FieldSelectSingle.tsx +17 -4
- package/src/components/FieldSelect/hooks.ts +3 -3
- package/src/components/FieldSelect/types.ts +10 -2
- package/src/components/FieldSlider/FieldSlider.tsx +30 -14
- package/src/components/FieldStepper/FieldStepper.tsx +40 -23
- package/src/components/FieldText/FieldText.tsx +78 -10
- package/src/components/FieldText/helpers.tsx +13 -0
- package/src/components/FieldTextArea/FieldTextArea.tsx +6 -3
- package/src/constants.ts +7 -0
- package/src/helperComponents/ButtonField/ButtonField.tsx +73 -0
- package/src/helperComponents/ButtonField/index.ts +1 -0
- package/src/helperComponents/ButtonField/styles.module.scss +57 -0
- package/src/helperComponents/ButtonFieldList/ButtonFieldList.tsx +36 -0
- package/src/helperComponents/ButtonFieldList/helpers.tsx +13 -0
- package/src/helperComponents/ButtonFieldList/index.ts +1 -0
- package/src/helperComponents/ButtonFieldList/styles.module.scss +5 -0
- package/src/helperComponents/FieldContainerPrivate/FieldContainerPrivate.tsx +6 -3
- package/src/helperComponents/FieldContainerPrivate/styles.module.scss +14 -8
- package/src/helperComponents/index.ts +2 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/styles.module.scss +17 -0
- package/src/hooks/useCopyButton.tsx +7 -2
- package/src/hooks/useHideButton.tsx +1 -0
- package/src/hooks/usePostfix.tsx +21 -0
- package/src/hooks/usePostfixButton.tsx +74 -0
- package/src/hooks/usePrefix.tsx +21 -0
- package/src/hooks/usePrefixButton.tsx +74 -0
- package/src/types.ts +16 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ReactElement, useMemo, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
import { ButtonProps, InactiveItem, Size } from '@snack-uikit/input-private';
|
|
4
|
+
|
|
5
|
+
import { ButtonField, ButtonFieldList, ButtonFieldProps } from '../helperComponents';
|
|
6
|
+
import { Button } from '../types';
|
|
7
|
+
|
|
8
|
+
export function usePrefixButton({
|
|
9
|
+
button,
|
|
10
|
+
prefixIcon,
|
|
11
|
+
size,
|
|
12
|
+
disabled,
|
|
13
|
+
readonly,
|
|
14
|
+
onFocus,
|
|
15
|
+
onBlur,
|
|
16
|
+
}: {
|
|
17
|
+
button?: Button;
|
|
18
|
+
prefixIcon?: ReactElement;
|
|
19
|
+
size: Size;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
readonly?: boolean;
|
|
22
|
+
} & Pick<ButtonFieldProps, 'onFocus' | 'onBlur'>): ButtonProps {
|
|
23
|
+
const buttonListRef = useRef<HTMLButtonElement>(null);
|
|
24
|
+
|
|
25
|
+
const prefixIconProps: InactiveItem = useMemo(
|
|
26
|
+
() => ({
|
|
27
|
+
id: 'prefixIcon',
|
|
28
|
+
active: false,
|
|
29
|
+
show: Boolean(prefixIcon && !button),
|
|
30
|
+
render: () => <>{prefixIcon}</>,
|
|
31
|
+
}),
|
|
32
|
+
[button, prefixIcon],
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
const prefixButtonProps: InactiveItem = useMemo(
|
|
36
|
+
() => ({
|
|
37
|
+
id: 'prefixButton',
|
|
38
|
+
active: false,
|
|
39
|
+
show: Boolean(button && button.variant === 'before'),
|
|
40
|
+
render: renderProps => {
|
|
41
|
+
const buttonProps: ButtonFieldProps = {
|
|
42
|
+
...renderProps,
|
|
43
|
+
variant: 'before',
|
|
44
|
+
size,
|
|
45
|
+
content: button?.content,
|
|
46
|
+
disabled: disabled || readonly,
|
|
47
|
+
onFocus,
|
|
48
|
+
onBlur,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
if (button?.items) {
|
|
52
|
+
return (
|
|
53
|
+
<ButtonFieldList
|
|
54
|
+
{...buttonProps}
|
|
55
|
+
ref={buttonListRef}
|
|
56
|
+
onClick={() => {
|
|
57
|
+
setTimeout(() => buttonListRef.current?.focus(), 0);
|
|
58
|
+
}}
|
|
59
|
+
items={button.items}
|
|
60
|
+
selection={button.selection}
|
|
61
|
+
open={button.open}
|
|
62
|
+
onOpenChange={button.onOpenChange}
|
|
63
|
+
/>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return <ButtonField {...buttonProps} />;
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
[button, size, disabled, readonly, onFocus, onBlur],
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
return button ? prefixButtonProps : prefixIconProps;
|
|
74
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
import { DroplistProps, SelectionSingleState } from '@snack-uikit/list';
|
|
1
4
|
import { ValueOf } from '@snack-uikit/utils';
|
|
2
5
|
|
|
3
|
-
import { CONTAINER_VARIANT, VALIDATION_STATE } from './constants';
|
|
6
|
+
import { BUTTON_VARIANT, CONTAINER_VARIANT, VALIDATION_STATE } from './constants';
|
|
4
7
|
|
|
5
8
|
export type ValidationState = ValueOf<typeof VALIDATION_STATE>;
|
|
6
9
|
|
|
7
10
|
export type ContainerVariant = ValueOf<typeof CONTAINER_VARIANT>;
|
|
8
11
|
|
|
12
|
+
export type ButtonVariant = ValueOf<typeof BUTTON_VARIANT>;
|
|
13
|
+
|
|
9
14
|
export type AsyncValueRequest = Promise<{ success: boolean; value?: string }>;
|
|
15
|
+
|
|
16
|
+
export type NativeDroplistProps = Pick<DroplistProps, 'items' | 'open' | 'onOpenChange'> & {
|
|
17
|
+
selection?: Omit<SelectionSingleState, 'mode'>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type Button = Omit<NativeDroplistProps, 'items'> & {
|
|
21
|
+
variant: ButtonVariant;
|
|
22
|
+
content?: ReactNode;
|
|
23
|
+
items?: DroplistProps['items'];
|
|
24
|
+
};
|