@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.
@@ -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,4CA8VhC,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.22",
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/tailwind": "2.4.13",
41
- "@udixio/theme": "2.1.13"
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 handleDatePickerOpen = () => {
137
+ const handleDatePickerToggle = () => {
138
138
  if (disabled) return;
139
- setTempDate(initialDateValue);
140
- setShowDatePicker(true);
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) handleDatePickerOpen();
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"