@udixio/ui-react 2.9.22 → 2.9.23
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 +10 -0
- package/dist/index.cjs +3 -3
- package/dist/index.js +755 -749
- package/dist/lib/components/TextField.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/lib/components/TextField.tsx +52 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TextField.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,yRA0BvB,UAAU,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../src/lib/components/TextField.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS,GAAI,yRA0BvB,UAAU,CAAC,kBAAkB,CAAC,4CAkYhC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@udixio/ui-react",
|
|
3
|
-
"version": "2.9.
|
|
3
|
+
"version": "2.9.23",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"react": "^19.1.1",
|
|
39
39
|
"react-dom": "^19.1.1",
|
|
40
|
-
"@udixio/
|
|
41
|
-
"@udixio/
|
|
40
|
+
"@udixio/theme": "2.1.13",
|
|
41
|
+
"@udixio/tailwind": "2.4.13"
|
|
42
42
|
},
|
|
43
43
|
"repository": {
|
|
44
44
|
"type": "git",
|
|
@@ -134,10 +134,14 @@ export const TextField = ({
|
|
|
134
134
|
return null;
|
|
135
135
|
}, [value]);
|
|
136
136
|
|
|
137
|
-
const
|
|
137
|
+
const handleDatePickerToggle = () => {
|
|
138
138
|
if (disabled) return;
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
if (showDatePicker) {
|
|
140
|
+
setShowDatePicker(false);
|
|
141
|
+
} else {
|
|
142
|
+
setTempDate(initialDateValue);
|
|
143
|
+
setShowDatePicker(true);
|
|
144
|
+
}
|
|
141
145
|
};
|
|
142
146
|
|
|
143
147
|
useEffect(() => {
|
|
@@ -148,6 +152,49 @@ export const TextField = ({
|
|
|
148
152
|
}
|
|
149
153
|
}, [showDatePicker]);
|
|
150
154
|
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
if (!showDatePicker) return;
|
|
157
|
+
|
|
158
|
+
const isInside = (target: Node | null) => {
|
|
159
|
+
if (!target) return false;
|
|
160
|
+
return (
|
|
161
|
+
textFieldRef.current?.contains(target) ||
|
|
162
|
+
datePickerRef.current?.contains(target)
|
|
163
|
+
);
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const handlePointerDown = (e: PointerEvent) => {
|
|
167
|
+
const target = e.target as Node;
|
|
168
|
+
const inDatePicker = datePickerRef.current?.contains(target);
|
|
169
|
+
const inCalendarTrigger = calendarTriggerRef.current?.contains(target);
|
|
170
|
+
if (!inDatePicker && !inCalendarTrigger) {
|
|
171
|
+
setShowDatePicker(false);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const handleFocusIn = (e: FocusEvent) => {
|
|
176
|
+
if (!isInside(e.target as Node)) {
|
|
177
|
+
setShowDatePicker(false);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const handleKeyDown = (e: KeyboardEvent) => {
|
|
182
|
+
if (e.key === 'Escape') {
|
|
183
|
+
setShowDatePicker(false);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
document.addEventListener('pointerdown', handlePointerDown);
|
|
188
|
+
document.addEventListener('focusin', handleFocusIn);
|
|
189
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
190
|
+
|
|
191
|
+
return () => {
|
|
192
|
+
document.removeEventListener('pointerdown', handlePointerDown);
|
|
193
|
+
document.removeEventListener('focusin', handleFocusIn);
|
|
194
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
195
|
+
};
|
|
196
|
+
}, [showDatePicker]);
|
|
197
|
+
|
|
151
198
|
const handleDateConfirm = () => {
|
|
152
199
|
const newValue = tempDate ? tempDate.toLocaleDateString('en-CA') : '';
|
|
153
200
|
|
|
@@ -307,7 +354,7 @@ export const TextField = ({
|
|
|
307
354
|
ref={isDateInput ? calendarTriggerRef : undefined}
|
|
308
355
|
onClick={(event) => {
|
|
309
356
|
event.stopPropagation();
|
|
310
|
-
if (isDateInput)
|
|
357
|
+
if (isDateInput) handleDatePickerToggle();
|
|
311
358
|
}}
|
|
312
359
|
className={classNames(
|
|
313
360
|
styles.trailingIcon,
|
|
@@ -358,18 +405,7 @@ export const TextField = ({
|
|
|
358
405
|
|
|
359
406
|
{isDateInput && showDatePicker && (
|
|
360
407
|
<>
|
|
361
|
-
<AnchorPositioner
|
|
362
|
-
onBlur={(e) => {
|
|
363
|
-
if (
|
|
364
|
-
datePickerRef.current &&
|
|
365
|
-
!datePickerRef.current?.contains(e.relatedTarget)
|
|
366
|
-
) {
|
|
367
|
-
setShowDatePicker(false);
|
|
368
|
-
}
|
|
369
|
-
}}
|
|
370
|
-
anchorRef={textFieldRef}
|
|
371
|
-
position="bottom"
|
|
372
|
-
>
|
|
408
|
+
<AnchorPositioner anchorRef={textFieldRef} position="bottom">
|
|
373
409
|
<div
|
|
374
410
|
ref={datePickerRef}
|
|
375
411
|
className="z-50 shadow-xl rounded-[28px] bg-surface-container-high overflow-hidden"
|