cynx-ui 1.2.40 → 1.2.42

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.
@@ -42,15 +42,32 @@ function isSameDay(a, b) {
42
42
  }
43
43
  function isToday(y, m, d) { const t = new Date(); return t.getFullYear()===y && t.getMonth()===m && t.getDate()===d; }
44
44
 
45
- export function DatePicker({ value, onChange, placeholder = 'Select date', badges = {}, minDate, maxDate, disabled, showStepper = true, stepperPosition = 'around', style }) {
45
+ export function DatePicker({ value, onChange, placeholder = 'Select date', badges = {}, minDate, maxDate, disabled, showStepper = true, stepperPosition, style }) {
46
46
  const [open, setOpen] = useState(false);
47
47
  const [view, setView] = useState('day'); // 'day' | 'month' | 'year'
48
48
  const [cursor, setCursor] = useState(() => toDate(value) || new Date());
49
49
  const [pos, setPos] = useState({ top: 0, left: 0, width: 0 });
50
+ const [localStepperPos, setLocalStepperPos] = useState(() => {
51
+ return typeof window !== 'undefined' ? (localStorage.getItem('datepicker_stepper_position') || 'around') : 'around';
52
+ });
50
53
  const ref = useRef(null);
51
54
  const btnRef = useRef(null);
52
55
  const dropRef = useRef(null);
53
56
 
57
+ useEffect(() => {
58
+ function syncPos() {
59
+ if (typeof window !== 'undefined') {
60
+ setLocalStepperPos(localStorage.getItem('datepicker_stepper_position') || 'around');
61
+ }
62
+ }
63
+ window.addEventListener('storage', syncPos);
64
+ window.addEventListener('datepicker-pos-changed', syncPos);
65
+ return () => {
66
+ window.removeEventListener('storage', syncPos);
67
+ window.removeEventListener('datepicker-pos-changed', syncPos);
68
+ };
69
+ }, []);
70
+
54
71
  const changeDay = (delta) => {
55
72
  if (disabled) return;
56
73
  const current = toDate(value) || new Date();
@@ -358,21 +375,23 @@ export function DatePicker({ value, onChange, placeholder = 'Select date', badge
358
375
  </button>
359
376
  );
360
377
 
361
- const posMode = stepperPosition === 'left' || stepperPosition === 'start' ? 'left'
362
- : stepperPosition === 'right' || stepperPosition === 'end' ? 'right'
378
+ const actualPos = stepperPosition || localStepperPos || 'around';
379
+ const showStepperEffective = showStepper && actualPos !== 'off';
380
+ const posMode = actualPos === 'left' || actualPos === 'start' ? 'left'
381
+ : actualPos === 'right' || actualPos === 'end' ? 'right'
363
382
  : 'around';
364
383
 
365
384
  return (
366
385
  <div ref={ref} style={{ position: 'relative', display: 'inline-flex', alignItems: 'center', gap: 4, ...style }}>
367
- {showStepper && posMode === 'around' && renderPrevBtn()}
368
- {showStepper && posMode === 'left' && renderPrevBtn()}
369
- {showStepper && posMode === 'left' && renderNextBtn()}
386
+ {showStepperEffective && posMode === 'around' && renderPrevBtn()}
387
+ {showStepperEffective && posMode === 'left' && renderPrevBtn()}
388
+ {showStepperEffective && posMode === 'left' && renderNextBtn()}
370
389
 
371
390
  {renderTriggerBtn()}
372
391
 
373
- {showStepper && posMode === 'around' && renderNextBtn()}
374
- {showStepper && posMode === 'right' && renderPrevBtn()}
375
- {showStepper && posMode === 'right' && renderNextBtn()}
392
+ {showStepperEffective && posMode === 'around' && renderNextBtn()}
393
+ {showStepperEffective && posMode === 'right' && renderPrevBtn()}
394
+ {showStepperEffective && posMode === 'right' && renderNextBtn()}
376
395
 
377
396
  {/* Dropdown via portal */}
378
397
  {open && createPortal(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cynx-ui",
3
- "version": "1.2.40",
3
+ "version": "1.2.42",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js"