@rufous/ui 0.2.103 → 0.2.105

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/dist/main.cjs CHANGED
@@ -3362,7 +3362,6 @@ var DateField = ({
3362
3362
  const AMPMS = ["AM", "PM"];
3363
3363
  const containerRef = (0, import_react21.useRef)(null);
3364
3364
  const pickerRef = (0, import_react21.useRef)(null);
3365
- const [dropUp, setDropUp] = (0, import_react21.useState)(false);
3366
3365
  const inputId = (0, import_react21.useRef)(`rf-df-${Math.random().toString(36).substring(2, 11)}`).current;
3367
3366
  const isInternalChange = (0, import_react21.useRef)(false);
3368
3367
  (0, import_react21.useEffect)(() => {
@@ -3403,13 +3402,6 @@ var DateField = ({
3403
3402
  document.addEventListener("mousedown", handler);
3404
3403
  return () => document.removeEventListener("mousedown", handler);
3405
3404
  }, [open]);
3406
- (0, import_react21.useEffect)(() => {
3407
- if (!open || !containerRef.current) return;
3408
- const rect = containerRef.current.getBoundingClientRect();
3409
- const spaceBelow = window.innerHeight - rect.bottom;
3410
- const pickerHeight = 400;
3411
- setDropUp(spaceBelow < pickerHeight && rect.top > pickerHeight);
3412
- }, [open]);
3413
3405
  const commitDate = (0, import_react21.useCallback)((d, h, m, ap) => {
3414
3406
  setSelectedDate(d);
3415
3407
  if (!d) {
@@ -3614,20 +3606,25 @@ var DateField = ({
3614
3606
  className: [
3615
3607
  "rf-date-picker",
3616
3608
  "rf-date-picker--portaled",
3617
- isSideVariant ? "rf-date-picker--side" : "",
3618
- dropUp ? "rf-date-picker--drop-up" : ""
3609
+ isSideVariant ? "rf-date-picker--side" : ""
3619
3610
  ].filter(Boolean).join(" "),
3620
3611
  style: (() => {
3621
3612
  const rect = containerRef.current?.getBoundingClientRect();
3622
3613
  if (!rect) return {};
3623
- const top = rect.bottom + 6;
3624
- const spaceBelow = window.innerHeight - rect.bottom - 6;
3625
- const useDropUp = spaceBelow < 350 && rect.top > spaceBelow;
3614
+ const PICKER_H = 420;
3615
+ const GAP2 = 6;
3616
+ const spaceBelow = window.innerHeight - rect.bottom - GAP2;
3617
+ const spaceAbove = rect.top - GAP2;
3618
+ const useDropUp = spaceBelow < PICKER_H && spaceAbove > spaceBelow;
3619
+ const top = useDropUp ? Math.max(4, rect.top - PICKER_H - GAP2) : rect.bottom + GAP2;
3626
3620
  return {
3627
3621
  position: "fixed",
3628
3622
  left: rect.left,
3629
- ...useDropUp ? { bottom: window.innerHeight - rect.top + 6 } : { top },
3630
- zIndex: 99999
3623
+ top,
3624
+ zIndex: 99999,
3625
+ // Drive animation from same decision — no separate state/re-render needed
3626
+ animationName: useDropUp ? "rf-date-picker-appear-up" : "rf-date-picker-appear",
3627
+ transformOrigin: useDropUp ? "bottom left" : "top left"
3631
3628
  };
3632
3629
  })(),
3633
3630
  onMouseDown: (e) => e.preventDefault()
package/dist/main.css CHANGED
@@ -1259,6 +1259,20 @@ pre {
1259
1259
  transform: scale(1) translateY(0);
1260
1260
  }
1261
1261
  }
1262
+ @keyframes rf-date-picker-appear-up {
1263
+ from {
1264
+ opacity: 0;
1265
+ transform: scale(0.94) translateY(4px);
1266
+ }
1267
+ to {
1268
+ opacity: 1;
1269
+ transform: scale(1) translateY(0);
1270
+ }
1271
+ }
1272
+ .rf-date-picker--drop-up {
1273
+ animation-name: rf-date-picker-appear-up;
1274
+ transform-origin: bottom left;
1275
+ }
1262
1276
  .rf-date-picker__header {
1263
1277
  display: flex;
1264
1278
  align-items: center;
package/dist/main.js CHANGED
@@ -3213,7 +3213,6 @@ var DateField = ({
3213
3213
  const AMPMS = ["AM", "PM"];
3214
3214
  const containerRef = useRef6(null);
3215
3215
  const pickerRef = useRef6(null);
3216
- const [dropUp, setDropUp] = useState7(false);
3217
3216
  const inputId = useRef6(`rf-df-${Math.random().toString(36).substring(2, 11)}`).current;
3218
3217
  const isInternalChange = useRef6(false);
3219
3218
  useEffect7(() => {
@@ -3254,13 +3253,6 @@ var DateField = ({
3254
3253
  document.addEventListener("mousedown", handler);
3255
3254
  return () => document.removeEventListener("mousedown", handler);
3256
3255
  }, [open]);
3257
- useEffect7(() => {
3258
- if (!open || !containerRef.current) return;
3259
- const rect = containerRef.current.getBoundingClientRect();
3260
- const spaceBelow = window.innerHeight - rect.bottom;
3261
- const pickerHeight = 400;
3262
- setDropUp(spaceBelow < pickerHeight && rect.top > pickerHeight);
3263
- }, [open]);
3264
3256
  const commitDate = useCallback3((d, h, m, ap) => {
3265
3257
  setSelectedDate(d);
3266
3258
  if (!d) {
@@ -3465,20 +3457,25 @@ var DateField = ({
3465
3457
  className: [
3466
3458
  "rf-date-picker",
3467
3459
  "rf-date-picker--portaled",
3468
- isSideVariant ? "rf-date-picker--side" : "",
3469
- dropUp ? "rf-date-picker--drop-up" : ""
3460
+ isSideVariant ? "rf-date-picker--side" : ""
3470
3461
  ].filter(Boolean).join(" "),
3471
3462
  style: (() => {
3472
3463
  const rect = containerRef.current?.getBoundingClientRect();
3473
3464
  if (!rect) return {};
3474
- const top = rect.bottom + 6;
3475
- const spaceBelow = window.innerHeight - rect.bottom - 6;
3476
- const useDropUp = spaceBelow < 350 && rect.top > spaceBelow;
3465
+ const PICKER_H = 420;
3466
+ const GAP2 = 6;
3467
+ const spaceBelow = window.innerHeight - rect.bottom - GAP2;
3468
+ const spaceAbove = rect.top - GAP2;
3469
+ const useDropUp = spaceBelow < PICKER_H && spaceAbove > spaceBelow;
3470
+ const top = useDropUp ? Math.max(4, rect.top - PICKER_H - GAP2) : rect.bottom + GAP2;
3477
3471
  return {
3478
3472
  position: "fixed",
3479
3473
  left: rect.left,
3480
- ...useDropUp ? { bottom: window.innerHeight - rect.top + 6 } : { top },
3481
- zIndex: 99999
3474
+ top,
3475
+ zIndex: 99999,
3476
+ // Drive animation from same decision — no separate state/re-render needed
3477
+ animationName: useDropUp ? "rf-date-picker-appear-up" : "rf-date-picker-appear",
3478
+ transformOrigin: useDropUp ? "bottom left" : "top left"
3482
3479
  };
3483
3480
  })(),
3484
3481
  onMouseDown: (e) => e.preventDefault()
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rufous/ui",
3
3
  "private": false,
4
- "version": "0.2.103",
4
+ "version": "0.2.105",
5
5
  "type": "module",
6
6
  "description": "Experimental: A lightweight React UI component library (Beta)",
7
7
  "style": "./dist/main.css",