@a-type/ui 4.0.9 → 4.1.0-beta.4

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 (118) hide show
  1. package/dist/cjs/components/autocomplete/Autocomplete.d.ts +114 -0
  2. package/dist/cjs/components/autocomplete/Autocomplete.js +119 -0
  3. package/dist/cjs/components/autocomplete/Autocomplete.js.map +1 -0
  4. package/dist/cjs/components/autocomplete/Autocomplete.stories.d.ts +52 -0
  5. package/dist/cjs/components/autocomplete/Autocomplete.stories.js +94 -0
  6. package/dist/cjs/components/autocomplete/Autocomplete.stories.js.map +1 -0
  7. package/dist/cjs/components/chip/Chip.d.ts +3 -4
  8. package/dist/cjs/components/chip/Chip.js +1 -1
  9. package/dist/cjs/components/chip/Chip.js.map +1 -1
  10. package/dist/cjs/components/chip/Chip.stories.js +1 -1
  11. package/dist/cjs/components/chip/Chip.stories.js.map +1 -1
  12. package/dist/cjs/components/dialog/Dialog.js +7 -7
  13. package/dist/cjs/components/dialog/Dialog.js.map +1 -1
  14. package/dist/cjs/components/dropdownMenu/DropdownMenu.js +11 -44
  15. package/dist/cjs/components/dropdownMenu/DropdownMenu.js.map +1 -1
  16. package/dist/cjs/components/forms/TextField.js +1 -1
  17. package/dist/cjs/components/forms/TextField.js.map +1 -1
  18. package/dist/cjs/components/index.d.ts +2 -0
  19. package/dist/cjs/components/index.js +2 -0
  20. package/dist/cjs/components/index.js.map +1 -1
  21. package/dist/cjs/components/input/Input.d.ts +12 -5
  22. package/dist/cjs/components/input/Input.js +26 -12
  23. package/dist/cjs/components/input/Input.js.map +1 -1
  24. package/dist/cjs/components/input/Input.stories.d.ts +5 -1
  25. package/dist/cjs/components/input/Input.stories.js +6 -2
  26. package/dist/cjs/components/input/Input.stories.js.map +1 -1
  27. package/dist/cjs/components/layouts/PageNowPlaying.d.ts +1 -2
  28. package/dist/cjs/components/layouts/PageNowPlaying.js +2 -4
  29. package/dist/cjs/components/layouts/PageNowPlaying.js.map +1 -1
  30. package/dist/cjs/components/popover/Popover.js +6 -5
  31. package/dist/cjs/components/popover/Popover.js.map +1 -1
  32. package/dist/cjs/components/primitives/menus.d.ts +5 -0
  33. package/dist/cjs/components/primitives/menus.js +14 -0
  34. package/dist/cjs/components/primitives/menus.js.map +1 -0
  35. package/dist/cjs/components/quickAction/QuickAction.d.ts +17 -0
  36. package/dist/cjs/components/quickAction/QuickAction.js +63 -0
  37. package/dist/cjs/components/quickAction/QuickAction.js.map +1 -0
  38. package/dist/cjs/components/quickAction/QuickAction.stories.d.ts +22 -0
  39. package/dist/cjs/components/quickAction/QuickAction.stories.js +61 -0
  40. package/dist/cjs/components/quickAction/QuickAction.stories.js.map +1 -0
  41. package/dist/cjs/components/textArea/TextArea.d.ts +2 -2
  42. package/dist/cjs/components/textArea/TextArea.js +6 -17
  43. package/dist/cjs/components/textArea/TextArea.js.map +1 -1
  44. package/dist/cjs/components/textArea/TextArea.stories.d.ts +1 -1
  45. package/dist/cjs/systems/inputs.d.ts +3 -0
  46. package/dist/cjs/systems/inputs.js +14 -0
  47. package/dist/cjs/systems/inputs.js.map +1 -0
  48. package/dist/cjs/uno/preflights/layers.js +1 -1
  49. package/dist/cjs/uno/preflights/layers.js.map +1 -1
  50. package/dist/css/main.css +7 -6
  51. package/dist/esm/components/autocomplete/Autocomplete.d.ts +114 -0
  52. package/dist/esm/components/autocomplete/Autocomplete.js +113 -0
  53. package/dist/esm/components/autocomplete/Autocomplete.js.map +1 -0
  54. package/dist/esm/components/autocomplete/Autocomplete.stories.d.ts +52 -0
  55. package/dist/esm/components/autocomplete/Autocomplete.stories.js +91 -0
  56. package/dist/esm/components/autocomplete/Autocomplete.stories.js.map +1 -0
  57. package/dist/esm/components/chip/Chip.d.ts +3 -4
  58. package/dist/esm/components/chip/Chip.js +1 -1
  59. package/dist/esm/components/chip/Chip.js.map +1 -1
  60. package/dist/esm/components/chip/Chip.stories.js +1 -1
  61. package/dist/esm/components/chip/Chip.stories.js.map +1 -1
  62. package/dist/esm/components/dialog/Dialog.js +7 -7
  63. package/dist/esm/components/dialog/Dialog.js.map +1 -1
  64. package/dist/esm/components/dropdownMenu/DropdownMenu.js +8 -8
  65. package/dist/esm/components/dropdownMenu/DropdownMenu.js.map +1 -1
  66. package/dist/esm/components/forms/TextField.js +1 -1
  67. package/dist/esm/components/forms/TextField.js.map +1 -1
  68. package/dist/esm/components/index.d.ts +2 -0
  69. package/dist/esm/components/index.js +2 -0
  70. package/dist/esm/components/index.js.map +1 -1
  71. package/dist/esm/components/input/Input.d.ts +12 -5
  72. package/dist/esm/components/input/Input.js +29 -14
  73. package/dist/esm/components/input/Input.js.map +1 -1
  74. package/dist/esm/components/input/Input.stories.d.ts +5 -1
  75. package/dist/esm/components/input/Input.stories.js +5 -1
  76. package/dist/esm/components/input/Input.stories.js.map +1 -1
  77. package/dist/esm/components/layouts/PageNowPlaying.d.ts +1 -2
  78. package/dist/esm/components/layouts/PageNowPlaying.js +2 -4
  79. package/dist/esm/components/layouts/PageNowPlaying.js.map +1 -1
  80. package/dist/esm/components/popover/Popover.js +6 -5
  81. package/dist/esm/components/popover/Popover.js.map +1 -1
  82. package/dist/esm/components/primitives/menus.d.ts +5 -0
  83. package/dist/esm/components/primitives/menus.js +8 -0
  84. package/dist/esm/components/primitives/menus.js.map +1 -0
  85. package/dist/esm/components/quickAction/QuickAction.d.ts +17 -0
  86. package/dist/esm/components/quickAction/QuickAction.js +56 -0
  87. package/dist/esm/components/quickAction/QuickAction.js.map +1 -0
  88. package/dist/esm/components/quickAction/QuickAction.stories.d.ts +22 -0
  89. package/dist/esm/components/quickAction/QuickAction.stories.js +55 -0
  90. package/dist/esm/components/quickAction/QuickAction.stories.js.map +1 -0
  91. package/dist/esm/components/textArea/TextArea.d.ts +2 -2
  92. package/dist/esm/components/textArea/TextArea.js +6 -17
  93. package/dist/esm/components/textArea/TextArea.js.map +1 -1
  94. package/dist/esm/components/textArea/TextArea.stories.d.ts +1 -1
  95. package/dist/esm/systems/inputs.d.ts +3 -0
  96. package/dist/esm/systems/inputs.js +11 -0
  97. package/dist/esm/systems/inputs.js.map +1 -0
  98. package/dist/esm/uno/preflights/layers.js +1 -1
  99. package/dist/esm/uno/preflights/layers.js.map +1 -1
  100. package/package.json +2 -2
  101. package/src/components/autocomplete/Autocomplete.stories.tsx +221 -0
  102. package/src/components/autocomplete/Autocomplete.tsx +343 -0
  103. package/src/components/chip/Chip.stories.tsx +1 -4
  104. package/src/components/chip/Chip.tsx +5 -7
  105. package/src/components/dialog/Dialog.tsx +535 -535
  106. package/src/components/dropdownMenu/DropdownMenu.tsx +173 -190
  107. package/src/components/forms/TextField.tsx +140 -140
  108. package/src/components/index.ts +2 -0
  109. package/src/components/input/Input.stories.tsx +14 -1
  110. package/src/components/input/Input.tsx +109 -74
  111. package/src/components/layouts/PageNowPlaying.tsx +1 -5
  112. package/src/components/popover/Popover.tsx +123 -132
  113. package/src/components/primitives/menus.tsx +44 -0
  114. package/src/components/quickAction/QuickAction.stories.tsx +106 -0
  115. package/src/components/quickAction/QuickAction.tsx +107 -0
  116. package/src/components/textArea/TextArea.tsx +80 -105
  117. package/src/systems/inputs.ts +11 -0
  118. package/src/uno/preflights/layers.ts +1 -1
