@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.
Files changed (91) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +9 -0
  3. package/dist/components/FieldColor/FieldColor.d.ts +1 -1
  4. package/dist/components/FieldColor/FieldColor.js +3 -3
  5. package/dist/components/FieldDate/FieldDate.js +11 -5
  6. package/dist/components/FieldSecure/FieldSecure.d.ts +1 -1
  7. package/dist/components/FieldSecure/FieldSecure.js +3 -3
  8. package/dist/components/FieldSelect/FieldSelectMultiple.d.ts +3 -1
  9. package/dist/components/FieldSelect/FieldSelectMultiple.js +7 -5
  10. package/dist/components/FieldSelect/FieldSelectSingle.d.ts +3 -1
  11. package/dist/components/FieldSelect/FieldSelectSingle.js +8 -6
  12. package/dist/components/FieldSelect/hooks.d.ts +1 -1
  13. package/dist/components/FieldSelect/hooks.js +3 -3
  14. package/dist/components/FieldSelect/types.d.ts +5 -1
  15. package/dist/components/FieldSlider/FieldSlider.d.ts +6 -2
  16. package/dist/components/FieldSlider/FieldSlider.js +13 -11
  17. package/dist/components/FieldStepper/FieldStepper.d.ts +5 -1
  18. package/dist/components/FieldStepper/FieldStepper.js +6 -4
  19. package/dist/components/FieldText/FieldText.d.ts +9 -2
  20. package/dist/components/FieldText/FieldText.js +46 -8
  21. package/dist/components/FieldText/helpers.d.ts +4 -0
  22. package/dist/components/FieldText/helpers.js +9 -0
  23. package/dist/components/FieldTextArea/FieldTextArea.d.ts +1 -1
  24. package/dist/components/FieldTextArea/FieldTextArea.js +3 -3
  25. package/dist/constants.d.ts +6 -0
  26. package/dist/constants.js +6 -0
  27. package/dist/helperComponents/ButtonField/ButtonField.d.ts +18 -0
  28. package/dist/helperComponents/ButtonField/ButtonField.js +10 -0
  29. package/dist/helperComponents/ButtonField/index.d.ts +1 -0
  30. package/dist/helperComponents/ButtonField/index.js +1 -0
  31. package/dist/helperComponents/ButtonField/styles.module.css +96 -0
  32. package/dist/helperComponents/ButtonFieldList/ButtonFieldList.d.ts +4 -0
  33. package/dist/helperComponents/ButtonFieldList/ButtonFieldList.js +27 -0
  34. package/dist/helperComponents/ButtonFieldList/helpers.d.ts +5 -0
  35. package/dist/helperComponents/ButtonFieldList/helpers.js +8 -0
  36. package/dist/helperComponents/ButtonFieldList/index.d.ts +1 -0
  37. package/dist/helperComponents/ButtonFieldList/index.js +1 -0
  38. package/dist/helperComponents/ButtonFieldList/styles.module.css +3 -0
  39. package/dist/helperComponents/FieldContainerPrivate/FieldContainerPrivate.d.ts +5 -4
  40. package/dist/helperComponents/FieldContainerPrivate/FieldContainerPrivate.js +2 -2
  41. package/dist/helperComponents/FieldContainerPrivate/styles.module.css +56 -5
  42. package/dist/helperComponents/index.d.ts +2 -0
  43. package/dist/helperComponents/index.js +2 -0
  44. package/dist/hooks/index.d.ts +4 -0
  45. package/dist/hooks/index.js +4 -0
  46. package/dist/hooks/styles.module.css +13 -0
  47. package/dist/hooks/useCopyButton.d.ts +3 -1
  48. package/dist/hooks/useCopyButton.js +4 -3
  49. package/dist/hooks/useHideButton.js +1 -0
  50. package/dist/hooks/usePostfix.d.ts +6 -0
  51. package/dist/hooks/usePostfix.js +11 -0
  52. package/dist/hooks/usePostfixButton.d.ts +11 -0
  53. package/dist/hooks/usePostfixButton.js +28 -0
  54. package/dist/hooks/usePrefix.d.ts +6 -0
  55. package/dist/hooks/usePrefix.js +11 -0
  56. package/dist/hooks/usePrefixButton.d.ts +11 -0
  57. package/dist/hooks/usePrefixButton.js +28 -0
  58. package/dist/types.d.ts +12 -1
  59. package/package.json +6 -5
  60. package/src/components/FieldColor/FieldColor.tsx +6 -3
  61. package/src/components/FieldDate/FieldDate.tsx +17 -10
  62. package/src/components/FieldSecure/FieldSecure.tsx +3 -3
  63. package/src/components/FieldSelect/FieldSelectMultiple.tsx +17 -4
  64. package/src/components/FieldSelect/FieldSelectSingle.tsx +17 -4
  65. package/src/components/FieldSelect/hooks.ts +3 -3
  66. package/src/components/FieldSelect/types.ts +10 -2
  67. package/src/components/FieldSlider/FieldSlider.tsx +30 -14
  68. package/src/components/FieldStepper/FieldStepper.tsx +40 -23
  69. package/src/components/FieldText/FieldText.tsx +78 -10
  70. package/src/components/FieldText/helpers.tsx +13 -0
  71. package/src/components/FieldTextArea/FieldTextArea.tsx +6 -3
  72. package/src/constants.ts +7 -0
  73. package/src/helperComponents/ButtonField/ButtonField.tsx +73 -0
  74. package/src/helperComponents/ButtonField/index.ts +1 -0
  75. package/src/helperComponents/ButtonField/styles.module.scss +57 -0
  76. package/src/helperComponents/ButtonFieldList/ButtonFieldList.tsx +36 -0
  77. package/src/helperComponents/ButtonFieldList/helpers.tsx +13 -0
  78. package/src/helperComponents/ButtonFieldList/index.ts +1 -0
  79. package/src/helperComponents/ButtonFieldList/styles.module.scss +5 -0
  80. package/src/helperComponents/FieldContainerPrivate/FieldContainerPrivate.tsx +6 -3
  81. package/src/helperComponents/FieldContainerPrivate/styles.module.scss +14 -8
  82. package/src/helperComponents/index.ts +2 -0
  83. package/src/hooks/index.ts +4 -0
  84. package/src/hooks/styles.module.scss +17 -0
  85. package/src/hooks/useCopyButton.tsx +7 -2
  86. package/src/hooks/useHideButton.tsx +1 -0
  87. package/src/hooks/usePostfix.tsx +21 -0
  88. package/src/hooks/usePostfixButton.tsx +74 -0
  89. package/src/hooks/usePrefix.tsx +21 -0
  90. package/src/hooks/usePrefixButton.tsx +74 -0
  91. 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
+ };