react-bootstrap-plugins 2.0.0 → 2.2.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.
- package/README.md +13 -3
- package/dist/AutoTextarea.cjs +2 -0
- package/dist/AutoTextarea.d.cts +29 -0
- package/dist/AutoTextarea.d.ts +29 -0
- package/dist/AutoTextarea.js +2 -0
- package/dist/DatePicker.cjs +1 -1
- package/dist/DatePicker.d.cts +4 -4
- package/dist/DatePicker.d.ts +4 -4
- package/dist/DatePicker.js +1 -1
- package/dist/NavPills.cjs +2 -0
- package/dist/NavPills.d.cts +47 -0
- package/dist/NavPills.d.ts +47 -0
- package/dist/NavPills.js +2 -0
- package/dist/chunk-G26VJJWL.cjs +2 -0
- package/dist/chunk-GCPYN7WB.js +2 -0
- package/dist/chunk-KKWFIJKN.js +2 -0
- package/dist/chunk-KVUHNUBG.js +2 -0
- package/dist/chunk-M3OUUXZG.cjs +2 -0
- package/dist/chunk-R5OO66VE.cjs +2 -0
- package/dist/css/datepicker.css +1 -1
- package/dist/css/plugins.css +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -1
- package/docs/AUTOTEXTAREA.md +106 -0
- package/docs/DATEPICKER.md +23 -2
- package/docs/NAVPILLS.md +151 -0
- package/package.json +26 -1
- package/dist/chunk-ES5ABK5L.js +0 -2
- package/dist/chunk-GZ2D7HTS.cjs +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkNPQQDBFB_cjs=require('./chunk-NPQQDBFB.cjs'),s=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 s__namespace=/*#__PURE__*/_interopNamespace(s);var Ie=["Su","Mo","Tu","We","Th","Fr","Sa"],Ae=["January","February","March","April","May","June","July","August","September","October","November","December"],He=Array.from({length:60},(a,t)=>t),v=12,V=(a,t)=>new Date(a,t+1,0).getDate(),se=(a,t)=>a!==null&&t!==null&&a.getFullYear()===t.getFullYear()&&a.getMonth()===t.getMonth()&&a.getDate()===t.getDate(),Oe=(a,t,u)=>!(t&&a<new Date(t.getFullYear(),t.getMonth(),t.getDate())||u&&a>new Date(u.getFullYear(),u.getMonth(),u.getDate())),Fe=(a,t)=>{let u=new Date(a,t,1).getDay(),m=V(a,t),p=[],b=V(a,t-1);for(let c=u-1;c>=0;c--){let D=b-c;p.push({day:D,date:new Date(a,t-1,D),isOutside:true});}for(let c=1;c<=m;c++)p.push({day:c,date:new Date(a,t,c),isOutside:false});let y=42-p.length;for(let c=1;c<=y;c++)p.push({day:c,date:new Date(a,t+1,c),isOutside:true});return p},z=(a,t,u)=>{if(!a||isNaN(a.getTime()))return "";let m=a.getFullYear(),p=String(a.getMonth()+1).padStart(2,"0"),b=String(a.getDate()).padStart(2,"0"),y=a.getHours(),c=String(a.getMinutes()).padStart(2,"0"),D=y>=12?"PM":"AM";y=y%12||12;let h=String(y).padStart(2,"0");if(u)return u.replace("yyyy",String(m)).replace("MM",p).replace("dd",b).replace("hh",h).replace("mm",c).replace("aa",D);switch(t){case "time":return `${h}:${c} ${D}`;case "datetime":return `${m}-${p}-${b} ${h}:${c} ${D}`;default:return `${m}-${p}-${b}`}},F=(a,t,u="date")=>({target:{value:a,name:t,type:u},preventDefault:()=>{},stopPropagation:()=>{},nativeEvent:null}),Le={date:300,time:300,datetime:400,year:250},$e={date:280,time:220,datetime:440,year:280},ie={position:"fixed",top:0,left:0,width:"max-content",visibility:"hidden",zIndex:1070},We=typeof window<"u"?s__namespace.useLayoutEffect:s__namespace.useEffect,_e=a=>{if(!a)return document.documentElement;let t=a.parentElement;for(;t;){let u=window.getComputedStyle(t),m=u.overflowY||u.overflow;if(m==="auto"||m==="scroll")return t;t=t.parentElement;}return document.documentElement},ze=(a,t,u)=>{if(!a)return {};let m=a.getBoundingClientRect(),p=t||300,b=window.innerHeight-m.bottom,y=m.top,c=b<p&&y>b,D=window.innerWidth<576?220:260,h=u||D;return {position:"fixed",top:c?Math.max(4,m.top-p-4):m.bottom+4,left:Math.max(4,Math.min(m.left,window.innerWidth-h-4)),minWidth:D,width:"max-content",maxWidth:window.innerWidth-8,zIndex:1070}},oe=s__namespace.forwardRef(({className:a,mode:t="date",selected:u,value:m,onChange:p,dateFormat:b,placeholderText:y,size:c,isClearable:D=false,disabled:h=false,minDate:le,maxDate:ce,timeIntervals:Ue=5,timezone:qe="Kampala",id:ue,name:N,...de},L)=>{let J=e=>{if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if(typeof e=="string"||typeof e=="number"){let n=new Date(e);if(!isNaN(n.getTime()))return n;if(typeof e=="string"){let d=e.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(d){let r=parseInt(d[1],10),f=parseInt(d[2],10),_=d[3].toUpperCase();r===12&&_==="AM"&&(r=0),r!==12&&_==="PM"&&(r+=12);let Z=new Date;return new Date(Z.getFullYear(),Z.getMonth(),Z.getDate(),r,f,0,0)}let l=e.match(/^(\d{4})-(\d{2})-(\d{2})\s+(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(l){let r=parseInt(l[4],10),f=parseInt(l[5],10),_=l[6].toUpperCase();return r===12&&_==="AM"&&(r=0),r!==12&&_==="PM"&&(r+=12),new Date(parseInt(l[1]),parseInt(l[2])-1,parseInt(l[3]),r,f,0,0)}}return null}return null},o=s__namespace.useMemo(()=>J(u??m),[u instanceof Date?u.getTime():u,m instanceof Date?m.getTime():m]),ee=t==="date"||t==="datetime",S=t==="time"||t==="datetime",[E,A]=s__namespace.useState(false),[P,U]=s__namespace.useState(()=>o?o.getFullYear():new Date().getFullYear()),[w,j]=s__namespace.useState(()=>o?o.getMonth():new Date().getMonth()),[M,R]=s__namespace.useState(o),[x,te]=s__namespace.useState(()=>o&&o.getHours()%12||12),[C,ne]=s__namespace.useState(()=>o?o.getMinutes():0),[T,ae]=s__namespace.useState(()=>o&&o.getHours()>=12?"PM":"AM"),[$,H]=s__namespace.useState(false),[Q,q]=s__namespace.useState(()=>Math.floor((o?o.getFullYear():new Date().getFullYear())/v)*v),[me,re]=s__namespace.useState(ie),O=s__namespace.useRef(null),Y=s__namespace.useRef(null),K=s__namespace.useRef(null);s__namespace.useEffect(()=>{let e=document.createElement("div");return e.className="datepicker-portal-root",document.body.appendChild(e),K.current=e,()=>{e.parentNode&&document.body.removeChild(e),K.current=null;}},[]),s__namespace.useEffect(()=>{o&&!isNaN(o.getTime())?(R(o),U(o.getFullYear()),j(o.getMonth()),te(o.getHours()%12||12),ne(o.getMinutes()),ae(o.getHours()>=12?"PM":"AM"),q(Math.floor(o.getFullYear()/v)*v)):R(null);},[o]),We(()=>{if(!E){re(ie);return}let e=()=>Y.current?Y.current.getBoundingClientRect().height:Le[$?"year":t]||300,n=()=>Y.current?Y.current.getBoundingClientRect().width:$e[$?"year":t]||280,d=_e(O.current),l=()=>{re(ze(O.current,e(),n()));};l();let r=0,f=()=>{cancelAnimationFrame(r),r=requestAnimationFrame(l);};return d.addEventListener("scroll",f,{passive:true}),window.addEventListener("resize",f),()=>{cancelAnimationFrame(r),d.removeEventListener("scroll",f),window.removeEventListener("resize",f);}},[E,t,$]),s__namespace.useEffect(()=>{if(!E)return;let e=n=>{Y.current&&!Y.current.contains(n.target)&&O.current&&!O.current.contains(n.target)&&(A(false),H(false));};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[E]);let I=(e,n,d,l)=>{let r=new Date(e),f=n%12;return l==="PM"&&(f+=12),f===12&&l==="AM"&&(f=0),r.setHours(f,d,0,0),r},W=e=>{if(!e||isNaN(e.getTime()))return;let n=z(e,t,b);p?.(F(n,N||"",t));},pe=e=>{if(!e){p?.(F(null,N||"",t)),A(false),H(false);return}W(e),t==="date"&&(A(false),H(false));},fe=e=>{if(R(e),t==="date")pe(e);else if(t==="datetime"){let n=I(e,x,C,T);W(n);}},ge=Fe(P,w),be=()=>{let e=P,n=w;w===0?(e=P-1,n=11):n=w-1,U(e),j(n);let d=M||new Date,l=V(e,n),r=new Date(e,n,Math.min(d.getDate(),l));R(r),W(S?I(r,x,C,T):r);},ve=()=>{let e=P,n=w;w===11?(e=P+1,n=0):n=w+1,U(e),j(n);let d=M||new Date,l=V(e,n),r=new Date(e,n,Math.min(d.getDate(),l));R(r),W(S?I(r,x,C,T):r);},De=new Date,B=J(le),G=J(ce),ye=B?new Date(B.getFullYear(),B.getMonth(),B.getDate()):null,he=G?new Date(G.getFullYear(),G.getMonth(),G.getDate()):null,we=e=>{if(te(e),S){let n=I(M||new Date,e,C,T);p?.(F(z(n,t,b),N||"",t));}},Me=e=>{if(ne(e),S){let n=I(M||new Date,x,e,T);p?.(F(z(n,t,b),N||"",t));}},ke=e=>{if(ae(e),S){let n=I(M||new Date,x,C,e);p?.(F(z(n,t,b),N||"",t));}},Ne=()=>{q(Math.floor(P/v)*v),H(true);},Se=e=>{U(e),H(false);let n=M||new Date,d=V(e,w),l=new Date(e,w,Math.min(n.getDate(),d));R(l),W(S?I(l,x,C,T):l);},X=Math.floor(Q/v)*v,Ee=Array.from({length:v},(e,n)=>X+n),Pe=e=>{e.stopPropagation(),R(null),p?.(F(null,N||""));},Re=e=>{e.key==="Escape"&&(A(false),H(false),O.current?.blur()),(e.key==="ArrowDown"||e.key==="Enter"||e.key===" ")&&(e.preventDefault(),A(true));},xe=s__namespace.useCallback(e=>{O.current=e,typeof L=="function"?L(e):L&&(L.current=e);},[L]),Ce=y??(t==="time"?"Select time":t==="datetime"?"Select date & time":"Select date"),Te=jsxRuntime.jsxs("div",{ref:Y,className:chunkNPQQDBFB_cjs.a("datepicker-popover card border shadow-sm",t==="datetime"&&"datepicker-popover--wide"),style:me,children:[$&&ee&&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:()=>q(Q-v),"aria-label":"Previous years",children:"\u2039"}),jsxRuntime.jsxs("span",{className:"fw-semibold small",children:[X," \u2013 ",X+v-1]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:()=>q(Q+v),"aria-label":"Next years",children:"\u203A"})]}),jsxRuntime.jsx("div",{className:"datepicker-year-grid",children:Ee.map(e=>{let n=e===new Date().getFullYear(),d=M&&e===M.getFullYear();return jsxRuntime.jsx("button",{type:"button",className:chunkNPQQDBFB_cjs.a("datepicker-year-cell btn btn-sm",d&&"btn-primary",!d&&n&&"btn-outline-primary",!d&&!n&&"btn-light border"),onClick:()=>Se(e),children:e},e)})})]}),!$&&jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsxs("div",{className:chunkNPQQDBFB_cjs.a("d-flex",t==="datetime"?"flex-row":"flex-column"),children:[ee&&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:be,"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:Ae[w]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-link text-decoration-none text-primary fw-semibold small p-0",onClick:Ne,"aria-label":"Choose year",children:P})]}),jsxRuntime.jsx("button",{type:"button",className:"btn btn-sm btn-outline-secondary border-0 px-1",onClick:ve,"aria-label":"Next month",children:"\u203A"})]}),jsxRuntime.jsx("div",{className:"datepicker-days-header",children:Ie.map(e=>jsxRuntime.jsx("div",{className:"datepicker-day-label",children:e},e))}),jsxRuntime.jsx("div",{className:"datepicker-days-grid",children:ge.map((e,n)=>{let d=se(e.date,De),l=M&&se(e.date,M),r=Oe(e.date,ye,he),f=e.isOutside||!r;return jsxRuntime.jsx("button",{type:"button",disabled:f,className:chunkNPQQDBFB_cjs.a("datepicker-day",d&&"datepicker-day--today",l&&"datepicker-day--selected",e.isOutside&&"datepicker-day--outside",!r&&"datepicker-day--disabled"),onClick:()=>fe(e.date),tabIndex:e.isOutside?-1:0,children:e.day},n)})})]}),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,n)=>n+1).map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkNPQQDBFB_cjs.a("datepicker-time-item",e===x&&"active"),onClick:()=>we(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:He.map(e=>jsxRuntime.jsx("button",{type:"button",className:chunkNPQQDBFB_cjs.a("datepicker-time-item",e===C&&"active"),onClick:()=>Me(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:chunkNPQQDBFB_cjs.a("datepicker-time-item","datepicker-time-item--ampm",T===e&&"active"),onClick:()=>ke(e),children:e},e))})]})]})]})]})})]});return jsxRuntime.jsxs("div",{className:"datepicker-wrapper position-relative d-inline-block w-100",style:{minWidth:0},children:[jsxRuntime.jsxs("div",{className:"position-relative",children:[jsxRuntime.jsx("input",{ref:xe,id:ue,name:N,type:"text",readOnly:true,disabled:h,className:chunkNPQQDBFB_cjs.a("form-control",c==="sm"&&"form-control-sm",c==="lg"&&"form-control-lg","pe-5",a),placeholder:Ce,value:z(o,t,b),onClick:()=>!h&&A(!E),onKeyDown:Re,"aria-haspopup":"dialog","aria-expanded":E,autoComplete:"off",...de}),D&&o&&!h&&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:Pe,tabIndex:-1,"aria-label":"Clear",children:"\xD7"})]}),E&&!h&&K.current&&reactDom.createPortal(Te,K.current)]})});oe.displayName="DatePicker";var Ge=oe;exports.a=oe;exports.b=Ge;//# sourceMappingURL=chunk-R5OO66VE.cjs.map
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudHN4Il0sIm5hbWVzIjpbIkRBWVNfT0ZfV0VFSyIsIk1PTlRIUyIsIk1JTlVURVMiLCJfIiwiaSIsIllFQVJTX1BFUl9QQUdFIiwiZGF5c0luTW9udGgiLCJ5ZWFyIiwibW9udGgiLCJpc1NhbWVEYXkiLCJiIiwiaXNEYXRlSW5SYW5nZSIsImRhdGUiLCJtaW4iLCJtYXgiLCJidWlsZENhbGVuZGFyR3JpZCIsImZpcnN0RGF5IiwidG90YWxEYXlzIiwiY2VsbHMiLCJwcmV2TW9udGhEYXlzIiwiZGF5IiwiZCIsInJlbWFpbmluZyIsImZvcm1hdFZhbHVlIiwibW9kZSIsImZtdCIsInkiLCJNIiwiaCIsIm0iLCJhIiwiaGgiLCJtYWtlRXZlbnQiLCJ2YWx1ZSIsImlucHV0TmFtZSIsInR5cGUiLCJQT1BPVkVSX0dVRVNTIiwiUE9QT1ZFUl9XSURUSF9HVUVTUyIsIlBSRV9QT1NJVElPTl9TVFlMRSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJzIiwiZ2V0U2Nyb2xsUGFyZW50IiwiZWwiLCJwYXJlbnQiLCJzdHlsZSIsIm92ZXJmbG93WSIsImNhbGNQb3BvdmVyU3R5bGUiLCJpbnB1dEVsIiwicG9wb3ZlckhlaWdodCIsInBvcG92ZXJXaWR0aCIsInJlY3QiLCJzcGFjZUJlbG93Iiwic3BhY2VBYm92ZSIsInBsYWNlQWJvdmUiLCJtaW5XIiwidyIsIkRhdGVQaWNrZXIiLCJjbGFzc05hbWUiLCJzZWxlY3RlZCIsIm9uQ2hhbmdlIiwiZGF0ZUZvcm1hdCIsInBsYWNlaG9sZGVyVGV4dCIsInNpemUiLCJpc0NsZWFyYWJsZSIsImRpc2FibGVkIiwibWluRGF0ZSIsIm1heERhdGUiLCJ0aW1lSW50ZXJ2YWxzIiwidGltZXpvbmUiLCJpZCIsIm5hbWUiLCJwcm9wcyIsInJlZiIsInJlc29sdmVWYWx1ZSIsInYiLCJ0aW1lTWF0Y2giLCJhcCIsIm5vdyIsImR0TWF0Y2giLCJyZXNvbHZlZFZhbHVlIiwic2hvd0NhbGVuZGFyIiwic2hvd1RpbWUiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJ2aWV3WWVhciIsInNldFZpZXdZZWFyIiwidmlld01vbnRoIiwic2V0Vmlld01vbnRoIiwidGVtcERhdGUiLCJzZXRUZW1wRGF0ZSIsInRlbXBIb3VycyIsInNldFRlbXBIb3VycyIsInRlbXBNaW5zIiwic2V0VGVtcE1pbnMiLCJ0ZW1wQW1QbSIsInNldFRlbXBBbVBtIiwic2hvd1llYXJQaWNrZXIiLCJzZXRTaG93WWVhclBpY2tlciIsInllYXJQYWdlIiwic2V0WWVhclBhZ2UiLCJwb3BvdmVyU3R5bGUiLCJzZXRQb3BvdmVyU3R5bGUiLCJpbnB1dFJlZiIsInBvcG92ZXJSZWYiLCJwb3J0YWxSZWYiLCJnZXRIZWlnaHQiLCJnZXRXaWR0aCIsInNjcm9sbFBhcmVudCIsInVwZGF0ZSIsInJhZiIsInNjaGVkdWxlVXBkYXRlIiwiaGFuZGxlciIsImUiLCJidWlsZERhdGUiLCJiYXNlIiwiaDEyIiwibWlucyIsImFtcG0iLCJmaXJlQ2hhbmdlIiwiZm9ybWF0dGVkIiwiY29tbWl0IiwiY29tbWl0RGF0ZU9ubHkiLCJncmlkIiwiaGFuZGxlUHJldk1vbnRoIiwibmV3WSIsIm5ld00iLCJtYXhEIiwibmV3RGF0ZSIsImhhbmRsZU5leHRNb250aCIsInRvZGF5IiwicmVzb2x2ZWRNaW4iLCJyZXNvbHZlZE1heCIsIm1pbkR0IiwibWF4RHQiLCJoYW5kbGVIb3VyQ2hhbmdlIiwiaGFuZGxlTWluQ2hhbmdlIiwiaGFuZGxlQW1QbUNoYW5nZSIsIm9wZW5ZZWFyUGlja2VyIiwiaGFuZGxlWWVhclNlbGVjdCIsInllYXJQYWdlU3RhcnQiLCJ5ZWFycyIsImhhbmRsZUNsZWFyIiwiaGFuZGxlSW5wdXRLZXlEb3duIiwibWVyZ2VJbnB1dFJlZiIsIm5vZGUiLCJwbGFjZWhvbGRlciIsInBvcG92ZXIiLCJqc3hzIiwiY24iLCJqc3giLCJpc0N1cnJlbnRZZWFyIiwiaXNTZWxlY3RlZCIsIkZyYWdtZW50IiwiY2VsbCIsImlzVG9kYXkiLCJpblJhbmdlIiwiaXNEaXNhYmxlZERheSIsImNyZWF0ZVBvcnRhbCIsIkRhdGVQaWNrZXJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6ImtnQkEwREEsSUFBTUEsRUFBQUEsQ0FBZSxDQUFDLElBQUEsQ0FBTSxJQUFBLENBQU0sSUFBQSxDQUFNLElBQUEsQ0FBTSxJQUFBLENBQU0sS0FBTSxJQUFJLENBQUEsQ0FDeERDLEVBQUFBLENBQVMsQ0FDYixVQUFXLFVBQUEsQ0FBWSxPQUFBLENBQVMsT0FBQSxDQUFTLEtBQUEsQ0FBTyxPQUNoRCxNQUFBLENBQVEsUUFBQSxDQUFVLFdBQUEsQ0FBYSxTQUFBLENBQVcsVUFBQSxDQUFZLFVBQ3hELENBQUEsQ0FDTUMsRUFBQUEsQ0FBVSxNQUFNLElBQUEsQ0FBSyxDQUFFLE1BQUEsQ0FBUSxFQUFHLEVBQUcsQ0FBQ0MsQ0FBQUEsQ0FBR0MsQ0FBQUEsR0FBTUEsQ0FBQyxFQUNoREMsQ0FBQUEsQ0FBaUIsRUFBQSxDQU1qQkMsQ0FBQUEsQ0FBYyxDQUFDQyxDQUFBQSxDQUFjQyxDQUFBQSxHQUNqQyxJQUFJLElBQUEsQ0FBS0QsRUFBTUMsQ0FBQUEsQ0FBUSxDQUFBLENBQUcsQ0FBQyxDQUFBLENBQUUsU0FBUSxDQUVqQ0MsRUFBQUEsQ0FBWSxDQUFDLENBQUEsQ0FBZ0JDLElBQ2pDLENBQUEsR0FBTSxJQUFBLEVBQVFBLENBQUFBLEdBQU0sSUFBQSxFQUNwQixDQUFBLENBQUUsV0FBQSxFQUFZLEdBQU1BLENBQUFBLENBQUUsYUFBWSxFQUNsQyxDQUFBLENBQUUsUUFBQSxFQUFTLEdBQU1BLENBQUFBLENBQUUsUUFBQSxFQUFTLEVBQzVCLENBQUEsQ0FBRSxTQUFRLEdBQU1BLENBQUFBLENBQUUsT0FBQSxFQUFRLENBRXRCQyxFQUFBQSxDQUFnQixDQUFDQyxDQUFBQSxDQUFZQyxDQUFBQSxDQUFrQkMsSUFDL0MsRUFBQUQsQ0FBQUEsRUFBT0QsQ0FBQUEsQ0FBTyxJQUFJLEtBQUtDLENBQUFBLENBQUksV0FBQSxFQUFZLENBQUdBLENBQUFBLENBQUksVUFB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RS5janMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vbGliL2NuLmpzJ1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVQaWNrZXJDaGFuZ2VFdmVudCB7XG4gIHRhcmdldDoge1xuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsXG4gICAgbmFtZTogc3RyaW5nXG4gICAgdHlwZTogc3RyaW5nXG4gIH1cbiAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWRcbiAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkXG4gIG5hdGl2ZUV2ZW50OiBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcbiAgLyoqIFBpY2tlciBtb2RlIChkZWZhdWx0ICdkYXRlJykgKi9cbiAgbW9kZT86ICdkYXRlJyB8ICd0aW1lJyB8ICdkYXRldGltZSdcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBEYXRlIChhbGlhcyBmb3IgdmFsdWUpICovXG4gIHNlbGVjdGVkPzogRGF0ZSB8IG51bGxcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBEYXRlLCBJU08gc3RyaW5nLCBcImhoOm1tIEFBXCIgdGltZSBzdHJpbmcsIFwiWVlZWS1NTS1ERCBoaDptbSBBQVwiIGRhdGV0aW1lIHN0cmluZywgb3IgdGltZXN0YW1wICovXG4gIHZhbHVlPzogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgLyoqIFN5bnRoZXRpYyBldmVudCBoYW5kbGVyIOKAlCBlLnRhcmdldC52YWx1ZSBpcyBhIHByZS1mb3JtYXR0ZWQgc3RyaW5nICovXG4gIG9uQ2hhbmdlPzogKGU6IERhdGVQaWNrZXJDaGFuZ2VFdmVudCkgPT4gdm9pZFxuICAvKiogRGlzcGxheSBmb3JtYXQgd2l0aCB0b2tlbnM6IHl5eXksIE1NLCBkZCwgaGgsIG1tLCBhYSAqL1xuICBkYXRlRm9ybWF0Pzogc3RyaW5nXG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0IHdoZW4gZW1wdHkgKi9cbiAgcGxhY2Vob2xkZXJUZXh0Pzogc3RyaW5nXG4gIC8qKiBCb290c3RyYXAgc2l6ZSB2YXJpYW50ICovXG4gIHNpemU/OiAnc20nIHwgJ2xnJ1xuICAvKiogU2hvdyBhIGNsZWFyIGJ1dHRvbiBvbiB0aGUgaW5wdXQgKi9cbiAgaXNDbGVhcmFibGU/OiBib29sZWFuXG4gIC8qKiBEaXNhYmxlIHRoZSBpbnB1dCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgLyoqIEVhcmxpZXN0IHNlbGVjdGFibGUgZGF0ZSDigJQgRGF0ZSwgSVNPL1wiWVlZWS1NTS1ERFwiIHN0cmluZywgb3IgdGltZXN0YW1wIChlLmcuIGFub3RoZXIgRGF0ZVBpY2tlcidzIG9uQ2hhbmdlIHZhbHVlKSAqL1xuICBtaW5EYXRlPzogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgLyoqIExhdGVzdCBzZWxlY3RhYmxlIGRhdGUg4oCUIERhdGUsIElTTy9cIllZWVktTU0tRERcIiBzdHJpbmcsIG9yIHRpbWVzdGFtcCAoZS5nLiBhbm90aGVyIERhdGVQaWNrZXIncyBvbkNoYW5nZSB2YWx1ZSkgKi9cbiAgbWF4RGF0ZT86IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCBudWxsXG4gIC8qKiBNaW51dGUgc3RlcCBpbiB0aGUgdGltZSBsaXN0IChkZWZhdWx0IDUpICovXG4gIHRpbWVJbnRlcnZhbHM/OiBudW1iZXJcbiAgLyoqIFRpbWV6b25lIGlkZW50aWZpZXIgKGRlZmF1bHQgJ0thbXBhbGEnKSAqL1xuICB0aW1lem9uZT86IHN0cmluZ1xuICAvKiogQWRkaXRpb25hbCBDU1MgY2xhc3NlcyBvbiB0aGUgaW5wdXQgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKiBJbnB1dCBlbGVtZW50IElEICovXG4gIGlkPzogc3RyaW5nXG4gIC8qKiBJbnB1dCBuYW1lIGF0dHJpYnV0ZSDigJQgc3VyZmFjZXMgYXMgZS50YXJnZXQubmFtZSBpbiBvbkNoYW5nZSAqL1xuICBuYW1lPzogc3RyaW5nXG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogIENvbnN0YW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuY29uc3QgREFZU19PRl9XRUVLID0gWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddXG5jb25zdCBNT05USFMgPSBbXG4gICdKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJyxcbiAgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJyxcbl1cbmNvbnN0IE1JTlVURVMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2MCB9LCAoXywgaSkgPT4gaSlcbmNvbnN0IFlFQVJTX1BFUl9QQUdFID0gMTJcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiAgSGVscGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5jb25zdCBkYXlzSW5Nb250aCA9ICh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBudW1iZXIgPT5cbiAgbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcblxuY29uc3QgaXNTYW1lRGF5ID0gKGE6IERhdGUgfCBudWxsLCBiOiBEYXRlIHwgbnVsbCk6IGJvb2xlYW4gPT5cbiAgYSAhPT0gbnVsbCAmJiBiICE9PSBudWxsICYmXG4gIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpICYmXG4gIGEuZ2V0TW9udGgoKSA9PT0gYi5nZXRNb250aCgpICYmXG4gIGEuZ2V0RGF0ZSgpID09PSBiLmdldERhdGUoKVxuXG5jb25zdCBpc0RhdGVJblJhbmdlID0gKGRhdGU6IERhdGUsIG1pbjogRGF0ZSB8IG51bGwsIG1heDogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgaWYgKG1pbiAmJiBkYXRlIDwgbmV3IERhdGUobWluLmdldEZ1bGxZZWFyKCksIG1pbi5nZXRNb250aCgpLCBtaW4uZ2V0RGF0ZSgpKSkgcmV0dXJuIGZhbHNlXG4gIGlmIChtYXggJiYgZGF0ZSA+IG5ldyBEYXRlKG1heC5nZXRGdWxsWWVhcigpLCBtYXguZ2V0TW9udGgoKSwgbWF4LmdldERhdGUoKSkpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdHJ1ZVxufVxuXG5pbnRlcmZhY2UgQ2FsZW5kYXJDZWxsIHtcbiAgZGF5OiBudW1iZXJcbiAgZGF0ZTogRGF0ZVxuICBpc091dHNpZGU6IGJvb2xlYW5cbn1cblxuY29uc3QgYnVpbGRDYWxlbmRhckdyaWQgPSAoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogQ2FsZW5kYXJDZWxsW10gPT4ge1xuICBjb25zdCBmaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKS5nZXREYXkoKVxuICBjb25zdCB0b3RhbERheXMgPSBkYXlzSW5Nb250aCh5ZWFyLCBtb250aClcbiAgY29uc3QgY2VsbHM6IENhbGVuZGFyQ2VsbFtdID0gW11cblxuICBjb25zdCBwcmV2TW9udGhEYXlzID0gZGF5c0luTW9udGgoeWVhciwgbW9udGggLSAxKVxuICBmb3IgKGxldCBpID0gZmlyc3REYXkgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGRheSA9IHByZXZNb250aERheXMgLSBpXG4gICAgY2VsbHMucHVzaCh7IGRheSwgZGF0ZTogbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpLCBpc091dHNpZGU6IHRydWUgfSlcbiAgfVxuXG4gIGZvciAobGV0IGQgPSAxOyBkIDw9IHRvdGFsRGF5czsgZCsrKSB7XG4gICAgY2VsbHMucHVzaCh7IGRheTogZCwgZGF0ZTogbmV3IERhdGUoeWVhciwgbW9udGgsIGQpLCBpc091dHNpZGU6IGZhbHNlIH0pXG4gIH1cblxuICBjb25zdCByZW1haW5pbmcgPSA0MiAtIGNlbGxzLmxlbmd0aFxuICBmb3IgKGxldCBkID0gMTsgZCA8PSByZW1haW5pbmc7IGQrKykge1xuICAgIGNlbGxzLnB1c2goeyBkYXk6IGQsIGRhdGU6IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgZCksIGlzT3V0c2lkZTogdHJ1ZSB9KVxuICB9XG5cbiAgcmV0dXJuIGNlbGxzXG59XG5cbmNvbnN0IGZvcm1hdFZhbHVlID0gKGRhdGU6IERhdGUgfCBudWxsLCBtb2RlOiBzdHJpbmcsIGZtdD86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICghZGF0ZSB8fCBpc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiAnJ1xuXG4gIGNvbnN0IHkgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgY29uc3QgTSA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IGQgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgbGV0IGggPSBkYXRlLmdldEhvdXJzKClcbiAgY29uc3QgbSA9IFN0cmluZyhkYXRlLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBhID0gaCA+PSAxMiA/ICdQTScgOiAnQU0nXG4gIGggPSBoICUgMTIgfHwgMTJcbiAgY29uc3QgaGggPSBTdHJpbmcoaCkucGFkU3RhcnQoMiwgJzAnKVxuXG4gIGlmIChmbXQpIHtcbiAgICByZXR1cm4gZm10LnJlcGxhY2UoJ3l5eXknLCBTdHJpbmcoeSkpLnJlcGxhY2UoJ01NJywgTSkucmVwbGFjZSgnZGQnLCBkKS5yZXBsYWNlKCdoaCcsIGhoKS5yZXBsYWNlKCdtbScsIG0pLnJlcGxhY2UoJ2FhJywgYSlcbiAgfVxuXG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgJ3RpbWUnOiAgICAgcmV0dXJuIGAke2hofToke219ICR7YX1gXG4gICAgY2FzZSAnZGF0ZXRpbWUnOiByZXR1cm4gYCR7eX0tJHtNfS0ke2R9ICR7aGh9OiR7bX0gJHthfWBcbiAgICBkZWZhdWx0OiAgICAgICAgIHJldHVybiBgJHt5fS0ke019LSR7ZH1gXG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBhIHN5bnRoZXRpYyBldmVudCBvYmplY3QgbGlrZSBhIG5hdGl2ZSBpbnB1dCdzIG9uQ2hhbmdlLlxuICovXG5jb25zdCBtYWtlRXZlbnQgPSAodmFsdWU6IHN0cmluZyB8IG51bGwsIGlucHV0TmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnZGF0ZScpOiBEYXRlUGlja2VyQ2hhbmdlRXZlbnQgPT4gKHtcbiAgdGFyZ2V0OiB7XG4gICAgdmFsdWUsXG4gICAgbmFtZTogaW5wdXROYW1lLFxuICAgIHR5cGUsXG4gIH0sXG4gIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7fSxcbiAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7fSxcbiAgbmF0aXZlRXZlbnQ6IG51bGwsXG59KVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBQb3BvdmVyIHBvc2l0aW9uaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBBcHByb3hpbWF0ZSBoZWlnaHRzIOKAlCB1c2VkIGFzIGEgZmlyc3QgZ3Vlc3MgYmVmb3JlIHRoZSByZWFsIERPTSBoZWlnaHQgaXMgbWVhc3VyZWQuICovXG5jb25zdCBQT1BPVkVSX0dVRVNTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0geyBkYXRlOiAzMDAsIHRpbWU6IDMwMCwgZGF0ZXRpbWU6IDQwMCwgeWVhcjogMjUwIH1cblxuLyoqIEFwcHJveGltYXRlIHdpZHRocyDigJQgdXNlZCBhcyBhIGZpcnN0IGd1ZXNzIGJlZm9yZSB0aGUgcmVhbCBET00gd2lkdGggaXMgbWVhc3VyZWQuICovXG5jb25zdCBQT1BPVkVSX1dJRFRIX0dVRVNTOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0geyBkYXRlOiAyODAsIHRpbWU6IDIyMCwgZGF0ZXRpbWU6IDQ0MCwgeWVhcjogMjgwIH1cblxuLyoqXG4gKiBTdHlsZSBhcHBsaWVkIHdoaWxlIHRoZSBwb3BvdmVyIGlzIG1vdW50ZWQgYnV0IG5vdCB5ZXQgbWVhc3VyZWQuXG4gKiBgd2lkdGg6IG1heC1jb250ZW50YCBtYWtlcyB0aGUgZmlyc3QgbWVhc3VyZW1lbnQgcmVmbGVjdCB0aGUgcmVhbCBjb250ZW50XG4gKiB3aWR0aCAoYW4gZW1wdHkgc3R5bGUgbGV0cyB0aGUgY2FyZCBzdHJldGNoIHRvIHRoZSBib2R5IHdpZHRoLCB3aGljaFxuICogcG9pc29uZWQgdGhlIGZpcnN0LW9wZW4gcG9zaXRpb24pLCBhbmQgYHZpc2liaWxpdHk6IGhpZGRlbmAgcHJldmVudHMgYVxuICogbWlzcG9zaXRpb25lZCBmbGFzaCBiZWZvcmUgdGhlIG1lYXN1cmVkIHN0eWxlIGxhbmRzLlxuICovXG5jb25zdCBQUkVfUE9TSVRJT05fU1RZTEU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIHBvc2l0aW9uOiAnZml4ZWQnLFxuICB0b3A6IDAsXG4gIGxlZnQ6IDAsXG4gIHdpZHRoOiAnbWF4LWNvbnRlbnQnLFxuICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgekluZGV4OiAxMDcwLFxufVxuXG4vKiogdXNlTGF5b3V0RWZmZWN0IHRoYXQgaXMgU1NSLXNhZmUgKGZhbGxzIGJhY2sgdG8gdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIpLiAqL1xuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9XG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0XG5cbi8qKlxuICogRmluZCB0aGUgbmVhcmVzdCBzY3JvbGxhYmxlIGFuY2VzdG9yIChmb3IgY2FwdHVyaW5nIHNjcm9sbCBldmVudHMgaW5zaWRlXG4gKiBtb2RhbHMgLyBzaWRlIHBhbmVscyAvIGN1c3RvbSBjb250YWluZXJzKS5cbiAqL1xuY29uc3QgZ2V0U2Nyb2xsUGFyZW50ID0gKGVsOiBIVE1MRWxlbWVudCB8IG51bGwpOiBIVE1MRWxlbWVudCA9PiB7XG4gIGlmICghZWwpIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgbGV0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWwucGFyZW50RWxlbWVudFxuICB3aGlsZSAocGFyZW50KSB7XG4gICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpXG4gICAgY29uc3Qgb3ZlcmZsb3dZID0gc3R5bGUub3ZlcmZsb3dZIHx8IHN0eWxlLm92ZXJmbG93XG4gICAgaWYgKG92ZXJmbG93WSA9PT0gJ2F1dG8nIHx8IG92ZXJmbG93WSA9PT0gJ3Njcm9sbCcpIHJldHVybiBwYXJlbnRcbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudFxuICB9XG4gIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbn1cblxuY29uc3QgY2FsY1BvcG92ZXJTdHlsZSA9IChpbnB1dEVsOiBIVE1MRWxlbWVudCB8IG51bGwsIHBvcG92ZXJIZWlnaHQ6IG51bWJlciwgcG9wb3ZlcldpZHRoOiBudW1iZXIpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgaWYgKCFpbnB1dEVsKSByZXR1cm4ge31cbiAgY29uc3QgcmVjdCA9IGlucHV0RWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgY29uc3QgaCA9IHBvcG92ZXJIZWlnaHQgfHwgMzAwXG5cbiAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tXG4gIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcFxuXG4gIC8qIE9ubHkgZmxpcCBhYm92ZSB3aGVuIGJlbG93IGlzIHRydWx5IHRvbyB0aWdodCBBTkQgYWJvdmUgb2ZmZXJzIG1vcmUgcm9vbSAqL1xuICBjb25zdCBwbGFjZUFib3ZlID0gc3BhY2VCZWxvdyA8IGggJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3dcblxuICAvKiBSZXNwb25zaXZlOiB1c2Ugc21hbGxlciBtaW4td2lkdGggb24gbW9iaWxlIHRvIHByZXZlbnQgb3ZlcmZsb3cuXG4gICAgIFRoZSBwb3BvdmVyIHNpemVzIHRvIGl0cyBjb250ZW50IOKAlCBpdCBtdXN0IE5PVCBzdHJldGNoIHdpdGggYSB3aWRlIGlucHV0LFxuICAgICBzbyByZWN0LndpZHRoIGlzIGludGVudGlvbmFsbHkgaWdub3JlZCBmb3Igc2l6aW5nLiAqL1xuICBjb25zdCBtaW5XID0gd2luZG93LmlubmVyV2lkdGggPCA1NzYgPyAyMjAgOiAyNjBcbiAgY29uc3QgdyA9IHBvcG92ZXJXaWR0aCB8fCBtaW5XXG5cbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB0b3A6IHBsYWNlQWJvdmUgPyBNYXRoLm1heCg0LCByZWN0LnRvcCAtIGggLSA0KSA6IHJlY3QuYm90dG9tICsgNCxcbiAgICBsZWZ0OiBNYXRoLm1heCg0LCBNYXRoLm1pbihyZWN0LmxlZnQsIHdpbmRvdy5pbm5lcldpZHRoIC0gdyAtIDQpKSxcbiAgICBtaW5XaWR0aDogbWluVyxcbiAgICB3aWR0aDogJ21heC1jb250ZW50JyxcbiAgICBtYXhXaWR0aDogd2luZG93LmlubmVyV2lkdGggLSA4LFxuICAgIHpJbmRleDogMTA3MCxcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8qICBEYXRlUGlja2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogQ3VzdG9tIEJvb3RzdHJhcC1zdHlsZWQgZGF0ZSAvIHRpbWUgLyBkYXRldGltZSBwaWNrZXIuIFplcm8gZGVwZW5kZW5jaWVzLlxuICpcbiAqICoqSW1wb3J0YW50OioqIFRoZSBhY2NvbXBhbnlpbmcgQ1NTICoqbXVzdCoqIGJlIGltcG9ydGVkIGZvciB0aGUgcGlja2VyIHRvIHJlbmRlciBjb3JyZWN0bHk6XG4gKiBgYGBqc1xuICogaW1wb3J0ICdyZWFjdC1ib290c3RyYXAtcGx1Z2lucy9jc3MvcGx1Z2lucy5jc3MnXG4gKiBgYGBcbiAqL1xuY29uc3QgRGF0ZVBpY2tlciA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTElucHV0RWxlbWVudCwgRGF0ZVBpY2tlclByb3BzPigoe1xuICBjbGFzc05hbWUsXG4gIG1vZGUgPSAnZGF0ZScsXG4gIHNlbGVjdGVkLFxuICB2YWx1ZSxcbiAgb25DaGFuZ2UsXG4gIGRhdGVGb3JtYXQsXG4gIHBsYWNlaG9sZGVyVGV4dCxcbiAgc2l6ZSxcbiAgaXNDbGVhcmFibGUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgbWluRGF0ZSxcbiAgbWF4RGF0ZSxcbiAgdGltZUludGVydmFscyA9IDUsXG4gIHRpbWV6b25lID0gJ0thbXBhbGEnLFxuICBpZCxcbiAgbmFtZSxcbiAgLi4ucHJvcHNcbn0sIHJlZikgPT4ge1xuICAvKiAtLS0tIGRlcml2ZWQgLS0tLSAqL1xuICBjb25zdCByZXNvbHZlVmFsdWUgPSAodjogRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2KSByZXR1cm4gbnVsbFxuICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGlzTmFOKHYuZ2V0VGltZSgpKSA/IG51bGwgOiB2XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFN0YW5kYXJkIERhdGUgcGFyc2luZyAod29ya3MgZm9yIElTTyA4NjAxLCBcIllZWVktTU0tRERcIiwgZXRjLilcbiAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2KVxuICAgICAgaWYgKCFpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBkXG5cbiAgICAgIC8vIEhhbmRsZSB0aW1lLW9ubHkgc3RyaW5ncyBmcm9tIGZvcm1hdFZhbHVlOiBcImhoOm1tIEFBXCJcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gdi5tYXRjaCgvXihcXGR7MSwyfSk6KFxcZHsyfSlcXHMqKEFNfFBNKSQvaSlcbiAgICAgICAgaWYgKHRpbWVNYXRjaCkge1xuICAgICAgICAgIGxldCBoID0gcGFyc2VJbnQodGltZU1hdGNoWzFdLCAxMClcbiAgICAgICAgICBjb25zdCBtID0gcGFyc2VJbnQodGltZU1hdGNoWzJdLCAxMClcbiAgICAgICAgICBjb25zdCBhcCA9IHRpbWVNYXRjaFszXS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgaWYgKGggPT09IDEyICYmIGFwID09PSAnQU0nKSBoID0gMFxuICAgICAgICAgIGlmIChoICE9PSAxMiAmJiBhcCA9PT0gJ1BNJykgaCArPSAxMlxuICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpLCBoLCBtLCAwLCAwKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGRhdGV0aW1lIHN0cmluZ3MgZnJvbSBmb3JtYXRWYWx1ZTogXCJZWVlZLU1NLUREIGhoOm1tIEFBXCJcbiAgICAgICAgY29uc3QgZHRNYXRjaCA9IHYubWF0Y2goL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVxccysoXFxkezEsMn0pOihcXGR7Mn0pXFxzKihBTXxQTSkkL2kpXG4gICAgICAgIGlmIChkdE1hdGNoKSB7XG4gICAgICAgICAgbGV0IGggPSBwYXJzZUludChkdE1hdGNoWzRdLCAxMClcbiAgICAgICAgICBjb25zdCBtID0gcGFyc2VJbnQoZHRNYXRjaFs1XSwgMTApXG4gICAgICAgICAgY29uc3QgYXAgPSBkdE1hdGNoWzZdLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICBpZiAoaCA9PT0gMTIgJiYgYXAgPT09ICdBTScpIGggPSAwXG4gICAgICAgICAgaWYgKGggIT09IDEyICYmIGFwID09PSAnUE0nKSBoICs9IDEyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnNlSW50KGR0TWF0Y2hbMV0pLCBwYXJzZUludChkdE1hdGNoWzJdKSAtIDEsIHBhcnNlSW50KGR0TWF0Y2hbM10pLCBoLCBtLCAwLCAwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlc29sdmVkVmFsdWUgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVWYWx1ZShzZWxlY3RlZCA/PyB2YWx1ZSksXG4gICAgW1xuICAgICAgc2VsZWN0ZWQgaW5zdGFuY2VvZiBEYXRlID8gc2VsZWN0ZWQuZ2V0VGltZSgpIDogc2VsZWN0ZWQsXG4gICAgICB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZS5nZXRUaW1lKCkgOiB2YWx1ZSxcbiAgICBdLFxuICApXG4gIGNvbnN0IHNob3dDYWxlbmRhciA9IG1vZGUgPT09ICdkYXRlJyB8fCBtb2RlID09PSAnZGF0ZXRpbWUnXG4gIGNvbnN0IHNob3dUaW1lID0gbW9kZSA9PT0gJ3RpbWUnIHx8IG1vZGUgPT09ICdkYXRldGltZSdcblxuICAvKiAtLS0tIGludGVybmFsIHN0YXRlIC0tLS0gKi9cbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdmlld1llYXIsIHNldFZpZXdZZWFyXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+XG4gICAgcmVzb2x2ZWRWYWx1ZSA/IHJlc29sdmVkVmFsdWUuZ2V0RnVsbFllYXIoKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSlcbiAgY29uc3QgW3ZpZXdNb250aCwgc2V0Vmlld01vbnRoXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+XG4gICAgcmVzb2x2ZWRWYWx1ZSA/IHJlc29sdmVkVmFsdWUuZ2V0TW9udGgoKSA6IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSlcbiAgY29uc3QgW3RlbXBEYXRlLCBzZXRUZW1wRGF0ZV0gPSBSZWFjdC51c2VTdGF0ZTxEYXRlIHwgbnVsbD4ocmVzb2x2ZWRWYWx1ZSlcbiAgY29uc3QgW3RlbXBIb3Vycywgc2V0VGVtcEhvdXJzXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+XG4gICAgcmVzb2x2ZWRWYWx1ZSA/IChyZXNvbHZlZFZhbHVlLmdldEhvdXJzKCkgJSAxMiB8fCAxMikgOiAxMilcbiAgY29uc3QgW3RlbXBNaW5zLCBzZXRUZW1wTWluc10gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PlxuICAgIHJlc29sdmVkVmFsdWUgPyByZXNvbHZlZFZhbHVlLmdldE1pbnV0ZXMoKSA6IDApXG4gIGNvbnN0IFt0ZW1wQW1QbSwgc2V0VGVtcEFtUG1dID0gUmVhY3QudXNlU3RhdGUoKCkgPT5cbiAgICByZXNvbHZlZFZhbHVlID8gKHJlc29sdmVkVmFsdWUuZ2V0SG91cnMoKSA+PSAxMiA/ICdQTScgOiAnQU0nKSA6ICdBTScpXG4gIGNvbnN0IFtzaG93WWVhclBpY2tlciwgc2V0U2hvd1llYXJQaWNrZXJdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt5ZWFyUGFnZSwgc2V0WWVhclBhZ2VdID0gUmVhY3QudXNlU3RhdGUoKCkgPT5cbiAgICBNYXRoLmZsb29yKChyZXNvbHZlZFZhbHVlID8gcmVzb2x2ZWRWYWx1ZS5nZXRGdWxsWWVhcigpIDogbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKSAvIFlFQVJTX1BFUl9QQUdFKSAqIFlFQVJTX1BFUl9QQUdFXG4gIClcbiAgY29uc3QgW3BvcG92ZXJTdHlsZSwgc2V0UG9wb3ZlclN0eWxlXSA9IFJlYWN0LnVzZVN0YXRlPFJlYWN0LkNTU1Byb3BlcnRpZXM+KFBSRV9QT1NJVElPTl9TVFlMRSlcblxuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBwb3BvdmVyUmVmID0gUmVhY3QudXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBwb3J0YWxSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIC8qIC0tLS0gcG9ydGFsIGNvbnRhaW5lciAtLS0tICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGVsLmNsYXNzTmFtZSA9ICdkYXRlcGlja2VyLXBvcnRhbC1yb290J1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpXG4gICAgcG9ydGFsUmVmLmN1cnJlbnQgPSBlbFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoZWwucGFyZW50Tm9kZSkgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbClcbiAgICAgIHBvcnRhbFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyogLS0tLSBzeW5jIHRlbXAgc3RhdGUgd2hlbiB2YWx1ZSBjaGFuZ2VzIGV4dGVybmFsbHkgLS0tLSAqL1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNvbHZlZFZhbHVlICYmICFpc05hTihyZXNvbHZlZFZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgIHNldFRlbXBEYXRlKHJlc29sdmVkVmFsdWUpXG4gICAgICBzZXRWaWV3WWVhcihyZXNvbHZlZFZhbHVlLmdldEZ1bGxZZWFyKCkpXG4gICAgICBzZXRWaWV3TW9udGgocmVzb2x2ZWRWYWx1ZS5nZXRNb250aCgpKVxuICAgICAgc2V0VGVtcEhvdXJzKHJlc29sdmVkVmFsdWUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyKVxuICAgICAgc2V0VGVtcE1pbnMocmVzb2x2ZWRWYWx1ZS5nZXRNaW51dGVzKCkpXG4gICAgICBzZXRUZW1wQW1QbShyZXNvbHZlZFZhbHVlLmdldEhvdXJzKCkgPj0gMTIgPyAnUE0nIDogJ0FNJylcbiAgICAgIHNldFllYXJQYWdlKE1hdGguZmxvb3IocmVzb2x2ZWRWYWx1ZS5nZXRGdWxsWWVhcigpIC8gWUVBUlNfUEVSX1BBR0UpICogWUVBUlNfUEVSX1BBR0UpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRlbXBEYXRlKG51bGwpXG4gICAgfVxuICB9LCBbcmVzb2x2ZWRWYWx1ZV0pXG5cbiAgLyogLS0tLSByZXBvc2l0aW9uIHBvcG92ZXIgb24gb3BlbiAvIHNjcm9sbCAvIHJlc2l6ZSAtLS0tICovXG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAvKiBSZXNldCBzbyB0aGUgbmV4dCBvcGVuIHN0YXJ0cyBoaWRkZW4gdW50aWwgbWVhc3VyZWQg4oCUIHJldXNpbmcgdGhlIGxhc3RcbiAgICAgICAgIHBvc2l0aW9uIHdvdWxkIGZsYXNoIHRoZSBwb3BvdmVyIGF0IHRoZSBwcmV2aW91cyBsb2NhdGlvbiAqL1xuICAgICAgc2V0UG9wb3ZlclN0eWxlKFBSRV9QT1NJVElPTl9TVFlMRSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIE1lYXN1cmUgYWN0dWFsIHBvcG92ZXIgc2l6ZSBzbyB3ZSBwb3NpdGlvbiB3aXRoIG5vIHdhc3RlZCBzcGFjZSAqL1xuICAgIGNvbnN0IGdldEhlaWdodCA9ICgpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKHBvcG92ZXJSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm4gcG9wb3ZlclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxuICAgICAgfVxuICAgICAgcmV0dXJuIFBPUE9WRVJfR1VFU1Nbc2hvd1llYXJQaWNrZXIgPyAneWVhcicgOiBtb2RlXSB8fCAzMDBcbiAgICB9XG4gICAgY29uc3QgZ2V0V2lkdGggPSAoKTogbnVtYmVyID0+IHtcbiAgICAgIGlmIChwb3BvdmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHBvcG92ZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxuICAgICAgfVxuICAgICAgcmV0dXJuIFBPUE9WRVJfV0lEVEhfR1VFU1Nbc2hvd1llYXJQaWNrZXIgPyAneWVhcicgOiBtb2RlXSB8fCAyODBcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoaW5wdXRSZWYuY3VycmVudClcblxuICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIHNldFBvcG92ZXJTdHlsZShjYWxjUG9wb3ZlclN0eWxlKGlucHV0UmVmLmN1cnJlbnQsIGdldEhlaWdodCgpLCBnZXRXaWR0aCgpKSlcbiAgICB9XG4gICAgLyogUG9zaXRpb24gc3luY2hyb25vdXNseSBiZWZvcmUgcGFpbnQg4oCUIHRoZSBwb3BvdmVyIGlzIGFscmVhZHkgbW91bnRlZFxuICAgICAgIChoaWRkZW4sIGNvbnRlbnQtc2l6ZWQgdmlhIFBSRV9QT1NJVElPTl9TVFlMRSkgc28gbWVhc3VyZW1lbnRzIGFyZSByZWFsICovXG4gICAgdXBkYXRlKClcblxuICAgIC8qIFRocm90dGxlIHNjcm9sbC9yZXNpemUgcmVwb3NpdGlvbmluZyB0byBhbmltYXRpb24gZnJhbWVzICovXG4gICAgbGV0IHJhZiA9IDBcbiAgICBjb25zdCBzY2hlZHVsZVVwZGF0ZSA9ICgpID0+IHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZilcbiAgICAgIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGUpXG4gICAgfVxuXG4gICAgLyogTGlzdGVuIG9uIHRoZSBuZWFyZXN0IHNjcm9sbGFibGUgYW5jZXN0b3IgKGUuZy4gbW9kYWwgYm9keSkgQU5EIHRoZSB3aW5kb3cgKi9cbiAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2NoZWR1bGVVcGRhdGUsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzY2hlZHVsZVVwZGF0ZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKVxuICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHNjaGVkdWxlVXBkYXRlKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHNjaGVkdWxlVXBkYXRlKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbW9kZSwgc2hvd1llYXJQaWNrZXJdKVxuXG4gIC8qIC0tLS0gY2xpY2sgb3V0c2lkZSB0byBjbG9zZSAtLS0tICovXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHJldHVyblxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHBvcG92ZXJSZWYuY3VycmVudCAmJiAhcG9wb3ZlclJlZi5jdXJyZW50LmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpICYmXG4gICAgICAgICAgaW5wdXRSZWYuY3VycmVudCAmJiAhaW5wdXRSZWYuY3VycmVudC5jb250YWlucyhlLnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgICBzZXRJc09wZW4oZmFsc2UpXG4gICAgICAgIHNldFNob3dZZWFyUGlja2VyKGZhbHNlKVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVyKVxuICB9LCBbaXNPcGVuXSlcblxuICAvKiAtLS0tIGNvbW1pdCBoZWxwZXJzIC0tLS0gKi9cbiAgY29uc3QgYnVpbGREYXRlID0gKGJhc2U6IERhdGUsIGgxMjogbnVtYmVyLCBtaW5zOiBudW1iZXIsIGFtcG06IHN0cmluZyk6IERhdGUgPT4ge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShiYXNlKVxuICAgIGxldCBoID0gaDEyICUgMTJcbiAgICBpZiAoYW1wbSA9PT0gJ1BNJykgaCArPSAxMlxuICAgIGlmIChoID09PSAxMiAmJiBhbXBtID09PSAnQU0nKSBoID0gMFxuICAgIGQuc2V0SG91cnMoaCwgbWlucywgMCwgMClcbiAgICByZXR1cm4gZFxuICB9XG5cbiAgLyoqXG4gICAqIEZpcmUgb25DaGFuZ2Ugd2l0aCBhIHByZS1idWlsdCBkYXRlIHdpdGhvdXQgY2xvc2luZyB0aGUgcG9wb3Zlci5cbiAgICogQ2FsbGVycyBtdXN0IGJ1aWxkIHRoZSBjb21wbGV0ZSBkYXRlIChpbmNsdWRpbmcgdGltZSkgYmVmb3JlIHBhc3NpbmcgaXQgaW4uXG4gICAqL1xuICBjb25zdCBmaXJlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCBudWxsKTogdm9pZCA9PiB7XG4gICAgaWYgKCFkYXRlIHx8IGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuXG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VmFsdWUoZGF0ZSwgbW9kZSwgZGF0ZUZvcm1hdClcbiAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChmb3JtYXR0ZWQsIG5hbWUgfHwgJycsIG1vZGUpKVxuICB9XG5cbiAgY29uc3QgY29tbWl0ID0gKGRhdGU6IERhdGUgfCBudWxsKTogdm9pZCA9PiB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChudWxsLCBuYW1lIHx8ICcnLCBtb2RlKSlcbiAgICAgIHNldElzT3BlbihmYWxzZSlcbiAgICAgIHNldFNob3dZZWFyUGlja2VyKGZhbHNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGZpcmVDaGFuZ2UoZGF0ZSlcbiAgICBpZiAobW9kZSA9PT0gJ2RhdGUnKSB7IHNldElzT3BlbihmYWxzZSk7IHNldFNob3dZZWFyUGlja2VyKGZhbHNlKSB9XG4gIH1cblxuICBjb25zdCBjb21taXREYXRlT25seSA9IChkYXRlOiBEYXRlKTogdm9pZCA9PiB7XG4gICAgc2V0VGVtcERhdGUoZGF0ZSlcbiAgICBpZiAobW9kZSA9PT0gJ2RhdGUnKSB7XG4gICAgICBjb21taXQoZGF0ZSlcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdkYXRldGltZScpIHtcbiAgICAgIC8vIEJ1aWxkIGZ1bGwgZGF0ZXRpbWUgKGRhdGUgKyBjdXJyZW50IHRpbWUgc2VsZWN0aW9uKSBhbmQgZmlyZVxuICAgICAgY29uc3QgZCA9IGJ1aWxkRGF0ZShkYXRlLCB0ZW1wSG91cnMsIHRlbXBNaW5zLCB0ZW1wQW1QbSlcbiAgICAgIGZpcmVDaGFuZ2UoZClcbiAgICB9XG4gIH1cblxuICAvKiAtLS0tIGNhbGVuZGFyIGdyaWQgLS0tLSAqL1xuICBjb25zdCBncmlkID0gYnVpbGRDYWxlbmRhckdyaWQodmlld1llYXIsIHZpZXdNb250aClcblxuICBjb25zdCBoYW5kbGVQcmV2TW9udGggPSAoKSA9PiB7XG4gICAgbGV0IG5ld1kgPSB2aWV3WWVhciwgbmV3TSA9IHZpZXdNb250aFxuICAgIGlmICh2aWV3TW9udGggPT09IDApIHsgbmV3WSA9IHZpZXdZZWFyIC0gMTsgbmV3TSA9IDExIH1cbiAgICBlbHNlIG5ld00gPSB2aWV3TW9udGggLSAxXG4gICAgc2V0Vmlld1llYXIobmV3WSk7IHNldFZpZXdNb250aChuZXdNKVxuICAgIGNvbnN0IGJhc2UgPSB0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpXG4gICAgY29uc3QgbWF4RCA9IGRheXNJbk1vbnRoKG5ld1ksIG5ld00pXG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKG5ld1ksIG5ld00sIE1hdGgubWluKGJhc2UuZ2V0RGF0ZSgpLCBtYXhEKSlcbiAgICBzZXRUZW1wRGF0ZShuZXdEYXRlKVxuICAgIGZpcmVDaGFuZ2Uoc2hvd1RpbWUgPyBidWlsZERhdGUobmV3RGF0ZSwgdGVtcEhvdXJzLCB0ZW1wTWlucywgdGVtcEFtUG0pIDogbmV3RGF0ZSlcbiAgfVxuICBjb25zdCBoYW5kbGVOZXh0TW9udGggPSAoKSA9PiB7XG4gICAgbGV0IG5ld1kgPSB2aWV3WWVhciwgbmV3TSA9IHZpZXdNb250aFxuICAgIGlmICh2aWV3TW9udGggPT09IDExKSB7IG5ld1kgPSB2aWV3WWVhciArIDE7IG5ld00gPSAwIH1cbiAgICBlbHNlIG5ld00gPSB2aWV3TW9udGggKyAxXG4gICAgc2V0Vmlld1llYXIobmV3WSk7IHNldFZpZXdNb250aChuZXdNKVxuICAgIGNvbnN0IGJhc2UgPSB0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpXG4gICAgY29uc3QgbWF4RCA9IGRheXNJbk1vbnRoKG5ld1ksIG5ld00pXG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKG5ld1ksIG5ld00sIE1hdGgubWluKGJhc2UuZ2V0RGF0ZSgpLCBtYXhEKSlcbiAgICBzZXRUZW1wRGF0ZShuZXdEYXRlKVxuICAgIGZpcmVDaGFuZ2Uoc2hvd1RpbWUgPyBidWlsZERhdGUobmV3RGF0ZSwgdGVtcEhvdXJzLCB0ZW1wTWlucywgdGVtcEFtUG0pIDogbmV3RGF0ZSlcbiAgfVxuXG4gIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAvKiBtaW4vbWF4IGFjY2VwdCB0aGUgc2FtZSBmbGV4aWJsZSBpbnB1dHMgYXMgYHZhbHVlYCAoRGF0ZSwgc3RyaW5nLCB0aW1lc3RhbXApIOKAlFxuICAgICBhIGZvcm1hdHRlZCBzdHJpbmcgZnJvbSBhbm90aGVyIERhdGVQaWNrZXIncyBvbkNoYW5nZSBpcyBhIGNvbW1vbiBzb3VyY2UgKi9cbiAgY29uc3QgcmVzb2x2ZWRNaW4gPSByZXNvbHZlVmFsdWUobWluRGF0ZSlcbiAgY29uc3QgcmVzb2x2ZWRNYXggPSByZXNvbHZlVmFsdWUobWF4RGF0ZSlcbiAgY29uc3QgbWluRHQgPSByZXNvbHZlZE1pbiA/IG5ldyBEYXRlKHJlc29sdmVkTWluLmdldEZ1bGxZZWFyKCksIHJlc29sdmVkTWluLmdldE1vbnRoKCksIHJlc29sdmVkTWluLmdldERhdGUoKSkgOiBudWxsXG4gIGNvbnN0IG1heER0ID0gcmVzb2x2ZWRNYXggPyBuZXcgRGF0ZShyZXNvbHZlZE1heC5nZXRGdWxsWWVhcigpLCByZXNvbHZlZE1heC5nZXRNb250aCgpLCByZXNvbHZlZE1heC5nZXREYXRlKCkpIDogbnVsbFxuXG4gIC8qIC0tLS0gdGltZSBjaGFuZ2UgaGFuZGxlcnMgLS0tLSAqL1xuICBjb25zdCBoYW5kbGVIb3VyQ2hhbmdlID0gKGg6IG51bWJlcikgPT4ge1xuICAgIHNldFRlbXBIb3VycyhoKVxuICAgIGlmIChzaG93VGltZSkge1xuICAgICAgY29uc3QgZCA9IGJ1aWxkRGF0ZSh0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpLCBoLCB0ZW1wTWlucywgdGVtcEFtUG0pXG4gICAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChmb3JtYXRWYWx1ZShkLCBtb2RlLCBkYXRlRm9ybWF0KSwgbmFtZSB8fCAnJywgbW9kZSkpXG4gICAgfVxuICB9XG4gIGNvbnN0IGhhbmRsZU1pbkNoYW5nZSA9IChtOiBudW1iZXIpID0+IHtcbiAgICBzZXRUZW1wTWlucyhtKVxuICAgIGlmIChzaG93VGltZSkge1xuICAgICAgY29uc3QgZCA9IGJ1aWxkRGF0ZSh0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpLCB0ZW1wSG91cnMsIG0sIHRlbXBBbVBtKVxuICAgICAgb25DaGFuZ2U/LihtYWtlRXZlbnQoZm9ybWF0VmFsdWUoZCwgbW9kZSwgZGF0ZUZvcm1hdCksIG5hbWUgfHwgJycsIG1vZGUpKVxuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVBbVBtQ2hhbmdlID0gKGFwOiBzdHJpbmcpID0+IHtcbiAgICBzZXRUZW1wQW1QbShhcClcbiAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgIGNvbnN0IGQgPSBidWlsZERhdGUodGVtcERhdGUgfHwgbmV3IERhdGUoKSwgdGVtcEhvdXJzLCB0ZW1wTWlucywgYXApXG4gICAgICBvbkNoYW5nZT8uKG1ha2VFdmVudChmb3JtYXRWYWx1ZShkLCBtb2RlLCBkYXRlRm9ybWF0KSwgbmFtZSB8fCAnJywgbW9kZSkpXG4gICAgfVxuICB9XG5cbiAgLyogLS0tLSB5ZWFyIHBpY2tlciAtLS0tICovXG4gIGNvbnN0IG9wZW5ZZWFyUGlja2VyID0gKCkgPT4ge1xuICAgIHNldFllYXJQYWdlKE1hdGguZmxvb3Iodmlld1llYXIgLyBZRUFSU19QRVJfUEFHRSkgKiBZRUFSU19QRVJfUEFHRSlcbiAgICBzZXRTaG93WWVhclBpY2tlcih0cnVlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlWWVhclNlbGVjdCA9ICh5OiBudW1iZXIpID0+IHtcbiAgICBzZXRWaWV3WWVhcih5KVxuICAgIHNldFNob3dZZWFyUGlja2VyKGZhbHNlKVxuICAgIGNvbnN0IGJhc2UgPSB0ZW1wRGF0ZSB8fCBuZXcgRGF0ZSgpXG4gICAgY29uc3QgbWF4RCA9IGRheXNJbk1vbnRoKHksIHZpZXdNb250aClcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoeSwgdmlld01vbnRoLCBNYXRoLm1pbihiYXNlLmdldERhdGUoKSwgbWF4RCkpXG4gICAgc2V0VGVtcERhdGUobmV3RGF0ZSlcbiAgICBmaXJlQ2hhbmdlKHNob3dUaW1lID8gYnVpbGREYXRlKG5ld0RhdGUsIHRlbXBIb3VycywgdGVtcE1pbnMsIHRlbXBBbVBtKSA6IG5ld0RhdGUpXG4gIH1cblxuICBjb25zdCB5ZWFyUGFnZVN0YXJ0ID0gTWF0aC5mbG9vcih5ZWFyUGFnZSAvIFlFQVJTX1BFUl9QQUdFKSAqIFlFQVJTX1BFUl9QQUdFXG4gIGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogWUVBUlNfUEVSX1BBR0UgfSwgKF8sIGkpID0+IHllYXJQYWdlU3RhcnQgKyBpKVxuXG4gIC8qIC0tLS0gY2xlYXIgLS0tLSAqL1xuICBjb25zdCBoYW5kbGVDbGVhciA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNldFRlbXBEYXRlKG51bGwpXG4gICAgb25DaGFuZ2U/LihtYWtlRXZlbnQobnVsbCwgbmFtZSB8fCAnJykpXG4gIH1cblxuICAvKiAtLS0tIGtleWJvYXJkIC0tLS0gKi9cbiAgY29uc3QgaGFuZGxlSW5wdXRLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7IHNldElzT3BlbihmYWxzZSk7IHNldFNob3dZZWFyUGlja2VyKGZhbHNlKTsgaW5wdXRSZWYuY3VycmVudD8uYmx1cigpIH1cbiAgICBpZiAoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgc2V0SXNPcGVuKHRydWUpXG4gICAgfVxuICB9XG5cbiAgLyogLS0tLSBtZXJnZWQgcmVmIC0tLS0gKi9cbiAgY29uc3QgbWVyZ2VJbnB1dFJlZiA9IFJlYWN0LnVzZUNhbGxiYWNrKChub2RlOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgIGlucHV0UmVmLmN1cnJlbnQgPSBub2RlXG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHJlZihub2RlKVxuICAgIGVsc2UgaWYgKHJlZikgcmVmLmN1cnJlbnQgPSBub2RlXG4gIH0sIFtyZWZdKVxuXG4gIC8qIC0tLS0gcmVuZGVyIC0tLS0gKi9cbiAgY29uc3QgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlclRleHRcbiAgICA/PyAobW9kZSA9PT0gJ3RpbWUnID8gJ1NlbGVjdCB0aW1lJyA6IG1vZGUgPT09ICdkYXRldGltZScgPyAnU2VsZWN0IGRhdGUgJiB0aW1lJyA6ICdTZWxlY3QgZGF0ZScpXG5cbiAgY29uc3QgcG9wb3ZlciA9IChcbiAgICA8ZGl2XG4gICAgICByZWY9e3BvcG92ZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZGF0ZXBpY2tlci1wb3BvdmVyIGNhcmQgYm9yZGVyIHNoYWRvdy1zbScsXG4gICAgICAgIG1vZGUgPT09ICdkYXRldGltZScgJiYgJ2RhdGVwaWNrZXItcG9wb3Zlci0td2lkZSdcbiAgICAgICl9XG4gICAgICBzdHlsZT17cG9wb3ZlclN0eWxlfVxuICAgID5cbiAgICAgIHsvKiA9PT09PT09PT09PT09PSBZRUFSIFBJQ0tFUiA9PT09PT09PT09PT09PSAqL31cbiAgICAgIHtzaG93WWVhclBpY2tlciAmJiBzaG93Q2FsZW5kYXIgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXIteWVhci1waWNrZXIgcC0zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci0wIHB4LTFcIiBvbkNsaWNrPXsoKSA9PiBzZXRZZWFyUGFnZSh5ZWFyUGFnZSAtIFlFQVJTX1BFUl9QQUdFKX0gYXJpYS1sYWJlbD1cIlByZXZpb3VzIHllYXJzXCI+JmxzYXF1bzs8L2J1dHRvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZ3LXNlbWlib2xkIHNtYWxsXCI+e3llYXJQYWdlU3RhcnR9IOKAkyB7eWVhclBhZ2VTdGFydCArIFlFQVJTX1BFUl9QQUdFIC0gMX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBib3JkZXItMCBweC0xXCIgb25DbGljaz17KCkgPT4gc2V0WWVhclBhZ2UoeWVhclBhZ2UgKyBZRUFSU19QRVJfUEFHRSl9IGFyaWEtbGFiZWw9XCJOZXh0IHllYXJzXCI+JnJzYXF1bzs8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXIteWVhci1ncmlkXCI+XG4gICAgICAgICAgICB7eWVhcnMubWFwKCh5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudFllYXIgPSB5ID09PSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRlbXBEYXRlICYmIHkgPT09IHRlbXBEYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e3l9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICdkYXRlcGlja2VyLXllYXItY2VsbCBidG4gYnRuLXNtJyxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCAmJiAnYnRuLXByaW1hcnknLFxuICAgICAgICAgICAgICAgICAgICAhaXNTZWxlY3RlZCAmJiBpc0N1cnJlbnRZZWFyICYmICdidG4tb3V0bGluZS1wcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgIWlzU2VsZWN0ZWQgJiYgIWlzQ3VycmVudFllYXIgJiYgJ2J0bi1saWdodCBib3JkZXInXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlWWVhclNlbGVjdCh5KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qID09PT09PT09PT09PT09IENBTEVOREFSICsgVElNRSA9PT09PT09PT09PT09PSAqL31cbiAgICAgIHshc2hvd1llYXJQaWNrZXIgJiYgKFxuICAgICAgICA8PlxuXG4gICAgICAgICAgey8qIC0tLS0gQ0FMRU5EQVIgKyBUSU1FIENPTlRBSU5FUiAtLS0tICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbignZC1mbGV4JywgbW9kZSA9PT0gJ2RhdGV0aW1lJyA/ICdmbGV4LXJvdycgOiAnZmxleC1jb2x1bW4nKX0+XG5cbiAgICAgICAgICB7LyogLS0tLSBDQUxFTkRBUiAtLS0tICovfVxuICAgICAgICAgIHtzaG93Q2FsZW5kYXIgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLWNhbGVuZGFyIHAtMlwiPlxuICAgICAgICAgICAgICB7LyogTW9udGggLyBZZWFyIGhlYWRlciAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBib3JkZXItMCBweC0xXCIgb25DbGljaz17aGFuZGxlUHJldk1vbnRofSBhcmlhLWxhYmVsPVwiUHJldmlvdXMgbW9udGhcIj4mbHNhcXVvOzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZnctc2VtaWJvbGQgc21hbGxcIj57TU9OVEhTW3ZpZXdNb250aF19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1zbSBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LXByaW1hcnkgZnctc2VtaWJvbGQgc21hbGwgcC0wXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b3BlblllYXJQaWNrZXJ9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDaG9vc2UgeWVhclwiXG4gICAgICAgICAgICAgICAgICA+e3ZpZXdZZWFyfTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci0wIHB4LTFcIiBvbkNsaWNrPXtoYW5kbGVOZXh0TW9udGh9IGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCI+JnJzYXF1bzs8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIERheS1vZi13ZWVrIGhlYWRlcnMgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci1kYXlzLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIHtEQVlTX09GX1dFRUsubWFwKGQgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2R9IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItZGF5LWxhYmVsXCI+e2R9PC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBEYXkgZ3JpZCAqL31cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLWRheXMtZ3JpZFwiPlxuICAgICAgICAgICAgICAgIHtncmlkLm1hcCgoY2VsbCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGlzU2FtZURheShjZWxsLmRhdGUsIHRvZGF5KVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRlbXBEYXRlICYmIGlzU2FtZURheShjZWxsLmRhdGUsIHRlbXBEYXRlKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaW5SYW5nZSA9IGlzRGF0ZUluUmFuZ2UoY2VsbC5kYXRlLCBtaW5EdCwgbWF4RHQpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0Rpc2FibGVkRGF5ID0gY2VsbC5pc091dHNpZGUgfHwgIWluUmFuZ2VcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZERheX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGVwaWNrZXItZGF5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG9kYXkgJiYgJ2RhdGVwaWNrZXItZGF5LS10b2RheScsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkICYmICdkYXRlcGlja2VyLWRheS0tc2VsZWN0ZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pc091dHNpZGUgJiYgJ2RhdGVwaWNrZXItZGF5LS1vdXRzaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICFpblJhbmdlICYmICdkYXRlcGlja2VyLWRheS0tZGlzYWJsZWQnXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjb21taXREYXRlT25seShjZWxsLmRhdGUpfVxuICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXtjZWxsLmlzT3V0c2lkZSA/IC0xIDogMH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtjZWxsLmRheX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHsvKiAtLS0tIERJVklERVIgKGRhdGV0aW1lIG1vZGUpIC0tLS0gKi99XG4gICAgICAgICAge21vZGUgPT09ICdkYXRldGltZScgJiYgPGRpdiBjbGFzc05hbWU9XCJ2ciBteC0xIG15LTJcIiAvPn1cblxuICAgICAgICAgIHsvKiAtLS0tIFRJTUUgLS0tLSAqL31cbiAgICAgICAgICB7c2hvd1RpbWUgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLXRpbWUgcC0yIGQtZmxleCBmbGV4LWNvbHVtblwiIHN0eWxlPXt7IG1pbldpZHRoOiAxODAgfX0+XG4gICAgICAgICAgICAgIHttb2RlID09PSAnZGF0ZXRpbWUnICYmIDxkaXYgY2xhc3NOYW1lPVwic21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZCB0ZXh0LWNlbnRlciBtYi0xXCI+VGltZTwvZGl2Pn1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHsvKiBIb3VyIGNvbHVtbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItdGltZS1jb2xcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci10aW1lLWNvbC1sYWJlbFwiPkhvdXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci10aW1lLWNvbC1zY3JvbGxcIj5cbiAgICAgICAgICAgICAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiBpICsgMSkubWFwKGggPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignZGF0ZXBpY2tlci10aW1lLWl0ZW0nLCBoID09PSB0ZW1wSG91cnMgJiYgJ2FjdGl2ZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlSG91ckNoYW5nZShoKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKGgpLnBhZFN0YXJ0KDIsICcwJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci10aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgICAgICAgICAgey8qIE1pbnV0ZSBjb2x1bW4gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLXRpbWUtY29sXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItdGltZS1jb2wtbGFiZWxcIj5NaW48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGF0ZXBpY2tlci10aW1lLWNvbC1zY3JvbGxcIj5cbiAgICAgICAgICAgICAgICAgICAge01JTlVURVMubWFwKG0gPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignZGF0ZXBpY2tlci10aW1lLWl0ZW0nLCBtID09PSB0ZW1wTWlucyAmJiAnYWN0aXZlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNaW5DaGFuZ2UobSl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIHsvKiBBTS9QTSBjb2x1bW4gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkYXRlcGlja2VyLXRpbWUtY29sXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItdGltZS1jb2wtbGFiZWxcIj4mbmJzcDs8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0xIG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAge1snQU0nLCAnUE0nXS5tYXAoYXAgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YXB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ2RhdGVwaWNrZXItdGltZS1pdGVtJywgJ2RhdGVwaWNrZXItdGltZS1pdGVtLS1hbXBtJywgdGVtcEFtUG0gPT09IGFwICYmICdhY3RpdmUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFtUG1DaGFuZ2UoYXApfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthcH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImRhdGVwaWNrZXItd3JhcHBlciBwb3NpdGlvbi1yZWxhdGl2ZSBkLWlubGluZS1ibG9jayB3LTEwMFwiIHN0eWxlPXt7IG1pbldpZHRoOiAwIH19PlxuICAgICAgey8qIC0tLS0gSW5wdXQgLS0tLSAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgcmVmPXttZXJnZUlucHV0UmVmfVxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICByZWFkT25seVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2Zvcm0tY29udHJvbCcsXG4gICAgICAgICAgICBzaXplID09PSAnc20nICYmICdmb3JtLWNvbnRyb2wtc20nLFxuICAgICAgICAgICAgc2l6ZSA9PT0gJ2xnJyAmJiAnZm9ybS1jb250cm9sLWxnJyxcbiAgICAgICAgICAgICdwZS01JyxcbiAgICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICAgICl9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIHZhbHVlPXtmb3JtYXRWYWx1ZShyZXNvbHZlZFZhbHVlLCBtb2RlLCBkYXRlRm9ybWF0KX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAhZGlzYWJsZWQgJiYgc2V0SXNPcGVuKCFpc09wZW4pfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlSW5wdXRLZXlEb3dufVxuICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIlxuICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e2lzT3Blbn1cbiAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgLz5cbiAgICAgICAgey8qIGNsZWFyIGJ1dHRvbiAqL31cbiAgICAgICAge2lzQ2xlYXJhYmxlICYmIHJlc29sdmVkVmFsdWUgJiYgIWRpc2FibGVkICYmIChcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tc20gYnRuLWxpbmsgcG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIGVuZC0wIHRyYW5zbGF0ZS1taWRkbGUteSBwZS0yIHRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogMiB9fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJ9XG4gICAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICZ0aW1lcztcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogLS0tLSBQb3J0YWwgdGhlIHBvcG92ZXIgdG8gZG9jdW1lbnQuYm9keSAtLS0tICovfVxuICAgICAge2lzT3BlbiAmJiAhZGlzYWJsZWQgJiYgcG9ydGFsUmVmLmN1cnJlbnQgJiYgY3JlYXRlUG9ydGFsKHBvcG92ZXIsIHBvcnRhbFJlZi5jdXJyZW50KX1cbiAgICA8L2Rpdj5cbiAgKVxufSlcblxuRGF0ZVBpY2tlci5kaXNwbGF5TmFtZSA9ICdEYXRlUGlja2VyJ1xuXG5leHBvcnQgeyBEYXRlUGlja2VyIH1cbmV4cG9ydCBkZWZhdWx0IERhdGVQaWNrZXJcbiJdfQ==
|
package/dist/css/datepicker.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;width:1%;min-width:0;position:relative}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}
|
|
1
|
+
.input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;width:1%;min-width:0;position:relative}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}.navpills-bar{padding-top:4px;padding-bottom:4px}.navpills-badge-clear{color:var(--bs-danger,#dc3545);background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .12);cursor:pointer;font-size:10px;line-height:1.2}.navpills-badge-clear:hover{background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .25)}.nav-link.active .navpills-badge-clear{color:#fff;background-color:#ffffff40}.navpills-badge-new{color:var(--bs-success,#198754);background-color:rgba(var(--bs-success-rgb,25, 135, 84), .12);border:1px solid var(--bs-success,#198754)}.nav-link.active .navpills-badge-new{color:#fff;background-color:#fff3;border-color:#fff9}[data-bs-theme=dark] .navpills-bar.bg-light{background-color:var(--bs-tertiary-bg,#2b3035)!important}
|
package/dist/css/plugins.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;width:1%;min-width:0;position:relative}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}
|
|
1
|
+
.input-group>.datepicker-wrapper,.input-group>.searchselect-wrapper{flex:auto;width:1%;min-width:0;position:relative}.input-group>.datepicker-wrapper:not(:first-child) .form-control,.input-group>.searchselect-wrapper:not(:first-child) .form-select{border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.datepicker-wrapper:not(:last-child) .form-control,.input-group>.searchselect-wrapper:not(:last-child) .form-select{border-top-right-radius:0;border-bottom-right-radius:0}.datepicker-popover{border-radius:var(--bs-border-radius,.375rem);-webkit-user-select:none;user-select:none;box-shadow:0 .5rem 1rem #00000026}.datepicker-popover--wide{min-width:420px}.datepicker-calendar{min-width:260px}.datepicker-days-header,.datepicker-days-grid{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.datepicker-day-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;text-align:center;width:34px;padding:2px 0;font-size:.7rem;font-weight:600}.datepicker-day{width:34px;height:34px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:0 auto;padding:0;font-size:.8rem;font-weight:400;transition:background-color .15s ease-in-out,color .15s ease-in-out;display:flex}.datepicker-day:hover:not(:disabled):not(.datepicker-day--selected){background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-day--today{border:1px solid var(--bs-border-color,#dee2e6);font-weight:700}.datepicker-day--selected{font-weight:600;background-color:var(--bs-primary,#0d6efd)!important;color:#fff!important}.datepicker-day--outside{color:var(--bs-tertiary-color,#adb5bd);opacity:.45;pointer-events:none}.datepicker-day--disabled{color:var(--bs-tertiary-color,#adb5bd);opacity:.35;cursor:not-allowed;pointer-events:none}.datepicker-year-picker{min-width:260px}.datepicker-year-grid{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.datepicker-year-cell{text-align:center;padding:6px 4px;font-size:.85rem}.datepicker-time{min-width:120px}.datepicker-time-col{flex-direction:column;flex:none;align-items:center;width:52px;display:flex}.datepicker-time-col-label{color:var(--bs-secondary-color,#6c757d);text-transform:uppercase;letter-spacing:.04em;-webkit-user-select:none;user-select:none;margin-bottom:2px;font-size:.6rem;font-weight:600}.datepicker-time-col-scroll{scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;flex-direction:column;align-items:center;gap:1px;height:220px;display:flex;overflow-y:scroll}.datepicker-time-col-scroll::-webkit-scrollbar{display:none}.datepicker-time-item{width:44px;height:30px;color:var(--bs-body-color,#212529);border-radius:var(--bs-border-radius-sm,.25rem);cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:.82rem;font-weight:500;transition:background-color .1s,color .1s;display:flex}.datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#cfe2ff)}.datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff;font-weight:600}.datepicker-time-item--ampm{width:46px;height:36px;font-size:.78rem}.datepicker-time-separator{color:var(--bs-body-color,#212529);flex:none;align-self:center;margin-top:14px;font-size:1.1rem;font-weight:600}.datepicker-footer{border-bottom-left-radius:var(--bs-border-radius,.375rem);border-bottom-right-radius:var(--bs-border-radius,.375rem)}[data-bs-theme=dark] .datepicker-popover{background-color:var(--bs-body-bg,#212529);border-color:var(--bs-border-color,#495057)}[data-bs-theme=dark] .datepicker-day:hover:not(:disabled):not(.datepicker-day--selected),[data-bs-theme=dark] .datepicker-time-item:hover{background-color:var(--bs-primary-bg-subtle,#2c3e50)}[data-bs-theme=dark] .datepicker-time-item.active{background-color:var(--bs-primary,#0d6efd);color:#fff}[data-bs-theme=dark] .datepicker-footer{border-top-color:var(--bs-border-color,#495057)}@media (max-width:575.98px){.datepicker-popover{overflow-x:hidden;max-width:calc(100vw - 8px)!important}.datepicker-popover--wide .d-flex.flex-row{flex-direction:column!important}.datepicker-popover--wide .vr{display:none}.datepicker-day{width:28px;height:28px;font-size:.72rem}.datepicker-day-label{width:28px;font-size:.62rem}.datepicker-calendar,.datepicker-year-picker{min-width:210px}.datepicker-time-col-scroll{height:200px}.datepicker-time-item{width:38px;height:26px;font-size:.75rem}.datepicker-time-item--ampm{width:40px;height:32px}.datepicker-time-separator{margin-top:12px;font-size:1rem}.datepicker-footer .btn{min-height:34px;padding:6px 8px;font-size:.8rem}.datepicker-year-cell{min-height:34px;padding:8px 4px;font-size:.8rem}}.navpills-bar{padding-top:4px;padding-bottom:4px}.navpills-badge-clear{color:var(--bs-danger,#dc3545);background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .12);cursor:pointer;font-size:10px;line-height:1.2}.navpills-badge-clear:hover{background-color:rgba(var(--bs-danger-rgb,220, 53, 69), .25)}.nav-link.active .navpills-badge-clear{color:#fff;background-color:#ffffff40}.navpills-badge-new{color:var(--bs-success,#198754);background-color:rgba(var(--bs-success-rgb,25, 135, 84), .12);border:1px solid var(--bs-success,#198754)}.nav-link.active .navpills-badge-new{color:#fff;background-color:#fff3;border-color:#fff9}[data-bs-theme=dark] .navpills-bar.bg-light{background-color:var(--bs-tertiary-bg,#2b3035)!important}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunkR5OO66VE_cjs=require('./chunk-R5OO66VE.cjs'),chunkAWU5XGMI_cjs=require('./chunk-AWU5XGMI.cjs'),chunk2Q4NZKMX_cjs=require('./chunk-2Q4NZKMX.cjs'),chunk5IOLZUVD_cjs=require('./chunk-5IOLZUVD.cjs'),chunkM3OUUXZG_cjs=require('./chunk-M3OUUXZG.cjs'),chunkG26VJJWL_cjs=require('./chunk-G26VJJWL.cjs');require('./chunk-NPQQDBFB.cjs');Object.defineProperty(exports,"DatePicker",{enumerable:true,get:function(){return chunkR5OO66VE_cjs.a}});Object.defineProperty(exports,"SearchSelect",{enumerable:true,get:function(){return chunkAWU5XGMI_cjs.a}});Object.defineProperty(exports,"Label",{enumerable:true,get:function(){return chunk2Q4NZKMX_cjs.a}});Object.defineProperty(exports,"TableLoading",{enumerable:true,get:function(){return chunk5IOLZUVD_cjs.a}});Object.defineProperty(exports,"AutoTextarea",{enumerable:true,get:function(){return chunkM3OUUXZG_cjs.a}});Object.defineProperty(exports,"NavPills",{enumerable:true,get:function(){return chunkG26VJJWL_cjs.a}});//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmRleC5janMifQ==
|
package/dist/index.d.cts
CHANGED
|
@@ -2,4 +2,6 @@ export { DatePicker, DatePickerChangeEvent, DatePickerProps } from './DatePicker
|
|
|
2
2
|
export { SearchSelect, SearchSelectProps } from './SearchSelect.cjs';
|
|
3
3
|
export { Label, LabelProps } from './Label.cjs';
|
|
4
4
|
export { TableLoading, TableLoadingProps } from './TableLoading.cjs';
|
|
5
|
+
export { AutoTextarea, AutoTextareaProps } from './AutoTextarea.cjs';
|
|
6
|
+
export { NavPill, NavPills, NavPillsProps } from './NavPills.cjs';
|
|
5
7
|
import 'react';
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ export { DatePicker, DatePickerChangeEvent, DatePickerProps } from './DatePicker
|
|
|
2
2
|
export { SearchSelect, SearchSelectProps } from './SearchSelect.js';
|
|
3
3
|
export { Label, LabelProps } from './Label.js';
|
|
4
4
|
export { TableLoading, TableLoadingProps } from './TableLoading.js';
|
|
5
|
+
export { AutoTextarea, AutoTextareaProps } from './AutoTextarea.js';
|
|
6
|
+
export { NavPill, NavPills, NavPillsProps } from './NavPills.js';
|
|
5
7
|
import 'react';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a as DatePicker}from'./chunk-
|
|
1
|
+
export{a as DatePicker}from'./chunk-GCPYN7WB.js';export{a as SearchSelect}from'./chunk-ZCAQ7S2A.js';export{a as Label}from'./chunk-HYB5IGJK.js';export{a as TableLoading}from'./chunk-7LXLWNUR.js';export{a as AutoTextarea}from'./chunk-KKWFIJKN.js';export{a as NavPills}from'./chunk-KVUHNUBG.js';import'./chunk-RR7TBRGI.js';//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJpbmRleC5qcyJ9
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# AutoTextarea
|
|
2
|
+
|
|
3
|
+
> Bootstrap 5 textarea that automatically grows and shrinks to fit its content. Grows up to `maxRows` (or a pixel `maxHeight` cap), then becomes scrollable. Zero dependencies.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Import
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
// Default import (recommended for single-component tree-shaking)
|
|
11
|
+
import AutoTextarea from 'react-bootstrap-plugins/AutoTextarea'
|
|
12
|
+
|
|
13
|
+
// Named import from individual entry point
|
|
14
|
+
import { AutoTextarea } from 'react-bootstrap-plugins/AutoTextarea'
|
|
15
|
+
|
|
16
|
+
// Barrel import
|
|
17
|
+
import { AutoTextarea } from 'react-bootstrap-plugins'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Basic Usage
|
|
23
|
+
|
|
24
|
+
```jsx
|
|
25
|
+
import { useState } from 'react'
|
|
26
|
+
import { AutoTextarea } from 'react-bootstrap-plugins'
|
|
27
|
+
|
|
28
|
+
function CommentForm() {
|
|
29
|
+
const [comment, setComment] = useState('')
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<AutoTextarea
|
|
33
|
+
name="comment"
|
|
34
|
+
value={comment}
|
|
35
|
+
onChange={e => setComment(e.target.value)}
|
|
36
|
+
placeholder="Write a comment…"
|
|
37
|
+
minRows={2}
|
|
38
|
+
maxRows={8}
|
|
39
|
+
/>
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The textarea starts at `minRows` tall, grows line-by-line as the user types, and shows a scrollbar once content exceeds `maxRows`. It shrinks back down when content is removed.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Capping Height in Pixels
|
|
49
|
+
|
|
50
|
+
When you need a hard pixel limit instead of a row count (e.g. fitting a fixed panel), pass `maxHeight`. It overrides the `maxRows`-derived limit — the textarea grows up to `maxHeight` pixels and becomes scrollable beyond it:
|
|
51
|
+
|
|
52
|
+
```jsx
|
|
53
|
+
<AutoTextarea
|
|
54
|
+
value={notes}
|
|
55
|
+
onChange={e => setNotes(e.target.value)}
|
|
56
|
+
maxHeight={240} // grow to 240px, then scroll
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Props
|
|
63
|
+
|
|
64
|
+
Accepts all standard `<textarea>` props (except `rows`, which is managed internally), plus:
|
|
65
|
+
|
|
66
|
+
| Prop | Type | Default | Description |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| `minRows` | `number` | `2` | Minimum number of visible rows |
|
|
69
|
+
| `maxRows` | `number` | `8` | Maximum number of rows before scrolling |
|
|
70
|
+
| `maxHeight` | `number` | — | Hard cap on height in **pixels**. Overrides `maxRows` when provided; content beyond it scrolls |
|
|
71
|
+
| `value` | `string` | — | Controlled value |
|
|
72
|
+
| `onChange` | `function` | — | Change handler (`e.target.value`) |
|
|
73
|
+
| `className` | `string` | — | Additional classes merged with `form-control` |
|
|
74
|
+
| `style` | `object` | — | Inline styles merged onto the textarea |
|
|
75
|
+
|
|
76
|
+
A `ref` is forwarded to the underlying `<textarea>` element.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Behavior Notes
|
|
81
|
+
|
|
82
|
+
- Height recalculates on every value change, on user input (works uncontrolled too), and on window resize (line wrapping changes with width).
|
|
83
|
+
- `resize` is disabled — the component owns its height. Override via `style={{ resize: 'vertical' }}` if you must.
|
|
84
|
+
- Row limits are computed from the element's real `line-height`, padding, and border, so they stay correct across font sizes and Bootstrap size utilities.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Dark Mode
|
|
89
|
+
|
|
90
|
+
Uses Bootstrap's `form-control` class, which adapts automatically. Set `data-bs-theme="dark"` on any parent element.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Bundle Size
|
|
95
|
+
|
|
96
|
+
~0.4 KB (min+gzip).
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## See Also
|
|
101
|
+
|
|
102
|
+
- [DatePicker](./DATEPICKER.md) — Date, time, and datetime picker
|
|
103
|
+
- [SearchSelect](./SEARCHSELECT.md) — Filterable, searchable select dropdown
|
|
104
|
+
- [Label](./LABEL.md) — Bootstrap-styled form label with required indicator
|
|
105
|
+
- [TableLoading](./TABLELOADING.md) — Placeholder loading skeleton for tables
|
|
106
|
+
- [Main README](../README.md) — Package overview, installation, and general info
|
package/docs/DATEPICKER.md
CHANGED
|
@@ -57,8 +57,8 @@ function MyForm() {
|
|
|
57
57
|
| `size` | `'sm'` \| `'lg'` | — | Bootstrap input size variant |
|
|
58
58
|
| `isClearable` | `boolean` | `false` | Show clear button |
|
|
59
59
|
| `disabled` | `boolean` | `false` | Disable the input |
|
|
60
|
-
| `minDate` | `Date` | — | Earliest selectable date |
|
|
61
|
-
| `maxDate` | `Date` | — | Latest selectable date |
|
|
60
|
+
| `minDate` | `Date` \| `string` \| `number` | — | Earliest selectable date. Accepts the same flexible inputs as `value` — e.g. another DatePicker's formatted `onChange` string |
|
|
61
|
+
| `maxDate` | `Date` \| `string` \| `number` | — | Latest selectable date. Accepts the same flexible inputs as `value` |
|
|
62
62
|
| `timeIntervals` | `number` | `5` | Minute step in time picker |
|
|
63
63
|
| `timezone` | `string` | `'Kampala'` | Timezone label |
|
|
64
64
|
| `className` | `string` | — | Additional CSS classes on the input |
|
|
@@ -107,6 +107,27 @@ function MyForm() {
|
|
|
107
107
|
// e.target.value → "29/06/2026 02:30 PM"
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
+
### Linked pickers (start date bounds end date)
|
|
111
|
+
|
|
112
|
+
`minDate`/`maxDate` accept the formatted string another picker emits, so linking two pickers needs no conversion:
|
|
113
|
+
|
|
114
|
+
```jsx
|
|
115
|
+
const [startDate, setStartDate] = useState(null)
|
|
116
|
+
const [endDate, setEndDate] = useState(null)
|
|
117
|
+
|
|
118
|
+
<DatePicker
|
|
119
|
+
name="startDate"
|
|
120
|
+
value={startDate}
|
|
121
|
+
onChange={(e) => setStartDate(e.target.value)}
|
|
122
|
+
/>
|
|
123
|
+
<DatePicker
|
|
124
|
+
name="endDate"
|
|
125
|
+
value={endDate}
|
|
126
|
+
onChange={(e) => setEndDate(e.target.value)}
|
|
127
|
+
minDate={startDate} // "2026-07-15" string works directly
|
|
128
|
+
/>
|
|
129
|
+
```
|
|
130
|
+
|
|
110
131
|
### With Bootstrap form layout
|
|
111
132
|
|
|
112
133
|
```jsx
|
package/docs/NAVPILLS.md
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# NavPills
|
|
2
|
+
|
|
3
|
+
> Horizontal Bootstrap 5 `nav-pills` tab strip with optional icons, dismissible pills, and "New" badges. Scrolls horizontally on overflow. Zero dependencies.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Import
|
|
8
|
+
|
|
9
|
+
```js
|
|
10
|
+
// Default import (recommended for single-component tree-shaking)
|
|
11
|
+
import NavPills from 'react-bootstrap-plugins/NavPills'
|
|
12
|
+
|
|
13
|
+
// Named import from individual entry point
|
|
14
|
+
import { NavPills } from 'react-bootstrap-plugins/NavPills'
|
|
15
|
+
|
|
16
|
+
// Barrel import
|
|
17
|
+
import { NavPills } from 'react-bootstrap-plugins'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The badge styling requires the package CSS — import it **once** in your app:
|
|
21
|
+
|
|
22
|
+
```js
|
|
23
|
+
import 'react-bootstrap-plugins/css/plugins.css'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Basic Usage
|
|
29
|
+
|
|
30
|
+
```jsx
|
|
31
|
+
import { useState } from 'react'
|
|
32
|
+
import { NavPills } from 'react-bootstrap-plugins'
|
|
33
|
+
|
|
34
|
+
function StudentTabs() {
|
|
35
|
+
const [tab, setTab] = useState('list')
|
|
36
|
+
|
|
37
|
+
const pills = [
|
|
38
|
+
{ key: 'list', label: 'Students' },
|
|
39
|
+
{ key: 'admission', label: 'Admission' },
|
|
40
|
+
{ key: 'attendance', label: 'Attendance', new: true },
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<NavPills
|
|
45
|
+
pills={pills}
|
|
46
|
+
active={tab}
|
|
47
|
+
onClick={(pill) => setTab(pill.key)}
|
|
48
|
+
/>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Contained Bar
|
|
56
|
+
|
|
57
|
+
Pass `contain` to wrap the pills in a full-width light bar with a centered Bootstrap `.container` — useful directly under a page header:
|
|
58
|
+
|
|
59
|
+
```jsx
|
|
60
|
+
<NavPills
|
|
61
|
+
contain
|
|
62
|
+
pills={pills}
|
|
63
|
+
active={tab}
|
|
64
|
+
onClick={(pill) => setTab(pill.key)}
|
|
65
|
+
/>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Dismissible Pills
|
|
71
|
+
|
|
72
|
+
Mark a pill with `clear: true` to render a dismiss badge (×). Clicking it fires the `clear` callback — the pill click itself is not triggered:
|
|
73
|
+
|
|
74
|
+
```jsx
|
|
75
|
+
<NavPills
|
|
76
|
+
pills={[
|
|
77
|
+
{ key: 'all', label: 'All' },
|
|
78
|
+
{ key: 'filtered', label: 'Term 2 Results', clear: true },
|
|
79
|
+
]}
|
|
80
|
+
active={tab}
|
|
81
|
+
onClick={(pill) => setTab(pill.key)}
|
|
82
|
+
clear={(pill) => removeFilter(pill.key)}
|
|
83
|
+
/>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Icons
|
|
89
|
+
|
|
90
|
+
The `icon` field accepts either a **full icon class string** (any icon font) or a **ReactNode**:
|
|
91
|
+
|
|
92
|
+
```jsx
|
|
93
|
+
// Icon font (Font Awesome, Bootstrap Icons, …) — pass the complete class
|
|
94
|
+
{ key: 'fees', label: 'Fees', icon: 'fas fa-coins' }
|
|
95
|
+
{ key: 'fees', label: 'Fees', icon: 'bi bi-cash-stack' }
|
|
96
|
+
|
|
97
|
+
// Component icon (Lucide, custom SVG, …)
|
|
98
|
+
import { Coins } from 'lucide-react'
|
|
99
|
+
{ key: 'fees', label: 'Fees', icon: <Coins size={14} /> }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
> **Migration note:** the original in-app component prefixed string icons with `fas ` automatically (`icon: 'fa-coins'`). The plugin renders the string as-is, so include the prefix yourself: `icon: 'fas fa-coins'`.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Props
|
|
107
|
+
|
|
108
|
+
| Prop | Type | Default | Description |
|
|
109
|
+
|---|---|---|---|
|
|
110
|
+
| `pills` | `NavPill[]` | — | Pills to render (see shape below) |
|
|
111
|
+
| `active` | `string` \| `number` | — | Key of the currently active pill |
|
|
112
|
+
| `onClick` | `(pill) => void` | — | Fired when a pill is clicked |
|
|
113
|
+
| `clear` | `(pill) => void` | — | Fired when a pill's dismiss badge is clicked |
|
|
114
|
+
| `contain` | `boolean` | `false` | Wrap in a full-width light bar with a centered `.container` |
|
|
115
|
+
| `className` | `string` | — | Extra classes (on the wrapper when `contain`, else on the `nav`) |
|
|
116
|
+
|
|
117
|
+
A `ref` is forwarded to the underlying `<nav>` element.
|
|
118
|
+
|
|
119
|
+
### `NavPill` shape
|
|
120
|
+
|
|
121
|
+
| Field | Type | Description |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| `key` | `string` \| `number` | Unique identifier — compared against `active` |
|
|
124
|
+
| `label` | `ReactNode` | Pill label |
|
|
125
|
+
| `lbl` | `ReactNode` | Legacy alias for `label` (wins when both are set) |
|
|
126
|
+
| `icon` | `string` \| `ReactNode` | Optional leading icon (see [Icons](#icons)) |
|
|
127
|
+
| `clear` | `boolean` | Show the dismiss badge |
|
|
128
|
+
| `new` | `boolean` | Show the "New" badge |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Dark Mode
|
|
133
|
+
|
|
134
|
+
Pills use Bootstrap's native `nav-pills` styling, which adapts automatically. The contained bar's `bg-light` background and the soft badge colors are remapped for `[data-bs-theme="dark"]` in the package CSS.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Bundle Size
|
|
139
|
+
|
|
140
|
+
~0.5 KB (min+gzip), plus shared CSS.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## See Also
|
|
145
|
+
|
|
146
|
+
- [DatePicker](./DATEPICKER.md) — Date, time, and datetime picker
|
|
147
|
+
- [SearchSelect](./SEARCHSELECT.md) — Filterable, searchable select dropdown
|
|
148
|
+
- [Label](./LABEL.md) — Bootstrap-styled form label with required indicator
|
|
149
|
+
- [TableLoading](./TABLELOADING.md) — Placeholder loading skeleton for tables
|
|
150
|
+
- [AutoTextarea](./AUTOTEXTAREA.md) — Auto-resizing textarea
|
|
151
|
+
- [Main README](../README.md) — Package overview, installation, and general info
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-bootstrap-plugins",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Production-grade Bootstrap 5 UI plugins for React — DatePicker, SearchSelect, Label, TableLoading, and more. Zero runtime dependencies beyond React.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -62,6 +62,26 @@
|
|
|
62
62
|
"default": "./dist/TableLoading.cjs"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
|
+
"./AutoTextarea": {
|
|
66
|
+
"import": {
|
|
67
|
+
"types": "./dist/AutoTextarea.d.ts",
|
|
68
|
+
"default": "./dist/AutoTextarea.js"
|
|
69
|
+
},
|
|
70
|
+
"require": {
|
|
71
|
+
"types": "./dist/AutoTextarea.d.ts",
|
|
72
|
+
"default": "./dist/AutoTextarea.cjs"
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"./NavPills": {
|
|
76
|
+
"import": {
|
|
77
|
+
"types": "./dist/NavPills.d.ts",
|
|
78
|
+
"default": "./dist/NavPills.js"
|
|
79
|
+
},
|
|
80
|
+
"require": {
|
|
81
|
+
"types": "./dist/NavPills.d.ts",
|
|
82
|
+
"default": "./dist/NavPills.cjs"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
65
85
|
"./css/plugins.css": "./dist/css/plugins.css",
|
|
66
86
|
"./css/datepicker.css": "./dist/css/datepicker.css"
|
|
67
87
|
},
|
|
@@ -102,6 +122,11 @@
|
|
|
102
122
|
"table-loading",
|
|
103
123
|
"placeholder",
|
|
104
124
|
"skeleton",
|
|
125
|
+
"textarea",
|
|
126
|
+
"auto-resize",
|
|
127
|
+
"autosize",
|
|
128
|
+
"nav-pills",
|
|
129
|
+
"tabs",
|
|
105
130
|
"ui-components",
|
|
106
131
|
"react-bootstrap",
|
|
107
132
|
"form-controls",
|