react-bootstrap-plugins 1.0.5 → 2.1.0

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.
Files changed (83) hide show
  1. package/README.md +14 -7
  2. package/dist/AutoTextarea.cjs +2 -0
  3. package/dist/AutoTextarea.d.cts +29 -0
  4. package/dist/AutoTextarea.d.ts +29 -0
  5. package/dist/AutoTextarea.js +2 -0
  6. package/dist/DatePicker.cjs +2 -2
  7. package/dist/DatePicker.d.cts +57 -0
  8. package/dist/DatePicker.d.ts +54 -42
  9. package/dist/DatePicker.js +2 -2
  10. package/dist/Label.cjs +2 -2
  11. package/dist/Label.d.cts +15 -0
  12. package/dist/Label.d.ts +12 -13
  13. package/dist/Label.js +2 -2
  14. package/dist/SearchSelect.cjs +2 -2
  15. package/dist/SearchSelect.d.cts +40 -0
  16. package/dist/SearchSelect.d.ts +37 -28
  17. package/dist/SearchSelect.js +2 -2
  18. package/dist/TableLoading.cjs +2 -2
  19. package/dist/TableLoading.d.cts +13 -0
  20. package/dist/TableLoading.d.ts +10 -10
  21. package/dist/TableLoading.js +2 -2
  22. package/dist/chunk-2Q4NZKMX.cjs +2 -0
  23. package/dist/chunk-5IOLZUVD.cjs +2 -0
  24. package/dist/chunk-7LXLWNUR.js +2 -0
  25. package/dist/chunk-AWU5XGMI.cjs +2 -0
  26. package/dist/chunk-HYB5IGJK.js +2 -0
  27. package/dist/chunk-KKWFIJKN.js +2 -0
  28. package/dist/chunk-M3OUUXZG.cjs +2 -0
  29. package/dist/chunk-NPQQDBFB.cjs +2 -0
  30. package/dist/chunk-OEFG7PNW.cjs +2 -0
  31. package/dist/chunk-RR7TBRGI.js +2 -0
  32. package/dist/chunk-WLMCWTO6.js +2 -0
  33. package/dist/chunk-ZCAQ7S2A.js +2 -0
  34. package/dist/css/datepicker.css +1 -299
  35. package/dist/css/plugins.css +1 -0
  36. package/dist/index.cjs +2 -2
  37. package/dist/index.d.cts +6 -0
  38. package/dist/index.d.ts +6 -13
  39. package/dist/index.js +2 -2
  40. package/docs/AUTOTEXTAREA.md +106 -0
  41. package/docs/DATEPICKER.md +3 -3
  42. package/package.json +25 -8
  43. package/dist/DatePicker.cjs.map +0 -1
  44. package/dist/DatePicker.js.map +0 -1
  45. package/dist/Label.cjs.map +0 -1
  46. package/dist/Label.js.map +0 -1
  47. package/dist/SearchSelect.cjs.map +0 -1
  48. package/dist/SearchSelect.js.map +0 -1
  49. package/dist/TableLoading.cjs.map +0 -1
  50. package/dist/TableLoading.js.map +0 -1
  51. package/dist/chunk-2JC4VIKL.cjs +0 -2
  52. package/dist/chunk-2JC4VIKL.cjs.map +0 -1
  53. package/dist/chunk-46AJ2Q5H.js +0 -2
  54. package/dist/chunk-46AJ2Q5H.js.map +0 -1
  55. package/dist/chunk-J4TRPVD4.cjs +0 -2
  56. package/dist/chunk-J4TRPVD4.cjs.map +0 -1
  57. package/dist/chunk-KZEOI42M.cjs +0 -2
  58. package/dist/chunk-KZEOI42M.cjs.map +0 -1
  59. package/dist/chunk-MQRJBL7S.cjs +0 -2
  60. package/dist/chunk-MQRJBL7S.cjs.map +0 -1
  61. package/dist/chunk-MTRPXJ3C.js +0 -2
  62. package/dist/chunk-MTRPXJ3C.js.map +0 -1
  63. package/dist/chunk-QQNPKA7A.cjs +0 -2
  64. package/dist/chunk-QQNPKA7A.cjs.map +0 -1
  65. package/dist/chunk-W6UBCMKG.js +0 -2
  66. package/dist/chunk-W6UBCMKG.js.map +0 -1
  67. package/dist/chunk-WPTHY5AJ.js +0 -2
  68. package/dist/chunk-WPTHY5AJ.js.map +0 -1
  69. package/dist/chunk-XFHLZ7I3.js +0 -2
  70. package/dist/chunk-XFHLZ7I3.js.map +0 -1
  71. package/dist/index.cjs.map +0 -1
  72. package/dist/index.js.map +0 -1
  73. package/src/components/DatePicker.d.ts +0 -45
  74. package/src/components/DatePicker.jsx +0 -691
  75. package/src/components/Label.d.ts +0 -16
  76. package/src/components/Label.jsx +0 -22
  77. package/src/components/SearchSelect.d.ts +0 -31
  78. package/src/components/SearchSelect.jsx +0 -155
  79. package/src/components/TableLoading.d.ts +0 -13
  80. package/src/components/TableLoading.jsx +0 -43
  81. package/src/css/datepicker.css +0 -299
  82. package/src/index.js +0 -16
  83. package/src/lib/cn.js +0 -35
