@rufous/ui 0.2.104 → 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,14 +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 PICKER_H = 420;
3410
- const spaceBelow = window.innerHeight - rect.bottom;
3411
- const spaceAbove = rect.top;
3412
- setDropUp(spaceBelow < PICKER_H && spaceAbove > spaceBelow);
3413
- }, [open]);
3414
3405
  const commitDate = (0, import_react21.useCallback)((d, h, m, ap) => {
3415
3406
  setSelectedDate(d);
3416
3407
  if (!d) {
@@ -3615,28 +3606,25 @@ var DateField = ({
3615
3606
  className: [
3616
3607
  "rf-date-picker",
3617
3608
  "rf-date-picker--portaled",
3618
- isSideVariant ? "rf-date-picker--side" : "",
3619
- dropUp ? "rf-date-picker--drop-up" : ""
3609
+ isSideVariant ? "rf-date-picker--side" : ""
3620
3610
  ].filter(Boolean).join(" "),
3621
3611
  style: (() => {
3622
3612
  const rect = containerRef.current?.getBoundingClientRect();
3623
3613
  if (!rect) return {};
3624
3614
  const PICKER_H = 420;
3625
3615
  const GAP2 = 6;
3626
- const EDGE = 4;
3627
3616
  const spaceBelow = window.innerHeight - rect.bottom - GAP2;
3628
3617
  const spaceAbove = rect.top - GAP2;
3629
3618
  const useDropUp = spaceBelow < PICKER_H && spaceAbove > spaceBelow;
3630
- const rawTop = useDropUp ? rect.top - PICKER_H - GAP2 : rect.bottom + GAP2;
3631
- const top = Math.min(
3632
- Math.max(rawTop, EDGE),
3633
- window.innerHeight - PICKER_H - EDGE
3634
- );
3619
+ const top = useDropUp ? Math.max(4, rect.top - PICKER_H - GAP2) : rect.bottom + GAP2;
3635
3620
  return {
3636
3621
  position: "fixed",
3637
3622
  left: rect.left,
3638
3623
  top,
3639
- zIndex: 99999
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"
3640
3628
  };
3641
3629
  })(),
3642
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,14 +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 PICKER_H = 420;
3261
- const spaceBelow = window.innerHeight - rect.bottom;
3262
- const spaceAbove = rect.top;
3263
- setDropUp(spaceBelow < PICKER_H && spaceAbove > spaceBelow);
3264
- }, [open]);
3265
3256
  const commitDate = useCallback3((d, h, m, ap) => {
3266
3257
  setSelectedDate(d);
3267
3258
  if (!d) {
@@ -3466,28 +3457,25 @@ var DateField = ({
3466
3457
  className: [
3467
3458
  "rf-date-picker",
3468
3459
  "rf-date-picker--portaled",
3469
- isSideVariant ? "rf-date-picker--side" : "",
3470
- dropUp ? "rf-date-picker--drop-up" : ""
3460
+ isSideVariant ? "rf-date-picker--side" : ""
3471
3461
  ].filter(Boolean).join(" "),
3472
3462
  style: (() => {
3473
3463
  const rect = containerRef.current?.getBoundingClientRect();
3474
3464
  if (!rect) return {};
3475
3465
  const PICKER_H = 420;
3476
3466
  const GAP2 = 6;
3477
- const EDGE = 4;
3478
3467
  const spaceBelow = window.innerHeight - rect.bottom - GAP2;
3479
3468
  const spaceAbove = rect.top - GAP2;
3480
3469
  const useDropUp = spaceBelow < PICKER_H && spaceAbove > spaceBelow;
3481
- const rawTop = useDropUp ? rect.top - PICKER_H - GAP2 : rect.bottom + GAP2;
3482
- const top = Math.min(
3483
- Math.max(rawTop, EDGE),
3484
- window.innerHeight - PICKER_H - EDGE
3485
- );
3470
+ const top = useDropUp ? Math.max(4, rect.top - PICKER_H - GAP2) : rect.bottom + GAP2;
3486
3471
  return {
3487
3472
  position: "fixed",
3488
3473
  left: rect.left,
3489
3474
  top,
3490
- zIndex: 99999
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"
3491
3479
  };
3492
3480
  })(),
3493
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.104",
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",