@@ -1,190 +1,173 @@
1
- 'use client';
2
- import {
3
- Menu as BaseMenu,
4
- MenuArrowProps,
5
- MenuItemProps,
6
- MenuPopupProps,
7
- MenuPositionerProps,
8
- MenuTriggerProps,
9
- } from '@base-ui/react/menu';
10
- import classNames, { clsx } from 'clsx';
11
- import { Ref } from 'react';
12
- import { withClassName } from '../../hooks/withClassName.js';
13
- import { GroupScaleReset } from '../../systems/GroupScale.js';
14
- import { PaletteName } from '../../uno/index.js';
15
- import { ArrowSvg } from '../utility/ArrowSvg.js';
16
- import { SlotDiv } from '../utility/SlotDiv.js';
17
- import { DropdownTriggerProvider } from './DropdownTriggerContext.js';
18
-
19
- const StyledContent = withClassName(
20
- function DropdownMenuContent(props: MenuPopupProps) {
21
- return (
22
- <GroupScaleReset>
23
- <BaseMenu.Popup {...props} />
24
- </GroupScaleReset>
25
- );
26
- },
27
- 'layer-components:(min-w-220px bg-white z-menu shadow-lg rounded-md border border-black flex flex-col transition)',
28
- 'layer-components:transform-origin-[var(--transform-origin)]',
29
-
30
- 'layer-components:data-[starting-style]:data-[side=bottom]:(opacity-0 translate-y-4px)',
31
- 'layer-components:data-[ending-style]:data-[side=bottom]:(opacity-0 translate-y-4px)',
32
- 'layer-components:data-[starting-style]:data-[side=top]:(opacity-0 translate-y--4px)',
33
- 'layer-components:data-[ending-style]:data-[side=top]:(opacity-0 translate-y-0)',
34
- 'layer-components:data-[starting-style]:data-[side=right]:(opacity-0 translate-x-4px)',
35
- 'layer-components:data-[ending-style]:data-[side=right]:(opacity-0 translate-x-0)',
36
- 'layer-components:data-[starting-style]:data-[side=left]:(opacity-0 translate-x--4px)',
37
- 'layer-components:data-[ending-style]:data-[side=left]:(opacity-0 translate-x-0)',
38
-
39
- 'layer-components:(max-h-[--available-height] max-w-[--available-width])',
40
-
41
- 'important:motion-reduce:animate-none',
42
- 'will-change-transform',
43
- );
44
- const itemClassName = classNames(
45
- 'layer-components:(relative min-h-touch-large flex cursor-pointer select-none items-center py-sm pl-8 pr-4 text-left text-md leading-4 color-main-ink)',
46
- 'layer-components:[&[data-disabled]]:(pointer-events-none color-gray-dark bg-white)',
47
- 'layer-components:focus-visible:(color-black bg-main-light)',
48
- 'layer-components:hover:(color-black bg-main-light)',
49
- 'layer-components:focus:outline-none',
50
- );
51
- const StyledItemBase = withClassName(BaseMenu.Item, itemClassName);
52
- export interface DropdownMenuItemProps extends MenuItemProps {
53
- color?: PaletteName;
54
- ref?: Ref<HTMLDivElement>;
55
- }
56
- const StyledItem = ({
57
- ref: forwardedRef,
58
- className,
59
- color = 'gray',
60
- ...props
61
- }: DropdownMenuItemProps) => {
62
- return (
63
- <StyledItemBase
64
- {...props}
65
- className={clsx(color && `palette-${color}`, className)}
66
- ref={forwardedRef}
67
- />
68
- );
69
- };
70
- const StyledCheckboxItem = withClassName(BaseMenu.CheckboxItem, itemClassName);
71
- const StyledRadioItem = withClassName(BaseMenu.RadioItem, itemClassName);
72
-
73
- const StyledLabel = withClassName(
74
- 'span',
75
- 'layer-components:(pl-3 py-1 font-bold text-sm leading-6)',
76
- );
77
-
78
- const StyledSeparator = withClassName(
79
- BaseMenu.Separator,
80
- 'layer-components:(h-1px bg-gray m-5px)',
81
- );
82
-
83
- const StyledItemIndicator = withClassName(
84
- BaseMenu.CheckboxItemIndicator,
85
- 'layer-components:(absolute left-0 w-25px inline-flex items-center justify-center)',
86
- );
87
-
88
- const StyledArrow = withClassName(
89
- (props: MenuArrowProps) => (
90
- <BaseMenu.Arrow {...props}>
91
- <ArrowSvg />
92
- </BaseMenu.Arrow>
93
- ),
94
- 'layer-components:(arrow)',
95
- 'layer-components:data-[closed]:(opacity-0 scale-0)',
96
- 'layer-components:data-[open]:(opacity-100 scale-100)',
97
- );
98
-
99
- const StyledTrigger = withClassName(BaseMenu.Trigger, 'select-none');
100
-
101
- const StyledPortal = BaseMenu.Portal;
102
-
103
- // Exports
104
- export const DropdownMenuRoot = BaseMenu.Root;
105
- export const DropdownMenuItem = StyledItem;
106
- export const DropdownMenuCheckboxItem = StyledCheckboxItem;
107
- export const DropdownMenuRadioGroup = BaseMenu.RadioGroup;
108
- export const DropdownMenuRadioItem = StyledRadioItem;
109
- export const DropdownMenuItemIndicator = StyledItemIndicator;
110
- export const DropdownMenuLabel = StyledLabel;
111
- export const DropdownMenuSeparator = StyledSeparator;
112
- export const DropdownMenuArrow = StyledArrow;
113
-
114
- export function DropdownMenuTrigger({ ...props }: MenuTriggerProps) {
115
- return (
116
- <DropdownTriggerProvider>
117
- <StyledTrigger {...props} />
118
- </DropdownTriggerProvider>
119
- );
120
- }
121
- export const DropdownMenuTriggerIcon = withClassName(
122
- SlotDiv,
123
- 'layer-components:[[data-popup-open]>&]:rotate-180 layer-components:transition-transform',
124
- );
125
-
126
- export const DropdownMenuContent = ({
127
- children,
128
- forceMount,
129
- keepMounted,
130
- side,
131
- sideOffset = 8,
132
- align,
133
- alignOffset,
134
- anchor,
135
- arrowPadding = 2,
136
- collisionAvoidance,
137
- collisionBoundary,
138
- collisionPadding,
139
- sticky,
140
- positionMethod,
141
- ...props
142
- }: MenuPopupProps &
143
- MenuPositionerProps & {
144
- /** @deprecated - use keepMounted */
145
- forceMount?: boolean;
146
- keepMounted?: boolean;
147
- }) => {
148
- return (
149
- <StyledPortal keepMounted={keepMounted ?? forceMount}>
150
- <BaseMenu.Positioner
151
- sideOffset={sideOffset}
152
- side={side}
153
- align={align}
154
- alignOffset={alignOffset}
155
- anchor={anchor}
156
- arrowPadding={arrowPadding}
157
- collisionAvoidance={collisionAvoidance}
158
- collisionBoundary={collisionBoundary}
159
- collisionPadding={collisionPadding}
160
- sticky={sticky}
161
- positionMethod={positionMethod}
162
- >
163
- <StyledContent {...props}>
164
- <div className="layer-components:(max-h-full min-h-0 overflow-x-hidden rounded-md overflow-y-auto overflow-unstable)">
165
- {children}
166
- </div>
167
- <StyledArrow />
168
- </StyledContent>
169
- </BaseMenu.Positioner>
170
- </StyledPortal>
171
- );
172
- };
173
-
174
- export const DropdownMenuItemRightSlot = withClassName('div', 'ml-auto pl-md');
175
-
176
- export const DropdownMenu = Object.assign(DropdownMenuRoot, {
177
- Content: DropdownMenuContent,
178
- Trigger: DropdownMenuTrigger,
179
- Item: StyledItem,
180
- CheckboxItem: StyledCheckboxItem,
181
- RadioGroup: BaseMenu.RadioGroup,
182
- RadioItem: StyledRadioItem,
183
- ItemIndicator: StyledItemIndicator,
184
- Label: StyledLabel,
185
- Separator: StyledSeparator,
186
- Arrow: StyledArrow,
187
- ItemRightSlot: DropdownMenuItemRightSlot,
188
- TriggerIcon: DropdownMenuTriggerIcon,
189
- createHandle: BaseMenu.createHandle,
190
- });
1
+ 'use client';
2
+ import {
3
+ Menu as BaseMenu,
4
+ MenuArrowProps,
5
+ MenuItemProps,
6
+ MenuPopupProps,
7
+ MenuPositionerProps,
8
+ MenuTriggerProps,
9
+ } from '@base-ui/react/menu';
10
+ import { clsx } from 'clsx';
11
+ import { Ref } from 'react';
12
+ import { withClassName } from '../../hooks/withClassName.js';
13
+ import { GroupScaleReset } from '../../systems/GroupScale.js';
14
+ import { PaletteName } from '../../uno/index.js';
15
+ import {
16
+ itemClassName,
17
+ itemListClassName,
18
+ popupClassName,
19
+ } from '../primitives/menus.js';
20
+ import { ArrowSvg } from '../utility/ArrowSvg.js';
21
+ import { SlotDiv } from '../utility/SlotDiv.js';
22
+ import { DropdownTriggerProvider } from './DropdownTriggerContext.js';
23
+
24
+ const StyledContent = withClassName(
25
+ function DropdownMenuContent(props: MenuPopupProps) {
26
+ return (
27
+ <GroupScaleReset>
28
+ <BaseMenu.Popup {...props} />
29
+ </GroupScaleReset>
30
+ );
31
+ },
32
+ popupClassName,
33
+ 'layer-components:(min-w-220px)',
34
+ );
35
+
36
+ const StyledItemBase = withClassName(BaseMenu.Item, itemClassName);
37
+ export interface DropdownMenuItemProps extends MenuItemProps {
38
+ color?: PaletteName;
39
+ ref?: Ref<HTMLDivElement>;
40
+ }
41
+ const StyledItem = ({
42
+ ref: forwardedRef,
43
+ className,
44
+ color = 'gray',
45
+ ...props
46
+ }: DropdownMenuItemProps) => {
47
+ return (
48
+ <StyledItemBase
49
+ {...props}
50
+ className={clsx(color && `palette-${color}`, className)}
51
+ ref={forwardedRef}
52
+ />
53
+ );
54
+ };
55
+ const StyledCheckboxItem = withClassName(BaseMenu.CheckboxItem, itemClassName);
56
+ const StyledRadioItem = withClassName(BaseMenu.RadioItem, itemClassName);
57
+
58
+ const StyledLabel = withClassName(
59
+ 'span',
60
+ 'layer-components:(py-1 pl-3 text-sm font-bold leading-6)',
61
+ );
62
+
63
+ const StyledSeparator = withClassName(
64
+ BaseMenu.Separator,
65
+ 'layer-components:(m-5px h-1px bg-gray)',
66
+ );
67
+
68
+ const StyledItemIndicator = withClassName(
69
+ BaseMenu.CheckboxItemIndicator,
70
+ 'layer-components:(absolute left-0 w-25px inline-flex items-center justify-center)',
71
+ );
72
+
73
+ const StyledArrow = withClassName(
74
+ (props: MenuArrowProps) => (
75
+ <BaseMenu.Arrow {...props}>
76
+ <ArrowSvg />
77
+ </BaseMenu.Arrow>
78
+ ),
79
+ 'layer-components:(arrow)',
80
+ 'layer-components:data-[closed]:(scale-0 opacity-0)',
81
+ 'layer-components:data-[open]:(scale-100 opacity-100)',
82
+ );
83
+
84
+ const StyledTrigger = withClassName(BaseMenu.Trigger, 'select-none');
85
+
86
+ const StyledPortal = BaseMenu.Portal;
87
+
88
+ // Exports
89
+ export const DropdownMenuRoot = BaseMenu.Root;
90
+ export const DropdownMenuItem = StyledItem;
91
+ export const DropdownMenuCheckboxItem = StyledCheckboxItem;
92
+ export const DropdownMenuRadioGroup = BaseMenu.RadioGroup;
93
+ export const DropdownMenuRadioItem = StyledRadioItem;
94
+ export const DropdownMenuItemIndicator = StyledItemIndicator;
95
+ export const DropdownMenuLabel = StyledLabel;
96
+ export const DropdownMenuSeparator = StyledSeparator;
97
+ export const DropdownMenuArrow = StyledArrow;
98
+
99
+ export function DropdownMenuTrigger({ ...props }: MenuTriggerProps) {
100
+ return (
101
+ <DropdownTriggerProvider>
102
+ <StyledTrigger {...props} />
103
+ </DropdownTriggerProvider>
104
+ );
105
+ }
106
+ export const DropdownMenuTriggerIcon = withClassName(
107
+ SlotDiv,
108
+ 'layer-components:transition-transform layer-components:[[data-popup-open]>&]:rotate-180',
109
+ );
110
+
111
+ export const DropdownMenuContent = ({
112
+ children,
113
+ forceMount,
114
+ keepMounted,
115
+ side,
116
+ sideOffset = 8,
117
+ align,
118
+ alignOffset,
119
+ anchor,
120
+ arrowPadding = 2,
121
+ collisionAvoidance,
122
+ collisionBoundary,
123
+ collisionPadding,
124
+ sticky,
125
+ positionMethod,
126
+ ...props
127
+ }: MenuPopupProps &
128
+ MenuPositionerProps & {
129
+ /** @deprecated - use keepMounted */
130
+ forceMount?: boolean;
131
+ keepMounted?: boolean;
132
+ }) => {
133
+ return (
134
+ <StyledPortal keepMounted={keepMounted ?? forceMount}>
135
+ <BaseMenu.Positioner
136
+ sideOffset={sideOffset}
137
+ side={side}
138
+ align={align}
139
+ alignOffset={alignOffset}
140
+ anchor={anchor}
141
+ arrowPadding={arrowPadding}
142
+ collisionAvoidance={collisionAvoidance}
143
+ collisionBoundary={collisionBoundary}
144
+ collisionPadding={collisionPadding}
145
+ sticky={sticky}
146
+ positionMethod={positionMethod}
147
+ >
148
+ <StyledContent {...props}>
149
+ <div className={itemListClassName}>{children}</div>
150
+ <StyledArrow />
151
+ </StyledContent>
152
+ </BaseMenu.Positioner>
153
+ </StyledPortal>
154
+ );
155
+ };
156
+
157
+ export const DropdownMenuItemRightSlot = withClassName('div', 'ml-auto pl-md');
158
+
159
+ export const DropdownMenu = Object.assign(DropdownMenuRoot, {
160
+ Content: DropdownMenuContent,
161
+ Trigger: DropdownMenuTrigger,
162
+ Item: StyledItem,
163
+ CheckboxItem: StyledCheckboxItem,
164
+ RadioGroup: BaseMenu.RadioGroup,
165
+ RadioItem: StyledRadioItem,
166
+ ItemIndicator: StyledItemIndicator,
167
+ Label: StyledLabel,
168
+ Separator: StyledSeparator,
169
+ Arrow: StyledArrow,
170
+ ItemRightSlot: DropdownMenuItemRightSlot,
171
+ TriggerIcon: DropdownMenuTriggerIcon,
172
+ createHandle: BaseMenu.createHandle,
173
+ });
@@ -1,140 +1,140 @@
1
- 'use client';
2
-
3
- import { useField, useFormikContext } from 'formik';
4
- import {
5
- ComponentProps,
6
- InputHTMLAttributes,
7
- KeyboardEvent,
8
- Ref,
9
- useCallback,
10
- useEffect,
11
- useRef,
12
- } from 'react';
13
- import { withClassName } from '../../hooks.js';
14
- import { useIdOrGenerated } from '../../hooks/useIdOrGenerated.js';
15
- import useMergedRef from '../../hooks/useMergedRef.js';
16
- import { Input } from '../input/Input.js';
17
- import { TextArea, TextAreaProps } from '../textArea/TextArea.js';
18
- import { FieldLabel } from './FieldLabel.js';
19
-
20
- export type TextFieldProps = {
21
- name: string;
22
- label?: string;
23
- required?: boolean;
24
- type?: InputHTMLAttributes<HTMLInputElement>['type'];
25
- className?: string;
26
- placeholder?: string;
27
- autoComplete?: InputHTMLAttributes<HTMLInputElement>['autoComplete'];
28
- autoFocus?: InputHTMLAttributes<HTMLInputElement>['autoFocus'];
29
- autoFocusDelay?: number;
30
- inputRef?: Ref<HTMLInputElement>;
31
- inputClassName?: string;
32
- } & ComponentProps<typeof Input>;
33
-
34
- const emptyRef = (() => {}) as any;
35
-
36
- export const TextField = function TextField({
37
- ref,
38
- name,
39
- label,
40
- className,
41
- autoFocusDelay,
42
- autoFocus,
43
- inputRef,
44
- onChange,
45
- onFocus,
46
- onBlur,
47
- id: providedId,
48
- inputClassName,
49
- ...rest
50
- }: TextFieldProps & {
51
- ref?: React.Ref<HTMLDivElement>;
52
- }) {
53
- const [props] = useField({
54
- name,
55
- onChange,
56
- onFocus,
57
- onBlur,
58
- });
59
- const innerInputRef = useRef<HTMLInputElement>(null);
60
- const id = useIdOrGenerated(providedId);
61
-
62
- useEffect(() => {
63
- if (autoFocusDelay) {
64
- setTimeout(() => {
65
- if (innerInputRef.current) innerInputRef.current.focus();
66
- }, autoFocusDelay);
67
- }
68
- }, [autoFocusDelay]);
69
-
70
- return (
71
- <FieldRoot className={className} ref={ref}>
72
- {label && <FieldLabel htmlFor={id}>{label}</FieldLabel>}
73
- <Input
74
- {...props}
75
- {...rest}
76
- id={id}
77
- autoFocus={autoFocus}
78
- className={inputClassName}
79
- ref={useMergedRef(innerInputRef, inputRef || emptyRef)}
80
- />
81
- </FieldRoot>
82
- );
83
- };
84
-
85
- export type TextAreaFieldProps = {
86
- name: string;
87
- label?: string;
88
- required?: boolean;
89
- rows?: number;
90
- disabled?: boolean;
91
- className?: string;
92
- inputRef?: Ref<HTMLTextAreaElement>;
93
- submitOnEnter?: boolean;
94
- textAreaClassName?: string;
95
- } & TextAreaProps;
96
-
97
- export function TextAreaField({
98
- name,
99
- label,
100
- className,
101
- inputRef,
102
- onKeyDown,
103
- submitOnEnter,
104
- id: providedId,
105
- textAreaClassName,
106
- ...rest
107
- }: TextAreaFieldProps) {
108
- const [props] = useField(name);
109
- const { submitForm } = useFormikContext();
110
- const onKeyDownInner = useCallback(
111
- (e: KeyboardEvent<HTMLInputElement>) => {
112
- if (submitOnEnter && e.key === 'Enter' && !e.shiftKey) {
113
- e.preventDefault();
114
- submitForm();
115
- }
116
- onKeyDown?.(e as any);
117
- },
118
- [submitOnEnter, onKeyDown, submitForm],
119
- );
120
- const id = useIdOrGenerated(providedId);
121
-
122
- return (
123
- <FieldRoot className={className}>
124
- {label && <FieldLabel htmlFor={id}>{label}</FieldLabel>}
125
- <TextArea
126
- ref={inputRef}
127
- {...props}
128
- {...rest}
129
- className={textAreaClassName}
130
- id={id}
131
- onKeyDown={onKeyDownInner}
132
- />
133
- </FieldRoot>
134
- );
135
- }
136
-
137
- export const FieldRoot = withClassName(
138
- 'div',
139
- 'flex flex-col items-stretch gap-xs self-stretch',
140
- );
1
+ 'use client';
2
+
3
+ import { useField, useFormikContext } from 'formik';
4
+ import {
5
+ ComponentProps,
6
+ InputHTMLAttributes,
7
+ KeyboardEvent,
8
+ Ref,
9
+ useCallback,
10
+ useEffect,
11
+ useRef,
12
+ } from 'react';
13
+ import { withClassName } from '../../hooks.js';
14
+ import { useIdOrGenerated } from '../../hooks/useIdOrGenerated.js';
15
+ import useMergedRef from '../../hooks/useMergedRef.js';
16
+ import { Input } from '../input/Input.js';
17
+ import { TextArea, TextAreaProps } from '../textArea/TextArea.js';
18
+ import { FieldLabel } from './FieldLabel.js';
19
+
20
+ export type TextFieldProps = {
21
+ name: string;
22
+ label?: string;
23
+ required?: boolean;
24
+ type?: InputHTMLAttributes<HTMLInputElement>['type'];
25
+ className?: string;
26
+ placeholder?: string;
27
+ autoComplete?: InputHTMLAttributes<HTMLInputElement>['autoComplete'];
28
+ autoFocus?: InputHTMLAttributes<HTMLInputElement>['autoFocus'];
29
+ autoFocusDelay?: number;
30
+ inputRef?: Ref<HTMLInputElement>;
31
+ inputClassName?: string;
32
+ } & ComponentProps<typeof Input>;
33
+
34
+ const emptyRef = (() => {}) as any;
35
+
36
+ export const TextField = function TextField({
37
+ ref,
38
+ name,
39
+ label,
40
+ className,
41
+ autoFocusDelay,
42
+ autoFocus,
43
+ inputRef,
44
+ onChange,
45
+ onFocus,
46
+ onBlur,
47
+ id: providedId,
48
+ inputClassName,
49
+ ...rest
50
+ }: TextFieldProps & {
51
+ ref?: React.Ref<HTMLDivElement>;
52
+ }) {
53
+ const [props] = useField({
54
+ name,
55
+ onChange,
56
+ onFocus,
57
+ onBlur,
58
+ });
59
+ const innerInputRef = useRef<HTMLInputElement>(null);
60
+ const id = useIdOrGenerated(providedId);
61
+
62
+ useEffect(() => {
63
+ if (autoFocusDelay) {
64
+ setTimeout(() => {
65
+ if (innerInputRef.current) innerInputRef.current.focus();
66
+ }, autoFocusDelay);
67
+ }
68
+ }, [autoFocusDelay]);
69
+
70
+ return (
71
+ <FieldRoot className={className} ref={ref}>
72
+ {label && <FieldLabel htmlFor={id}>{label}</FieldLabel>}
73
+ <Input
74
+ {...props}
75
+ {...rest}
76
+ id={id}
77
+ autoFocus={autoFocus}
78
+ className={inputClassName}
79
+ ref={useMergedRef(innerInputRef, inputRef || emptyRef)}
80
+ />
81
+ </FieldRoot>
82
+ );
83
+ };
84
+
85
+ export type TextAreaFieldProps = {
86
+ name: string;
87
+ label?: string;
88
+ required?: boolean;
89
+ rows?: number;
90
+ disabled?: boolean;
91
+ className?: string;
92
+ inputRef?: Ref<HTMLTextAreaElement>;
93
+ submitOnEnter?: boolean;
94
+ textAreaClassName?: string;
95
+ } & TextAreaProps;
96
+
97
+ export function TextAreaField({
98
+ name,
99
+ label,
100
+ className,
101
+ inputRef,
102
+ onKeyDown,
103
+ submitOnEnter,
104
+ id: providedId,
105
+ textAreaClassName,
106
+ ...rest
107
+ }: TextAreaFieldProps) {
108
+ const [props] = useField(name);
109
+ const { submitForm } = useFormikContext();
110
+ const onKeyDownInner = useCallback(
111
+ (e: KeyboardEvent<HTMLInputElement>) => {
112
+ if (submitOnEnter && e.key === 'Enter' && !e.shiftKey) {
113
+ e.preventDefault();
114
+ submitForm();
115
+ }
116
+ onKeyDown?.(e as any);
117
+ },
118
+ [submitOnEnter, onKeyDown, submitForm],
119
+ );
120
+ const id = useIdOrGenerated(providedId);
121
+
122
+ return (
123
+ <FieldRoot className={className}>
124
+ {label && <FieldLabel htmlFor={id}>{label}</FieldLabel>}
125
+ <TextArea
126
+ ref={inputRef as any}
127
+ {...props}
128
+ {...rest}
129
+ className={textAreaClassName}
130
+ id={id}
131
+ onKeyDown={onKeyDownInner}
132
+ />
133
+ </FieldRoot>
134
+ );
135
+ }
136
+
137
+ export const FieldRoot = withClassName(
138
+ 'div',
139
+ 'flex flex-col items-stretch self-stretch gap-xs',
140
+ );
@@ -1,5 +1,6 @@
1
1
  export * from '@base-ui/react/use-render';
2
2
  export * from './actions/index.js';
3
+ export * from './autocomplete/Autocomplete.js';
3
4
  export * from './avatar/index.js';
4
5
  export * from './box/Box.js';
5
6
  export * from './button/index.js';
@@ -38,6 +39,7 @@ export * from './popover/index.js';
38
39
  export * from './progress/Progress.js';
39
40
  export * from './provider/Provider.js';
40
41
  export * from './pwaInstall/index.js';
42
+ export * from './quickAction/QuickAction.js';
41
43
  export * from './relativeTime/index.js';
42
44
  export * from './richEditor/index.js';
43
45
  export * from './scrollArea/ScrollArea.js';