@@ -1,2 +0,0 @@
1
- 'use strict';var chunkQQNPKA7A_cjs=require('./chunk-QQNPKA7A.cjs'),i=require('react'),reactDom=require('react-dom'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var i__namespace=/*#__PURE__*/_interopNamespace(i);var Ce=["Su","Mo","Tu","We","Th","Fr","Sa"],Ee=["January","February","March","April","May","June","July","August","September","October","November","December"],Ae=Array.from({length:60},(n,t)=>t),g=12,V=(n,t)=>new Date(n,t+1,0).getDate(),ne=(n,t)=>n&&t&&n.getFullYear()===t.getFullYear()&&n.getMonth()===t.getMonth()&&n.getDate()===t.getDate(),Ie=(n,t,r)=>!(t&&n<new Date(t.getFullYear(),t.getMonth(),t.getDate())||r&&n>new Date(r.getFullYear(),r.getMonth(),r.getDate())),Te=(n,t)=>{let r=new Date(n,t,1).getDay(),m=V(n,t),p=[],b=V(n,t-1);for(let d=r-1;d>=0;d--){let D=b-d;p.push({day:D,date:new Date(n,t-1,D),isOutside:true});}for(let d=1;d<=m;d++)p.push({day:d,date:new Date(n,t,d),isOutside:false});let y=42-p.length;for(let d=1;d<=y;d++)p.push({day:d,date:new Date(n,t+1,d),isOutside:true});return p},L=(n,t,r)=>{if(!n||isNaN(n.getTime()))return "";let m=n.getFullYear(),p=String(n.getMonth()+1).padStart(2,"0"),b=String(n.getDate()).padStart(2,"0"),y=n.getHours(),d=String(n.getMinutes()).padStart(2,"0"),D=y>=12?"PM":"AM";y=y%12||12;let k=String(y).padStart(2,"0");if(r)return r.replace("yyyy",m).replace("MM",p).replace("dd",b).replace("hh",k).replace("mm",d).replace("aa",D);switch(t){case "time":return `${k}:${d} ${D}`;case "datetime":return `${m}-${p}-${b} ${k}:${d} ${D}`;default:return `${m}-${p}-${b}`}},O=(n,t,r="date")=>({target:{value:n,name:t,type:r},preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:null}),Fe={date:300,time:300,datetime:400,year:250},Oe=n=>{if(!n)return document.documentElement;let t=n.parentElement;for(;t;){let r=window.getComputedStyle(t),m=r.overflowY||r.overflow;if(m==="auto"||m==="scroll")return t;t=t.parentElement;}return document.documentElement},$e=(n,t)=>{if(!n)return {};let r=n.getBoundingClientRect(),m=t||300,p=window.innerHeight-r.bottom,b=r.top,y=p<m&&b>p,d=Math.max(r.width,window.innerWidth<576?220:260);return {position:"fixed",top:y?Math.max(4,r.top-m-4):r.bottom+4,left:Math.max(4,Math.min(r.left,window.innerWidth-d-4)),minWidth:d,maxWidth:window.innerWidth-8,zIndex:1070}},se=i__namespace.forwardRef(({className:n,mode:t="date",selected:r,value:m,onChange:p,dateFormat:b,placeholderText:y,size:d,isClearable:D=false,disabled:k=false,minDate:q,maxDate:z,timeIntervals:We=5,timezone:_e="Kampala",id:re,name:N,...ie},$)=>{let oe=e=>{if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if(typeof e=="string"||typeof e=="number"){let a=new Date(e);if(!isNaN(a.getTime()))return a;if(typeof e=="string"){let l=e.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(l){let c=parseInt(l[1],10),h=parseInt(l[2],10),_=l[3].toUpperCase();c===12&&_==="AM"&&(c=0),c!==12&&_==="PM"&&(c+=12);let X=new Date;return new Date(X.getFullYear(),X.getMonth(),X.getDate(),c,h,0,0)}let u=e.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(u){let c=parseInt(u[4],10),h=parseInt(u[5],10),_=u[6].toUpperCase();return c===12&&_==="AM"&&(c=0),c!==12&&_==="PM"&&(c+=12),new Date(parseInt(u[1]),parseInt(u[2])-1,parseInt(u[3]),c,h,0,0)}}return null}return null},o=i__namespace.useMemo(()=>oe(r??m),[r instanceof Date?r.getTime():r,m instanceof Date?m.getTime():m]),Z=t==="date"||t==="datetime",S=t==="time"||t==="datetime",[R,I]=i__namespace.useState(false),[x,K]=i__namespace.useState(()=>o?o.getFullYear():new Date().getFullYear()),[v,J]=i__namespace.useState(()=>o?o.getMonth():new Date().getMonth()),[w,P]=i__namespace.useState(o),[Y,ee]=i__namespace.useState(()=>o&&o.getHours()%12||12),[C,te]=i__namespace.useState(()=>o?o.getMinutes():0),[E,ae]=i__namespace.useState(()=>o&&o.getHours()>=12?"PM":"AM"),[U,T]=i__namespace.useState(false),[j,B]=i__namespace.useState(()=>Math.floor((o?o.getFullYear():new Date().getFullYear())/g)*g),[ce,le]=i__namespace.useState({}),F=i__namespace.useRef(null),H=i__namespace.useRef(null),G=i__namespace.useRef(null);i__namespace.useEffect(()=>{let e=document.createElement("div");return e.className="datepicker-portal-root",document.body.appendChild(e),G.current=e,()=>{e.parentNode&&document.body.removeChild(e),G.current=null;}},[]),i__namespace.useEffect(()=>{o&&!isNaN(o.getTime())?(P(o),K(o.getFullYear()),J(o.getMonth()),ee(o.getHours()%12||12),te(o.getMinutes()),ae(o.getHours()>=12?"PM":"AM"),B(Math.floor(o.getFullYear()/g)*g)):P(null);},[o]),i__namespace.useEffect(()=>{if(!R)return;let e=()=>H.current?H.current.getBoundingClientRect().height:Fe[U?"year":t]||300,a=Oe(F.current),l=()=>{requestAnimationFrame(()=>{le($e(F.current,e()));});};return l(),a.addEventListener("scroll",l,{passive:true}),window.addEventListener("resize",l),()=>{a.removeEventListener("scroll",l),window.removeEventListener("resize",l);}},[R,t,U]),i__namespace.useEffect(()=>{if(!R)return;let e=a=>{H.current&&!H.current.contains(a.target)&&F.current&&!F.current.contains(a.target)&&(I(false),T(false));};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[R]);let A=(e,a,l,u)=>{let c=new Date(e),h=a%12;return u==="PM"&&(h+=12),h===12&&u==="AM"&&(h=0),c.setHours(h,l,0,0),c},W=e=>{if(!e||isNaN(e.getTime()))return;let a=L(e,t,b);p?.(O(a,N,t));},de=e=>{if(!e){p?.(O(null,N,t)),I(false),T(false);return}W(e),t==="date"&&(I(false),T(false));},ue=e=>{if(P(e),t==="date")de(e);else if(t==="datetime"){let a=A(e,Y,C,E);W(a);}},pe=Te(x,v),me=()=>{let e=x,a=v;v===0?(e=x-1,a=11):a=v-1,K(e),J(a);let l=w||new Date,u=V(e,a),c=new Date(e,a,Math.min(l.getDate(),u));P(c),W(S?A(c,Y,C,E):c);},fe=()=>{let e=x,a=v;v===11?(e=x+1,a=0):a=v+1,K(e),J(a);let l=w||new Date,u=V(e,a),c=new Date(e,a,Math.min(l.getDate(),u));P(c),W(S?A(c,Y,C,E):c);},be=new Date,ge=q?new Date(q.getFullYear(),q.getMonth(),q.getDate()):null,ye=z?new Date(z.getFullYear(),z.getMonth(),z.getDate()):null,ve=e=>{if(ee(e),S){let a=A(w||new Date,e,C,E);p?.(O(L(a,t,b),N,t));}},we=e=>{if(te(e),S){let a=A(w||new Date,Y,e,E);p?.(O(L(a,t,b),N,t));}},he=e=>{if(ae(e),S){let a=A(w||new Date,Y,C,e);p?.(O(L(a,t,b),N,t));}},Me=()=>{B(Math.floor(x/g)*g),T(true);},De=e=>{K(e),T(false);let a=w||new Date,l=V(e,v),u=new Date(e,v,Math.min(a.getDate(),l));P(u),W(S?A(u,Y,C,E):u);},Q=Math.floor(j/g)*g,ke=Array.from({length:g},(e,a)=>Q+a),Ne=e=>{e.stopPropagation(),P(null),p?.(O(null,N));},Se=e=>{e.key==="Escape"&&(I(false),T(false),F.current?.blur()),(e.key==="ArrowDown"||e.key==="Enter"||e.key===" ")&&(e.preventDefault(),I(true));},Re=i__namespace.useCallback(e=>{F.current=e,typeof $=="function"?$(e):$&&($.current=e);},[$]),xe=y??(t==="time"?"Select time":t==="datetime"?"Select date & time":"Select date"),Pe=jsxRuntime.jsxs("div",{ref:H,className:chunkQQNPKA7A_cjs.a("datepicker-popover card border shadow-sm",t==="datetime"&&"datepicker-popover--wide"),style:ce,children:[U&&Z&&jsxRuntime.jsxs("div",{className:"datepicker-year-picker p-3",children:[jsxRuntime.jsxs("div",{className:"d-flex align-items-center justify-content-between mb-2",children:[jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:()=>B(j-g),"aria-label":"Previous years",children:"\u2039"}),jsxRuntime.jsxs("span",{className:"fw-semibold small",children:[Q," \u2013 ",Q+g-1]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:()=>B(j+g),"aria-label":"Next years",children:"\u203A"})]}),jsxRuntime.jsx("div",{className:"datepicker-year-grid",children:ke.map(e=>{let a=e===new Date().getFullYear(),l=w&&e===w.getFullYear();return jsxRuntime.jsx("button",{type:"button",className:chunkQQNPKA7A_cjs.a("datepicker-year-cell btn btn-sm",l&&"btn-primary",!l&&a&&"btn-outline-primary",!l&&!a&&"btn-light border"),onClick:()=>De(e),children:e},e)})})]}),!U&&jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsxs("div",{className:chunkQQNPKA7A_cjs.a("d-flex",t==="datetime"?"flex-row":"flex-column"),children:[Z&&jsxRuntime.jsxs("div",{className:"datepicker-calendar p-2",children:[jsxRuntime.jsxs("div",{className:"d-flex align-items-center justify-content-between mb-2",children:[jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:me,"aria-label":"Previous month",children:"\u2039"}),jsxRuntime.jsxs("div",{className:"d-flex align-items-center gap-1",children:[jsxRuntime.jsx("span",{className:"fw-semibold small",children:Ee[v]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-link text-decoration-none text-primary fw-semibold small p-0",onClick:Me,"aria-label":"Choose year",children:x})]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:fe,"aria-label":"Next month",children:"\u203A"})]}),jsxRuntime.jsx("div",{className:"datepicker-days-header",children:Ce.map(e=>jsxRuntime.jsx("div",{className:"datepicker-day-label",children:e},e))}),jsxRuntime.jsx("div",{className:"datepicker-days-grid",children:pe.map((e,a)=>{let l=ne(e.date,be),u=w&&ne(e.date,w),c=Ie(e.date,ge,ye),h=e.isOutside||!c;return jsxRuntime.jsx("button",{type:"button",disabled:h,className:chunkQQNPKA7A_cjs.a("datepicker-day",l&&"datepicker-day--today",u&&"datepicker-day--selected",e.isOutside&&"datepicker-day--outside",!c&&"datepicker-day--disabled"),onClick:()=>ue(e.date),tabIndex:e.isOutside?-1:0,children:e.day},a)})})]}),t==="datetime"&&jsxRuntime.jsx("div",{className:"vr mx-1 my-2"}),S&&jsxRuntime.jsxs("div",{className:"datepicker-time p-2 d-flex flex-column",style:{minWidth:180},children:[t==="datetime"&&jsxRuntime.jsx("div",{className:"small fw-semibold text-muted text-center mb-1",children:"Time"}),jsxRuntime.jsxs("div",{className:"d-flex justify-content-center gap-2",children:[jsxRuntime.jsxs("div",{className:"datepicker-time-col",children:[jsxRuntime.jsx("div",{className:"datepicker-time-col-label",children:"Hour"}),jsxRuntime.jsx("div",{className:"datepicker-time-col-scroll",children:Array.from({length:12},(e,a)=>a+1).map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkQQNPKA7A_cjs.a("datepicker-time-item",e===Y&&"active"),onClick:()=>ve(e),children:String(e).padStart(2,"0")},e))})]}),jsxRuntime.jsx("span",{className:"datepicker-time-separator",children:":"}),jsxRuntime.jsxs("div",{className:"datepicker-time-col",children:[jsxRuntime.jsx("div",{className:"datepicker-time-col-label",children:"Min"}),jsxRuntime.jsx("div",{className:"datepicker-time-col-scroll",children:Ae.map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkQQNPKA7A_cjs.a("datepicker-time-item",e===C&&"active"),onClick:()=>we(e),children:String(e).padStart(2,"0")},e))})]}),jsxRuntime.jsxs("div",{className:"datepicker-time-col",children:[jsxRuntime.jsx("div",{className:"datepicker-time-col-label",children:"\xA0"}),jsxRuntime.jsx("div",{className:"d-flex flex-column gap-1 mt-1",children:["AM","PM"].map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkQQNPKA7A_cjs.a("datepicker-time-item","datepicker-time-item--ampm",E===e&&"active"),onClick:()=>he(e),children:e},e))})]})]})]})]})})]});return jsxRuntime.jsxs("div",{className:"position-relative d-inline-block w-100",style:{minWidth:0},children:[jsxRuntime.jsxs("div",{className:"position-relative",children:[jsxRuntime.jsx("input",{ref:Re,id:re,name:N,type:"text",readOnly:true,disabled:k,className:chunkQQNPKA7A_cjs.a("form-control",d==="sm"&&"form-control-sm",d==="lg"&&"form-control-lg","pe-5",n),placeholder:xe,value:L(o,t,b),onClick:()=>!k&&I(!R),onKeyDown:Se,"aria-haspopup":"dialog","aria-expanded":R,autoComplete:"off",...ie}),D&&o&&!k&&jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-link position-absolute top-50 end-0 translate-middle-y pe-2 text-secondary",style:{zIndex:2},onClick:Ne,tabIndex:-1,"aria-label":"Clear",children:"\xD7"})]}),R&&!k&&G.current&&reactDom.createPortal(Pe,G.current)]})});se.displayName="DatePicker";var qe=se;exports.a=se;exports.b=qe;//# sourceMappingURL=chunk-KZEOI42M.cjs.map
2
- //# sourceMappingURL=chunk-KZEOI42M.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/DatePicker.jsx"],"names":["DAYS_OF_WEEK","MONTHS","MINUTES","_","i","YEARS_PER_PAGE","daysInMonth","year","month","isSameDay","a","b","isDateInRange","date","min","max","buildCalendarGrid","firstDay","totalDays","cells","prevMonthDays","day","remaining","formatValue","mode","fmt","y","M","d","h","m","hh","makeEvent","value","inputName","type","POPOVER_GUESS","getScrollParent","el","parent","style","overflowY","calcPopoverStyle","inputEl","popoverHeight","rect","spaceBelow","spaceAbove","placeAbove","minW","DatePicker","className","selected","onChange","dateFormat","placeholderText","size","isClearable","disabled","minDate","maxDate","timeIntervals","timezone","id","name","props","ref","resolveValue","v","timeMatch","ap","now","dtMatch","resolvedValue","showCalendar","showTime","isOpen","setIsOpen","viewYear","setViewYear","viewMonth","setViewMonth","tempDate","setTempDate","tempHours","setTempHours","tempMins","setTempMins","tempAmPm","setTempAmPm","showYearPicker","setShowYearPicker","yearPage","setYearPage","popoverStyle","setPopoverStyle","inputRef","popoverRef","portalRef","getHeight","scrollParent","update","handler","e","buildDate","base","h12","mins","ampm","fireChange","formatted","commit","commitDateOnly","grid","handlePrevMonth","newY","newM","maxD","newDate","handleNextMonth","today","minDt","maxDt","handleHourChange","handleMinChange","handleAmPmChange","openYearPicker","handleYearSelect","yearPageStart","years","handleClear","handleInputKeyDown","mergeInputRef","node","placeholder","popover","jsxs","cn","jsx","isCurrentYear","isSelected","Fragment","cell","isToday","inRange","isDisabledDay","createPortal","DatePicker_default"],"mappings":"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","file":"chunk-KZEOI42M.cjs","sourcesContent":["import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { cn } from '../lib/cn.js'\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst DAYS_OF_WEEK = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n]\nconst MINUTES = Array.from({ length: 60 }, (_, i) => i)\nconst YEARS_PER_PAGE = 12\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst daysInMonth = (year, month) => new Date(year, month + 1, 0).getDate()\n\nconst isSameDay = (a, b) =>\n a && b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n\nconst isDateInRange = (date, min, max) => {\n if (min && date < new Date(min.getFullYear(), min.getMonth(), min.getDate())) return false\n if (max && date > new Date(max.getFullYear(), max.getMonth(), max.getDate())) return false\n return true\n}\n\nconst buildCalendarGrid = (year, month) => {\n const firstDay = new Date(year, month, 1).getDay()\n const totalDays = daysInMonth(year, month)\n const cells = []\n\n const prevMonthDays = daysInMonth(year, month - 1)\n for (let i = firstDay - 1; i >= 0; i--) {\n const day = prevMonthDays - i\n cells.push({ day, date: new Date(year, month - 1, day), isOutside: true })\n }\n\n for (let d = 1; d <= totalDays; d++) {\n cells.push({ day: d, date: new Date(year, month, d), isOutside: false })\n }\n\n const remaining = 42 - cells.length\n for (let d = 1; d <= remaining; d++) {\n cells.push({ day: d, date: new Date(year, month + 1, d), isOutside: true })\n }\n\n return cells\n}\n\nconst formatValue = (date, mode, fmt) => {\n if (!date || isNaN(date.getTime())) return ''\n\n const y = date.getFullYear()\n const M = String(date.getMonth() + 1).padStart(2, '0')\n const d = String(date.getDate()).padStart(2, '0')\n let h = date.getHours()\n const m = String(date.getMinutes()).padStart(2, '0')\n const a = h >= 12 ? 'PM' : 'AM'\n h = h % 12 || 12\n const hh = String(h).padStart(2, '0')\n\n if (fmt) {\n return fmt.replace('yyyy', y).replace('MM', M).replace('dd', d).replace('hh', hh).replace('mm', m).replace('aa', a)\n }\n\n switch (mode) {\n case 'time': return `${hh}:${m} ${a}`\n case 'datetime': return `${y}-${M}-${d} ${hh}:${m} ${a}`\n default: return `${y}-${M}-${d}`\n }\n}\n\n/**\n * Build a synthetic event object like a native input's onChange.\n * { target: { value, name, type }, preventDefault, stopPropagation }\n */\nconst makeEvent = (value, inputName, type = 'date') => ({\n target: {\n value,\n name: inputName,\n type,\n },\n preventDefault: () => {},\n stopPropagation: () => {},\n nativeEvent: null,\n})\n\n/* ------------------------------------------------------------------ */\n/* Popover positioning */\n/* ------------------------------------------------------------------ */\n\n/** Approximate heights — used as a first guess before the real DOM height is measured. */\nconst POPOVER_GUESS = { date: 300, time: 300, datetime: 400, year: 250 }\n\n/**\n * Find the nearest scrollable ancestor (for capturing scroll events inside\n * modals / side panels / custom containers).\n */\nconst getScrollParent = (el) => {\n if (!el) return document.documentElement\n let parent = el.parentElement\n while (parent) {\n const style = window.getComputedStyle(parent)\n const overflowY = style.overflowY || style.overflow\n if (overflowY === 'auto' || overflowY === 'scroll') return parent\n parent = parent.parentElement\n }\n return document.documentElement\n}\n\nconst calcPopoverStyle = (inputEl, popoverHeight) => {\n if (!inputEl) return {}\n const rect = inputEl.getBoundingClientRect()\n const h = popoverHeight || 300\n\n const spaceBelow = window.innerHeight - rect.bottom\n const spaceAbove = rect.top\n\n /* Only flip above when below is truly too tight AND above offers more room */\n const placeAbove = spaceBelow < h && spaceAbove > spaceBelow\n\n /* Responsive: use smaller min-width on mobile to prevent overflow */\n const minW = Math.max(rect.width, window.innerWidth < 576 ? 220 : 260)\n\n return {\n position: 'fixed',\n top: placeAbove ? Math.max(4, rect.top - h - 4) : rect.bottom + 4,\n left: Math.max(4, Math.min(rect.left, window.innerWidth - minW - 4)),\n minWidth: minW,\n maxWidth: window.innerWidth - 8,\n zIndex: 1070,\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* DatePicker */\n/* ------------------------------------------------------------------ */\n\n/**\n * Custom Bootstrap-styled date / time / datetime picker. Zero dependencies.\n *\n * **Important:** The accompanying CSS **must** be imported for the picker to render correctly:\n * ```js\n * import 'react-bootstrap-plugins/css/datepicker.css'\n * ```\n *\n * @param {'date'|'time'|'datetime'} mode - Picker mode (default 'date')\n * @param {Date|null} value - Currently selected Date (aliases: selected)\n * @param {(e: { target: { value: string|null, name: string, type: string } }) => void} onChange\n * - Synthetic event handler — e.target.value is a pre-formatted string\n * (date → \"YYYY-MM-DD\", time → \"hh:mm AA\", datetime → \"YYYY-MM-DD hh:mm AA\")\n * @param {string} [dateFormat] - Display format (yyyy, MM, dd, hh, mm, aa)\n * @param {string} [placeholderText] - Placeholder when empty\n * @param {'sm'|'lg'} [size] - Bootstrap size variant\n * @param {boolean} [isClearable=false] - Show a clear button on the input\n * @param {boolean} [disabled=false] - Disable the input\n * @param {Date} [minDate] - Earliest selectable date\n * @param {Date} [maxDate] - Latest selectable date\n * @param {number} [timeIntervals=5] - Minute step in the time list\n * @param {string} [timezone='Kampala'] - Timezone identifier for the picker\n * @param {string} [className] - Additional classes on the input\n */\nconst DatePicker = React.forwardRef(({\n className,\n mode = 'date',\n selected,\n value,\n onChange,\n dateFormat,\n placeholderText,\n size,\n isClearable = false,\n disabled = false,\n minDate,\n maxDate,\n timeIntervals = 5,\n timezone = 'Kampala',\n id,\n name,\n ...props\n}, ref) => {\n /* ---- derived ---- */\n const resolveValue = (v) => {\n if (!v) return null\n if (v instanceof Date) return isNaN(v.getTime()) ? null : v\n if (typeof v === 'string' || typeof v === 'number') {\n // Standard Date parsing (works for ISO 8601, \"YYYY-MM-DD\", etc.)\n const d = new Date(v)\n if (!isNaN(d.getTime())) return d\n\n // Handle time-only strings from formatValue: \"hh:mm AA\"\n if (typeof v === 'string') {\n const timeMatch = v.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i)\n if (timeMatch) {\n let h = parseInt(timeMatch[1], 10)\n const m = parseInt(timeMatch[2], 10)\n const ap = timeMatch[3].toUpperCase()\n if (h === 12 && ap === 'AM') h = 0\n if (h !== 12 && ap === 'PM') h += 12\n const now = new Date()\n return new Date(now.getFullYear(), now.getMonth(), now.getDate(), h, m, 0, 0)\n }\n\n // Handle datetime strings from formatValue: \"YYYY-MM-DD hh:mm AA\"\n const dtMatch = v.match(/^(\\d{4})-(\\d{2})-(\\d{2})\\s+(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i)\n if (dtMatch) {\n let h = parseInt(dtMatch[4], 10)\n const m = parseInt(dtMatch[5], 10)\n const ap = dtMatch[6].toUpperCase()\n if (h === 12 && ap === 'AM') h = 0\n if (h !== 12 && ap === 'PM') h += 12\n return new Date(parseInt(dtMatch[1]), parseInt(dtMatch[2]) - 1, parseInt(dtMatch[3]), h, m, 0, 0)\n }\n }\n return null\n }\n return null\n }\n const resolvedValue = React.useMemo(\n () => resolveValue(selected ?? value),\n [\n selected instanceof Date ? selected.getTime() : selected,\n value instanceof Date ? value.getTime() : value,\n ],\n )\n const showCalendar = mode === 'date' || mode === 'datetime'\n const showTime = mode === 'time' || mode === 'datetime'\n\n /* ---- internal state ---- */\n const [isOpen, setIsOpen] = React.useState(false)\n const [viewYear, setViewYear] = React.useState(() =>\n resolvedValue ? resolvedValue.getFullYear() : new Date().getFullYear())\n const [viewMonth, setViewMonth] = React.useState(() =>\n resolvedValue ? resolvedValue.getMonth() : new Date().getMonth())\n const [tempDate, setTempDate] = React.useState(resolvedValue)\n const [tempHours, setTempHours] = React.useState(() =>\n resolvedValue ? (resolvedValue.getHours() % 12 || 12) : 12)\n const [tempMins, setTempMins] = React.useState(() =>\n resolvedValue ? resolvedValue.getMinutes() : 0)\n const [tempAmPm, setTempAmPm] = React.useState(() =>\n resolvedValue ? (resolvedValue.getHours() >= 12 ? 'PM' : 'AM') : 'AM')\n const [showYearPicker, setShowYearPicker] = React.useState(false)\n const [yearPage, setYearPage] = React.useState(() =>\n Math.floor((resolvedValue ? resolvedValue.getFullYear() : new Date().getFullYear()) / YEARS_PER_PAGE) * YEARS_PER_PAGE\n )\n const [popoverStyle, setPopoverStyle] = React.useState({})\n\n const inputRef = React.useRef(null)\n const popoverRef = React.useRef(null)\n const portalRef = React.useRef(null)\n\n /* ---- portal container ---- */\n React.useEffect(() => {\n const el = document.createElement('div')\n el.className = 'datepicker-portal-root'\n document.body.appendChild(el)\n portalRef.current = el\n return () => {\n if (el.parentNode) document.body.removeChild(el)\n portalRef.current = null\n }\n }, [])\n\n /* ---- sync temp state when value changes externally ---- */\n React.useEffect(() => {\n if (resolvedValue && !isNaN(resolvedValue.getTime())) {\n setTempDate(resolvedValue)\n setViewYear(resolvedValue.getFullYear())\n setViewMonth(resolvedValue.getMonth())\n setTempHours(resolvedValue.getHours() % 12 || 12)\n setTempMins(resolvedValue.getMinutes())\n setTempAmPm(resolvedValue.getHours() >= 12 ? 'PM' : 'AM')\n setYearPage(Math.floor(resolvedValue.getFullYear() / YEARS_PER_PAGE) * YEARS_PER_PAGE)\n } else {\n setTempDate(null)\n }\n }, [resolvedValue])\n\n /* ---- reposition popover on open / scroll / resize ---- */\n React.useEffect(() => {\n if (!isOpen) return\n\n /* Measure actual popover height so we position with no wasted space */\n const getHeight = () => {\n if (popoverRef.current) {\n return popoverRef.current.getBoundingClientRect().height\n }\n return POPOVER_GUESS[showYearPicker ? 'year' : mode] || 300\n }\n\n const scrollParent = getScrollParent(inputRef.current)\n\n const update = () => {\n /* Force a paint frame so the popover has its real size */\n requestAnimationFrame(() => {\n setPopoverStyle(calcPopoverStyle(inputRef.current, getHeight()))\n })\n }\n update()\n\n /* Listen on the nearest scrollable ancestor (e.g. modal body) AND the window */\n scrollParent.addEventListener('scroll', update, { passive: true })\n window.addEventListener('resize', update)\n return () => {\n scrollParent.removeEventListener('scroll', update)\n window.removeEventListener('resize', update)\n }\n }, [isOpen, mode, showYearPicker])\n\n /* ---- click outside to close ---- */\n React.useEffect(() => {\n if (!isOpen) return\n const handler = (e) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target) &&\n inputRef.current && !inputRef.current.contains(e.target)) {\n setIsOpen(false)\n setShowYearPicker(false)\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [isOpen])\n\n /* ---- commit helpers ---- */\n const buildDate = (base, h12, mins, ampm) => {\n const d = new Date(base)\n let h = h12 % 12\n if (ampm === 'PM') h += 12\n if (h === 12 && ampm === 'AM') h = 0\n d.setHours(h, mins, 0, 0)\n return d\n }\n\n /**\n * Fire onChange with a pre-built date without closing the popover.\n * Callers must build the complete date (including time) before passing it in.\n */\n const fireChange = (date) => {\n if (!date || isNaN(date.getTime())) return\n const formatted = formatValue(date, mode, dateFormat)\n onChange?.(makeEvent(formatted, name, mode))\n }\n\n const commit = (date) => {\n if (!date) {\n onChange?.(makeEvent(null, name, mode))\n setIsOpen(false)\n setShowYearPicker(false)\n return\n }\n fireChange(date)\n if (mode === 'date') { setIsOpen(false); setShowYearPicker(false) }\n }\n\n const commitDateOnly = (date) => {\n setTempDate(date)\n if (mode === 'date') {\n commit(date)\n } else if (mode === 'datetime') {\n // Build full datetime (date + current time selection) and fire\n const d = buildDate(date, tempHours, tempMins, tempAmPm)\n fireChange(d)\n }\n }\n\n /* ---- calendar grid ---- */\n const grid = buildCalendarGrid(viewYear, viewMonth)\n\n const handlePrevMonth = () => {\n let newY = viewYear, newM = viewMonth\n if (viewMonth === 0) { newY = viewYear - 1; newM = 11 }\n else newM = viewMonth - 1\n setViewYear(newY); setViewMonth(newM)\n const base = tempDate || new Date()\n const maxD = daysInMonth(newY, newM)\n const newDate = new Date(newY, newM, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n const handleNextMonth = () => {\n let newY = viewYear, newM = viewMonth\n if (viewMonth === 11) { newY = viewYear + 1; newM = 0 }\n else newM = viewMonth + 1\n setViewYear(newY); setViewMonth(newM)\n const base = tempDate || new Date()\n const maxD = daysInMonth(newY, newM)\n const newDate = new Date(newY, newM, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n\n const today = new Date()\n const minDt = minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()) : null\n const maxDt = maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()) : null\n\n /* ---- time change handlers ---- */\n const handleHourChange = (h) => {\n setTempHours(h)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), h, tempMins, tempAmPm)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n const handleMinChange = (m) => {\n setTempMins(m)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), tempHours, m, tempAmPm)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n const handleAmPmChange = (ap) => {\n setTempAmPm(ap)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), tempHours, tempMins, ap)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n\n /* ---- year picker ---- */\n const openYearPicker = () => {\n setYearPage(Math.floor(viewYear / YEARS_PER_PAGE) * YEARS_PER_PAGE)\n setShowYearPicker(true)\n }\n\n const handleYearSelect = (y) => {\n setViewYear(y)\n setShowYearPicker(false)\n const base = tempDate || new Date()\n const maxD = daysInMonth(y, viewMonth)\n const newDate = new Date(y, viewMonth, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n\n const yearPageStart = Math.floor(yearPage / YEARS_PER_PAGE) * YEARS_PER_PAGE\n const years = Array.from({ length: YEARS_PER_PAGE }, (_, i) => yearPageStart + i)\n\n /* ---- clear ---- */\n const handleClear = (e) => {\n e.stopPropagation()\n setTempDate(null)\n onChange?.(makeEvent(null, name))\n }\n\n /* ---- keyboard ---- */\n const handleInputKeyDown = (e) => {\n if (e.key === 'Escape') { setIsOpen(false); setShowYearPicker(false); inputRef.current?.blur() }\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setIsOpen(true)\n }\n }\n\n /* ---- merged ref ---- */\n const mergeInputRef = React.useCallback((node) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }, [ref])\n\n /* ---- render ---- */\n const placeholder = placeholderText\n ?? (mode === 'time' ? 'Select time' : mode === 'datetime' ? 'Select date & time' : 'Select date')\n\n const popover = (\n <div\n ref={popoverRef}\n className={cn(\n 'datepicker-popover card border shadow-sm',\n mode === 'datetime' && 'datepicker-popover--wide'\n )}\n style={popoverStyle}\n >\n {/* ============== YEAR PICKER ============== */}\n {showYearPicker && showCalendar && (\n <div className=\"datepicker-year-picker p-3\">\n <div className=\"d-flex align-items-center justify-content-between mb-2\">\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={() => setYearPage(yearPage - YEARS_PER_PAGE)} aria-label=\"Previous years\">&lsaquo;</button>\n <span className=\"fw-semibold small\">{yearPageStart} – {yearPageStart + YEARS_PER_PAGE - 1}</span>\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={() => setYearPage(yearPage + YEARS_PER_PAGE)} aria-label=\"Next years\">&rsaquo;</button>\n </div>\n <div className=\"datepicker-year-grid\">\n {years.map((y) => {\n const isCurrentYear = y === new Date().getFullYear()\n const isSelected = tempDate && y === tempDate.getFullYear()\n return (\n <button\n key={y}\n type=\"button\"\n className={cn(\n 'datepicker-year-cell btn btn-sm',\n isSelected && 'btn-primary',\n !isSelected && isCurrentYear && 'btn-outline-primary',\n !isSelected && !isCurrentYear && 'btn-light border'\n )}\n onClick={() => handleYearSelect(y)}\n >\n {y}\n </button>\n )\n })}\n </div>\n </div>\n )}\n\n {/* ============== CALENDAR + TIME ============== */}\n {!showYearPicker && (\n <>\n\n {/* ---- CALENDAR + TIME CONTAINER ---- */}\n <div className={cn('d-flex', mode === 'datetime' ? 'flex-row' : 'flex-column')}>\n\n {/* ---- CALENDAR ---- */}\n {showCalendar && (\n <div className=\"datepicker-calendar p-2\">\n {/* Month / Year header */}\n <div className=\"d-flex align-items-center justify-content-between mb-2\">\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={handlePrevMonth} aria-label=\"Previous month\">&lsaquo;</button>\n <div className=\"d-flex align-items-center gap-1\">\n <span className=\"fw-semibold small\">{MONTHS[viewMonth]}</span>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-link text-decoration-none text-primary fw-semibold small p-0\"\n onClick={openYearPicker}\n aria-label=\"Choose year\"\n >{viewYear}</button>\n </div>\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={handleNextMonth} aria-label=\"Next month\">&rsaquo;</button>\n </div>\n\n {/* Day-of-week headers */}\n <div className=\"datepicker-days-header\">\n {DAYS_OF_WEEK.map(d => (\n <div key={d} className=\"datepicker-day-label\">{d}</div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"datepicker-days-grid\">\n {grid.map((cell, i) => {\n const isToday = isSameDay(cell.date, today)\n const isSelected = tempDate && isSameDay(cell.date, tempDate)\n const inRange = isDateInRange(cell.date, minDt, maxDt)\n const isDisabledDay = cell.isOutside || !inRange\n\n return (\n <button\n key={i}\n type=\"button\"\n disabled={isDisabledDay}\n className={cn(\n 'datepicker-day',\n isToday && 'datepicker-day--today',\n isSelected && 'datepicker-day--selected',\n cell.isOutside && 'datepicker-day--outside',\n !inRange && 'datepicker-day--disabled'\n )}\n onClick={() => commitDateOnly(cell.date)}\n tabIndex={cell.isOutside ? -1 : 0}\n >\n {cell.day}\n </button>\n )\n })}\n </div>\n </div>\n )}\n\n {/* ---- DIVIDER (datetime mode) ---- */}\n {mode === 'datetime' && <div className=\"vr mx-1 my-2\" />}\n\n {/* ---- TIME ---- */}\n {showTime && (\n <div className=\"datepicker-time p-2 d-flex flex-column\" style={{ minWidth: 180 }}>\n {mode === 'datetime' && <div className=\"small fw-semibold text-muted text-center mb-1\">Time</div>}\n <div className=\"d-flex justify-content-center gap-2\">\n {/* Hour column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">Hour</div>\n <div className=\"datepicker-time-col-scroll\">\n {Array.from({ length: 12 }, (_, i) => i + 1).map(h => (\n <button\n key={h}\n type=\"button\"\n className={cn('datepicker-time-item', h === tempHours && 'active')}\n onClick={() => handleHourChange(h)}\n >\n {String(h).padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n <span className=\"datepicker-time-separator\">:</span>\n {/* Minute column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">Min</div>\n <div className=\"datepicker-time-col-scroll\">\n {MINUTES.map(m => (\n <button\n key={m}\n type=\"button\"\n className={cn('datepicker-time-item', m === tempMins && 'active')}\n onClick={() => handleMinChange(m)}\n >\n {String(m).padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n {/* AM/PM column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">&nbsp;</div>\n <div className=\"d-flex flex-column gap-1 mt-1\">\n {['AM', 'PM'].map(ap => (\n <button\n key={ap}\n type=\"button\"\n className={cn('datepicker-time-item', 'datepicker-time-item--ampm', tempAmPm === ap && 'active')}\n onClick={() => handleAmPmChange(ap)}\n >\n {ap}\n </button>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n )}\n </div>\n )\n\n return (\n <div className=\"position-relative d-inline-block w-100\" style={{ minWidth: 0 }}>\n {/* ---- Input ---- */}\n <div className=\"position-relative\">\n <input\n ref={mergeInputRef}\n id={id}\n name={name}\n type=\"text\"\n readOnly\n disabled={disabled}\n className={cn(\n 'form-control',\n size === 'sm' && 'form-control-sm',\n size === 'lg' && 'form-control-lg',\n 'pe-5',\n className\n )}\n placeholder={placeholder}\n value={formatValue(resolvedValue, mode, dateFormat)}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleInputKeyDown}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n autoComplete=\"off\"\n {...props}\n />\n {/* clear button */}\n {isClearable && resolvedValue && !disabled && (\n <button\n type=\"button\"\n className=\"btn btn-sm btn-link position-absolute top-50 end-0 translate-middle-y pe-2 text-secondary\"\n style={{ zIndex: 2 }}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear\"\n >\n &times;\n </button>\n )}\n </div>\n\n {/* ---- Portal the popover to document.body ---- */}\n {isOpen && !disabled && portalRef.current && createPortal(popover, portalRef.current)}\n </div>\n )\n})\n\nDatePicker.displayName = 'DatePicker'\n\nexport { DatePicker }\nexport default DatePicker\n"]}
@@ -1,2 +0,0 @@
1
- 'use strict';var chunkQQNPKA7A_cjs=require('./chunk-QQNPKA7A.cjs'),I=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var I__default=/*#__PURE__*/_interopDefault(I);var N=I__default.default.forwardRef(({className:R,options:t=[],labelKey:c="label",valueKey:d="value",placeholder:L="Select...",value:f=null,onChange:m=null,id:p="filterable-select",name:O,disabled:h=false,...k},s)=>{let[C,a]=I.useState(false),[w,l]=I.useState(""),i=I.useRef(null),g=t.length>0&&(typeof t[0]=="string"||typeof t[0]=="number"||typeof t[0]=="boolean"),o=e=>g?String(e):e?.[c]||"",u=e=>g?e:e?.[d]??null,b=t.find(e=>u(e)===f);I.useEffect(()=>{l(b!==void 0?o(b):"");},[f,t,c,d]);let y=t.filter(e=>o(e).toLowerCase().includes(w.toLowerCase()));I.useEffect(()=>{let e=n=>{i.current&&!i.current.contains(n.target)&&a(false);};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let E=e=>{let n=u(e);l(o(e)),a(false),m&&m({target:{value:n,name:O||p}});};return jsxRuntime.jsxs("div",{ref:e=>{i.current=e,typeof s=="function"?s(e):s&&(s.current=e);},className:chunkQQNPKA7A_cjs.a("position-relative ",R),style:{minWidth:0},...k,children:[jsxRuntime.jsx("input",{id:p,type:"text",className:"form-select",placeholder:L,value:w,disabled:h,onChange:e=>{l(e.target.value),a(true);},onFocus:()=>a(true),style:{cursor:"text",borderRadius:"inherit"}}),C&&!h&&jsxRuntime.jsx("ul",{className:"dropdown-menu show w-100 overflow-x-hidden",style:{maxHeight:"200px",marginTop:"2px",zIndex:1050,borderRadius:"0.375rem",boxShadow:"0 0.5rem 1rem rgba(0,0,0,0.15)"},children:y.length>0?y.map((e,n)=>{let T=u(e)??`option-${n}`;return jsxRuntime.jsx("li",{children:jsxRuntime.jsx("button",{type:"button",className:"dropdown-item text-truncate",onClick:()=>E(e),children:o(e)})},T)}):jsxRuntime.jsx("li",{children:jsxRuntime.jsx("span",{className:"dropdown-item disabled text-muted",style:{cursor:"default"},children:"No options found"})})})]})});N.displayName="SearchSelect";var B=N;exports.a=N;exports.b=B;//# sourceMappingURL=chunk-MQRJBL7S.cjs.map
2
- //# sourceMappingURL=chunk-MQRJBL7S.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/SearchSelect.jsx"],"names":["SearchSelect","React","className","options","labelKey","valueKey","placeholder","value","onChange","id","name","disabled","props","ref","isOpen","setIsOpen","useState","searchTerm","setSearchTerm","wrapperRef","useRef","isPrimitiveArray","getLabel","option","getValue","selectedOption","opt","useEffect","filteredOptions","handleClickOutside","event","handleSelect","selectedValue","jsxs","node","cn","jsx","index","key","SearchSelect_default"],"mappings":"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","file":"chunk-MQRJBL7S.cjs","sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { cn } from '../lib/cn.js'\n\n/**\n * A filterable, searchable select dropdown styled with Bootstrap 5.\n * Supports both primitive arrays and object arrays with configurable label/value keys.\n *\n * @param {string} [className] - Additional CSS classes on the wrapper\n * @param {Array<string|number|boolean|object>} [options=[]] - Selectable options (primitives or objects)\n * @param {string} [labelKey='label'] - Key for display text when options are objects\n * @param {string} [valueKey='value'] - Key for the value when options are objects\n * @param {string} [placeholder='Select...'] - Placeholder text\n * @param {any} [value=null] - Currently selected value\n * @param {(e: { target: { value: any, name: string } }) => void} [onChange] - Called with synthetic event; e.target.value is selected value, e.target.name is input name\n * @param {string} [id='filterable-select'] - Input element ID\n * @param {string} [name] - Input name attribute — surfaces as e.target.name in onChange\n * @param {boolean} [disabled=false] - Disable the input\n */\nconst SearchSelect = React.forwardRef(({\n className,\n options = [],\n labelKey = 'label',\n valueKey = 'value',\n placeholder = 'Select...',\n value = null,\n onChange = null,\n id = 'filterable-select',\n name,\n disabled = false,\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n const wrapperRef = useRef(null)\n\n // AUTO-DETECT: primitives vs objects\n const isPrimitiveArray = options.length > 0 &&\n (typeof options[0] === 'string' || typeof options[0] === 'number' || typeof options[0] === 'boolean')\n\n const getLabel = (option) => {\n if (isPrimitiveArray) return String(option)\n return option?.[labelKey] || ''\n }\n\n const getValue = (option) => {\n if (isPrimitiveArray) return option\n return option?.[valueKey] ?? null\n }\n\n const selectedOption = options.find(opt => getValue(opt) === value)\n\n // Sync input when value changes externally\n useEffect(() => {\n if (selectedOption !== undefined) {\n setSearchTerm(getLabel(selectedOption))\n } else {\n setSearchTerm('')\n }\n }, [value, options, labelKey, valueKey])\n\n // Filter options\n const filteredOptions = options.filter(option =>\n getLabel(option).toLowerCase().includes(searchTerm.toLowerCase())\n )\n\n // Click outside to close\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n const handleSelect = (option) => {\n const selectedValue = getValue(option)\n setSearchTerm(getLabel(option))\n setIsOpen(false)\n if (onChange) onChange({ target: { value: selectedValue, name: name || id } })\n }\n\n return (\n <div\n ref={(node) => {\n wrapperRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n // flex-fill lets the wrapper participate in Bootstrap input-group flex layout\n // rounded gives the wrapper a border-radius so the inner input can inherit it\n // correctly when the input-group adjusts border-radius on adjacent items\n className={cn('position-relative ', className)}\n style={{ minWidth: 0 }}\n {...props}\n >\n <input\n id={id}\n type=\"text\"\n className=\"form-select\"\n placeholder={placeholder}\n value={searchTerm}\n disabled={disabled}\n onChange={(e) => {\n setSearchTerm(e.target.value)\n setIsOpen(true)\n }}\n onFocus={() => setIsOpen(true)}\n style={{ cursor: 'text', borderRadius: 'inherit' }}\n />\n\n {isOpen && !disabled && (\n <ul\n className=\"dropdown-menu show w-100 overflow-x-hidden\"\n style={{\n maxHeight: '200px',\n marginTop: '2px',\n zIndex: 1050,\n borderRadius: '0.375rem',\n boxShadow: '0 0.5rem 1rem rgba(0,0,0,0.15)',\n }}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => {\n const key = getValue(option) ?? `option-${index}`\n return (\n <li key={key}>\n <button\n type=\"button\"\n className=\"dropdown-item text-truncate\"\n onClick={() => handleSelect(option)}\n >\n {getLabel(option)}\n </button>\n </li>\n )\n })\n ) : (\n <li>\n <span className=\"dropdown-item disabled text-muted\" style={{ cursor: 'default' }}>\n No options found\n </span>\n </li>\n )}\n </ul>\n )}\n </div>\n )\n})\n\nSearchSelect.displayName = 'SearchSelect'\n\nexport default SearchSelect\nexport { SearchSelect }\n"]}
@@ -1,2 +0,0 @@
1
- import {a}from'./chunk-46AJ2Q5H.js';import*as i from'react';import {createPortal}from'react-dom';import {jsxs,jsx,Fragment}from'react/jsx-runtime';var Ce=["Su","Mo","Tu","We","Th","Fr","Sa"],Ee=["January","February","March","April","May","June","July","August","September","October","November","December"],Ae=Array.from({length:60},(n,t)=>t),g=12,V=(n,t)=>new Date(n,t+1,0).getDate(),ne=(n,t)=>n&&t&&n.getFullYear()===t.getFullYear()&&n.getMonth()===t.getMonth()&&n.getDate()===t.getDate(),Ie=(n,t,r)=>!(t&&n<new Date(t.getFullYear(),t.getMonth(),t.getDate())||r&&n>new Date(r.getFullYear(),r.getMonth(),r.getDate())),Te=(n,t)=>{let r=new Date(n,t,1).getDay(),m=V(n,t),p=[],b=V(n,t-1);for(let d=r-1;d>=0;d--){let D=b-d;p.push({day:D,date:new Date(n,t-1,D),isOutside:true});}for(let d=1;d<=m;d++)p.push({day:d,date:new Date(n,t,d),isOutside:false});let y=42-p.length;for(let d=1;d<=y;d++)p.push({day:d,date:new Date(n,t+1,d),isOutside:true});return p},L=(n,t,r)=>{if(!n||isNaN(n.getTime()))return "";let m=n.getFullYear(),p=String(n.getMonth()+1).padStart(2,"0"),b=String(n.getDate()).padStart(2,"0"),y=n.getHours(),d=String(n.getMinutes()).padStart(2,"0"),D=y>=12?"PM":"AM";y=y%12||12;let k=String(y).padStart(2,"0");if(r)return r.replace("yyyy",m).replace("MM",p).replace("dd",b).replace("hh",k).replace("mm",d).replace("aa",D);switch(t){case "time":return `${k}:${d} ${D}`;case "datetime":return `${m}-${p}-${b} ${k}:${d} ${D}`;default:return `${m}-${p}-${b}`}},O=(n,t,r="date")=>({target:{value:n,name:t,type:r},preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:null}),Fe={date:300,time:300,datetime:400,year:250},Oe=n=>{if(!n)return document.documentElement;let t=n.parentElement;for(;t;){let r=window.getComputedStyle(t),m=r.overflowY||r.overflow;if(m==="auto"||m==="scroll")return t;t=t.parentElement;}return document.documentElement},$e=(n,t)=>{if(!n)return {};let r=n.getBoundingClientRect(),m=t||300,p=window.innerHeight-r.bottom,b=r.top,y=p<m&&b>p,d=Math.max(r.width,window.innerWidth<576?220:260);return {position:"fixed",top:y?Math.max(4,r.top-m-4):r.bottom+4,left:Math.max(4,Math.min(r.left,window.innerWidth-d-4)),minWidth:d,maxWidth:window.innerWidth-8,zIndex:1070}},se=i.forwardRef(({className:n,mode:t="date",selected:r,value:m,onChange:p,dateFormat:b,placeholderText:y,size:d,isClearable:D=false,disabled:k=false,minDate:q,maxDate:z,timeIntervals:We=5,timezone:_e="Kampala",id:re,name:N,...ie},$)=>{let oe=e=>{if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if(typeof e=="string"||typeof e=="number"){let a=new Date(e);if(!isNaN(a.getTime()))return a;if(typeof e=="string"){let l=e.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(l){let c=parseInt(l[1],10),h=parseInt(l[2],10),_=l[3].toUpperCase();c===12&&_==="AM"&&(c=0),c!==12&&_==="PM"&&(c+=12);let X=new Date;return new Date(X.getFullYear(),X.getMonth(),X.getDate(),c,h,0,0)}let u=e.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(u){let c=parseInt(u[4],10),h=parseInt(u[5],10),_=u[6].toUpperCase();return c===12&&_==="AM"&&(c=0),c!==12&&_==="PM"&&(c+=12),new Date(parseInt(u[1]),parseInt(u[2])-1,parseInt(u[3]),c,h,0,0)}}return null}return null},o=i.useMemo(()=>oe(r??m),[r instanceof Date?r.getTime():r,m instanceof Date?m.getTime():m]),Z=t==="date"||t==="datetime",S=t==="time"||t==="datetime",[R,I]=i.useState(false),[x,K]=i.useState(()=>o?o.getFullYear():new Date().getFullYear()),[v,J]=i.useState(()=>o?o.getMonth():new Date().getMonth()),[w,P]=i.useState(o),[Y,ee]=i.useState(()=>o&&o.getHours()%12||12),[C,te]=i.useState(()=>o?o.getMinutes():0),[E,ae]=i.useState(()=>o&&o.getHours()>=12?"PM":"AM"),[U,T]=i.useState(false),[j,B]=i.useState(()=>Math.floor((o?o.getFullYear():new Date().getFullYear())/g)*g),[ce,le]=i.useState({}),F=i.useRef(null),H=i.useRef(null),G=i.useRef(null);i.useEffect(()=>{let e=document.createElement("div");return e.className="datepicker-portal-root",document.body.appendChild(e),G.current=e,()=>{e.parentNode&&document.body.removeChild(e),G.current=null;}},[]),i.useEffect(()=>{o&&!isNaN(o.getTime())?(P(o),K(o.getFullYear()),J(o.getMonth()),ee(o.getHours()%12||12),te(o.getMinutes()),ae(o.getHours()>=12?"PM":"AM"),B(Math.floor(o.getFullYear()/g)*g)):P(null);},[o]),i.useEffect(()=>{if(!R)return;let e=()=>H.current?H.current.getBoundingClientRect().height:Fe[U?"year":t]||300,a=Oe(F.current),l=()=>{requestAnimationFrame(()=>{le($e(F.current,e()));});};return l(),a.addEventListener("scroll",l,{passive:true}),window.addEventListener("resize",l),()=>{a.removeEventListener("scroll",l),window.removeEventListener("resize",l);}},[R,t,U]),i.useEffect(()=>{if(!R)return;let e=a=>{H.current&&!H.current.contains(a.target)&&F.current&&!F.current.contains(a.target)&&(I(false),T(false));};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[R]);let A=(e,a,l,u)=>{let c=new Date(e),h=a%12;return u==="PM"&&(h+=12),h===12&&u==="AM"&&(h=0),c.setHours(h,l,0,0),c},W=e=>{if(!e||isNaN(e.getTime()))return;let a=L(e,t,b);p?.(O(a,N,t));},de=e=>{if(!e){p?.(O(null,N,t)),I(false),T(false);return}W(e),t==="date"&&(I(false),T(false));},ue=e=>{if(P(e),t==="date")de(e);else if(t==="datetime"){let a=A(e,Y,C,E);W(a);}},pe=Te(x,v),me=()=>{let e=x,a=v;v===0?(e=x-1,a=11):a=v-1,K(e),J(a);let l=w||new Date,u=V(e,a),c=new Date(e,a,Math.min(l.getDate(),u));P(c),W(S?A(c,Y,C,E):c);},fe=()=>{let e=x,a=v;v===11?(e=x+1,a=0):a=v+1,K(e),J(a);let l=w||new Date,u=V(e,a),c=new Date(e,a,Math.min(l.getDate(),u));P(c),W(S?A(c,Y,C,E):c);},be=new Date,ge=q?new Date(q.getFullYear(),q.getMonth(),q.getDate()):null,ye=z?new Date(z.getFullYear(),z.getMonth(),z.getDate()):null,ve=e=>{if(ee(e),S){let a=A(w||new Date,e,C,E);p?.(O(L(a,t,b),N,t));}},we=e=>{if(te(e),S){let a=A(w||new Date,Y,e,E);p?.(O(L(a,t,b),N,t));}},he=e=>{if(ae(e),S){let a=A(w||new Date,Y,C,e);p?.(O(L(a,t,b),N,t));}},Me=()=>{B(Math.floor(x/g)*g),T(true);},De=e=>{K(e),T(false);let a=w||new Date,l=V(e,v),u=new Date(e,v,Math.min(a.getDate(),l));P(u),W(S?A(u,Y,C,E):u);},Q=Math.floor(j/g)*g,ke=Array.from({length:g},(e,a)=>Q+a),Ne=e=>{e.stopPropagation(),P(null),p?.(O(null,N));},Se=e=>{e.key==="Escape"&&(I(false),T(false),F.current?.blur()),(e.key==="ArrowDown"||e.key==="Enter"||e.key===" ")&&(e.preventDefault(),I(true));},Re=i.useCallback(e=>{F.current=e,typeof $=="function"?$(e):$&&($.current=e);},[$]),xe=y??(t==="time"?"Select time":t==="datetime"?"Select date & time":"Select date"),Pe=jsxs("div",{ref:H,className:a("datepicker-popover card border shadow-sm",t==="datetime"&&"datepicker-popover--wide"),style:ce,children:[U&&Z&&jsxs("div",{className:"datepicker-year-picker p-3",children:[jsxs("div",{className:"d-flex align-items-center justify-content-between mb-2",children:[jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:()=>B(j-g),"aria-label":"Previous years",children:"\u2039"}),jsxs("span",{className:"fw-semibold small",children:[Q," \u2013 ",Q+g-1]}),jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:()=>B(j+g),"aria-label":"Next years",children:"\u203A"})]}),jsx("div",{className:"datepicker-year-grid",children:ke.map(e=>{let a$1=e===new Date().getFullYear(),l=w&&e===w.getFullYear();return jsx("button",{type:"button",className:a("datepicker-year-cell btn btn-sm",l&&"btn-primary",!l&&a$1&&"btn-outline-primary",!l&&!a$1&&"btn-light border"),onClick:()=>De(e),children:e},e)})})]}),!U&&jsx(Fragment,{children:jsxs("div",{className:a("d-flex",t==="datetime"?"flex-row":"flex-column"),children:[Z&&jsxs("div",{className:"datepicker-calendar p-2",children:[jsxs("div",{className:"d-flex align-items-center justify-content-between mb-2",children:[jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:me,"aria-label":"Previous month",children:"\u2039"}),jsxs("div",{className:"d-flex align-items-center gap-1",children:[jsx("span",{className:"fw-semibold small",children:Ee[v]}),jsx("button",{type:"button",className:"btn btn-sm btn-link text-decoration-none text-primary fw-semibold small p-0",onClick:Me,"aria-label":"Choose year",children:x})]}),jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:fe,"aria-label":"Next month",children:"\u203A"})]}),jsx("div",{className:"datepicker-days-header",children:Ce.map(e=>jsx("div",{className:"datepicker-day-label",children:e},e))}),jsx("div",{className:"datepicker-days-grid",children:pe.map((e,a$1)=>{let l=ne(e.date,be),u=w&&ne(e.date,w),c=Ie(e.date,ge,ye),h=e.isOutside||!c;return jsx("button",{type:"button",disabled:h,className:a("datepicker-day",l&&"datepicker-day--today",u&&"datepicker-day--selected",e.isOutside&&"datepicker-day--outside",!c&&"datepicker-day--disabled"),onClick:()=>ue(e.date),tabIndex:e.isOutside?-1:0,children:e.day},a$1)})})]}),t==="datetime"&&jsx("div",{className:"vr mx-1 my-2"}),S&&jsxs("div",{className:"datepicker-time p-2 d-flex flex-column",style:{minWidth:180},children:[t==="datetime"&&jsx("div",{className:"small fw-semibold text-muted text-center mb-1",children:"Time"}),jsxs("div",{className:"d-flex justify-content-center gap-2",children:[jsxs("div",{className:"datepicker-time-col",children:[jsx("div",{className:"datepicker-time-col-label",children:"Hour"}),jsx("div",{className:"datepicker-time-col-scroll",children:Array.from({length:12},(e,a)=>a+1).map(e=>jsx("button",{type:"button",className:a("datepicker-time-item",e===Y&&"active"),onClick:()=>ve(e),children:String(e).padStart(2,"0")},e))})]}),jsx("span",{className:"datepicker-time-separator",children:":"}),jsxs("div",{className:"datepicker-time-col",children:[jsx("div",{className:"datepicker-time-col-label",children:"Min"}),jsx("div",{className:"datepicker-time-col-scroll",children:Ae.map(e=>jsx("button",{type:"button",className:a("datepicker-time-item",e===C&&"active"),onClick:()=>we(e),children:String(e).padStart(2,"0")},e))})]}),jsxs("div",{className:"datepicker-time-col",children:[jsx("div",{className:"datepicker-time-col-label",children:"\xA0"}),jsx("div",{className:"d-flex flex-column gap-1 mt-1",children:["AM","PM"].map(e=>jsx("button",{type:"button",className:a("datepicker-time-item","datepicker-time-item--ampm",E===e&&"active"),onClick:()=>he(e),children:e},e))})]})]})]})]})})]});return jsxs("div",{className:"position-relative d-inline-block w-100",style:{minWidth:0},children:[jsxs("div",{className:"position-relative",children:[jsx("input",{ref:Re,id:re,name:N,type:"text",readOnly:true,disabled:k,className:a("form-control",d==="sm"&&"form-control-sm",d==="lg"&&"form-control-lg","pe-5",n),placeholder:xe,value:L(o,t,b),onClick:()=>!k&&I(!R),onKeyDown:Se,"aria-haspopup":"dialog","aria-expanded":R,autoComplete:"off",...ie}),D&&o&&!k&&jsx("button",{type:"button",className:"btn btn-sm btn-link position-absolute top-50 end-0 translate-middle-y pe-2 text-secondary",style:{zIndex:2},onClick:Ne,tabIndex:-1,"aria-label":"Clear",children:"\xD7"})]}),R&&!k&&G.current&&createPortal(Pe,G.current)]})});se.displayName="DatePicker";var qe=se;export{se as a,qe as b};//# sourceMappingURL=chunk-MTRPXJ3C.js.map
2
- //# sourceMappingURL=chunk-MTRPXJ3C.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/DatePicker.jsx"],"names":["DAYS_OF_WEEK","MONTHS","MINUTES","_","i","YEARS_PER_PAGE","daysInMonth","year","month","isSameDay","a","b","isDateInRange","date","min","max","buildCalendarGrid","firstDay","totalDays","cells","prevMonthDays","day","remaining","formatValue","mode","fmt","y","M","d","h","m","hh","makeEvent","value","inputName","type","POPOVER_GUESS","getScrollParent","el","parent","style","overflowY","calcPopoverStyle","inputEl","popoverHeight","rect","spaceBelow","spaceAbove","placeAbove","minW","DatePicker","className","selected","onChange","dateFormat","placeholderText","size","isClearable","disabled","minDate","maxDate","timeIntervals","timezone","id","name","props","ref","resolveValue","v","timeMatch","ap","now","dtMatch","resolvedValue","showCalendar","showTime","isOpen","setIsOpen","viewYear","setViewYear","viewMonth","setViewMonth","tempDate","setTempDate","tempHours","setTempHours","tempMins","setTempMins","tempAmPm","setTempAmPm","showYearPicker","setShowYearPicker","yearPage","setYearPage","popoverStyle","setPopoverStyle","inputRef","popoverRef","portalRef","getHeight","scrollParent","update","handler","e","buildDate","base","h12","mins","ampm","fireChange","formatted","commit","commitDateOnly","grid","handlePrevMonth","newY","newM","maxD","newDate","handleNextMonth","today","minDt","maxDt","handleHourChange","handleMinChange","handleAmPmChange","openYearPicker","handleYearSelect","yearPageStart","years","handleClear","handleInputKeyDown","mergeInputRef","node","placeholder","popover","jsxs","cn","jsx","isCurrentYear","isSelected","Fragment","cell","isToday","inRange","isDisabledDay","createPortal","DatePicker_default"],"mappings":"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","file":"chunk-MTRPXJ3C.js","sourcesContent":["import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport { cn } from '../lib/cn.js'\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst DAYS_OF_WEEK = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n]\nconst MINUTES = Array.from({ length: 60 }, (_, i) => i)\nconst YEARS_PER_PAGE = 12\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nconst daysInMonth = (year, month) => new Date(year, month + 1, 0).getDate()\n\nconst isSameDay = (a, b) =>\n a && b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n\nconst isDateInRange = (date, min, max) => {\n if (min && date < new Date(min.getFullYear(), min.getMonth(), min.getDate())) return false\n if (max && date > new Date(max.getFullYear(), max.getMonth(), max.getDate())) return false\n return true\n}\n\nconst buildCalendarGrid = (year, month) => {\n const firstDay = new Date(year, month, 1).getDay()\n const totalDays = daysInMonth(year, month)\n const cells = []\n\n const prevMonthDays = daysInMonth(year, month - 1)\n for (let i = firstDay - 1; i >= 0; i--) {\n const day = prevMonthDays - i\n cells.push({ day, date: new Date(year, month - 1, day), isOutside: true })\n }\n\n for (let d = 1; d <= totalDays; d++) {\n cells.push({ day: d, date: new Date(year, month, d), isOutside: false })\n }\n\n const remaining = 42 - cells.length\n for (let d = 1; d <= remaining; d++) {\n cells.push({ day: d, date: new Date(year, month + 1, d), isOutside: true })\n }\n\n return cells\n}\n\nconst formatValue = (date, mode, fmt) => {\n if (!date || isNaN(date.getTime())) return ''\n\n const y = date.getFullYear()\n const M = String(date.getMonth() + 1).padStart(2, '0')\n const d = String(date.getDate()).padStart(2, '0')\n let h = date.getHours()\n const m = String(date.getMinutes()).padStart(2, '0')\n const a = h >= 12 ? 'PM' : 'AM'\n h = h % 12 || 12\n const hh = String(h).padStart(2, '0')\n\n if (fmt) {\n return fmt.replace('yyyy', y).replace('MM', M).replace('dd', d).replace('hh', hh).replace('mm', m).replace('aa', a)\n }\n\n switch (mode) {\n case 'time': return `${hh}:${m} ${a}`\n case 'datetime': return `${y}-${M}-${d} ${hh}:${m} ${a}`\n default: return `${y}-${M}-${d}`\n }\n}\n\n/**\n * Build a synthetic event object like a native input's onChange.\n * { target: { value, name, type }, preventDefault, stopPropagation }\n */\nconst makeEvent = (value, inputName, type = 'date') => ({\n target: {\n value,\n name: inputName,\n type,\n },\n preventDefault: () => {},\n stopPropagation: () => {},\n nativeEvent: null,\n})\n\n/* ------------------------------------------------------------------ */\n/* Popover positioning */\n/* ------------------------------------------------------------------ */\n\n/** Approximate heights — used as a first guess before the real DOM height is measured. */\nconst POPOVER_GUESS = { date: 300, time: 300, datetime: 400, year: 250 }\n\n/**\n * Find the nearest scrollable ancestor (for capturing scroll events inside\n * modals / side panels / custom containers).\n */\nconst getScrollParent = (el) => {\n if (!el) return document.documentElement\n let parent = el.parentElement\n while (parent) {\n const style = window.getComputedStyle(parent)\n const overflowY = style.overflowY || style.overflow\n if (overflowY === 'auto' || overflowY === 'scroll') return parent\n parent = parent.parentElement\n }\n return document.documentElement\n}\n\nconst calcPopoverStyle = (inputEl, popoverHeight) => {\n if (!inputEl) return {}\n const rect = inputEl.getBoundingClientRect()\n const h = popoverHeight || 300\n\n const spaceBelow = window.innerHeight - rect.bottom\n const spaceAbove = rect.top\n\n /* Only flip above when below is truly too tight AND above offers more room */\n const placeAbove = spaceBelow < h && spaceAbove > spaceBelow\n\n /* Responsive: use smaller min-width on mobile to prevent overflow */\n const minW = Math.max(rect.width, window.innerWidth < 576 ? 220 : 260)\n\n return {\n position: 'fixed',\n top: placeAbove ? Math.max(4, rect.top - h - 4) : rect.bottom + 4,\n left: Math.max(4, Math.min(rect.left, window.innerWidth - minW - 4)),\n minWidth: minW,\n maxWidth: window.innerWidth - 8,\n zIndex: 1070,\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* DatePicker */\n/* ------------------------------------------------------------------ */\n\n/**\n * Custom Bootstrap-styled date / time / datetime picker. Zero dependencies.\n *\n * **Important:** The accompanying CSS **must** be imported for the picker to render correctly:\n * ```js\n * import 'react-bootstrap-plugins/css/datepicker.css'\n * ```\n *\n * @param {'date'|'time'|'datetime'} mode - Picker mode (default 'date')\n * @param {Date|null} value - Currently selected Date (aliases: selected)\n * @param {(e: { target: { value: string|null, name: string, type: string } }) => void} onChange\n * - Synthetic event handler — e.target.value is a pre-formatted string\n * (date → \"YYYY-MM-DD\", time → \"hh:mm AA\", datetime → \"YYYY-MM-DD hh:mm AA\")\n * @param {string} [dateFormat] - Display format (yyyy, MM, dd, hh, mm, aa)\n * @param {string} [placeholderText] - Placeholder when empty\n * @param {'sm'|'lg'} [size] - Bootstrap size variant\n * @param {boolean} [isClearable=false] - Show a clear button on the input\n * @param {boolean} [disabled=false] - Disable the input\n * @param {Date} [minDate] - Earliest selectable date\n * @param {Date} [maxDate] - Latest selectable date\n * @param {number} [timeIntervals=5] - Minute step in the time list\n * @param {string} [timezone='Kampala'] - Timezone identifier for the picker\n * @param {string} [className] - Additional classes on the input\n */\nconst DatePicker = React.forwardRef(({\n className,\n mode = 'date',\n selected,\n value,\n onChange,\n dateFormat,\n placeholderText,\n size,\n isClearable = false,\n disabled = false,\n minDate,\n maxDate,\n timeIntervals = 5,\n timezone = 'Kampala',\n id,\n name,\n ...props\n}, ref) => {\n /* ---- derived ---- */\n const resolveValue = (v) => {\n if (!v) return null\n if (v instanceof Date) return isNaN(v.getTime()) ? null : v\n if (typeof v === 'string' || typeof v === 'number') {\n // Standard Date parsing (works for ISO 8601, \"YYYY-MM-DD\", etc.)\n const d = new Date(v)\n if (!isNaN(d.getTime())) return d\n\n // Handle time-only strings from formatValue: \"hh:mm AA\"\n if (typeof v === 'string') {\n const timeMatch = v.match(/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i)\n if (timeMatch) {\n let h = parseInt(timeMatch[1], 10)\n const m = parseInt(timeMatch[2], 10)\n const ap = timeMatch[3].toUpperCase()\n if (h === 12 && ap === 'AM') h = 0\n if (h !== 12 && ap === 'PM') h += 12\n const now = new Date()\n return new Date(now.getFullYear(), now.getMonth(), now.getDate(), h, m, 0, 0)\n }\n\n // Handle datetime strings from formatValue: \"YYYY-MM-DD hh:mm AA\"\n const dtMatch = v.match(/^(\\d{4})-(\\d{2})-(\\d{2})\\s+(\\d{1,2}):(\\d{2})\\s*(AM|PM)$/i)\n if (dtMatch) {\n let h = parseInt(dtMatch[4], 10)\n const m = parseInt(dtMatch[5], 10)\n const ap = dtMatch[6].toUpperCase()\n if (h === 12 && ap === 'AM') h = 0\n if (h !== 12 && ap === 'PM') h += 12\n return new Date(parseInt(dtMatch[1]), parseInt(dtMatch[2]) - 1, parseInt(dtMatch[3]), h, m, 0, 0)\n }\n }\n return null\n }\n return null\n }\n const resolvedValue = React.useMemo(\n () => resolveValue(selected ?? value),\n [\n selected instanceof Date ? selected.getTime() : selected,\n value instanceof Date ? value.getTime() : value,\n ],\n )\n const showCalendar = mode === 'date' || mode === 'datetime'\n const showTime = mode === 'time' || mode === 'datetime'\n\n /* ---- internal state ---- */\n const [isOpen, setIsOpen] = React.useState(false)\n const [viewYear, setViewYear] = React.useState(() =>\n resolvedValue ? resolvedValue.getFullYear() : new Date().getFullYear())\n const [viewMonth, setViewMonth] = React.useState(() =>\n resolvedValue ? resolvedValue.getMonth() : new Date().getMonth())\n const [tempDate, setTempDate] = React.useState(resolvedValue)\n const [tempHours, setTempHours] = React.useState(() =>\n resolvedValue ? (resolvedValue.getHours() % 12 || 12) : 12)\n const [tempMins, setTempMins] = React.useState(() =>\n resolvedValue ? resolvedValue.getMinutes() : 0)\n const [tempAmPm, setTempAmPm] = React.useState(() =>\n resolvedValue ? (resolvedValue.getHours() >= 12 ? 'PM' : 'AM') : 'AM')\n const [showYearPicker, setShowYearPicker] = React.useState(false)\n const [yearPage, setYearPage] = React.useState(() =>\n Math.floor((resolvedValue ? resolvedValue.getFullYear() : new Date().getFullYear()) / YEARS_PER_PAGE) * YEARS_PER_PAGE\n )\n const [popoverStyle, setPopoverStyle] = React.useState({})\n\n const inputRef = React.useRef(null)\n const popoverRef = React.useRef(null)\n const portalRef = React.useRef(null)\n\n /* ---- portal container ---- */\n React.useEffect(() => {\n const el = document.createElement('div')\n el.className = 'datepicker-portal-root'\n document.body.appendChild(el)\n portalRef.current = el\n return () => {\n if (el.parentNode) document.body.removeChild(el)\n portalRef.current = null\n }\n }, [])\n\n /* ---- sync temp state when value changes externally ---- */\n React.useEffect(() => {\n if (resolvedValue && !isNaN(resolvedValue.getTime())) {\n setTempDate(resolvedValue)\n setViewYear(resolvedValue.getFullYear())\n setViewMonth(resolvedValue.getMonth())\n setTempHours(resolvedValue.getHours() % 12 || 12)\n setTempMins(resolvedValue.getMinutes())\n setTempAmPm(resolvedValue.getHours() >= 12 ? 'PM' : 'AM')\n setYearPage(Math.floor(resolvedValue.getFullYear() / YEARS_PER_PAGE) * YEARS_PER_PAGE)\n } else {\n setTempDate(null)\n }\n }, [resolvedValue])\n\n /* ---- reposition popover on open / scroll / resize ---- */\n React.useEffect(() => {\n if (!isOpen) return\n\n /* Measure actual popover height so we position with no wasted space */\n const getHeight = () => {\n if (popoverRef.current) {\n return popoverRef.current.getBoundingClientRect().height\n }\n return POPOVER_GUESS[showYearPicker ? 'year' : mode] || 300\n }\n\n const scrollParent = getScrollParent(inputRef.current)\n\n const update = () => {\n /* Force a paint frame so the popover has its real size */\n requestAnimationFrame(() => {\n setPopoverStyle(calcPopoverStyle(inputRef.current, getHeight()))\n })\n }\n update()\n\n /* Listen on the nearest scrollable ancestor (e.g. modal body) AND the window */\n scrollParent.addEventListener('scroll', update, { passive: true })\n window.addEventListener('resize', update)\n return () => {\n scrollParent.removeEventListener('scroll', update)\n window.removeEventListener('resize', update)\n }\n }, [isOpen, mode, showYearPicker])\n\n /* ---- click outside to close ---- */\n React.useEffect(() => {\n if (!isOpen) return\n const handler = (e) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target) &&\n inputRef.current && !inputRef.current.contains(e.target)) {\n setIsOpen(false)\n setShowYearPicker(false)\n }\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [isOpen])\n\n /* ---- commit helpers ---- */\n const buildDate = (base, h12, mins, ampm) => {\n const d = new Date(base)\n let h = h12 % 12\n if (ampm === 'PM') h += 12\n if (h === 12 && ampm === 'AM') h = 0\n d.setHours(h, mins, 0, 0)\n return d\n }\n\n /**\n * Fire onChange with a pre-built date without closing the popover.\n * Callers must build the complete date (including time) before passing it in.\n */\n const fireChange = (date) => {\n if (!date || isNaN(date.getTime())) return\n const formatted = formatValue(date, mode, dateFormat)\n onChange?.(makeEvent(formatted, name, mode))\n }\n\n const commit = (date) => {\n if (!date) {\n onChange?.(makeEvent(null, name, mode))\n setIsOpen(false)\n setShowYearPicker(false)\n return\n }\n fireChange(date)\n if (mode === 'date') { setIsOpen(false); setShowYearPicker(false) }\n }\n\n const commitDateOnly = (date) => {\n setTempDate(date)\n if (mode === 'date') {\n commit(date)\n } else if (mode === 'datetime') {\n // Build full datetime (date + current time selection) and fire\n const d = buildDate(date, tempHours, tempMins, tempAmPm)\n fireChange(d)\n }\n }\n\n /* ---- calendar grid ---- */\n const grid = buildCalendarGrid(viewYear, viewMonth)\n\n const handlePrevMonth = () => {\n let newY = viewYear, newM = viewMonth\n if (viewMonth === 0) { newY = viewYear - 1; newM = 11 }\n else newM = viewMonth - 1\n setViewYear(newY); setViewMonth(newM)\n const base = tempDate || new Date()\n const maxD = daysInMonth(newY, newM)\n const newDate = new Date(newY, newM, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n const handleNextMonth = () => {\n let newY = viewYear, newM = viewMonth\n if (viewMonth === 11) { newY = viewYear + 1; newM = 0 }\n else newM = viewMonth + 1\n setViewYear(newY); setViewMonth(newM)\n const base = tempDate || new Date()\n const maxD = daysInMonth(newY, newM)\n const newDate = new Date(newY, newM, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n\n const today = new Date()\n const minDt = minDate ? new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()) : null\n const maxDt = maxDate ? new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()) : null\n\n /* ---- time change handlers ---- */\n const handleHourChange = (h) => {\n setTempHours(h)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), h, tempMins, tempAmPm)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n const handleMinChange = (m) => {\n setTempMins(m)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), tempHours, m, tempAmPm)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n const handleAmPmChange = (ap) => {\n setTempAmPm(ap)\n if (showTime) {\n const d = buildDate(tempDate || new Date(), tempHours, tempMins, ap)\n onChange?.(makeEvent(formatValue(d, mode, dateFormat), name, mode))\n }\n }\n\n /* ---- year picker ---- */\n const openYearPicker = () => {\n setYearPage(Math.floor(viewYear / YEARS_PER_PAGE) * YEARS_PER_PAGE)\n setShowYearPicker(true)\n }\n\n const handleYearSelect = (y) => {\n setViewYear(y)\n setShowYearPicker(false)\n const base = tempDate || new Date()\n const maxD = daysInMonth(y, viewMonth)\n const newDate = new Date(y, viewMonth, Math.min(base.getDate(), maxD))\n setTempDate(newDate)\n fireChange(showTime ? buildDate(newDate, tempHours, tempMins, tempAmPm) : newDate)\n }\n\n const yearPageStart = Math.floor(yearPage / YEARS_PER_PAGE) * YEARS_PER_PAGE\n const years = Array.from({ length: YEARS_PER_PAGE }, (_, i) => yearPageStart + i)\n\n /* ---- clear ---- */\n const handleClear = (e) => {\n e.stopPropagation()\n setTempDate(null)\n onChange?.(makeEvent(null, name))\n }\n\n /* ---- keyboard ---- */\n const handleInputKeyDown = (e) => {\n if (e.key === 'Escape') { setIsOpen(false); setShowYearPicker(false); inputRef.current?.blur() }\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setIsOpen(true)\n }\n }\n\n /* ---- merged ref ---- */\n const mergeInputRef = React.useCallback((node) => {\n inputRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }, [ref])\n\n /* ---- render ---- */\n const placeholder = placeholderText\n ?? (mode === 'time' ? 'Select time' : mode === 'datetime' ? 'Select date & time' : 'Select date')\n\n const popover = (\n <div\n ref={popoverRef}\n className={cn(\n 'datepicker-popover card border shadow-sm',\n mode === 'datetime' && 'datepicker-popover--wide'\n )}\n style={popoverStyle}\n >\n {/* ============== YEAR PICKER ============== */}\n {showYearPicker && showCalendar && (\n <div className=\"datepicker-year-picker p-3\">\n <div className=\"d-flex align-items-center justify-content-between mb-2\">\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={() => setYearPage(yearPage - YEARS_PER_PAGE)} aria-label=\"Previous years\">&lsaquo;</button>\n <span className=\"fw-semibold small\">{yearPageStart} – {yearPageStart + YEARS_PER_PAGE - 1}</span>\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={() => setYearPage(yearPage + YEARS_PER_PAGE)} aria-label=\"Next years\">&rsaquo;</button>\n </div>\n <div className=\"datepicker-year-grid\">\n {years.map((y) => {\n const isCurrentYear = y === new Date().getFullYear()\n const isSelected = tempDate && y === tempDate.getFullYear()\n return (\n <button\n key={y}\n type=\"button\"\n className={cn(\n 'datepicker-year-cell btn btn-sm',\n isSelected && 'btn-primary',\n !isSelected && isCurrentYear && 'btn-outline-primary',\n !isSelected && !isCurrentYear && 'btn-light border'\n )}\n onClick={() => handleYearSelect(y)}\n >\n {y}\n </button>\n )\n })}\n </div>\n </div>\n )}\n\n {/* ============== CALENDAR + TIME ============== */}\n {!showYearPicker && (\n <>\n\n {/* ---- CALENDAR + TIME CONTAINER ---- */}\n <div className={cn('d-flex', mode === 'datetime' ? 'flex-row' : 'flex-column')}>\n\n {/* ---- CALENDAR ---- */}\n {showCalendar && (\n <div className=\"datepicker-calendar p-2\">\n {/* Month / Year header */}\n <div className=\"d-flex align-items-center justify-content-between mb-2\">\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={handlePrevMonth} aria-label=\"Previous month\">&lsaquo;</button>\n <div className=\"d-flex align-items-center gap-1\">\n <span className=\"fw-semibold small\">{MONTHS[viewMonth]}</span>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-link text-decoration-none text-primary fw-semibold small p-0\"\n onClick={openYearPicker}\n aria-label=\"Choose year\"\n >{viewYear}</button>\n </div>\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary border-0 px-1\" onClick={handleNextMonth} aria-label=\"Next month\">&rsaquo;</button>\n </div>\n\n {/* Day-of-week headers */}\n <div className=\"datepicker-days-header\">\n {DAYS_OF_WEEK.map(d => (\n <div key={d} className=\"datepicker-day-label\">{d}</div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"datepicker-days-grid\">\n {grid.map((cell, i) => {\n const isToday = isSameDay(cell.date, today)\n const isSelected = tempDate && isSameDay(cell.date, tempDate)\n const inRange = isDateInRange(cell.date, minDt, maxDt)\n const isDisabledDay = cell.isOutside || !inRange\n\n return (\n <button\n key={i}\n type=\"button\"\n disabled={isDisabledDay}\n className={cn(\n 'datepicker-day',\n isToday && 'datepicker-day--today',\n isSelected && 'datepicker-day--selected',\n cell.isOutside && 'datepicker-day--outside',\n !inRange && 'datepicker-day--disabled'\n )}\n onClick={() => commitDateOnly(cell.date)}\n tabIndex={cell.isOutside ? -1 : 0}\n >\n {cell.day}\n </button>\n )\n })}\n </div>\n </div>\n )}\n\n {/* ---- DIVIDER (datetime mode) ---- */}\n {mode === 'datetime' && <div className=\"vr mx-1 my-2\" />}\n\n {/* ---- TIME ---- */}\n {showTime && (\n <div className=\"datepicker-time p-2 d-flex flex-column\" style={{ minWidth: 180 }}>\n {mode === 'datetime' && <div className=\"small fw-semibold text-muted text-center mb-1\">Time</div>}\n <div className=\"d-flex justify-content-center gap-2\">\n {/* Hour column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">Hour</div>\n <div className=\"datepicker-time-col-scroll\">\n {Array.from({ length: 12 }, (_, i) => i + 1).map(h => (\n <button\n key={h}\n type=\"button\"\n className={cn('datepicker-time-item', h === tempHours && 'active')}\n onClick={() => handleHourChange(h)}\n >\n {String(h).padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n <span className=\"datepicker-time-separator\">:</span>\n {/* Minute column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">Min</div>\n <div className=\"datepicker-time-col-scroll\">\n {MINUTES.map(m => (\n <button\n key={m}\n type=\"button\"\n className={cn('datepicker-time-item', m === tempMins && 'active')}\n onClick={() => handleMinChange(m)}\n >\n {String(m).padStart(2, '0')}\n </button>\n ))}\n </div>\n </div>\n {/* AM/PM column */}\n <div className=\"datepicker-time-col\">\n <div className=\"datepicker-time-col-label\">&nbsp;</div>\n <div className=\"d-flex flex-column gap-1 mt-1\">\n {['AM', 'PM'].map(ap => (\n <button\n key={ap}\n type=\"button\"\n className={cn('datepicker-time-item', 'datepicker-time-item--ampm', tempAmPm === ap && 'active')}\n onClick={() => handleAmPmChange(ap)}\n >\n {ap}\n </button>\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </>\n )}\n </div>\n )\n\n return (\n <div className=\"position-relative d-inline-block w-100\" style={{ minWidth: 0 }}>\n {/* ---- Input ---- */}\n <div className=\"position-relative\">\n <input\n ref={mergeInputRef}\n id={id}\n name={name}\n type=\"text\"\n readOnly\n disabled={disabled}\n className={cn(\n 'form-control',\n size === 'sm' && 'form-control-sm',\n size === 'lg' && 'form-control-lg',\n 'pe-5',\n className\n )}\n placeholder={placeholder}\n value={formatValue(resolvedValue, mode, dateFormat)}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleInputKeyDown}\n aria-haspopup=\"dialog\"\n aria-expanded={isOpen}\n autoComplete=\"off\"\n {...props}\n />\n {/* clear button */}\n {isClearable && resolvedValue && !disabled && (\n <button\n type=\"button\"\n className=\"btn btn-sm btn-link position-absolute top-50 end-0 translate-middle-y pe-2 text-secondary\"\n style={{ zIndex: 2 }}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear\"\n >\n &times;\n </button>\n )}\n </div>\n\n {/* ---- Portal the popover to document.body ---- */}\n {isOpen && !disabled && portalRef.current && createPortal(popover, portalRef.current)}\n </div>\n )\n})\n\nDatePicker.displayName = 'DatePicker'\n\nexport { DatePicker }\nexport default DatePicker\n"]}
@@ -1,2 +0,0 @@
1
- 'use strict';function f(...t){let s=[];for(let e of t)if(e){if(typeof e=="string")s.push(e);else if(Array.isArray(e)){let o=f(...e);o&&s.push(o);}else if(typeof e=="object")for(let[o,n]of Object.entries(e))n&&s.push(o);}return s.join(" ")}exports.a=f;//# sourceMappingURL=chunk-QQNPKA7A.cjs.map
2
- //# sourceMappingURL=chunk-QQNPKA7A.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/cn.js"],"names":["cn","args","classes","arg","nested","key","value"],"mappings":"aAeO,SAASA,CAAAA,CAAAA,GAAMC,CAAAA,CAAM,CAC1B,IAAMC,CAAAA,CAAU,EAAC,CAEjB,IAAA,IAAWC,CAAAA,IAAOF,CAAAA,CAChB,GAAKE,CAAAA,CAAAA,CAEL,GAAI,OAAOA,CAAAA,EAAQ,QAAA,CACjBD,CAAAA,CAAQ,IAAA,CAAKC,CAAG,CAAA,CAAA,KAAA,GACP,KAAA,CAAM,OAAA,CAAQA,CAAG,CAAA,CAAG,CAC7B,IAAMC,CAAAA,CAASJ,CAAAA,CAAG,GAAGG,CAAG,CAAA,CACpBC,CAAAA,EAAQF,CAAAA,CAAQ,IAAA,CAAKE,CAAM,EACjC,CAAA,KAAA,GAAW,OAAOD,CAAAA,EAAQ,QAAA,CACxB,IAAA,GAAW,CAACE,CAAAA,CAAKC,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,CAAG,CAAA,CACvCG,CAAAA,EAAOJ,CAAAA,CAAQ,IAAA,CAAKG,CAAG,EAAA,CAKjC,OAAOH,CAAAA,CAAQ,IAAA,CAAK,GAAG,CACzB","file":"chunk-QQNPKA7A.cjs","sourcesContent":["/**\n * Utility for conditionally joining CSS class names together.\n * Filters out falsy values and joins with space.\n *\n * @param {...any} args - Class name strings, objects, or arrays\n * @returns {string} Joined class string\n *\n * @example\n * cn('btn', isActive && 'btn-primary', 'px-3')\n * // => 'btn btn-primary px-3'\n *\n * @example\n * cn('base-class', { 'active': isActive, 'disabled': isDisabled })\n * // => 'base-class active' (when isActive=true, isDisabled=false)\n */\nexport function cn(...args) {\n const classes = []\n\n for (const arg of args) {\n if (!arg) continue\n\n if (typeof arg === 'string') {\n classes.push(arg)\n } else if (Array.isArray(arg)) {\n const nested = cn(...arg)\n if (nested) classes.push(nested)\n } else if (typeof arg === 'object') {\n for (const [key, value] of Object.entries(arg)) {\n if (value) classes.push(key)\n }\n }\n }\n\n return classes.join(' ')\n}\n"]}
@@ -1,2 +0,0 @@
1
- import*as e from'react';import {jsxs,jsx}from'react/jsx-runtime';var a=e.forwardRef(({className:l,hf:t="default",required:r=true,label:o="Title"},b)=>jsxs("label",{htmlFor:t,className:l,ref:b,children:[o,r?jsx("b",{className:"text-danger",children:"*"}):""]}));a.displayName="Label";var d=a;export{a,d as b};//# sourceMappingURL=chunk-W6UBCMKG.js.map
2
- //# sourceMappingURL=chunk-W6UBCMKG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Label.jsx"],"names":["Label","className","hf","required","label","ref","jsxs","jsx","Label_default"],"mappings":"iEAUA,IAAMA,CAAAA,CAAc,CAAA,CAAA,UAAA,CAAW,CAAC,CAAE,SAAA,CAAAC,CAAAA,CAAW,EAAA,CAAAC,CAAAA,CAAK,SAAA,CAAW,SAAAC,CAAAA,CAAW,IAAA,CAAM,KAAA,CAAAC,CAAAA,CAAQ,OAAQ,CAAA,CAAGC,IAE7FC,IAAAA,CAAC,OAAA,CAAA,CAAM,QAASJ,CAAAA,CAAI,SAAA,CAAWD,EAAW,GAAA,CAAKI,CAAAA,CAC5C,QAAA,CAAA,CAAAD,CAAAA,CAAOD,CAAAA,CAAWI,GAAAA,CAAC,KAAE,SAAA,CAAU,aAAA,CAAc,QAAA,CAAA,GAAA,CAAC,CAAA,CAAO,EAAA,CAAA,CACxD,CAEH,EAEDP,CAAAA,CAAM,WAAA,CAAc,OAAA,CAGpB,IAAOQ,CAAAA,CAAQR","file":"chunk-W6UBCMKG.js","sourcesContent":["import * as React from 'react'\n\n/**\n * A simple Bootstrap-styled form label with an optional required indicator.\n *\n * @param {string} [className] - Additional CSS classes\n * @param {string} [hf='default'] - htmlFor attribute (associates label with input ID)\n * @param {boolean} [required=true] - Whether to show the required asterisk\n * @param {string} [label='Title'] - Label text content\n */\nconst Label = React.forwardRef(({ className, hf = 'default', required = true, label = 'Title' }, ref) => {\n return (\n <label htmlFor={hf} className={className} ref={ref}>\n {label}{required ? <b className=\"text-danger\">*</b> : ''}\n </label>\n )\n})\n\nLabel.displayName = 'Label'\n\nexport { Label }\nexport default Label\n"]}
@@ -1,2 +0,0 @@
1
- import'react';import {jsx,Fragment}from'react/jsx-runtime';var e=({rows:l=5,columns:o=4})=>jsx(Fragment,{children:Array.from({length:l},(p,r)=>jsx("tr",{children:Array.from({length:o},(s,t)=>jsx("td",{className:"placeholder-glow",children:jsx("span",{className:"placeholder rounded py-2 col-12",style:{height:14,display:"block"}})},t))},r))});e.displayName="TableLoading";var c=e;export{e as a,c as b};//# sourceMappingURL=chunk-WPTHY5AJ.js.map
2
- //# sourceMappingURL=chunk-WPTHY5AJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/TableLoading.jsx"],"names":["TableLoading","rows","columns","jsx","Fragment","_","c","TableLoading_default"],"mappings":"2DAsBA,IAAMA,CAAAA,CAAe,CAAC,CAAE,IAAA,CAAAC,CAAAA,CAAO,CAAA,CAAG,QAAAC,CAAAA,CAAU,CAAE,CAAA,GAC5CC,GAAAA,CAAAC,QAAAA,CAAA,CACG,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQH,CAAK,CAAA,CAAG,CAACI,CAAAA,CAAG,CAAA,GAChCF,GAAAA,CAAC,IAAA,CAAA,CACE,eAAM,IAAA,CAAK,CAAE,MAAA,CAAQD,CAAQ,CAAA,CAAG,CAACG,CAAAA,CAAGC,CAAAA,GACnCH,IAAC,IAAA,CAAA,CAAW,SAAA,CAAU,kBAAA,CACpB,QAAA,CAAAA,GAAAA,CAAC,MAAA,CAAA,CACC,SAAA,CAAU,iCAAA,CACV,MAAO,CAAE,MAAA,CAAQ,EAAA,CAAI,OAAA,CAAS,OAAQ,CAAA,CACxC,CAAA,CAAA,CAJOG,CAKT,CACD,CAAA,CAAA,CARM,CAST,CACD,CAAA,CACH,EAGFN,CAAAA,CAAa,WAAA,CAAc,cAAA,KAGpBO,CAAAA,CAAQP","file":"chunk-WPTHY5AJ.js","sourcesContent":["import * as React from 'react'\n\n/**\n * Bootstrap 5 placeholder loading rows for table `<tbody>` elements.\n * Renders a grid of shimmer placeholders matching the table column count.\n *\n * @param {number} [rows=5] - Number of placeholder rows to render\n * @param {number} [columns=4] - Number of placeholder columns per row\n *\n * @example\n * // Inside a table\n * <table className=\"table\">\n * <thead><tr><th>Name</th><th>Class</th><th>Status</th></tr></thead>\n * <tbody>\n * {loading ? (\n * <TableLoading rows={8} columns={3} />\n * ) : (\n * data.map(row => <tr key={row.id}>...</tr>)\n * )}\n * </tbody>\n * </table>\n */\nconst TableLoading = ({ rows = 5, columns = 4 }) => (\n <>\n {Array.from({ length: rows }, (_, r) => (\n <tr key={r}>\n {Array.from({ length: columns }, (_, c) => (\n <td key={c} className=\"placeholder-glow\">\n <span\n className=\"placeholder rounded py-2 col-12\"\n style={{ height: 14, display: 'block' }}\n />\n </td>\n ))}\n </tr>\n ))}\n </>\n)\n\nTableLoading.displayName = 'TableLoading'\n\nexport { TableLoading }\nexport default TableLoading\n"]}
@@ -1,2 +0,0 @@
1
- import {a}from'./chunk-46AJ2Q5H.js';import I,{useState,useRef,useEffect}from'react';import {jsxs,jsx}from'react/jsx-runtime';var N=I.forwardRef(({className:R,options:t=[],labelKey:c="label",valueKey:d="value",placeholder:L="Select...",value:f=null,onChange:m=null,id:p="filterable-select",name:O,disabled:h=false,...k},s)=>{let[C,a$1]=useState(false),[w,l]=useState(""),i=useRef(null),g=t.length>0&&(typeof t[0]=="string"||typeof t[0]=="number"||typeof t[0]=="boolean"),o=e=>g?String(e):e?.[c]||"",u=e=>g?e:e?.[d]??null,b=t.find(e=>u(e)===f);useEffect(()=>{l(b!==void 0?o(b):"");},[f,t,c,d]);let y=t.filter(e=>o(e).toLowerCase().includes(w.toLowerCase()));useEffect(()=>{let e=n=>{i.current&&!i.current.contains(n.target)&&a$1(false);};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[]);let E=e=>{let n=u(e);l(o(e)),a$1(false),m&&m({target:{value:n,name:O||p}});};return jsxs("div",{ref:e=>{i.current=e,typeof s=="function"?s(e):s&&(s.current=e);},className:a("position-relative ",R),style:{minWidth:0},...k,children:[jsx("input",{id:p,type:"text",className:"form-select",placeholder:L,value:w,disabled:h,onChange:e=>{l(e.target.value),a$1(true);},onFocus:()=>a$1(true),style:{cursor:"text",borderRadius:"inherit"}}),C&&!h&&jsx("ul",{className:"dropdown-menu show w-100 overflow-x-hidden",style:{maxHeight:"200px",marginTop:"2px",zIndex:1050,borderRadius:"0.375rem",boxShadow:"0 0.5rem 1rem rgba(0,0,0,0.15)"},children:y.length>0?y.map((e,n)=>{let T=u(e)??`option-${n}`;return jsx("li",{children:jsx("button",{type:"button",className:"dropdown-item text-truncate",onClick:()=>E(e),children:o(e)})},T)}):jsx("li",{children:jsx("span",{className:"dropdown-item disabled text-muted",style:{cursor:"default"},children:"No options found"})})})]})});N.displayName="SearchSelect";var B=N;export{N as a,B as b};//# sourceMappingURL=chunk-XFHLZ7I3.js.map
2
- //# sourceMappingURL=chunk-XFHLZ7I3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/SearchSelect.jsx"],"names":["SearchSelect","React","className","options","labelKey","valueKey","placeholder","value","onChange","id","name","disabled","props","ref","isOpen","setIsOpen","useState","searchTerm","setSearchTerm","wrapperRef","useRef","isPrimitiveArray","getLabel","option","getValue","selectedOption","opt","useEffect","filteredOptions","handleClickOutside","event","handleSelect","selectedValue","jsxs","node","cn","jsx","index","key","SearchSelect_default"],"mappings":"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","file":"chunk-XFHLZ7I3.js","sourcesContent":["import React, { useState, useRef, useEffect } from 'react'\nimport { cn } from '../lib/cn.js'\n\n/**\n * A filterable, searchable select dropdown styled with Bootstrap 5.\n * Supports both primitive arrays and object arrays with configurable label/value keys.\n *\n * @param {string} [className] - Additional CSS classes on the wrapper\n * @param {Array<string|number|boolean|object>} [options=[]] - Selectable options (primitives or objects)\n * @param {string} [labelKey='label'] - Key for display text when options are objects\n * @param {string} [valueKey='value'] - Key for the value when options are objects\n * @param {string} [placeholder='Select...'] - Placeholder text\n * @param {any} [value=null] - Currently selected value\n * @param {(e: { target: { value: any, name: string } }) => void} [onChange] - Called with synthetic event; e.target.value is selected value, e.target.name is input name\n * @param {string} [id='filterable-select'] - Input element ID\n * @param {string} [name] - Input name attribute — surfaces as e.target.name in onChange\n * @param {boolean} [disabled=false] - Disable the input\n */\nconst SearchSelect = React.forwardRef(({\n className,\n options = [],\n labelKey = 'label',\n valueKey = 'value',\n placeholder = 'Select...',\n value = null,\n onChange = null,\n id = 'filterable-select',\n name,\n disabled = false,\n ...props\n}, ref) => {\n const [isOpen, setIsOpen] = useState(false)\n const [searchTerm, setSearchTerm] = useState('')\n const wrapperRef = useRef(null)\n\n // AUTO-DETECT: primitives vs objects\n const isPrimitiveArray = options.length > 0 &&\n (typeof options[0] === 'string' || typeof options[0] === 'number' || typeof options[0] === 'boolean')\n\n const getLabel = (option) => {\n if (isPrimitiveArray) return String(option)\n return option?.[labelKey] || ''\n }\n\n const getValue = (option) => {\n if (isPrimitiveArray) return option\n return option?.[valueKey] ?? null\n }\n\n const selectedOption = options.find(opt => getValue(opt) === value)\n\n // Sync input when value changes externally\n useEffect(() => {\n if (selectedOption !== undefined) {\n setSearchTerm(getLabel(selectedOption))\n } else {\n setSearchTerm('')\n }\n }, [value, options, labelKey, valueKey])\n\n // Filter options\n const filteredOptions = options.filter(option =>\n getLabel(option).toLowerCase().includes(searchTerm.toLowerCase())\n )\n\n // Click outside to close\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n const handleSelect = (option) => {\n const selectedValue = getValue(option)\n setSearchTerm(getLabel(option))\n setIsOpen(false)\n if (onChange) onChange({ target: { value: selectedValue, name: name || id } })\n }\n\n return (\n <div\n ref={(node) => {\n wrapperRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n // flex-fill lets the wrapper participate in Bootstrap input-group flex layout\n // rounded gives the wrapper a border-radius so the inner input can inherit it\n // correctly when the input-group adjusts border-radius on adjacent items\n className={cn('position-relative ', className)}\n style={{ minWidth: 0 }}\n {...props}\n >\n <input\n id={id}\n type=\"text\"\n className=\"form-select\"\n placeholder={placeholder}\n value={searchTerm}\n disabled={disabled}\n onChange={(e) => {\n setSearchTerm(e.target.value)\n setIsOpen(true)\n }}\n onFocus={() => setIsOpen(true)}\n style={{ cursor: 'text', borderRadius: 'inherit' }}\n />\n\n {isOpen && !disabled && (\n <ul\n className=\"dropdown-menu show w-100 overflow-x-hidden\"\n style={{\n maxHeight: '200px',\n marginTop: '2px',\n zIndex: 1050,\n borderRadius: '0.375rem',\n boxShadow: '0 0.5rem 1rem rgba(0,0,0,0.15)',\n }}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => {\n const key = getValue(option) ?? `option-${index}`\n return (\n <li key={key}>\n <button\n type=\"button\"\n className=\"dropdown-item text-truncate\"\n onClick={() => handleSelect(option)}\n >\n {getLabel(option)}\n </button>\n </li>\n )\n })\n ) : (\n <li>\n <span className=\"dropdown-item disabled text-muted\" style={{ cursor: 'default' }}>\n No options found\n </span>\n </li>\n )}\n </ul>\n )}\n </div>\n )\n})\n\nSearchSelect.displayName = 'SearchSelect'\n\nexport default SearchSelect\nexport { SearchSelect }\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -1,45 +0,0 @@
1
- import * as React from 'react'
2
-
3
- export interface DatePickerProps {
4
- /** Picker mode (default 'date') */
5
- mode?: 'date' | 'time' | 'datetime'
6
- /** Currently selected Date (alias for `value`) */
7
- selected?: Date | null
8
- /** Currently selected Date */
9
- value?: Date | string | number | null
10
- /**
11
- * Synthetic event handler — `e.target.value` is a pre-formatted string:
12
- * - date → `"YYYY-MM-DD"`
13
- * - time → `"hh:mm AA"`
14
- * - datetime → `"YYYY-MM-DD hh:mm AA"`
15
- */
16
- onChange?: (e: { target: { value: string | null; name: string; type: string } }) => void
17
- /** Display format — tokens: yyyy, MM, dd, hh, mm, aa */
18
- dateFormat?: string
19
- /** Placeholder text when empty */
20
- placeholderText?: string
21
- /** Bootstrap size variant */
22
- size?: 'sm' | 'lg'
23
- /** Show a clear button on the input */
24
- isClearable?: boolean
25
- /** Disable the input */
26
- disabled?: boolean
27
- /** Earliest selectable date */
28
- minDate?: Date
29
- /** Latest selectable date */
30
- maxDate?: Date
31
- /** Minute step in the time list (default 5) */
32
- timeIntervals?: number
33
- /** Timezone identifier for display (default 'Kampala') */
34
- timezone?: string
35
- /** Additional CSS classes on the input */
36
- className?: string
37
- /** Input element ID */
38
- id?: string
39
- /** Input name attribute */
40
- name?: string
41
- }
42
-
43
- export const DatePicker: React.ForwardRefExoticComponent<
44
- DatePickerProps & React.RefAttributes<HTMLInputElement>
45
- >