@udixio/ui-react 2.9.21 → 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,4CA+VhC,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.21",
3
+ "version": "2.9.23",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -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
 
@@ -294,7 +341,6 @@ export const TextField = ({
294
341
  autoComplete={autoComplete}
295
342
  aria-invalid={!!errorText?.length}
296
343
  aria-describedby={hasSupportingText ? helperTextId : undefined}
297
- autoFocus={autoFocus}
298
344
  {...textComponentProps}
299
345
  />
300
346
  </div>
@@ -308,7 +354,7 @@ export const TextField = ({
308
354
  ref={isDateInput ? calendarTriggerRef : undefined}
309
355
  onClick={(event) => {
310
356
  event.stopPropagation();
311
- if (isDateInput) handleDatePickerOpen();
357
+ if (isDateInput) handleDatePickerToggle();
312
358
  }}
313
359
  className={classNames(
314
360
  styles.trailingIcon,
@@ -359,18 +405,7 @@ export const TextField = ({
359
405
 
360
406
  {isDateInput && showDatePicker && (
361
407
  <>
362
- <AnchorPositioner
363
- onBlur={(e) => {
364
- if (
365
- datePickerRef.current &&
366
- !datePickerRef.current?.contains(e.relatedTarget)
367
- ) {
368
- setShowDatePicker(false);
369
- }
370
- }}
371
- anchorRef={textFieldRef}
372
- position="bottom"
373
- >
408
+ <AnchorPositioner anchorRef={textFieldRef} position="bottom">
374
409
  <div
375
410
  ref={datePickerRef}
376
411
  className="z-50 shadow-xl rounded-[28px] bg-surface-container-high overflow-hidden"