From ff8b0c530e03b73541a178a458cd4bf69fe4cc6b Mon Sep 17 00:00:00 2001 From: legop3 Date: Sun, 20 Sep 2026 15:41:45 -0400 Subject: [PATCH] add link embedding in chat, update tailwind, update icons, tweak column layout. (8000 files changed because tailwind changed stuff in the update) --- server/public/assets/AdminApp-B_XqBka7.js | 66 + server/public/assets/AdminApp-B_XqBka7.js.map | 1 + server/public/assets/AdminApp-C3AkcekK.css | 1 + server/public/assets/AdminApp-CIfEu47p.js | 59 - server/public/assets/AdminApp-CIfEu47p.js.map | 1 - server/public/assets/AdminApp-DlZ4aJzc.css | 1 - .../public/assets/FleetReportsApp-DH08rpDz.js | 11 + .../assets/FleetReportsApp-DH08rpDz.js.map | 1 + .../public/assets/FleetReportsApp-DQYmyeBU.js | 11 - .../assets/FleetReportsApp-DQYmyeBU.js.map | 1 - server/public/assets/Preview-O6d1niaS.js | 2 + server/public/assets/Preview-O6d1niaS.js.map | 1 + ...upApp-DBQeHfaN.js => SetupApp-CFFNNLJ4.js} | 4 +- ...QeHfaN.js.map => SetupApp-CFFNNLJ4.js.map} | 2 +- server/public/assets/dash.all.min-C9gxBrL1.js | 23 + .../assets/dash.all.min-C9gxBrL1.js.map | 1 + server/public/assets/hls-DIl42XrH.js | 43 + server/public/assets/hls-DIl42XrH.js.map | 1 + server/public/assets/index-B0P8L1jr.js | 149 - server/public/assets/index-B0P8L1jr.js.map | 1 - server/public/assets/index-B4nclofW.js | 2 + server/public/assets/index-B4nclofW.js.map | 1 + server/public/assets/index-CfkQC3hX.css | 1 + server/public/assets/index-CsoONCTh.css | 1 - server/public/assets/index-DCtVfg7-.js | 150 + server/public/assets/index-DCtVfg7-.js.map | 1 + server/public/assets/index-Dzl_xRdK.js | 3324 +++++++++++++++++ server/public/assets/index-Dzl_xRdK.js.map | 1 + server/public/assets/mixin-BY5xW4uI.js | 44 + server/public/assets/mixin-BY5xW4uI.js.map | 1 + server/public/assets/react-BBapMaLq.js | 7 + server/public/assets/react-BBapMaLq.js.map | 1 + server/public/assets/react-BOaU9Q5g.js | 20 + server/public/assets/react-BOaU9Q5g.js.map | 1 + server/public/assets/react-Bqsex64l.js | 35 + server/public/assets/react-Bqsex64l.js.map | 1 + server/public/assets/react-CIaNBk6L.js | 23 + server/public/assets/react-CIaNBk6L.js.map | 1 + server/public/assets/react-DPJCMV8d.js | 7 + server/public/assets/react-DPJCMV8d.js.map | 1 + server/public/assets/react-Dm-U8WEJ.js | 22 + server/public/assets/react-Dm-U8WEJ.js.map | 1 + server/public/assets/react-NA7hlPp1.js | 18 + server/public/assets/react-NA7hlPp1.js.map | 1 + server/public/assets/react-PU6LV3JQ.js | 20 + server/public/assets/react-PU6LV3JQ.js.map | 1 + server/public/index.html | 4 +- webui/package-lock.json | 2377 ++++++------ webui/package.json | 12 +- webui/postcss.config.js | 6 - .../admin/components/ConfigurationEditor.jsx | 2 +- .../components/PasswordConfirmationDialog.jsx | 2 +- webui/src/admin/styles.css | 5 +- .../AdminPanel/AdminPanelContent.jsx | 4 +- .../AdminPanel/LlmCommentaryPanel.jsx | 14 +- .../AdminPanel/OverseerControlPanel.jsx | 18 +- webui/src/components/AlertFeed/index.jsx | 8 +- .../components/BalanceBoardPanel/index.jsx | 2 +- .../components/BarcodeGamesPanel/index.jsx | 10 +- webui/src/components/BatteryBar/index.jsx | 4 +- .../components/CameraTiltControl/index.jsx | 4 +- webui/src/components/CardFrame/index.jsx | 4 +- .../components/ChatMessageRow/ChatEmbeds.jsx | 46 + webui/src/components/ChatMessageRow/index.jsx | 27 +- webui/src/components/ChatPanel/index.jsx | 10 +- .../src/components/DriveDockAction/index.jsx | 8 +- webui/src/components/DriverVideo/index.jsx | 4 +- .../DuplicateIdentityOverlay/index.jsx | 2 +- .../src/components/FullscreenPrompt/index.jsx | 4 +- .../components/GPIOToggleControl/index.jsx | 4 +- .../GamepadMappingSettingsContent.jsx | 30 +- .../GamepadMappingSettings/SliderField.jsx | 4 +- .../GlobalObjectiveBanner/index.jsx | 4 +- .../src/components/HelpContentView/index.jsx | 4 +- .../controls/NumberControl.jsx | 2 +- .../controls/ReadOnlyControl.jsx | 2 +- .../controls/SelectControl.jsx | 2 +- .../controls/TextControl.jsx | 2 +- .../controls/ToggleControl.jsx | 2 +- .../HomeAssistantActivitiesPanel/index.jsx | 4 +- .../HomeAssistantControls/index.jsx | 10 +- webui/src/components/HornControl/index.jsx | 12 +- .../HudOverlays/HudChatInput/index.jsx | 16 +- .../HudOverlays/HudOverlay/HudMapOverlay.jsx | 2 +- .../HudOverlay/SpectatorTelemetryOverlay.jsx | 6 +- .../HudOverlays/LightBumpBars/index.jsx | 2 +- .../HudOverlays/OvercurrentOverlay/index.jsx | 6 +- .../HudOverlays/TurnsOverlay/index.jsx | 2 +- .../VerticalBatteryOverlay/index.jsx | 2 +- .../CornerPods/AccessoriesExpansion.jsx | 2 +- .../newgen/CornerPods/BottomRightPod.jsx | 6 +- .../newgen/CornerPods/ChatExpansion.jsx | 2 +- .../newgen/CornerPods/CornerPodToggle.jsx | 8 +- .../CornerPods/HornSettingsExpansion.jsx | 4 +- .../newgen/CornerPods/TopLeftPod.jsx | 6 +- .../newgen/CornerPods/TopRightPod.jsx | 10 +- .../HudOverlays/newgen/DockingHud/index.jsx | 20 +- .../InitialSessionOverlay/index.jsx | 2 +- .../components/InterInstancePanel/index.jsx | 8 +- webui/src/components/KeymapSettings/index.jsx | 6 +- webui/src/components/KinectPanel/index.jsx | 8 +- webui/src/components/LiftCard/index.jsx | 2 +- .../MobileControls/FloatingJoystick.jsx | 6 +- .../MobileControls/MovementColumn.jsx | 2 +- .../MobileControls/VerticalCameraTilt.jsx | 4 +- .../src/components/ModeGateOverlay/index.jsx | 2 +- webui/src/components/NeatoCard/index.jsx | 2 +- webui/src/components/NewDriveVideo/index.jsx | 4 +- webui/src/components/NicknameForm/index.jsx | 2 +- .../OvercurrentLimiterPanel/index.jsx | 2 +- .../OverseerPreferencePanel/index.jsx | 2 +- webui/src/components/PtzCamera/index.jsx | 20 +- webui/src/components/QueueTargetRow/index.jsx | 6 +- .../src/components/RawUserPilePanel/index.jsx | 2 +- .../ReplaySourcesPanel/ReplayReadyPopup.jsx | 12 +- .../components/ReplaySourcesPanel/index.jsx | 2 +- .../src/components/RewardRunOverlay/index.jsx | 2 +- webui/src/components/RoomCameraFeed/index.jsx | 4 +- .../src/components/RoomCameraPanel/index.jsx | 4 +- .../AccessoryControlField.jsx | 8 +- webui/src/components/RoverLabel/index.jsx | 2 +- .../src/components/RoverMediaPlayer/index.jsx | 2 +- .../src/components/RoverQueuesPanel/index.jsx | 2 +- webui/src/components/RoverRoster/index.jsx | 2 +- webui/src/components/SettingsPanel/index.jsx | 16 +- webui/src/components/SocialButton/index.jsx | 4 +- .../components/SocketConnectionPill/index.jsx | 4 +- webui/src/components/SpectateVideo/index.jsx | 2 +- webui/src/components/Tabs/index.jsx | 4 +- webui/src/components/TelemetryPanel/index.jsx | 4 +- webui/src/components/UserListPanel/index.jsx | 8 +- .../components/VolumeSettingsCard/index.jsx | 4 +- .../vip/VipAudioUploadCard/KeyPill.jsx | 2 +- .../vip/VipPrivateRoverAccessCard.jsx | 2 +- webui/src/components/vip/VipPtzCameraCard.jsx | 16 +- webui/src/database/IdentityDatabasePanel.jsx | 10 +- .../ServerDisplayApp/ServerDisplayContent.jsx | 2 +- .../components/DisplayNoticeOverlay.jsx | 2 +- .../components/DisplayRoverCell.jsx | 2 +- webui/src/index.css | 33 +- .../layouts/driver/DesktopLayout/index.jsx | 10 +- .../driver/DesktopRightPaneTabs/index.jsx | 2 +- .../tabs/shared/ActivitiesTab/index.jsx | 4 +- .../MiniSummaryApp/components/InfoColumn.jsx | 2 +- webui/src/reports/FleetTimeSeriesChart.jsx | 2 +- .../src/scanner/ScannerApp/ScannerContent.jsx | 8 +- .../components/PtzSpectatorCard.jsx | 8 +- .../components/RoverSpectatorCard.jsx | 4 +- webui/src/themes/styles/base.css | 4 +- webui/tailwind.config.js | 17 - webui/vite.config.js | 3 +- 151 files changed, 5331 insertions(+), 1787 deletions(-) create mode 100644 server/public/assets/AdminApp-B_XqBka7.js create mode 100644 server/public/assets/AdminApp-B_XqBka7.js.map create mode 100644 server/public/assets/AdminApp-C3AkcekK.css delete mode 100644 server/public/assets/AdminApp-CIfEu47p.js delete mode 100644 server/public/assets/AdminApp-CIfEu47p.js.map delete mode 100644 server/public/assets/AdminApp-DlZ4aJzc.css create mode 100644 server/public/assets/FleetReportsApp-DH08rpDz.js create mode 100644 server/public/assets/FleetReportsApp-DH08rpDz.js.map delete mode 100644 server/public/assets/FleetReportsApp-DQYmyeBU.js delete mode 100644 server/public/assets/FleetReportsApp-DQYmyeBU.js.map create mode 100644 server/public/assets/Preview-O6d1niaS.js create mode 100644 server/public/assets/Preview-O6d1niaS.js.map rename server/public/assets/{SetupApp-DBQeHfaN.js => SetupApp-CFFNNLJ4.js} (94%) rename server/public/assets/{SetupApp-DBQeHfaN.js.map => SetupApp-CFFNNLJ4.js.map} (99%) create mode 100644 server/public/assets/dash.all.min-C9gxBrL1.js create mode 100644 server/public/assets/dash.all.min-C9gxBrL1.js.map create mode 100644 server/public/assets/hls-DIl42XrH.js create mode 100644 server/public/assets/hls-DIl42XrH.js.map delete mode 100644 server/public/assets/index-B0P8L1jr.js delete mode 100644 server/public/assets/index-B0P8L1jr.js.map create mode 100644 server/public/assets/index-B4nclofW.js create mode 100644 server/public/assets/index-B4nclofW.js.map create mode 100644 server/public/assets/index-CfkQC3hX.css delete mode 100644 server/public/assets/index-CsoONCTh.css create mode 100644 server/public/assets/index-DCtVfg7-.js create mode 100644 server/public/assets/index-DCtVfg7-.js.map create mode 100644 server/public/assets/index-Dzl_xRdK.js create mode 100644 server/public/assets/index-Dzl_xRdK.js.map create mode 100644 server/public/assets/mixin-BY5xW4uI.js create mode 100644 server/public/assets/mixin-BY5xW4uI.js.map create mode 100644 server/public/assets/react-BBapMaLq.js create mode 100644 server/public/assets/react-BBapMaLq.js.map create mode 100644 server/public/assets/react-BOaU9Q5g.js create mode 100644 server/public/assets/react-BOaU9Q5g.js.map create mode 100644 server/public/assets/react-Bqsex64l.js create mode 100644 server/public/assets/react-Bqsex64l.js.map create mode 100644 server/public/assets/react-CIaNBk6L.js create mode 100644 server/public/assets/react-CIaNBk6L.js.map create mode 100644 server/public/assets/react-DPJCMV8d.js create mode 100644 server/public/assets/react-DPJCMV8d.js.map create mode 100644 server/public/assets/react-Dm-U8WEJ.js create mode 100644 server/public/assets/react-Dm-U8WEJ.js.map create mode 100644 server/public/assets/react-NA7hlPp1.js create mode 100644 server/public/assets/react-NA7hlPp1.js.map create mode 100644 server/public/assets/react-PU6LV3JQ.js create mode 100644 server/public/assets/react-PU6LV3JQ.js.map delete mode 100644 webui/postcss.config.js create mode 100644 webui/src/components/ChatMessageRow/ChatEmbeds.jsx delete mode 100644 webui/tailwind.config.js diff --git a/server/public/assets/AdminApp-B_XqBka7.js b/server/public/assets/AdminApp-B_XqBka7.js new file mode 100644 index 00000000..bddda10c --- /dev/null +++ b/server/public/assets/AdminApp-B_XqBka7.js @@ -0,0 +1,66 @@ +import{e as Rh,r as X,j as N,C as Ze,T as $h,f as Fh,h as Kn,k as Dh,l as hi,L as kl,g as Fi,u as Ip,a as Nl,m as Rp,b as $p,D as Fp,c as Dp,S as Tp,A as Mp,n as qp}from"./index-DCtVfg7-.js";import{c as Up,d as Lp,u as Vp,g as zp,r as Bp,a as Hp,b as Kp,e as Gp,f as Wp,h as Jp,i as Yp,j as Xp,k as Zp,l as Qp,m as ey,n as ty}from"./api-B8GGCEeo.js";function br(e,t,r={}){return new Promise((n,s)=>{e.emit(t,r,(i={})=>{if(i.error){s(new Error(i.error));return}n(i)})})}function ry(e,{query:t="",filter:r="all"}={}){return br(e,"identityAdmin:listUsers",{query:t,filter:r})}function Il(e,t){return br(e,"identityAdmin:getUser",{userId:t})}function ny(e,t,r,n){return br(e,"identityAdmin:addSignal",{userId:t,type:r,value:n})}function iy(e,t,r,n){return br(e,"identityAdmin:removeSignal",{userId:t,type:r,value:n})}function sy(e,t,r){return br(e,"identityAdmin:setVerified",{userId:t,enabled:r})}function ay(e,t,r,n){return br(e,"identityAdmin:setDeterrence",{userId:t,enabled:r,reason:n})}function oy(e,t,r){return br(e,"identityAdmin:setMuted",{userId:t,enabled:r})}function cy(e,t,r,n){return br(e,"identityAdmin:setPermission",{userId:t,permissionKey:r,enabled:n})}function ly(e,t,r,n){return br(e,"identityAdmin:updateFeatureState",{userId:t,namespace:r,value:n})}function uy(e,t,r){return br(e,"identityAdmin:deleteFeatureState",{userId:t,namespace:r})}const fc={cookieUserId:"Cookie keys",fingerprintId:"Fingerprints",nickname:"Nicknames",knownIp:"Known IPs"},dy={cookieUserId:"cookieUserIds",fingerprintId:"fingerprintIds",nickname:"nicknames",knownIp:"knownIps"};function Rl(e){const t=String(e||"").trim();return t?t.length<=14?t:`${t.slice(0,8)}...${t.slice(-6)}`:"n/a"}function ja(e){const t=Number(e||0);if(!Number.isFinite(t)||t<=0)return"never";try{return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(new Date(t))}catch{return new Date(t).toLocaleString()}}function hc(e){return JSON.stringify(e??{},null,2)}function fy(e){const t=JSON.parse(String(e||"").trim()||"{}");if(!t||typeof t!="object")throw new Error("JSON must be an object or array.");return t}const hy=[{key:"all",label:"All"},{key:"verified",label:"Verified"},{key:"deterred",label:"Deterred"},{key:"muted",label:"Muted"},{key:"unverified",label:"Unverified"}];function vo({active:e,children:t}){return N.jsx("span",{className:`rounded-sm px-1 py-0.25 text-[0.68rem] font-semibold ${e?"bg-emerald-700 text-emerald-50":"bg-neutral-800 text-neutral-300"}`,children:t})}function my({users:e,truncated:t,selectedUserId:r,query:n,filter:s,loading:i,onQuery:a,onFilter:o,onRefresh:c,onSearch:l,onSelect:u}){const p=N.jsx("button",{type:"button",className:"button-dark text-xs",onClick:()=>c(),disabled:i,children:i?"Loading":"Refresh"});return N.jsxs(Ze,{title:"Identity database",meta:t?`${e.length}+`:e.length,actions:p,bodyClassName:"flex min-h-0 flex-col gap-0.5 p-0.5 text-sm",children:[N.jsxs("form",{className:"grid gap-0.5 md:grid-cols-[minmax(0,1fr)_10rem_auto]",onSubmit:l,children:[N.jsx("input",{className:"field-input text-sm",type:"search",placeholder:"Search users, keys, fingerprints, IPs",value:n,onChange:b=>a(b.target.value)}),N.jsx("select",{className:"field-input text-sm",value:s,onChange:b=>o(b.target.value),children:hy.map(b=>N.jsx("option",{value:b.key,children:b.label},b.key))}),N.jsx("button",{type:"submit",className:"button-dark text-xs",disabled:i,children:"Search"})]}),t?N.jsx("p",{className:"surface-muted px-1 py-0.5 text-xs text-slate-400",children:"Showing the first 100 matches. Narrow the search to find older users."}):null,N.jsx("div",{className:"min-h-72 flex-1 overflow-y-auto",children:e.length?e.map(b=>N.jsxs("button",{type:"button",className:`surface mb-0.5 grid w-full grid-cols-[minmax(0,1fr)_auto] gap-0.5 px-1 py-0.75 text-left text-xs ${r===b.id?"border border-sky-400/70":""}`,onClick:()=>u(b.id),children:[N.jsxs("span",{className:"min-w-0",children:[N.jsx("span",{className:"block truncate text-sm font-semibold text-slate-100",children:b.nickname||"unknown user"}),N.jsx("span",{className:"block truncate font-mono text-[0.68rem] text-slate-400",children:b.id}),N.jsxs("span",{className:"block truncate text-[0.68rem] text-slate-400",children:[Rl(b.cookieUserIds?.[0])," / ",Rl(b.fingerprintIds?.[0])]})]}),N.jsxs("span",{className:"flex flex-col items-end gap-0.25",children:[N.jsx(vo,{active:b.verified?.enabled,children:"verified"}),N.jsx(vo,{active:b.deterrence?.enabled,children:"deterred"}),N.jsx(vo,{active:b.deterrence?.muted,children:"muted"})]})]},b.id)):N.jsx("p",{className:"surface p-1 text-center text-xs text-slate-400",children:"No users match this view."})})]})}function py({user:e}){return N.jsxs(Ze,{title:"User details",bodyClassName:"grid gap-0.5 p-0.5 text-sm md:grid-cols-2",children:[N.jsxs("div",{className:"surface px-1 py-0.75",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Canonical user id"}),N.jsx("p",{className:"break-all font-mono text-xs text-lime-300",children:e.id})]}),N.jsxs("div",{className:"surface px-1 py-0.75",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Primary nickname"}),N.jsx("p",{className:"font-semibold text-slate-100",children:e.nickname||"unknown user"})]}),N.jsxs("div",{className:"surface px-1 py-0.75",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Created"}),N.jsx("p",{children:ja(e.createdAt)})]}),N.jsxs("div",{className:"surface px-1 py-0.75",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Last seen"}),N.jsx("p",{children:ja(e.lastSeenAt)})]})]})}function yy({user:e,type:t,onAdd:r,onRemove:n}){const[s,i]=X.useState(""),a=e?.[dy[t]]||[],o=async c=>{c.preventDefault();const l=s.trim();l&&(await r(t,l),i(""))};return N.jsxs("div",{className:"surface space-y-0.5 px-1 py-0.75",children:[N.jsx("p",{className:"text-xs font-semibold text-slate-200",children:fc[t]}),N.jsx("div",{className:"space-y-0.5",children:a.length?a.map(c=>N.jsxs("div",{className:"surface-muted grid grid-cols-[minmax(0,1fr)_auto] items-center gap-0.5 px-1 py-0.5",children:[N.jsx("span",{className:"min-w-0 break-all font-mono text-[0.7rem] text-slate-200",children:c}),N.jsx("button",{type:"button",className:"button-dark text-xs",onClick:()=>n(t,c),children:"Remove"})]},c)):N.jsx("p",{className:"text-xs text-slate-500",children:"No values."})}),N.jsxs("form",{className:"grid gap-0.5 md:grid-cols-[minmax(0,1fr)_auto]",onSubmit:o,children:[N.jsx("input",{className:"field-input text-xs",value:s,placeholder:`Add ${fc[t].toLowerCase()}`,onChange:c=>i(c.target.value)}),N.jsx("button",{type:"submit",className:"button-dark text-xs",disabled:!s.trim(),children:"Add"})]})]})}function gy({user:e,onAddSignal:t,onRemoveSignal:r}){return N.jsx(Ze,{title:"Identity signals",bodyClassName:"grid gap-0.5 p-0.5 text-sm xl:grid-cols-2",children:Object.keys(fc).map(n=>N.jsx(yy,{user:e,type:n,onAdd:t,onRemove:r},n))})}function vy({user:e,onVerified:t,onDeterrence:r,onMuted:n}){const[s,i]=X.useState(e?.deterrence?.reason||"");return N.jsxs(Ze,{title:"Status",bodyClassName:"grid gap-0.5 p-0.5 text-sm md:grid-cols-2",children:[N.jsxs("div",{className:"surface space-y-0.5 px-1 py-0.75",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Verification"}),N.jsxs("label",{className:"flex items-center gap-0.5 text-slate-100",children:[N.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-emerald-500",checked:!!e?.verified?.enabled,onChange:a=>t(a.target.checked)}),N.jsx("span",{children:"Verified"})]}),N.jsxs("p",{className:"text-xs text-slate-500",children:["Updated ",ja(e?.verified?.at)]})]}),N.jsxs("div",{className:"surface space-y-0.5 px-1 py-0.75",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Deterrence"}),N.jsxs("label",{className:"flex items-center gap-0.5 text-slate-100",children:[N.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-red-500",checked:!!e?.deterrence?.enabled,onChange:a=>r(a.target.checked,s)}),N.jsx("span",{children:"Deterred"})]}),N.jsx("textarea",{className:"field-input min-h-16 w-full text-xs",value:s,placeholder:"Deterrence reason",onChange:a=>i(a.target.value)}),N.jsx("button",{type:"button",className:"button-dark text-xs",onClick:()=>r(!!e?.deterrence?.enabled,s),children:"Save Reason"}),N.jsxs("div",{className:"border-t border-slate-700/70 pt-0.5",children:[N.jsxs("label",{className:"flex items-center gap-0.5 text-slate-100",children:[N.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-amber-500",checked:!!e?.deterrence?.muted,onChange:a=>n(a.target.checked)}),N.jsx("span",{children:"Muted"})]}),N.jsxs("p",{className:"text-xs text-slate-500",children:["Updated ",ja(e?.deterrence?.mutedAt)]})]})]})]})}function by({user:e,onSaveFeature:t,onDeleteFeature:r}){const n=Object.keys(e?.features||{}).sort(),s=n[0]||"",[i,a]=X.useState(s),[o,c]=X.useState(hc(s?e.features[s]:{})),[l,u]=X.useState(""),p=async()=>{const v=i.trim();if(!v){u("Namespace required.");return}try{const S=fy(o);await t(v,S),u("")}catch(S){u(S.message||"Invalid JSON.")}},b=async()=>{const v=i.trim();v&&window.confirm(`Delete feature state "${v}" from ${e.id}?`)&&(await r(v),a(""),c("{}"),u(""))};return N.jsxs(Ze,{title:"Feature state",bodyClassName:"space-y-0.5 p-0.5 text-sm",children:[N.jsxs("div",{className:"grid gap-0.5 md:grid-cols-[minmax(0,1fr)_auto_auto]",children:[N.jsx("input",{className:"field-input text-sm",value:i,placeholder:"Namespace",list:"identity-feature-namespaces",onChange:v=>{const S=v.target.value;a(S),c(hc(e.features?.[S]||{}))}}),N.jsx("datalist",{id:"identity-feature-namespaces",children:n.map(v=>N.jsx("option",{value:v},v))}),N.jsx("button",{type:"button",className:"button-dark text-xs",onClick:p,children:"Save"}),N.jsx("button",{type:"button",className:"button-dark text-xs",onClick:b,disabled:!i.trim(),children:"Delete"})]}),N.jsx("textarea",{className:"field-input min-h-72 w-full font-mono text-xs",value:o,spellCheck:!1,onChange:v=>c(v.target.value)}),l?N.jsx("p",{className:"surface text-xs text-red-300",children:l}):null]})}function _y({user:e}){return N.jsx(Ze,{title:"Raw record",bodyClassName:"p-0.5 text-xs",children:N.jsx("pre",{className:"surface max-h-144 overflow-auto whitespace-pre-wrap wrap-break-word font-mono text-[0.7rem] text-lime-300",children:hc(e)})})}function Sy({user:e,permissions:t,onPermission:r}){const n=new Set((e?.permissions||[]).map(s=>s.key));return N.jsx(Ze,{title:"Permissions",bodyClassName:"grid gap-0.5 p-0.5 text-sm md:grid-cols-2",children:t.map(s=>N.jsxs("label",{className:"surface space-y-0.5 px-1 py-0.75 text-slate-100",children:[N.jsxs("span",{className:"flex items-center gap-0.5 font-semibold",children:[N.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-emerald-500",checked:n.has(s.key),onChange:i=>r(s.key,i.target.checked)}),s.label]}),N.jsx("span",{className:"block text-xs text-slate-400",children:s.description}),N.jsx("code",{className:"block text-[0.68rem] text-lime-300",children:s.key})]},s.key))})}function wy(){const e=Rh(),[t,r]=X.useState([]),[n,s]=X.useState([]),[i,a]=X.useState(null),[o,c]=X.useState(""),[l,u]=X.useState("all"),[p,b]=X.useState(!1),[v,S]=X.useState(!1),[E,g]=X.useState(""),y=X.useCallback(async()=>{S(!0);try{const z=await ry(e,{query:o,filter:l});if(r(z.users||[]),b(!!z.truncated),s(z.permissions||[]),i?.id){const G=await Il(e,i.id);a(G.user||null)}g("")}catch(z){g(z.message||"Failed to load users.")}finally{S(!1)}},[l,o,i?.id,e]),f=X.useCallback(async z=>{S(!0);try{const G=await Il(e,z);a(G.user||null),g("")}catch(G){g(G.message||"Failed to load user.")}finally{S(!1)}},[e]),w=X.useCallback(z=>{a(z||null),z?.id&&r(G=>G.map(J=>J.id===z.id?{...J,...z}:J))},[]),P=X.useCallback(async(z,G)=>{if(i?.id){S(!0);try{const J=await z(i.id);w(J.user),g(G||"Saved.")}catch(J){g(J.message||"Save failed.")}finally{S(!1)}}},[w,i?.id]);X.useEffect(()=>{y()},[]);const h=z=>{z.preventDefault(),y()},_=(z,G)=>P(J=>ny(e,J,z,G),"Signal added."),O=(z,G)=>P(J=>iy(e,J,z,G),"Signal removed."),k=z=>P(G=>sy(e,G,z),"Verification updated."),$=(z,G)=>P(J=>ay(e,J,z,G),"Deterrence updated."),M=z=>P(G=>oy(e,G,z),"Mute updated."),q=(z,G)=>P(J=>cy(e,J,z,G),"Permission updated."),U=(z,G)=>P(J=>ly(e,J,z,G),"Feature state saved."),L=z=>P(G=>uy(e,G,z),"Feature state deleted.");return N.jsxs("div",{className:"grid min-h-0 flex-1 gap-0.5 lg:grid-cols-[24rem_minmax(0,1fr)]",children:[N.jsx(my,{users:t,truncated:p,selectedUserId:i?.id||null,query:o,filter:l,loading:v,onQuery:c,onFilter:u,onRefresh:y,onSearch:h,onSelect:f}),N.jsxs("div",{className:"min-h-0 space-y-0.5 overflow-y-auto",children:[E?N.jsx(Ze,{title:"Status",bodyClassName:"p-0.5 text-sm text-slate-200",children:N.jsx("p",{children:E})}):null,i?N.jsxs(N.Fragment,{children:[N.jsx(py,{user:i}),N.jsxs($h,{defaultTab:"signals",children:[N.jsxs(Fh,{children:[N.jsx(Kn,{id:"signals",children:"Signals"}),N.jsx(Kn,{id:"status",children:"Status"}),N.jsx(Kn,{id:"permissions",children:"Permissions"}),N.jsx(Kn,{id:"features",children:"Feature state"}),N.jsx(Kn,{id:"raw",children:"Raw JSON"})]}),N.jsxs(Dh,{children:[N.jsx(hi,{id:"signals",children:N.jsx(gy,{user:i,onAddSignal:_,onRemoveSignal:O})}),N.jsx(hi,{id:"status",children:N.jsx(vy,{user:i,onVerified:k,onDeterrence:$,onMuted:M},`status-${i.id}`)}),N.jsx(hi,{id:"permissions",children:N.jsx(Sy,{user:i,permissions:n,onPermission:q})}),N.jsx(hi,{id:"features",children:N.jsx(by,{user:i,onSaveFeature:U,onDeleteFeature:L},`features-${i.id}`)}),N.jsx(hi,{id:"raw",children:N.jsx(_y,{user:i})})]})]})]}):N.jsx(Ze,{title:"User details",bodyClassName:"p-1 text-center text-sm text-slate-400",children:"Select a user to inspect and edit the identity record."})]})]})}function Cy({administrator:e,socket:t,runSensitive:r,onSnapshot:n}){const[s,i]=X.useState({username:e.username,discordId:e.discordId,role:e.role,password:""}),[a,o]=X.useState(!1),[c,l]=X.useState("");X.useEffect(()=>{i({username:e.username,discordId:e.discordId,role:e.role,password:""})},[e]);async function u(p){o(!0),l("");try{const b=await r(p);n(b.snapshot)}catch(b){l(b.message)}finally{o(!1)}}return N.jsxs("div",{className:"surface space-y-0.5 p-0.5",children:[N.jsxs("div",{className:"grid gap-0.5 md:grid-cols-4",children:[N.jsx("input",{className:"field-input",value:s.username,onChange:p=>i({...s,username:p.target.value})}),N.jsx("input",{className:"field-input",placeholder:"Discord id",value:s.discordId,onChange:p=>i({...s,discordId:p.target.value})}),N.jsxs("select",{className:"field-input",value:s.role,onChange:p=>i({...s,role:p.target.value}),children:[N.jsx("option",{value:"admin",children:"Administrator"}),N.jsx("option",{value:"lockdown",children:"Lockdown administrator"})]}),N.jsx("input",{className:"field-input",type:"password",autoComplete:"new-password",placeholder:"New password (optional)",value:s.password,onChange:p=>i({...s,password:p.target.value})})]}),c?N.jsx("p",{className:"text-xs text-red-300",children:c}):null,N.jsxs("div",{className:"flex justify-end gap-0.5",children:[N.jsx("button",{type:"button",className:"button-danger text-xs",disabled:a,onClick:()=>u(()=>Lp(t,e.id)),children:"Delete"}),N.jsx("button",{type:"button",className:"button-dark text-xs",disabled:a,onClick:()=>u(()=>Vp(t,{id:e.id,...s})),children:"Save account"})]})]})}function Ey({administrators:e,socket:t,runSensitive:r,onSnapshot:n}){const[s,i]=X.useState({username:"",discordId:"",role:"admin",password:""}),[a,o]=X.useState(!1),[c,l]=X.useState("");async function u(p){p.preventDefault(),o(!0),l("");try{const b=await r(()=>Up(t,s));n(b.snapshot),i({username:"",discordId:"",role:"admin",password:""})}catch(b){l(b.message)}finally{o(!1)}}return N.jsxs(Ze,{title:"Administrator accounts",meta:e.length,bodyClassName:"space-y-0.5 p-0.5 text-sm",children:[N.jsxs("form",{className:"surface grid gap-0.5 p-0.5 md:grid-cols-4",onSubmit:u,children:[N.jsx("input",{className:"field-input",placeholder:"Username",value:s.username,onChange:p=>i({...s,username:p.target.value})}),N.jsx("input",{className:"field-input",placeholder:"Discord id (optional)",value:s.discordId,onChange:p=>i({...s,discordId:p.target.value})}),N.jsxs("select",{className:"field-input",value:s.role,onChange:p=>i({...s,role:p.target.value}),children:[N.jsx("option",{value:"admin",children:"Administrator"}),N.jsx("option",{value:"lockdown",children:"Lockdown administrator"})]}),N.jsx("input",{className:"field-input",type:"password",autoComplete:"new-password",placeholder:"Password",value:s.password,onChange:p=>i({...s,password:p.target.value})}),c?N.jsx("p",{className:"text-xs text-red-300 md:col-span-3",children:c}):N.jsx("span",{className:"md:col-span-3"}),N.jsx("button",{className:"button-dark",type:"submit",disabled:a||!s.username||!s.password,children:a?"Creating…":"Create account"})]}),(e||[]).map(p=>N.jsx(Cy,{administrator:p,socket:t,runSensitive:r,onSnapshot:n},p.id))]})}function bo(e){return Number.isFinite(Number(e))?new Date(Number(e)).toLocaleString():"unknown"}function Ay({snapshot:e,socket:t,runSensitive:r,onSnapshot:n}){const s=e.configuration,[i,a]=X.useState(!1),[o,c]=X.useState(null),[l,u]=X.useState("");X.useEffect(()=>{let f=!0;async function w(){if(t.connected)try{const h=await zp(t);if(!f)return;c(h.lifecycle),u("")}catch(h){f&&u(h.message)}}w();const P=window.setInterval(w,2500);return()=>{f=!1,window.clearInterval(P)}},[t]),X.useEffect(()=>{if(!i)return;const f=()=>a(!1);return t.once("connect",f),()=>t.off("connect",f)},[i,t]);async function p(f){if(window.confirm(`Restore configuration revision ${f}? This creates and immediately applies a new active revision.`))try{const w=await r(()=>Bp(t,{revision:f,expectedRevision:s.revision}));n(w.snapshot)}catch(w){window.alert(w.message)}}async function b(){if(window.confirm("Restart the MultiRover application now? Connected rovers and browsers will disconnect briefly; the server host will not reboot.")){a(!0);try{await r(()=>Hp(t))}catch(f){a(!1),window.alert(f.message)}}}async function v(){try{const f=await r(()=>Kp(t));c(f.lifecycle)}catch(f){u(f.message)}}async function S(){if(window.confirm("Pull the configured MultiRover image and replace the application container now? The page will reconnect automatically."))try{const f=await r(()=>Gp(t));c(f.lifecycle)}catch(f){u(f.message)}}const E=o?.state==="running",g=!!o?.available,y=o?.updateAvailable===!0?"An update is available.":o?.updateAvailable===!1?"The running application matches the latest checked image.":"Check for updates to compare the running container with the configured image.";return N.jsxs("div",{className:"space-y-0.5",children:[N.jsxs(Ze,{title:"Administration overview",meta:`revision ${s.revision}`,bodyClassName:"grid gap-0.5 p-0.5 md:grid-cols-3",children:[N.jsxs("div",{className:"surface p-1",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Active revision"}),N.jsx("p",{className:"text-xl font-semibold",children:s.revision})]}),N.jsxs("div",{className:"surface p-1",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Administrators"}),N.jsx("p",{className:"text-xl font-semibold",children:e.administrators.length})]}),N.jsxs("div",{className:"surface p-1",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Last configuration save"}),N.jsx("p",{className:"text-sm font-semibold",children:bo(s.createdAt)})]})]}),N.jsxs(Ze,{title:"Existing administration surfaces",bodyClassName:"flex flex-wrap gap-0.5 p-0.5 text-sm",children:[N.jsx(kl,{className:"button-dark",to:"/reports",children:"Open fleet reports"}),N.jsx(kl,{className:"button-dark",to:"/",children:"Open driver application"})]}),N.jsxs(Ze,{title:"Application container",meta:g?o?.state:"controller unavailable",bodyClassName:"space-y-1 p-1 text-sm",children:[N.jsxs("div",{className:"surface max-w-4xl space-y-0.5 p-1 text-slate-300",children:[N.jsx("p",{children:g?y:"Container updates are unavailable until the lifecycle service is running."}),o?.message?N.jsx("p",{className:"text-slate-400",children:o.message}):null,o?.rollback?N.jsxs("p",{children:["Rollback: ",o.rollback.status,o.rollback.error?` — ${o.rollback.error}`:""]}):null,l?N.jsx("p",{className:"text-red-300",children:l}):null]}),N.jsxs("div",{className:"flex flex-wrap gap-0.5",children:[N.jsx("button",{type:"button",className:"button-dark",disabled:!g||E,onClick:v,children:o?.operation==="check"&&E?"Checking for update…":"Check for update"}),N.jsx("button",{type:"button",className:"button-danger",disabled:!g||E,onClick:S,children:o?.operation==="update"&&E?"Updating application…":"Update and restart"}),N.jsx("button",{type:"button",className:"button-danger",disabled:i||E,onClick:b,children:i?"Waiting for application…":"Restart application"})]})]}),N.jsx(Ze,{title:"Configuration revisions",meta:e.revisions.length,bodyClassName:"max-h-64 overflow-y-auto p-0.5 text-xs",children:e.revisions.map(f=>N.jsxs("div",{className:"surface mb-0.5 grid items-center gap-0.5 p-0.5 md:grid-cols-[5rem_1fr_1fr_1fr_auto]",children:[N.jsxs("span",{children:["#",f.revision]}),N.jsx("span",{children:bo(f.createdAt)}),N.jsx("span",{children:f.actor}),N.jsx("span",{children:f.source}),N.jsx("button",{type:"button",className:"button-dark text-xs",disabled:f.revision===s.revision,onClick:()=>p(f.revision),children:"Restore"})]},f.revision))}),N.jsx(Ze,{title:"Persistent audit history",meta:e.auditEvents.length,bodyClassName:"max-h-96 overflow-y-auto p-0.5 text-xs",children:e.auditEvents.map(f=>N.jsxs("div",{className:"surface mb-0.5 grid gap-0.5 p-0.5 md:grid-cols-[10rem_10rem_1fr]",children:[N.jsx("span",{children:bo(f.createdAt)}),N.jsx("span",{children:f.actor}),N.jsx("span",{children:f.action})]},f.id))})]})}function xy(e){const t=Number(e)||0;if(t<1024)return`${t} B`;const r=["KiB","MiB","GiB","TiB"];let n=t/1024,s=0;for(;n>=1024&&s=10?1:2)} ${r[s]}`}function Py({socket:e,runSensitive:t}){const[r,n]=X.useState(!1),[s,i]=X.useState(!1),[a,o]=X.useState(null),[c,l]=X.useState(null),[u,p]=X.useState(null),[b,v]=X.useState("");X.useEffect(()=>{Wp(e).then(y=>p(y.lastRestore)).catch(y=>v(y.message))},[e]);async function S(){n(!0),v("Creating consistent database snapshots and copying server data…");try{const y=await t(()=>Jp(e)),f=document.createElement("a");f.href=y.downloadUrl,f.download="",document.body.appendChild(f),f.click(),f.remove();const w=y.skippedUnstableFiles?.length||0;v(`Backup download started with ${y.fileCount} files.${w?` ${w} actively changing file(s) were skipped.`:""}`)}catch(y){v(y.message)}finally{n(!1)}}async function E(){if(a){i(!0),l(null),v("Uploading and validating the selected backup…");try{const y=await t(()=>Yp(e)),f=await fetch(y.uploadUrl,{method:"PUT",headers:{"Content-Type":"application/gzip"},body:a}),w=await f.json();if(!f.ok||w.error)throw new Error(w.error||"Restore upload failed.");l(w),v("Backup validated. Review the summary before replacing server data.")}catch(y){v(y.message)}finally{i(!1)}}}async function g(){if(!(!c||!window.confirm("Replace the complete server data folder with this backup and restart the application? Configuration, administrators, identities, history, and media will all be replaced."))){i(!0);try{await t(()=>Xp(e,c.restoreId)),v("Restore accepted. Waiting for the application to restart…")}catch(f){i(!1),v(f.message)}}}return N.jsxs("div",{className:"space-y-0.5",children:[N.jsxs(Ze,{title:"Full backup",bodyClassName:"space-y-0.5 p-1 text-sm",children:[N.jsx("p",{className:"text-slate-300",children:"Downloads configuration, administrator accounts, secrets, identities, history, snapshots, replays, and other durable server data. Keep the archive private because it contains credentials."}),N.jsx("button",{type:"button",className:"button-dark",disabled:r||s,onClick:S,children:r?"Creating backup…":"Download full backup"})]}),N.jsxs(Ze,{title:"Full restore",bodyClassName:"space-y-0.5 p-1 text-sm",children:[N.jsx("p",{className:"text-slate-300",children:"Upload a MultiRover full backup for validation. Nothing changes until the validated restore is confirmed."}),N.jsxs("div",{className:"flex max-w-3xl flex-col gap-0.5 md:flex-row",children:[N.jsx("input",{className:"field-input min-w-0 flex-1",type:"file",accept:".gz,.tgz,application/gzip",disabled:s||r,onChange:y=>{o(y.target.files?.[0]||null),l(null)}}),N.jsx("button",{type:"button",className:"button-dark",disabled:!a||s||r,onClick:E,children:s&&!c?"Validating…":"Validate backup"})]}),c?N.jsxs("div",{className:"surface max-w-3xl space-y-0.5 p-1",children:[N.jsxs("p",{children:[c.summary.fileCount," files, ",xy(c.summary.totalBytes)]}),N.jsxs("p",{children:["Created ",new Date(c.summary.createdAt).toLocaleString()," by application version ",c.summary.applicationVersion]}),N.jsx("button",{type:"button",className:"button-danger",disabled:s,onClick:g,children:"Replace data and restart"})]}):null]}),b?N.jsx(Ze,{title:"Backup and restore status",bodyClassName:"p-1 text-sm text-slate-200",children:N.jsx("p",{children:b})}):null,u?N.jsx(Ze,{title:"Last restore",meta:u.status,bodyClassName:"p-1 text-sm text-slate-300",children:N.jsxs("p",{children:[u.completedAt?new Date(u.completedAt).toLocaleString():"Completion time unavailable",u.error?` — ${u.error}`:""]})}):null]})}function ue(e){return typeof e!="object"||e===null||"lastModified"in e&&typeof e.lastModified=="number"&&typeof File<"u"&&e instanceof File||"getMonth"in e&&typeof e.getMonth=="function"&&typeof Date<"u"&&e instanceof Date?!1:!Array.isArray(e)}function Oy(e){return e.additionalItems===!0&&console.warn("additionalItems=true is currently not supported"),ue(e.additionalItems)}function Th(e){const t=typeof navigator<"u"?navigator.languages:void 0;if(t)try{return new Intl.NumberFormat(t).formatToParts(1.1).find(s=>s.type==="decimal")?.value||"."}catch{}return"."}function $l(e){if(e==="")return;if(e===null)return null;const t=Th(),r=typeof e=="string"&&t!=="."?e.replace(t,"."):e;if(/\.$/.test(r)||/\.0$/.test(r)||/\.\d*0$/.test(r))return e;const n=Number(r);return typeof n=="number"&&!Number.isNaN(n)?n:e}const Sn=Symbol("__additional_property"),Jn="additionalProperties",yr="allOf",Ie="anyOf",Nt="const",An="default",Lc="dependencies",jy="enum",vt="__errors",Ue="$id",Vc="if",ni="items",ky="_$junk_option_schema_id$_",ba="$name",Se="oneOf",mc="patternProperties",nt="properties",_o="readonly",Mh="required",ka="submitButtonOptions",Je="$ref",_a=Symbol("__rjsf_ref"),zc=Symbol("__rjsf_ref_cycle"),Ei="$schema",qh="root",Uh="_",Ny=["discriminator","propertyName"],Fl="formContext",Iy="layoutGridLookupMap",Lh="__rjsf",Bc=`${Lh}_additionalProperties`,Vh=`${Lh}_rootSchema`,Ry="ui:field",Hc="ui:widget",Br="ui:options",pc="ui:globalOptions",$y="ui:definitions",Fy="https://json-schema.org/draft/2019-09/schema",Sa="https://json-schema.org/draft/2020-12/schema";function pe(e={},t={}){return e?Object.keys(e).filter(r=>r.startsWith("ui:")).reduce((r,n)=>{const s=e[n];return n===Hc&&ue(s)?(console.error("Setting options via ui:widget object is no longer supported, use ui:options instead"),r):n===Br&&ue(s)?{...r,...s}:{...r,[n.substring(3)]:s}},{...t}):{...t}}function Dy(e,t={},r){if(!(e.additionalProperties||e.patternProperties))return!1;const{expandable:n=!0}=pe(t);return n===!1?n:e.maxProperties!==void 0&&r?Object.keys(r).length({...r,[s]:yc(n)}),t):Or(e)?Object.keys(e).reduce((r,n)=>({...r,[n]:yc(e[n])}),t):t}const{getOwnPropertyNames:Dl,getOwnPropertySymbols:Ty}=Object,{hasOwnProperty:My}=Object.prototype;function mi(e,t){return function(n,s,i){return e(n,s,i)&&t(n,s,i)}}function pi(e){return function(r,n,s){if(!r||!n||typeof r!="object"||typeof n!="object")return e(r,n,s);const{cache:i}=s,a=i.get(r),o=i.get(n);if(a&&o)return a===n&&o===r;i.set(r,n),i.set(n,r);const c=e(r,n,s);return i.delete(r),i.delete(n),c}}function Tl(e){const t=Ty(e);return t.length?Dl(e).concat(t):Dl(e)}const qy=Object.hasOwn||((e,t)=>My.call(e,t)),Uy="__v",Ly="__o",Vy="_owner",zy=typeof Float16Array<"u",{getOwnPropertyDescriptor:Ml,keys:ql}=Object,In=Object.is||function(t,r){return t===r?t!==0||1/t===1/r:t!==t&&r!==r};function By(e,t){return e===t}function Hy(e,t){return e.byteLength===t.byteLength&&Na(new Uint8Array(e),new Uint8Array(t))}function Ky(e,t,r){let n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(!r.equals(e[n],t[n],n,n,e,t,r))return!1;return!0}function Gy(e,t){return e.byteLength===t.byteLength&&Na(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function Wy(e,t){return In(e.getTime(),t.getTime())}function Ul(e,t,r){return e.name===t.name&&e.message===t.message&&e.stack===t.stack&&r.equals(e.cause,t.cause,"cause","cause",e,t,r)}function Ll(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const s=new Uint8Array(n),i=e.entries();let a,o,c=0;for(;(a=i.next())&&!a.done;){const l=t.entries();let u=0,p=0;for(;(o=l.next())&&!o.done;){if(s[p]){p++;continue}const b=a.value,v=o.value;if(r.equals(b[0],v[0],c,p,e,t,r)&&r.equals(b[1],v[1],b[0],v[0],e,t,r)){u=s[p]=1;break}p++}if(!u)return!1;c++}return!0}function Vl(e,t,r){const n=ql(e);let s=n.length;if(ql(t).length!==s)return!1;for(;s-- >0;)if(!zh(e,t,r,n[s]))return!1;return!0}function qn(e,t,r){const n=Tl(e);let s=n.length;if(Tl(t).length!==s)return!1;let i,a,o;for(;s-- >0;)if(i=n[s],!zh(e,t,r,i)||(a=Ml(e,i),o=Ml(t,i),(a||o)&&(!a||!o||a.configurable!==o.configurable||a.enumerable!==o.enumerable||a.writable!==o.writable)))return!1;return!0}function Jy(e,t){return In(e.valueOf(),t.valueOf())}function Yy(e,t){return e.source===t.source&&e.flags===t.flags}function zl(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const s=new Uint8Array(n),i=e.values();let a,o;for(;(a=i.next())&&!a.done;){const c=t.values();let l=0,u=0;for(;(o=c.next())&&!o.done;){if(!s[u]&&r.equals(a.value,o.value,a.value,o.value,e,t,r)){l=s[u]=1;break}u++}if(!l)return!1}return!0}function Na(e,t){let r=e.length;if(t.length!==r||e.byteOffset!==t.byteOffset)return!1;if(e instanceof Float64Array||e instanceof Float32Array||zy&&e instanceof Float16Array){for(;r-- >0;)if(e[r]!==t[r]&&(e[r]===e[r]||t[r]===t[r]))return!1;return!0}for(;r-- >0;)if(e[r]!==t[r])return!1;return!0}function Xy(e,t){return e.href===t.href?!0:e.protocol===t.protocol&&e.username===t.username&&e.password===t.password&&e.host===t.host&&e.pathname===t.pathname&&e.hash===t.hash&&Zy(e.searchParams,t.searchParams)}function Zy(e,t){const r=e.toString(),n=t.toString();return r===n||Bl(r)===Bl(n)}function Bl(e){return e.split("&").sort().join("&")}function zh(e,t,r,n){return(n===Vy||n===Ly||n===Uy)&&(e.$$typeof||t.$$typeof)?!0:qy(t,n)&&r.equals(e[n],t[n],n,n,e,t,r)}const Qy=Object.prototype.toString;function eg(e){const t=ig(e),{areArraysEqual:r,areDatesEqual:n,areFunctionsEqual:s,areMapsEqual:i,areNumbersEqual:a,areObjectsEqual:o,areRegExpsEqual:c,areSetsEqual:l,getUnsupportedCustomComparator:u}=e;return function(b,v,S){if(b===v)return!0;if(b==null||v==null)return!1;const E=typeof b;if(E!==typeof v)return!1;if(E!=="object")return E==="number"||E==="bigint"?a(b,v,S):E==="function"?s(b,v,S):!1;const g=b.constructor;if(g!==v.constructor)return!1;if(g===Object)return o(b,v,S);if(g===Array)return r(b,v,S);if(g===Date)return n(b,v,S);if(g===RegExp)return c(b,v,S);if(g===Map)return i(b,v,S);if(g===Set)return l(b,v,S);if(g===Promise)return!1;if(Array.isArray(b))return r(b,v,S);const y=Qy.call(b),f=t[y];if(f)return f(b,v,S);const w=u&&u(b,v,S,y);return w?w(b,v,S):!1}}function tg({circular:e,createCustomConfig:t,strict:r}){let n={areArrayBuffersEqual:Hy,areArraysEqual:r?qn:Ky,areDataViewsEqual:Gy,areDatesEqual:Wy,areErrorsEqual:r?mi(Ul,qn):mi(Ul,Vl),areFunctionsEqual:By,areMapsEqual:r?mi(Ll,qn):Ll,areNumbersEqual:In,areObjectsEqual:r?qn:Vl,arePrimitiveWrappersEqual:Jy,areRegExpsEqual:Yy,areSetsEqual:r?mi(zl,qn):zl,areTypedArraysEqual:r?mi(Na,qn):Na,areUrlsEqual:Xy,getUnsupportedCustomComparator:void 0};if(t&&(n=Object.assign({},n,t(n))),e){const s=pi(n.areArraysEqual),i=pi(n.areErrorsEqual),a=pi(n.areMapsEqual),o=pi(n.areObjectsEqual),c=pi(n.areSetsEqual);n=Object.assign({},n,{areArraysEqual:s,areErrorsEqual:i,areMapsEqual:a,areObjectsEqual:o,areSetsEqual:c})}return n}function rg(e){return function(t,r,n,s,i,a,o){return e(t,r,o)}}function ng({circular:e,comparator:t,createState:r,equals:n,strict:s}){if(r)return function(o,c){const{cache:l=e?new WeakMap:void 0,meta:u}=r();return t(o,c,{cache:l,equals:n,meta:u,strict:s})};if(e)return function(o,c){return t(o,c,{cache:new WeakMap,equals:n,meta:void 0,strict:s})};const i={cache:void 0,equals:n,meta:void 0,strict:s};return function(o,c){return t(o,c,i)}}function ig({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:r,areDatesEqual:n,areErrorsEqual:s,areFunctionsEqual:i,areMapsEqual:a,areObjectsEqual:o,arePrimitiveWrappersEqual:c,areRegExpsEqual:l,areSetsEqual:u,areTypedArraysEqual:p,areUrlsEqual:b}){return{"[object Arguments]":o,"[object Array]":t,"[object ArrayBuffer]":e,"[object AsyncGeneratorFunction]":i,"[object BigInt]":c,"[object BigInt64Array]":p,"[object BigUint64Array]":p,"[object Boolean]":c,"[object DataView]":r,"[object Date]":n,"[object Error]":s,"[object Float16Array]":p,"[object Float32Array]":p,"[object Float64Array]":p,"[object Function]":i,"[object GeneratorFunction]":i,"[object Int8Array]":p,"[object Int16Array]":p,"[object Int32Array]":p,"[object Map]":a,"[object Number]":c,"[object Object]":(v,S,E)=>typeof v.then!="function"&&typeof S.then!="function"&&o(v,S,E),"[object RegExp]":l,"[object Set]":u,"[object String]":c,"[object URL]":b,"[object Uint8Array]":p,"[object Uint8ClampedArray]":p,"[object Uint16Array]":p,"[object Uint32Array]":p}}kr();kr({strict:!0});kr({circular:!0});kr({circular:!0,strict:!0});kr({createInternalComparator:()=>In});kr({strict:!0,createInternalComparator:()=>In});kr({circular:!0,createInternalComparator:()=>In});kr({circular:!0,createInternalComparator:()=>In,strict:!0});function kr(e={}){const{circular:t=!1,createInternalComparator:r,createState:n,strict:s=!1}=e,i=tg(e),a=eg(i),o=r?r(a):rg(a);return ng({circular:t,comparator:a,createState:n,equals:o,strict:s})}const je=kr({circular:!0,createCustomConfig:()=>({areFunctionsEqual(e,t){return typeof t=="function"}})});var yi={exports:{}},So,Hl;function Bh(){if(Hl)return So;Hl=1;const e=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),t=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),r=RegExp.prototype.test.bind(/^\d*$/u),n=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),s=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),i=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u),a=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u),o=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u);function c(m){let d="",x=0,I=0;for(I=0;I=48&&x<=57||x>=65&&x<=70||x>=97&&x<=102))return"";d+=m[I];break}for(I+=1;I=48&&x<=57||x>=65&&x<=70||x>=97&&x<=102))return"";d+=m[I]}return d}const l=RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/),u=RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/),p=RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/),b=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u),v=RegExp.prototype.test.bind(/[^\d!"$&'()*+,\-.;=_`a-z{}~]/u),S=RegExp.prototype.test.bind(/(?:^|\.)\d+$/u);function E(m){return v(m)||S(m)}function g(m){if(m.length===0)return!1;for(let d=0;dx&&(x=T,d=I)):(I=-1,T=0);if(x<2)return m.join(":");const F=m.slice(0,d).join(":"),B=m.slice(d+x).join(":");return F+"::"+B}function f(m){const d=m.indexOf("::");if(d!==-1&&m.indexOf("::",d+1)!==-1)return;const x=d===-1?m.split(":"):m.slice(0,d).split(":"),I=d===-1?[]:m.slice(d+2).split(":");d!==-1&&(x.length===1&&x[0]===""&&(x.length=0),I.length===1&&I[0]===""&&(I.length=0));const T=x.concat(I);let F=0;for(let H=0;H=8)return;const B=T.slice(0,x.length);for(let H=F;H<8;H++)B.push("0");for(let H=x.length;H_[I])}function M(m,d=!1){if(m.indexOf("%")===-1)return m;let x="";for(let I=0;I>4]+m[d&15]}function U(m){return m>=48&&m<=57||m>=65&&m<=90||m>=97&&m<=122||m===42||m===43||m===45||m===46||m===47||m===64||m===95}function L(m){return m<2048?q[192|m>>6]+q[128|m&63]:m<65536?q[224|m>>12]+q[128|m>>6&63]+q[128|m&63]:q[240|m>>18]+q[128|m>>12&63]+q[128|m>>6&63]+q[128|m&63]}function z(m){let d="";for(let x=0;x57343)d+=L(T);else if(T<=56319&&x+1=56320&&F<=57343?(d+=L(65536+(T-55296<<10)+(F-56320)),x++):d+=L(65533)}else d+=L(65533)}}return d}function G(m,d=!1){let x="",I=d&&m[0]!=="/";for(let T=0;T57343)x+=L(B);else if(B<=56319&&T+1=56320&&H<=57343?(x+=L(65536+(B-55296<<10)+(H-56320)),T++):x+=L(65533)}else x+=L(65533)}}return x}function J(m){let d="";for(let x=0;x57343)d+=L(T);else if(T<=56319&&x+1=56320&&F<=57343?(d+=L(65536+(T-55296<<10)+(F-56320)),x++):d+=L(65533)}else d+=L(65533)}}return d}function Q(m,d){let x="";for(let I=0;I57343)x+=L(F);else if(F<=56319&&I+1=56320&&B<=57343?(x+=L(65536+(F-55296<<10)+(B-56320)),I++):x+=L(65533)}else x+=L(65533)}}return x}function Z(m){return Q(m,o)}function re(m){return Q(m,a)}function A(m){return Q(m,a)}function C(m){let d="";for(let x=0;x57343)d+=L(T);else if(T<=56319&&x+1=56320&&F<=57343?(d+=L(65536+(T-55296<<10)+(F-56320)),x++):d+=L(65533)}else d+=L(65533)}return d}function j(m){const d=[];if(m.userinfo!==void 0&&(d.push(Z(m.userinfo)),d.push("@")),m.host!==void 0){let x=m.host;if(!t(x)){let I=w(x);I.isIPV6!==!0&&I.isIPVFuture!==!0&&(x=M(x,!0),I=w(x)),I.isIPV6===!0||I.isIPVFuture===!0?x=`[${I.escapedHost}]`:x=$(x,!1)}d.push(x)}if(typeof m.port=="number"||typeof m.port=="string"){const x=String(m.port);if(!r(x))throw new TypeError("URI port is malformed.");d.push(":"),d.push(x)}return d.length?d.join(""):void 0}return So={BYTE_HEX:q,percentEncodeNonAscii:L,nonSimpleDomain:b,nonSimpleMailtoDomain:E,recomposeAuthority:j,reescapeHostDelimiters:$,normalizePercentEncoding:M,normalizePathEncoding:z,serializePathEncoding:G,normalizeQueryFragmentEncoding:J,encodeUserinfo:Z,encodeQuery:re,encodeFragment:A,escapePreservingEscapes:C,removeDotSegments:h,isIPv4:t,isUUID:e,normalizeIPv6:w,stringArrayToHexStripped:c},So}var wo,Kl;function sg(){if(Kl)return wo;Kl=1;const{isUUID:e,BYTE_HEX:t,percentEncodeNonAscii:r,nonSimpleMailtoDomain:n}=Bh(),s=/^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu,i=["http","https","ws","wss","urn","urn:uuid","mailto"];function a(F){return i.indexOf(F)!==-1}function o(F){return F.secure===!0?!0:F.secure===!1?!1:F.scheme?F.scheme.length===3&&(F.scheme[0]==="w"||F.scheme[0]==="W")&&(F.scheme[1]==="s"||F.scheme[1]==="S")&&(F.scheme[2]==="s"||F.scheme[2]==="S"):!1}function c(F){return F.host||(F.error=F.error||"HTTP URIs must have a host."),F}function l(F){const B=String(F.scheme).toLowerCase()==="https";return(F.port===(B?443:80)||F.port==="")&&(F.port=void 0),F.path||(F.path="/"),F}function u(F){return F.secure=o(F),F.resourceName=(F.path||"/")+(F.query?"?"+F.query:""),F.path=void 0,F.query=void 0,F}function p(F){if((F.port===(o(F)?443:80)||F.port==="")&&(F.port=void 0),typeof F.secure=="boolean"&&(F.scheme=F.secure?"wss":"ws",F.secure=void 0),F.resourceName){const B=F.resourceName.indexOf("?"),H=B===-1?F.resourceName:F.resourceName.slice(0,B);F.path=H&&H!=="/"?H:void 0,F.query=B===-1?void 0:F.resourceName.slice(B+1),F.resourceName=void 0}return F.fragment=void 0,F}function b(F,B){if(!F.path)return F.error="URN can not be parsed",F;const H=F.path.match(s);if(H&&H[0]===F.path){const R=B.scheme||F.scheme||"urn";F.nid=H[1].toLowerCase(),F.nss=H[2];const D=`${R}:${B.nid||F.nid}`,V=T(D);F.path=void 0,V&&(F=V.parse(F,B))}else F.error=F.error||"URN can not be parsed.";return F}function v(F,B){if(F.nid===void 0)throw new Error("URN without nid cannot be serialized");const H=B.scheme||F.scheme||"urn",R=F.nid.toLowerCase(),D=`${H}:${B.nid||R}`,V=T(D);V&&(F=V.serialize(F,B));const K=F,W=F.nss;return K.path=`${R||B.nid}:${W}`,B.skipEscape=!0,K}function S(F,B){const H=F;return H.uuid=H.nss,H.nss=void 0,!B.tolerant&&(!H.uuid||!e(H.uuid))&&(H.error=H.error||"UUID is not valid."),H}function E(F){const B=F;return B.nss=(F.uuid||"").toLowerCase(),B}const g={scheme:"http",domainHost:!0,parse:c,serialize:l},y={scheme:"https",domainHost:g.domainHost,parse:c,serialize:l},f={scheme:"ws",domainHost:!0,parse:u,serialize:p},w={scheme:"wss",domainHost:f.domainHost,parse:f.parse,serialize:f.serialize},P={scheme:"urn",parse:b,serialize:v,skipNormalize:!0},h={scheme:"urn:uuid",parse:S,serialize:E,skipNormalize:!0},_="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+=",O="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+,;:@",k="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+;:";function $(F,B=!1){const H=new Uint8Array(128);for(let V=0;V=55296&&R<=56319&&H+1=56320&&D<=57343){B+=F[H]+F[H+1],H++;continue}}B+=R>=55296&&R<=57343?"�":F[H]}return B}function A(F,B){if(B.all.test(F))return F;const H=B.table;let R="";for(let D=0;D57343){R+=B.allowNonAscii?F[D]:r(V);continue}if(V<=56319&&D+1=56320&&K<=57343){R+=B.allowNonAscii?F[D]+F[D+1]:r(65536+(V-55296<<10)+(K-56320)),D++;continue}}R+=B.allowNonAscii?"�":r(65533)}return R}function C(F,B,H){const R=String(F).toLowerCase();if(G.test(R)||R!==""&&!n(R))return R;try{const D=new URL("http://"+R);if(D.username||D.password||D.port||D.pathname!=="/"||D.search||D.hash||!D.hostname)throw new Error(J);return B&&B.unicodeSupport?R:D.hostname}catch{return H&&(H.error=H.error||J),R}}function j(F,B){const H=B&&B.unicodeSupport?L:U;return F.length>1&&F[0]==="["&&F[F.length-1]==="]"?"["+A(F.slice(1,-1),H)+"]":A(F,H)}function m(F,B){const H=F;let R=H.path,D=H.query;R&&Q.test(R)&&(R=re(R)),D&&Q.test(D)&&(D=re(D));const V=R?R.indexOf(",")===-1?[R]:R.split(","):[];if(H.path=void 0,D){let K=null,W=0;for(;W<=D.length;){let Y=D.indexOf("&",W);Y===-1&&(Y=D.length);const te=D.slice(W,Y);W=Y+1;const ne=te.indexOf("=");if(ne!==te.lastIndexOf("=")){H.error=H.error||"URI mailto has malformed header fields.";continue}const se=ne===-1?te:te.slice(0,ne),ce=ne===-1?"":te.slice(ne+1);if(se==="to"){const he=ce.split(",");for(let le=0;le=0?Y.slice(0,te):Y,se=te>=0?Y.slice(te+1):"",ce=A(ne,M),he=Z(se),le=C(he,B);R[W]=ce+"@"+j(le,B)}H.path=R.join(","),B.skipEscape=!0}else H.path=void 0;const D=H.headers&&typeof H.headers=="object"?Object.assign(Object.create(null),H.headers):Object.create(null);H.subject&&(D.subject=H.subject),H.body&&(D.body=H.body),H.headers=D;let V="",K=0;for(const W in D)K++!==0&&(V+="&"),V+=A(W,q)+"="+A(String(D[W]),q);return K!==0?H.query=V:H.headers=void 0,H}const I={http:g,https:y,ws:f,wss:w,urn:P,"urn:uuid":h,mailto:{scheme:"mailto",parse:m,serialize:d,domainHost:!1,unicodeSupport:!0,skipNormalize:!0,absolutePath:!0}};Object.setPrototypeOf(I,null);function T(F){return F&&(I[F]||I[F.toLowerCase()])||void 0}return wo={wsIsSecure:o,SCHEMES:I,isValidSchemeName:a,getSchemeHandler:T},wo}var Gl;function ag(){if(Gl)return yi.exports;Gl=1;const{normalizeIPv6:e,removeDotSegments:t,recomposeAuthority:r,normalizePercentEncoding:n,normalizePathEncoding:s,serializePathEncoding:i,normalizeQueryFragmentEncoding:a,encodeQuery:o,encodeFragment:c,reescapeHostDelimiters:l,isIPv4:u,nonSimpleDomain:p}=Bh(),{SCHEMES:b,getSchemeHandler:v}=sg(),S=/^[A-Za-z][A-Za-z0-9+.-]*$/u,E="URI scheme is malformed.";function g(A){const C=unescape(String(A));if(!S.test(C))throw new TypeError(E);return C}function y(A,C){return typeof A=="string"?A=J(A,C):typeof A=="object"&&(A=G(h(A,C),C)),A}function f(A,C,j){const m=j?Object.assign({scheme:"null"},j):{scheme:"null"},{parsed:d,malformedAuthorityOrPort:x,malformedPercentEncoding:I,malformedSchemeSpecific:T,malformedHost:F,malformedScheme:B}=z(A,m),{parsed:H,malformedAuthorityOrPort:R,malformedPercentEncoding:D,malformedSchemeSpecific:V,malformedHost:K,malformedScheme:W}=z(C,m);if(x||R||I||D||T||V||F||K||B||W)throw new Error(d.error||H.error||"URI is malformed.");const Y=w(d,H,m,!0),te=v(j&&j.scheme||Y.scheme),ne=Y.host,se=ne!==void 0&&ne!==""&&(u(ne)||e(ne).isIPV6);L(Y,j||{},te,se);const ce=ne&&ne.indexOf("%")!==-1&&!new RegExp("\\P{ASCII}","u").test(ne);if(Y.error&&!ce)throw new Error(Y.error);return m.skipEscape=!0,h(Y,m)}function w(A,C,j,m){const d={};return m||(A=G(h(A,j),j),C=G(h(C,j),j)),j=j||{},!j.tolerant&&C.scheme?(d.scheme=C.scheme,d.userinfo=C.userinfo,d.host=C.host,d.port=C.port,d.path=t(C.path||""),d.query=C.query):(C.userinfo!==void 0||C.host!==void 0||C.port!==void 0?(d.userinfo=C.userinfo,d.host=C.host,d.port=C.port,d.path=t(C.path||""),d.query=C.query):(C.path?(C.path[0]==="/"?d.path=t(C.path):((A.userinfo!==void 0||A.host!==void 0||A.port!==void 0)&&!A.path?d.path="/"+C.path:A.path?d.path=A.path.slice(0,A.path.lastIndexOf("/")+1)+C.path:d.path=C.path,d.path=t(d.path)),d.query=C.query):(d.path=A.path,C.query!==void 0?d.query=C.query:d.query=A.query),d.userinfo=A.userinfo,d.host=A.host,d.port=A.port),d.scheme=A.scheme),d.fragment=C.fragment,d}function P(A,C,j){const m=Z(A,j),d=Z(C,j);return m!==void 0&&d!==void 0&&m===d}function h(A,C){const j={host:A.host,scheme:A.scheme,userinfo:A.userinfo,port:A.port,path:A.path,query:A.query,nid:A.nid,nss:A.nss,uuid:A.uuid,fragment:A.fragment,reference:A.reference,resourceName:A.resourceName,secure:A.secure,to:A.to,subject:A.subject,body:A.body,headers:A.headers,error:""},m=Object.assign({},C),d=[];j.scheme&&(j.scheme=g(j.scheme));const x=v(m.scheme||j.scheme);x&&x.serialize&&x.serialize(j,m);const I=j.userinfo!==void 0||j.host!==void 0||j.port!==void 0,T=!m.skipEscape&&j.scheme===void 0&&!I;j.path!==void 0&&(m.skipEscape?j.path=n(j.path):j.path=i(j.path,T)),m.reference!=="suffix"&&j.scheme&&(j.scheme=g(j.scheme),d.push(j.scheme,":"));const F=r(j);if(F!==void 0&&(m.reference!=="suffix"&&d.push("//"),d.push(F),j.path&&j.path[0]!=="/"&&d.push("/")),j.path!==void 0){let B=j.path;!m.absolutePath&&(!x||!x.absolutePath)&&(B=t(B)),T&&(B=i(B,!0)),F===void 0&&B[0]==="/"&&B[1]==="/"&&(B="/%2F"+B.slice(2)),d.push(B)}return j.query!==void 0&&d.push("?",o(j.query)),j.fragment!==void 0&&d.push("#",c(j.fragment)),d.join("")}const _=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u,O=/^(?:[^#/:?]+:)?\/\/([^/?#]*)/,k=/^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;function $(A,C){if(C[2]!==void 0&&A.path&&A.path[0]!=="/")return'URI path must start with "/" when authority is present.';if(typeof A.port=="number"&&(A.port<0||A.port>65535))return"URI port is malformed."}function M(A){if(A===void 0)return!1;let C=A.indexOf("%");for(;C!==-1;){if(C+2>=A.length||!/^[\da-f]{2}$/iu.test(A.slice(C+1,C+3)))return!0;C=A.indexOf("%",C+3)}return!1}function q(A){return A[0]==="["&&A[A.length-1]==="]"}function U(A){const C=A[4];return M(A[3])||C!==void 0&&!q(C)&&M(C)||M(A[6])||M(A[7])||M(A[8])}function L(A,C,j,m){const d=A.host&&A.host[0]==="["&&A.host[A.host.length-1]==="]";if(!C.unicodeSupport&&(!j||!j.unicodeSupport)&&A.host&&!q(A.host)&&(C.domainHost||j&&j.domainHost)&&m===!1&&!d&&p(A.host))try{A.host=new URL("http://"+A.host).hostname}catch(x){return A.error=A.error||"Host's domain name can not be converted to ASCII: "+x,!0}return!1}function z(A,C){const j=Object.assign({},C),m={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0};let d=!1,x=!1,I=!1,T=!1,F=!1,B=!1,H=!1;j.reference==="suffix"&&(j.scheme?A=j.scheme+":"+A:A="//"+A);const R=A.match(O);R!==null&&R[1].indexOf("\\")!==-1&&(m.error="URI authority must not contain a literal backslash.",d=!0);const D=A.match(k);if(D!==null){const K=D[1],W=K.replace(/[\t\n\r]/g,"");W.length>=2&&(W.slice(0,2)!=="//"?(m.error=m.error||"URI authority must not contain a literal backslash.",d=!0):K.length!==W.length&&(m.error=m.error||"URI authority introducer must not contain whitespace.",d=!0))}const V=A.match(_);if(V){if(m.scheme=V[1],m.userinfo=V[3],m.host=V[4],m.port=parseInt(V[5],10),m.path=V[6]||"",m.query=V[7],m.fragment=V[8],m.scheme!==void 0){const Y=unescape(m.scheme);S.test(Y)?m.scheme=Y.toLowerCase():(m.error=m.error||E,B=!0)}x=U(V),x&&(m.error=m.error||"URI contains malformed percent-encoding."),isNaN(m.port)&&(m.port=V[5]);const K=$(m,V);if(K!==void 0&&(m.error=m.error||K,d=!0),m.host)if(u(m.host)===!1){const te=q(m.host),ne=m.host.indexOf("[")!==-1||m.host.indexOf("]")!==-1,se=e(m.host);H=se.isIPV6||se.isIPVFuture===!0,F=ne&&(!te||se.error===!0),m.host=H?se.host:se.host.toLowerCase(),F&&(m.error=m.error||"URI host is malformed.",d=!0)}else H=!0;m.scheme===void 0&&m.userinfo===void 0&&m.host===void 0&&m.port===void 0&&m.query===void 0&&!m.path?m.reference="same-document":m.scheme===void 0?m.reference="relative":m.fragment===void 0?m.reference="absolute":m.reference="uri",j.reference&&j.reference!=="suffix"&&j.reference!==m.reference&&(m.error=m.error||"URI is not a "+j.reference+" reference.");const W=v(j.scheme||m.scheme);if(F||(T=L(m,j,W,H)),!W||W&&!W.skipNormalize){if(A.indexOf("%")!==-1&&m.host!==void 0&&!F){const Y=H?m.host:n(m.host,!0);m.host=l(Y,H)}m.path&&(m.path=s(m.path)),m.query&&(m.query=a(m.query)),m.fragment&&(m.fragment=a(m.fragment))}W&&W.parse&&(W.parse(m,j),W===b.urn&&m.nid===void 0&&(I=!0))}else m.error=m.error||"URI can not be parsed.";return{parsed:m,malformedAuthorityOrPort:d,malformedPercentEncoding:x,malformedSchemeSpecific:I,malformedHost:T,malformedScheme:B}}function G(A,C){return z(A,C).parsed}function J(A,C){return Q(A,C).normalized}function Q(A,C){const{parsed:j,malformedAuthorityOrPort:m,malformedPercentEncoding:d,malformedSchemeSpecific:x,malformedHost:I,malformedScheme:T}=z(A,C);return{normalized:m||d||x||I||T?A:h(j,C),malformedAuthorityOrPort:m,malformedPercentEncoding:d,malformedSchemeSpecific:x,malformedHost:I,malformedScheme:T}}function Z(A,C){if(typeof A!="string"&&typeof A!="object")return;let j;try{j=typeof A=="string"?A:h(A,C)}catch{return}const{normalized:m,malformedAuthorityOrPort:d,malformedPercentEncoding:x,malformedSchemeSpecific:I,malformedHost:T,malformedScheme:F}=Q(j,C);return d||x||I||T||F?void 0:m}const re={SCHEMES:b,normalize:y,resolve:f,resolveComponent:w,equal:P,serialize:h,parse:G};return yi.exports=re,yi.exports.default=re,yi.exports.fastUri=re,yi.exports}var og=ag();const Kc=Fi(og);var gi={},Wl;function cg(){if(Wl)return gi;Wl=1;var e=/~/,t=/~[01]/g;function r(l){switch(l){case"~1":return"/";case"~0":return"~"}throw new Error("Invalid tilde escape: "+l)}function n(l){return e.test(l)?l.replace(t,r):l}function s(l,u,p){for(var b,v,S=1,E=u.length;SS,typeof l[b]>"u"&&(Array.isArray(l)&&b==="-"&&(b=l.length),v&&(u[S]!==""&&u[S]<1/0||u[S]==="-"?l[b]=[]:l[b]={})),!v)break;l=l[b]}var g=l[b];return p===void 0?delete l[b]:l[b]=p,g}function i(l){if(typeof l=="string"){if(l=l.split("/"),l[0]==="")return l;throw new Error("Invalid JSON pointer.")}else if(Array.isArray(l)){for(const u of l)if(typeof u!="string"&&typeof u!="number")throw new Error("Invalid JSON pointer. Must be of type string or number.");return l}throw new Error("Invalid JSON pointer.")}function a(l,u){if(typeof l!="object")throw new Error("Invalid input object.");u=i(u);var p=u.length;if(p===1)return l;for(var b=1;bue(a)?gc(a,r):a)}:ue(i)&&(n={...n,[s]:gc(i,r)});return n}function Gc(e,t){const{[e]:r,...n}=t;return[n,r]}function Hh(e,t={},r=[],n=t[Ue]){const s=e||"";let i,a=n;if(s.startsWith("#")){const c=decodeURIComponent(s.substring(1));a===void 0||Ue in t&&t[Ue]===a?i=Co.get(t,c):t[Ei]===Sa&&(i=Ia(t,a.replace(/\/$/,"")),i!==void 0&&(i=Co.get(i,c)))}else if(t[Ei]===Sa){const c=a?Kc.resolve(a,s):s,[l,...u]=c.replace(/#\/?$/,"").split("#");i=Ia(t,l.replace(/\/$/,"")),i!==void 0&&(a=i[Ue],u.length>0&&(i=Co.get(i,decodeURIComponent(u.join("#")))))}if(i===void 0)throw new Error(`Could not find a definition for ${e}.`);const o=i[Je];if(o){if(r.includes(o)){if(r.length===1)throw new Error(`Definition for ${e} is a circular reference`);const[p,...b]=r,v=[...b,s,p].join(" -> ");throw new Error(`Definition for ${p} contains a circular reference through ${v}`)}const[c,l]=Gc(Je,i),u=Hh(l,t,[...r,s],a);return Object.keys(c).length>0?t[Ei]===Fy||t[Ei]===Sa?{[yr]:[c,u]}:{...c,...u}:u}return i}function ki(e,t={},r=t[Ue]){return Hh(e,t,[],r)}const ug=/^(?:0|[1-9]\d*)$/;function rr(e){return e.split(/[.[\]]+/).filter(Boolean)}function dg(e){return Array.isArray(e)?e:[e]}function Jl(e){return e==="__proto__"}function fg(e){return typeof e=="number"?Number.isInteger(e)&&e>=0:ug.test(e)}function wn(e){return e!=null&&(typeof e=="object"||typeof e=="function")}function me(e,t,r){let n;if(!Array.isArray(t))n=wn(e)&&Object.hasOwn(e,t)?e[t]:void 0;else if(t.length===0)n=void 0;else{n=e;for(let s=0;s0}function hg(e,t){const r=dg(t);if(r.length===0)return!0;const n=r.length>1?me(e,r.slice(0,-1)):e;if(n==null)return!0;try{return Reflect.deleteProperty(n,r[r.length-1])}catch{return!1}}function Kt(e){let t;const r=me(e,Ny);return typeof r=="string"?t=r:r!==void 0&&console.warn(`Expecting discriminator to be a string, got "${typeof r}" instead`),t}function Ni(e){return Array.isArray(e)?"array":typeof e=="string"?"string":e==null?"null":typeof e=="boolean"?"boolean":typeof e=="number"&&!Number.isNaN(e)?"number":typeof e=="object"?"object":"string"}function Gt(e){let{type:t}=e;return!t&&e.const?Ni(e.const):!t&&e.enum?"string":!t&&(e.properties||e.additionalProperties||e.patternProperties)?"object":(Array.isArray(t)&&(t.length===2&&t.includes("null")?t=t.find(r=>r!=="null"):t=t[0]),t)}function jr(e,t){const r={...e},n=Object.keys(t).reduce((s,i)=>{const a=e?e[i]:{},o=t[i];return e&&i in e&&ue(o)?s[i]=jr(a,o):e&&t&&(Gt(e)==="object"||Gt(t)==="object")&&i===Mh&&Array.isArray(a)&&Array.isArray(o)?s[i]=[...new Set([...a,...o])]:s[i]=o,s},r);for(const s of Object.getOwnPropertySymbols(t))n[s]=t[s];return n}function gr(e,t){return e?.[nt]?.[t]??{}}function Kh(e,t,r){if(e&&r){const n=me(e,r);if(n===void 0)return;for(let s=0;s({required:[p]}))};let u;if(o.anyOf){const{...p}=o;p.allOf?p.allOf=p.allOf.slice():p.allOf=[],p.allOf.push(l),u=p}else u={...o,...l};if(delete u.required,e.isValid(u,t,n))return a}else if(e.isValid(o,t,n))return a}return 0}const mg=Object.prototype;function Ai(e){for(const t in e)if(mg.hasOwnProperty.call(e,t))return!1;return!0}const pg=["array","boolean","integer","null","number","object","string"];new Set(pg);const yg=["$defs","definitions","properties","patternProperties","dependencies"];new Set(yg);const gg=["items","allOf","oneOf","anyOf"];new Set(gg);const vg=["items","additionalItems","additionalProperties","propertyNames","contains","if","then","else","not"];new Set(vg);function wa(e){return typeof e=="object"}function ur(e){return wa(e)?Ai(e):e===!0}function Yn(e,t){return et?1:0}function Eo(e,t){const r=e.length;if(r===0)return t;let n=t.length;if(n===0)return e;if(rt.length){const s=e;e=t,t=s}const n=new Set(t);for(let s=0;s0;s++){const i=e[s];n.delete(i)&&r.push(i)}return r}function Yl(e){return e.length===0}function Ao(e){return(t,r)=>{const n=t.length-r.length;if(n!==0)return n;for(let s=0;s{const n=r.length;if(n===0)return r;if(n<=t){const a=[];let o=0;e:for(let c=0;c{const n=[];let s=t.length,i=r.length;if(s===0||i===0)return n;if(s>i){const u=t;t=r,r=u;const p=s;s=i,i=p}const a=[...t].sort(e),o=[...r].sort(e);let c=0,l=0;for(;c{if(e.has(r))return e.get(r);const n=t(r);return e.set(r,n),n}}const Xl=Sg,Wh=()=>0,wg=e=>e===void 0,Cg=e=>typeof e!="object",Zl={boolean:0,number:1,string:2};function Eg(e,t){const r=typeof e,n=typeof t;return r===n?Yn(e,t):Zl[r]-Zl[n]}function Ag(e,t){const r=e.length;if(r===0)return t;const n=t.length;if(n===0)return e;if(n>r){const a=e;e=t,t=a}const s=new Set(e),i=t.length;for(let a=0;ae(n)?e(s)?r(n,s):-1:e(s)?1:t(n,s)}function Gn(e){return Ha(wg,e)}function qr(e,t){return Ha(r=>r===void 0||e(r),t)}function xo(e,t){return Ha(Array.isArray,e,t)}const ct=Gn(Yn),Po=qr(e=>e===0,(e,t)=>e-t);function xg({deduplicationCache:e=new WeakMap,sortedKeysCache:t=new WeakMap}={}){const r=Xl(t,E=>Object.keys(E).sort());function n(E){return(g,y)=>{const f=r(g),w=r(y),P=Math.min(f.length,w.length);for(let h=0;hg(y(f),y(w))}const i=s(Yn);function a(E,g){if(wa(E)){if(wa(g)){const y=Object.keys(E),f=Object.keys(g),w=Ag(y,f),P=w.length;for(let h=0;hE===!1,Wh),minLength:Po,minItems:Po,minProperties:Po,required:qr(Yl,i),enum:qr(Yl,s(l)),type:Gn((E,g)=>{const y=Array.isArray(E),f=Array.isArray(g);return!y&&!f?Yn(E,g):i(y?E:[E],f?g:[g])}),items:qr(E=>!Array.isArray(E)&&ur(E),xo(a,Ao(a))),anyOf:b,allOf:b,oneOf:b,properties:p,patternProperties:p,additionalProperties:v,additionalItems:v,dependencies:qr(Ai,n(Gn(xo(a,i))))};return{compareSchemaValues:l,compareSchemaDefinitions:a}}function Ql(e){return e}const Jh=(e,t)=>e?Jh(t%e,e):t,Pg=(e,t)=>Math.abs(e*t)/Jh(e,t);function Og(e,t){return e===t?e:`(?=.*(?:${e}))(?=.*(?:${t}))`}function Oo(e,t,r){const n=e.length,s=t.length;if(n>0&&s>0)for(let i=0;i{const n={...t},s=Object.keys(r),i=s.length;for(let a=0;a{if(!s(a))throw new Error(`Schema keys '${r}' and '${n}' are conflicting (${r}: ${JSON.stringify(a[r])}, ${n}: ${JSON.stringify(a[n])})`)};for(const a of[[r,n],[n,r]]){let o=t.get(a[0]);o===void 0&&(o=[],t.set(a[0],o)),o.push({oppositeKey:a[1],check:i})}}return t}const $g=[un("minimum","maximum",e=>e.maximum>=e.minimum),un("exclusiveMinimum","maximum",e=>e.maximum>e.exclusiveMinimum),un("minimum","exclusiveMaximum",e=>e.exclusiveMaximum>e.minimum),un("exclusiveMinimum","exclusiveMaximum",e=>e.exclusiveMaximum>e.exclusiveMinimum),un("minLength","maxLength",e=>e.maxLength>=e.minLength),un("minItems","maxItems",e=>e.maxItems>=e.minItems),un("minProperties","maxProperties",e=>e.maxProperties>=e.minProperties)];function Fg({mergePatterns:e=Og,isSubRegExp:t=Object.is,intersectJson:r=bg,deduplicateJsonSchemaDef:n=Ql,defaultMerger:s=Ql,assigners:i=[],checks:a=$g,mergers:o}={}){function c(P){const h=P.length;let _=P[0];for(let O=1;O0&&k!==!1)if($)Object.assign(P,h);else for(let q=0;q{const q=ur(O),U=ur(M);if(q&&U)return ln(P,"properties",f(h,k)),ln(P,"patternProperties",_&&$?f(_,$):_??$),delete P.additionalProperties,P;const L=y(O,M);ln(P,"additionalProperties",L);const z={},G=Object.keys(h),J=G.length,[Q,Z]=_?tu(_):ru,[re,A]=$?tu($):ru,C=[],j=new Set,m=U?void 0:M;for(let B=0;B0&&A.length>0&&Oo(Z,A,(B,H)=>{t(B,H)&&F.add(B),t(H,B)&&F.add(H),T[e(B,H)]=y(_[B],$[H])}),T=u(T,_,Z,F,M,U),T=u(T,$,A,F,O,q),ln(P,"patternProperties",T),P},b=(P,{items:h=[],additionalItems:_},{items:O=[],additionalItems:k})=>{const $=Array.isArray(h),M=Array.isArray(O),q=[];if(P.items=q,$&&M){const[U,L,z]=h.length{iu(P,h);const O=iu({},_);return P.allOf===void 0?P.allOf=[O]:P.allOf=P.allOf.concat(O),P};function S(P,h){const _=[];if(Oo(P,h,(O,k)=>{try{_.push(y(O,k))}catch{}}),_.length===0)throw new Error(`No valid schema combinations could be produced for "${JSON.stringify(P)}" and "${JSON.stringify(h)}"; the merged result is empty`);return n(_)}const E=jg([[kg,p],[Ng,b],[Ig,v],...i]),g=Rg(a);function y(P,h){if(P===!1||h===!1)return!1;if(ur(P))return ur(h)?!0:h;if(ur(h))return P;let _={...P};const O=new Set,k=new Set,$=Reflect.ownKeys(h),M=$.length;for(let q=0;q{if(P===h)return P;const _=Array.isArray(P),O=Array.isArray(h);if(!_&&!O){const k=ko(P,h);if(k!==void 0)return k}else if(_||O){const k=new Set;if(_&&O)Oo(P,h,(M,q)=>{const U=ko(M,q);U!==void 0&&k.add(U)});else{const M=_?P:h,q=_?h:P,U=M.length;for(let L=0;L1)return Array.from(k)}throw new Error(`It is not possible to create an intersection of the following incompatible types: ${P.toString()}, ${h.toString()}`)},default:s,description:s,title:s,const:s,format:s,contentEncoding:s,contentMediaType:s,not:(P,h)=>{const _=n([P,h]);return _.length===1?_[0]:{anyOf:_}},pattern:e,readOnly:jo,writeOnly:jo,enum:(P,h)=>{const _=r(P,h);if(_.length===0)throw new Error(`Intersection of the following enums is empty: "${JSON.stringify(P)}", "${JSON.stringify(h)}"`);return _},anyOf:S,oneOf:S,allOf:(P,h)=>n(P.concat(h)),propertyNames:y,contains:y,dependencies:eu((P,h)=>Array.isArray(P)?Array.isArray(h)?Eo(P,h):y(h,{required:P}):Array.isArray(h)?y(P,{required:h}):y(P,h)),examples:(P,h)=>{if(!Array.isArray(P)||!Array.isArray(h))throw new Error(`Value of the 'examples' field should be an array, but got "${JSON.stringify(P)}" and "${JSON.stringify(h)}"`);return Eo(P,h)},multipleOf:(P,h)=>{let _=1;for(;!Number.isInteger(P)||!Number.isInteger(h);)_*=10,P*=10,h*=10;return Pg(P,h)/_},exclusiveMaximum:Math.min,maximum:Math.min,maxItems:Math.min,maxLength:Math.min,maxProperties:Math.min,exclusiveMinimum:Math.max,minimum:Math.max,minItems:Math.max,minLength:Math.max,minProperties:Math.max,uniqueItems:jo,required:Eo,...o};return{mergeSchemaDefinitions:y,mergeArrayOfSchemaDefinitions:c}}function Dg(e){const t=[],r=[e];for(;r.length>0;){const n=r.pop();if(typeof n=="boolean"||n.allOf===void 0){t.push(n);continue}const{allOf:s,...i}=n;t.push(i);for(let a=s.length-1;a>=0;a--)r.push(s[a])}return t}function Tg(e){return t=>e(Dg(t))}const{compareSchemaDefinitions:Mg,compareSchemaValues:qg}=xg(),{mergeArrayOfSchemaDefinitions:Ug}=Fg({intersectJson:_g(qg),deduplicateJsonSchemaDef:Gh(Mg)}),Yh=Tg(Ug);function bt(e,t,r={},n,s,i=!1){return hr(e,t,r,n,void 0,void 0,s,i)[0]}function Xh(e){return typeof e!="boolean"?e:e?{}:{not:{}}}function Lg(e,t,r,n,s,i,a){const{if:o,then:c,else:l,...u}=t,p=e.isValid(o,i||{},r);let b=[u],v=[];if(n){if(c&&typeof c!="boolean"){const S=c;v=v.concat(hr(e,S,r,i,n,s,a))}if(l&&typeof l!="boolean"){const S=l;v=v.concat(hr(e,S,r,i,n,s,a))}}else{const S=p?c:l;if(S!==void 0){const E=Xh(S);v=v.concat(hr(e,E,r,i,n,s,a))}}return v.length&&(b=v.map(S=>jr(u,S))),b.flatMap(S=>hr(e,S,r,i,n,s,a))}function Zh(e){return e.reduce((r,n)=>n.length>1?n.flatMap(s=>r.map(i=>[...i,s])):(r.forEach(s=>s.push(n[0])),r),[[]])}function Qh(e,t){const r=e.patternProperties??{};return Object.fromEntries(Object.entries(r).filter(([n])=>RegExp(n).test(t)))}function Vg(e,t,r,n,s,i,a,o){const c=em(e,t,r,n,s,i,a,o);if(c.length>1||c[0]!==t)return c;if(Lc in t)return rm(e,t,r,n,s,i,a).flatMap(u=>hr(e,u,r,i,n,s,a));if(yr in t&&Array.isArray(t[yr])){const l=t.allOf.map(p=>hr(e,p,r,i,n,s,a));return Zh(l).map(p=>({...t,allOf:p}))}return[t]}function em(e,t,r,n,s,i,a,o){const c=Hr(t,r,s,void 0,o);return c!==t?hr(e,c,r,i,n,s,a,o):[t]}function Hr(e,t,r,n,s,i=!1){if(!ue(e))return e;let a=e,o=n;if(Je in a){const{$ref:c,...l}=a;if(r.includes(c))return i?{...a,[zc]:!0}:a;r.push(c),a={...ki(c,t,o),...l,[_a]:c},Ue in a&&(o=a[Ue])}if(nt in a){const c=[],l={};for(const[u,p]of Object.entries(a[nt]??{})){const b=[...r];l[u]=Hr(p,t,b,o,s,!s),c.push(b)}for(const u of new Set(c.flat()))r.includes(u)||r.push(u);a={...a,[nt]:l}}if(ni in a&&!Array.isArray(a.items)&&typeof a.items!="boolean"&&(a={...a,items:Hr(a.items,t,r,o,s)}),s){let c,l;Ie in e&&Array.isArray(e[Ie])?(c=Ie,l=a[Ie]):Se in e&&Array.isArray(e[Se])&&(c=Se,l=a[Se]),c&&l&&(a={...a,[c]:l.map(u=>Hr(u,t,r,o,s))})}return je(e,a)?e:a}function zg(e,t,r,n,s){const i={...t,properties:{...t.properties}},a=n&&ue(n)?n:{};return Object.keys(a).forEach(o=>{if(!(o in i.properties)){if(mc in i){const c=Qh(i,o);if(Object.keys(c).length>0){i.properties[o]=bt(e,{[yr]:Object.values(c)},r,a[o],s),i.properties[o][Sn]=!0;return}}if(Jn in i&&i.additionalProperties!==!1){let c;typeof i.additionalProperties!="boolean"?Je in i.additionalProperties?c=bt(e,{[Je]:i.additionalProperties[Je]},r,a[o],s):"type"in i.additionalProperties?c={...i.additionalProperties}:Ie in i.additionalProperties||Se in i.additionalProperties?c={type:"object",...i.additionalProperties}:c={type:Ni(a[o])}:c={type:Ni(a[o])},i.properties[o]=c,i.properties[o][Sn]=!0}else i.properties[o]={type:"null"},i.properties[o][Sn]=!0}}),i}function Bg(e){return Yh(e)}function hr(e,t,r,n,s=!1,i=[],a,o){return ue(t)?Vg(e,t,r,s,i,n,a,o).flatMap(l=>{let u=l;if(Vc in u)return Lg(e,u,r,s,i,n,a);if(yr in u){if(s){const{allOf:b,...v}=u;return[...b,v]}try{const b=[],v=[],S={};u.allOf?.forEach(E=>{if(typeof E=="object"&&E.contains)b.push(E);else{v.push(E);for(const g of Object.getOwnPropertySymbols(E))g in S||(S[g]=E[g])}}),b.length&&(u={...u,allOf:v}),u=a?a(u):Bg(u);for(const E of Object.getOwnPropertySymbols(S))u[E]=S[E];b.length&&(u.allOf=b)}catch(b){console.warn(`could not merge subschemas in allOf: +`,b);const{allOf:v,...S}=u;return S}}return nt in u&&mc in u&&(u=Object.keys(u.properties).reduce((b,v)=>{const S=Qh(b,v);return Object.keys(S).length>0&&(b.properties[v]=bt(e,{allOf:[b.properties[v],...Object.values(S)]},r,me(n,v),a)),b},{...u,properties:{...u.properties}})),mc in u||Jn in u&&u.additionalProperties!==!1?zg(e,u,r,n,a):u}):[{}]}function Hg(e,t,r,n,s){let i;const{oneOf:a,anyOf:o,...c}=t;if(Array.isArray(a)?i=a:Array.isArray(o)&&(i=o),i){const l=s===void 0&&n?{}:s,u=Kt(t);i=i.map(b=>Hr(b,r,[]));const p=Ra(e,l,i,r,u);if(n){const b=tm(i,!1,r);return Ra(e,l,b,r,u),i.map(v=>jr(c,v))}return[jr(c,i[p])]}return[t]}function tm(e,t=!1,r){return e.map(n=>{if(!ue(n))return Xh(n);const s=t&&r?Hr(n,r,[]):n;return s.additionalProperties===!1?{...s,additionalProperties:!0}:s})}function rm(e,t,r,n,s,i,a){const{dependencies:o,...c}=t;return Hg(e,c,r,n,i).flatMap(u=>nm(e,o,u,r,n,s,i,a))}function nm(e,t,r,n,s,i,a,o){let c=[r];for(const l in t)if((s||me(a,l)!==void 0)&&(!r.properties||l in r.properties)){const[u,p]=Gc(l,t);return Array.isArray(p)?c[0]=Kg(r,p):ue(p)&&(c=Gg(e,r,n,l,p,s,i,a,o)),c.flatMap(b=>nm(e,u,b,n,s,i,a,o))}return c}function Kg(e,t){if(!t)return e;const r=Array.isArray(e.required)?Array.from(new Set([...e.required,...t])):t;return{...e,required:r}}function Gg(e,t,r,n,s,i,a,o,c){return hr(e,s,r,o,i,a,c).flatMap(u=>{const{oneOf:p,...b}=u,v=jr(t,b);if(p===void 0)return v;const S=p.map(g=>typeof g=="boolean"||!(Je in g)?[g]:em(e,g,r,i,a,o));return Zh(S).flatMap(g=>Wg(e,v,r,n,g,i,a,o,c))})}function Wg(e,t,r,n,s,i,a,o,c){const l=s.filter(u=>{if(typeof u=="boolean"||!u?.properties)return!1;const{[n]:p}=u.properties;if(p){const b={type:"object",properties:{[n]:p}};return e.isValid(b,o,r)||i}return!1});return!i&&l.length!==1?(console.warn("ignoring oneOf in dependencies because there isn't exactly one subschema that is valid"),[t]):l.flatMap(u=>{const p=u,[b]=Gc(n,p.properties),v={...p,properties:b};return hr(e,v,r,o,i,a,c).map(E=>jr(t,E))})}function xi(e,t,r,n,s,i={},a){if(Array.isArray(r[s])){const c=Kt(r)||n,l=r[s].map(p=>bt(e,p,t,i,a)),u=me(i,c);if(u!==void 0)return l.find(p=>je(me(p,[nt,c,An],me(p,[nt,c,Nt])),u))}}function im(e,t,r,n,s){let i=r;if(lt(r,Je)&&(i=bt(e,r,t,void 0,s)),n.length===0)return i;const a=Array.isArray(n)?[...n]:rr(n),[o,...c]=a;if(o!==void 0&&o!==""&<(i,o))return i=me(i,o),im(e,t,i,c,s)}function Ca(e,t,r,n,s,i){const a=im(e,t,r,n,i);return a===void 0?s:a}const su={title:"!@#$_UNKNOWN_$#@!"};function Jg(e,t,r,n,s={},i){const a=Array.isArray(n)?[...n]:n.split(".");let o=r;const c=a.pop(),l=String(c);a.length&&a.forEach(v=>{o=Ca(e,t,o,[nt,v],{},i),lt(o,Se)?o=xi(e,t,o,l,Se,me(s,v),i):lt(o,Ie)&&(o=xi(e,t,o,l,Ie,me(s,v),i))}),lt(o,Se)?o=xi(e,t,o,l,Se,s,i):lt(o,Ie)&&(o=xi(e,t,o,l,Ie,s,i));let u=Ca(e,t,o,[nt,c],su,i);u===su&&(u=void 0);const p=Ca(e,t,o,Mh,[],i);let b;return u&&Array.isArray(p)&&(b=p.includes(l)),{field:u,isRequired:b}}const Yg={type:"object",$id:ky,properties:{__not_really_there__:{type:"number"}}};function vc(e,t,r,n,s){let i=0;return r&&(ue(r.properties)?i+=Object.entries(r.properties).reduce((a,[o,c])=>{const l=n?.[o];if(typeof c=="boolean")return a;if(lt(c,Je)){const u=bt(e,c,t,l,s);return a+vc(e,t,u,l||{},s)}if((lt(c,Se)||lt(c,Ie))&&l){const u=lt(c,Se)?Se:Ie,p=Kt(c);return a+ii(e,t,l,me(c,u),-1,p,s)}if(c.type==="object")return a+(typeof l=="object"&&l!==null?1:0)+vc(e,t,c,l,s);if(c.type===Ni(l)){let u=a+1;return c.default?u+=l===c.default?1:-1:c.const&&(u+=l===c.const?1:-1),u}return a},0):typeof r.type=="string"&&r.type===Ni(n)&&(i+=1)),i}function ii(e,t,r,n,s=-1,i,a){const o=n.map(b=>Hr(b,t,[])),c=Kh(r,n,i);if(typeof c=="number")return c;const l=o.reduce((b,v,S)=>(Ra(e,r,[Yg,v],t,i)===1&&b.push(S),b),[]);if(l.length===1)return l[0];l.length||l.push(...o.keys());const u=new Set,{bestIndex:p}=l.reduce((b,v)=>{const{bestScore:S}=b,E=o[v],g=vc(e,t,E,r,a);return u.add(g),g>S?{bestIndex:v,bestScore:g}:b},{bestIndex:s,bestScore:0});return u.size===1&&s>=0?s:p}function sm(e){const t=e[Nt],r=Gt(e);return ue(t)&&typeof t?.$data=="string"&&r!=="object"&&r!=="array"}function am(e){return Array.isArray(e.enum)&&e.enum.length===1||Nt in e}function Wc(e){return Array.isArray(e.items)&&e.items.every(t=>ue(t))}function Ii(e,t,r=!1,n=!1,s=!1){if(Array.isArray(t)){const i=Array.isArray(e)?e:[],a=s?i:t,o=s?t:i,c=a.map((l,u)=>o[u]!==void 0?Ii(i[u],t[u],r,n,s):l);return(r||s)&&c.length{const u=a[l],p=o!==void 0&&l in o,b=l in a,v=o?.[l]??{},S=p&&ue(v)&&Object.values(v).some(y=>ue(y)||Array.isArray(y)),E=p&&ue(o?.[l]),g=b&&ue(u);return E&&g&&!S?(c[l]={...o?.[l],...u},c):(c[l]=Ii(o?.[l],u,r,n,s&&(p||!b)),i)},i)}return n&&(e!==void 0&&t==null||typeof t=="number"&&Number.isNaN(t))||s&&t!=null?e:t}function Xr(e,t,r=!1){return Object.keys(t).reduce((n,s)=>{const i=e?e[s]:{},a=t[s];if(e&&s in e&&ue(a))n[s]=Xr(i,a,r);else if(r&&Array.isArray(i)&&Array.isArray(a)){let o=a;r==="preventDuplicates"&&(o=a.reduce((c,l)=>(i.includes(l)||c.push(l),c),[])),n[s]=i.concat(o)}else n[s]=a;return n},{...e})}function Xg(e){if(jy in e&&Array.isArray(e.enum)&&e.enum.length===1)return e.enum[0];if(Nt in e)return e.const;throw new Error("schema cannot be inferred as a constant")}function Zg(e,t){const r=new Map(e.map(i=>[String(i.value),i])),n=new Set(t.filter(i=>i!=="*").map(String)),s=e.filter(i=>!n.has(String(i.value)));return t.flatMap(i=>{if(i==="*")return s;const a=r.get(String(i));return a?[a]:[]})}function xn(e,t){if(e.enum){let i,a;if(t){const{enumNames:c,enumOrder:l}=pe(t);i=c,a=l}let o=e.enum.map((c,l)=>({label:Array.isArray(i)?i[l]||String(c):i?.[String(c)]||String(c),value:c}));return a&&(o=Zg(o,a)),o}let r,n;e.anyOf?(r=e.anyOf,n=t?.anyOf):e.oneOf&&(r=e.oneOf,n=t?.oneOf);let s=Kt(e);if(t){const{optionsSchemaSelector:i=s}=pe(t);s=i}return r?.map((i,a)=>{const{title:o}=pe(n?.[a]),c=i;let l,u=o;if(s){const p=gr(c,s);l=me(p,An,me(p,Nt)),u=u??p?.title??c.title??String(l)}else l=Xg(c),u=u??c.title??String(l);return{schema:c,label:u,value:l}})}function Ka(e,t,r={},n){const s=bt(e,t,r,void 0,n),i=s.oneOf||s.anyOf;return Array.isArray(s.enum)?!0:Array.isArray(i)?i.every(a=>typeof a!="boolean"&&am(a)):!1}function Jc(e,t,r,n){return!t.uniqueItems||!t.items||typeof t.items=="boolean"?!1:Ka(e,t.items,r,n)}const Qg=["string","number","integer","boolean","null"];var si;(function(e){e[e.Ignore=0]="Ignore",e[e.Invert=1]="Invert",e[e.Fallback=2]="Fallback"})(si||(si={}));function No(e,t=si.Ignore,r=-1){if(r>=0){if(Array.isArray(e.items)&&r0:typeof e=="object"&&e!==null?Object.keys(e).length>0:!1}function om(e,t){const{default:r,type:n}=e;return Array.isArray(n)&&n.includes("null")&&!e0(t)&&r===null?null:t}function au(e,t,r,n,s,i=[],a={},o=!1,c=!1){const{emptyObjectFields:l="populateAllDefaults"}=a;if(n===!0||o)e[t]=r;else if(n==="excludeObjectChildren")(c&&r!==void 0||!ue(r)||Object.keys(r).length>0)&&(e[t]=r);else if(l!=="skipDefaults"){const u=s===void 0?i.includes(t):s;ue(r)?l==="skipEmptyDefaults"?Object.keys(r).length>0&&(e[t]=r):(Object.keys(r).length>0||i.includes(t))&&(u||l!=="populateRequiredDefaults")&&(e[t]=r):r!==void 0&&(l==="populateAllDefaults"||l==="skipEmptyDefaults"||u&&i.includes(t))&&(e[t]=r)}}function Kr(e,t,r={}){const{parentDefaults:n,rawFormData:s,rootSchema:i={},includeUndefinedValues:a=!1,_recurseList:o=[],experimental_defaultFormStateBehavior:c,experimental_customMergeAllOf:l,required:u,shouldMergeDefaultsIntoFormData:p=!1,initialDefaultsGenerated:b}=r;let v=ue(s)?s:{};const S=ue(t)?t:{};let E=n;const g=E&&c?.nestedDefaultsPrecedence==="ancestorWins";let y=null,f=c,w=o;if(S[Nt]!==void 0&&c?.constAsDefaults!=="never"&&!sm(S))E=S[Nt];else if(ue(E)&&ue(S.default)&&!S[Ie]&&!S[Se]&&!S[Je])g?E=Xr(S.default,E):E=Xr(E,S.default);else if(An in S&&!g&&!S[Ie]&&!S[Se]&&!S[Je])E=S.default;else if(Je in S){const _=S[Je];o.includes(_)||(w=o.concat(_),y=ki(_,i));const O=s===void 0||ue(s)&&Object.keys(s).length===0;y&&!E&&O&&(E=S.default),p&&y&&!ue(s)&&(v=s)}else if(Lc in S){const _={...ou(e,S,r,E),...v};[y]=rm(e,S,i,!1,[],_,l)}else if(Wc(S)&&!g)E=S.items.map((_,O)=>Kr(e,_,{rootSchema:i,includeUndefinedValues:a,_recurseList:o,experimental_defaultFormStateBehavior:c,experimental_customMergeAllOf:l,parentDefaults:Array.isArray(n)?n[O]:void 0,rawFormData:v,required:u,shouldMergeDefaultsIntoFormData:p}));else if(Se in S){const{oneOf:_,...O}=S;if(_.length===0)return;const k=Kt(S),{type:$="null"}=O;!Array.isArray($)&&Qg.includes($)&&f?.constAsDefaults==="skipOneOf"&&(f={...f,constAsDefaults:"never"}),y=_[ii(e,i,s??S.default,_,0,k,l)],y=jr(O,y)}else if(Ie in S){const{anyOf:_,...O}=S;if(_.length===0)return;const k=Kt(S);y=_[ii(e,i,s??S.default,_,0,k,l)],y=jr(O,y)}if(y)return Kr(e,y,{rootSchema:i,includeUndefinedValues:a,_recurseList:w,experimental_defaultFormStateBehavior:f,experimental_customMergeAllOf:l,parentDefaults:E,rawFormData:s??v,required:u,shouldMergeDefaultsIntoFormData:p,initialDefaultsGenerated:b});E===void 0&&(E=S.default);let h=ou(e,S,r,E)??E;if(p){const{arrayMinItems:_={}}=c||{},{mergeExtraDefaults:O}=_,k=Yc(e,S,i,s,c,l);(!ue(s)||yr in S)&&(h=Ii(h,k,O,!0))}return h}function Yc(e,t,r,n,s,i){const a=s?.allOf==="populateDefaults"&&yr in t,o=a?bt(e,t,r,n,i):t,c=!am(o)&&Ka(e,o,r,i);let l=n;return c&&(l=xn(o)?.some(v=>je(v.value,n))?n:void 0),o[Nt]&&s?.constAsDefaults==="always"?l=o.const:ue(l)&&ue(o.properties)&&(l=Object.keys(o.properties).reduce((p,b)=>{const v=gr(o,b);return b in p&&(a||ue(v)&&yr in v)&&(p[b]=Yc(e,v,r,p[b],s,i)),p},{...l})),l}function t0(e,t,{rawFormData:r,rootSchema:n={},includeUndefinedValues:s=!1,_recurseList:i=[],experimental_defaultFormStateBehavior:a,experimental_customMergeAllOf:o,required:c,shouldMergeDefaultsIntoFormData:l,initialDefaultsGenerated:u}={},p){{const b=ue(r)?r:{},v=t,E=a?.allOf==="populateDefaults"&&yr in v||a?.emptyObjectFields!=="skipEmptyDefaults"&&Vc in v?bt(e,v,n,b,o):v,g=E[Nt],y=Object.keys(E.properties||{}).reduce((f,w)=>{const P=gr(E,w),h=ue(g)&&g[w]!==void 0,_=(ue(P)&&Nt in P||h)&&a?.constAsDefaults!=="never"&&!sm(P),O=Kr(e,P,{rootSchema:n,_recurseList:i,experimental_defaultFormStateBehavior:a,experimental_customMergeAllOf:o,includeUndefinedValues:s===!0,parentDefaults:me(p,w),rawFormData:me(b,w),required:E.required?.includes(w),shouldMergeDefaultsIntoFormData:l,initialDefaultsGenerated:u});return au(f,w,O,s,c,E.required,a,_,P?.type==="null"),f},{});if(E.additionalProperties&&!u){const f=ue(E.additionalProperties)?E.additionalProperties:{},w=new Set,P=[];Object.keys(b).filter(h=>!E.properties||!E.properties[h]).forEach(h=>{w.add(h),P.push(h)}),ue(p)&&P.length===0&&Object.keys(p).filter(h=>!E.properties||!E.properties[h]).forEach(h=>w.add(h)),w.forEach(h=>{const _=Kr(e,f,{rootSchema:n,_recurseList:i,experimental_defaultFormStateBehavior:a,experimental_customMergeAllOf:o,includeUndefinedValues:s===!0,parentDefaults:me(p,h),rawFormData:me(b,h),required:E.required?.includes(h),shouldMergeDefaultsIntoFormData:l,initialDefaultsGenerated:u});au(y,h,_,s,c,P)})}return om(t,y)}}function r0(e,t,{rawFormData:r,rootSchema:n={},_recurseList:s=[],experimental_defaultFormStateBehavior:i,experimental_customMergeAllOf:a,required:o,requiredAsRoot:c=!1,shouldMergeDefaultsIntoFormData:l,initialDefaultsGenerated:u}={},p){let b=p;const v=t,S=i?.arrayMinItems??{},{populate:E,mergeExtraDefaults:g}=S,y=E==="never",f=E==="requiredOnly",w=E==="all"||!y&&!f,P=S?.computeSkipPopulate??(()=>!1),_=i?.emptyObjectFields==="skipEmptyDefaults"?void 0:[];if(Array.isArray(b)&&(b=b.map(($,M)=>{const q=No(v,si.Fallback,M),U=Array.isArray(r)?r[M]:void 0;return Kr(e,q,{rootSchema:n,_recurseList:s,experimental_defaultFormStateBehavior:i,experimental_customMergeAllOf:a,parentDefaults:$,rawFormData:U,required:o,shouldMergeDefaultsIntoFormData:l,initialDefaultsGenerated:u})})),Array.isArray(r)){const $=No(v);if(y)b=r;else{const M=r.map((U,L)=>Kr(e,$,{rootSchema:n,_recurseList:s,experimental_defaultFormStateBehavior:i,experimental_customMergeAllOf:a,rawFormData:U,parentDefaults:me(b,L),required:o,shouldMergeDefaultsIntoFormData:l,initialDefaultsGenerated:u}));b=Ii(b,M,(f&&o||w)&&g)}}const O=Array.isArray(b)?b.length:0;if(y)return l&&!o?b:b??_;if(f&&!o)return b||void 0;let k;if(!v.minItems||Jc(e,v,n,a)||P(e,v,n)||v.minItems<=O)k=b||!o&&!c?b:_;else{const $=b||[],M=No(v,si.Invert),q=M.default,U=Array.from({length:v.minItems-O},()=>Kr(e,M,{parentDefaults:q,rootSchema:n,_recurseList:s,experimental_defaultFormStateBehavior:i,experimental_customMergeAllOf:a,required:o,shouldMergeDefaultsIntoFormData:l}));k=$.concat(U)}return om(t,k)}function ou(e,t,r={},n){switch(Gt(t)){case"object":return t0(e,t,r,n);case"array":return r0(e,t,r,n);case"boolean":return r.required&&n===void 0?!1:void 0;default:return}}function cm(e,t,r,n,s=!1,i,a,o){if(!ue(t))throw new Error(`Invalid schema: ${t}`);const c=bt(e,t,n,r,a),l=Kr(e,c,{rootSchema:n,includeUndefinedValues:s,experimental_defaultFormStateBehavior:i,experimental_customMergeAllOf:a,rawFormData:r,shouldMergeDefaultsIntoFormData:!0,initialDefaultsGenerated:o,requiredAsRoot:!0});if(c.type!=="object"&&ue(c.default))return{...l,...r};if(ue(r)||Array.isArray(r)){const{mergeDefaultsIntoFormData:u}=i||{},p=u==="useDefaultIfFormDataUndefined",b=Yc(e,c,n??c,r,i,a);return Ii(l,b,!0,p,!0)}return l}function lm(e={}){return"widget"in pe(e)&&pe(e).widget!=="hidden"}function um(e,t,r={},n,s){if(r[Hc]==="files")return!0;if(t.items){const i=bt(e,t.items,n,void 0,s);return i.type==="string"&&i.format==="data-url"}return!1}function n0(e,t,r={},n,s,i){const a=pe(r,s),{label:o=!0}=a;let c=!!o;if(c){const l=Gt(t),u=!!t[Sn];l==="array"&&(c=u||Jc(e,t,n,i)||um(e,t,r,n,i)||lm(r)),l==="object"&&(c=u),l==="boolean"&&r&&!r[Hc]&&(c=!1),r?.[Ry]&&(c=!1)}return c}function i0(e,t){if(t.length===0&&typeof e!="object")return e;const r={};return t.forEach(n=>{const s=Array.isArray(n)?n:rr(n);lt(e,s)&&at(r,s,me(e,s))}),Array.isArray(e)?Object.keys(r).map(n=>r[n]):r}function s0(e,t){const r=(s,i)=>typeof s!="object"||s===null?!0:(Array.isArray(s)?s.length===0:Object.keys(s).length===0)||i,n=(s,i=[],a=[[]])=>{const o=Object.keys(s);return o.forEach(c=>{const l=s[c];if(typeof l=="object"){const u=a.map(p=>[...p,c]);l[Bc]&&l[ba]!==""?i.push(l[ba]):n(l,i,u)}else c===ba&&l!==""&&a.forEach(u=>{const p=me(t,u),b=o.length===1;(r(p,b)||Array.isArray(p)&&p.every(v=>r(v,b)))&&i.push(u)})}),i};return n(e)}function dm(e){return e==null||e===""?!0:Array.isArray(e)?e.length===0:ue(e)?Object.values(e).every(dm):!1}function a0(e,t){return t?t(e):Yh(e)}function o0(e,t,r={},n,s){function i(S){return ue(S)}function a(S){return ue(S)}function o(S,E,g){const{properties:y,additionalProperties:f,patternProperties:w}=S,P=new Set(S.required??[]);function h(O,k,$,M=!1){const q=v(k,$,g[O]);if(!M&&ue(q)){let U=a(k)?k:{};U.$ref!==void 0&&(U=ki(U.$ref,r));const L=new Set(U.required??[]);if(Object.entries(q).every(([G,J])=>!L.has(G)&&dm(J)))return}q!==void 0&&(g[O]=q)}if(y!==void 0)for(const[O,k]of Object.entries(y))h(O,k,E[O],P.has(O));let _;if(w!==void 0){_=[];const O=Object.entries(w).map(([$,M])=>[new RegExp($),M]),k=new Set(Object.keys(y??{}));for(const[$,M]of Object.entries(E))if(!k.has($)){const q=O.find(([U])=>U.test($));q===void 0?_.push($):h($,q[1],M)}}if(f!==void 0&&f!==!1){const O=f;if(_!==void 0)for(const k of _)h(k,O,E[k]);else{const k=new Set(Object.keys(y??{}));for(const[$,M]of Object.entries(E))k.has($)||h($,O,M)}}return g}function c(S,E,g){const{items:y,additionalItems:f}=S;if(Array.isArray(y)){const w=Math.min(y.length,E.length);let P=0;for(;Pnew RegExp(q)):[];for(const q of Object.keys(O))!$.has(q)&&!M.some(U=>U.test(q))&&delete O[q]}return b(f,E,O)??(y?E:void 0)}return v(t,n)}const Lt=Symbol("no Value");function fm(e){if(Array.isArray(e.enum))return e.enum;const t=e.oneOf||e.anyOf;if(!Array.isArray(t))return;const r=t.map(n=>Nt in n?n[Nt]:Array.isArray(n.enum)&&n.enum.length===1?n.enum[0]:Lt).filter(n=>n!==Lt);return r.length>0?r:void 0}function c0(e,t){const r=fm(e);if(!r||r.some(s=>je(s,t)))return Lt;const n=me(e,An,Lt);return n!==Lt&&r.some(s=>je(s,n))?n:r.length===1?r[0]:void 0}function bc(e,t,r,n,s={},i){let a;const o=r?.[nt];if(o){const c={},l=n?.[nt];l&&Object.keys(l).forEach(b=>{lt(s,b)&&(c[b]=void 0)});const u=Object.keys(o),p={};u.forEach(b=>{const v=s?.[b],S=!lt(n,[nt,b]);let E=gr(n,b),g=gr(r,b);lt(E,Je)&&(E=bt(e,E,t,v,i)),lt(g,Je)&&(g=bt(e,g,t,v,i));const y=E.type,f=g.type;if(!y||y===f)if(b in c&&delete c[b],f==="object"||f==="array"&&Array.isArray(v)){const w=bc(e,t,g,S&&f==="array"?g:E,v,i);(w!==void 0||f==="array")&&(p[b]=w)}else{const w=me(g,An,Lt),P=me(E,An,Lt);w!==Lt&&w!==v&&(S&&v===void 0||P===v?c[b]=w:g.readOnly===!0&&(c[b]=void 0));const h=me(g,Nt,Lt),_=me(E,Nt,Lt);if(h!==Lt&&h!==v&&(c[b]=_===v?h:void 0),lt(s,b)){const O=c0(g,v);O!==Lt&&(c[b]=O)}}}),a={...typeof s=="string"||Array.isArray(s)?void 0:s,...c,...p}}else if(n?.type==="array"&&r?.type==="array"&&Array.isArray(s)){let c=n.items,l=r.items;if(typeof c=="object"&&typeof l=="object"&&!Array.isArray(c)&&!Array.isArray(l)){lt(c,Je)&&(c=bt(e,c,t,s,i)),lt(l,Je)&&(l=bt(e,l,t,s,i));const u=me(c,"type"),p=me(l,"type");if(!u||u===p){const b=r.maxItems??-1;if(p==="object")a=s.reduce((v,S)=>{const E=bc(e,t,l,c,S,i);return E!==void 0&&(b<0||v.lengthv.some(g=>je(g,E))):s;a=b>0&&S.length>b?S.slice(0,b):S}}}else typeof c=="boolean"&&typeof l=="boolean"&&c===l&&(a=s)}return a}function Ur(e,t,r,n,s,i=[],a){if(Je in t||Lc in t||yr in t||Vc in t){const c=bt(e,t,n,s,a);if(i.findIndex(u=>je(u,c))===-1)return Ur(e,c,r,n,s,i.concat(c),a)}let o={[ba]:r.replace(/^\./,"")};if(Se in t||Ie in t){const c=Se in t?t.oneOf:t.anyOf,l=Kt(t),u=ii(e,n,s,c,0,l,a),p=c[u];o={...o,...Ur(e,p,r,n,s,i,a)}}if(Jn in t&&t[Jn]!==!1){at(o,Bc,!0);const c=ue(t[Jn])?t[Jn]:{},l=t[nt]??{};for(const u of Object.keys(s??{}))u in l||(o[u]=Ur(e,c,`${r}.${u}`,n,me(s,u),i,a))}if(ni in t&&Array.isArray(s)){const{items:c,additionalItems:l}=t;Array.isArray(c)?s.forEach((u,p)=>{c[p]?o[p]=Ur(e,c[p],`${r}.${p}`,n,u,i,a):l?o[p]=Ur(e,l,`${r}.${p}`,n,u,i,a):console.warn(`Unable to generate path schema for "${r}.${p}". No schema defined for it`)}):s.forEach((u,p)=>{o[p]=Ur(e,c,`${r}.${p}`,n,u,i,a)})}else if(nt in t)for(const c in t.properties){const l=gr(t,c);o[c]=Ur(e,l,`${r}.${c}`,n,me(s,c),i,a)}return o}function l0(e,t,r="",n,s,i){return Ur(e,t,r,n,s,void 0,i)}class u0{rootSchema;validator;experimental_defaultFormStateBehavior;experimental_customMergeAllOf;constructor(t,r,n,s){r?.[Ei]===Sa?this.rootSchema=gc(r,r[Ue]??"#"):this.rootSchema=r,this.validator=t,this.experimental_defaultFormStateBehavior=n,this.experimental_customMergeAllOf=s}getRootSchema(){return this.rootSchema}getValidator(){return this.validator}doesSchemaUtilsDiffer(t,r,n={},s){return!t||!r?!1:this.validator!==t||!je(this.rootSchema,r)||!je(this.experimental_defaultFormStateBehavior,n)||this.experimental_customMergeAllOf!==s}findFieldInSchema(t,r,n){return Jg(this.validator,this.rootSchema,t,r,n,this.experimental_customMergeAllOf)}findSelectedOptionInXxxOf(t,r,n,s){return xi(this.validator,this.rootSchema,t,r,n,s,this.experimental_customMergeAllOf)}getDefaultFormState(t,r,n=!1,s){return cm(this.validator,t,r,this.rootSchema,n,this.experimental_defaultFormStateBehavior,this.experimental_customMergeAllOf,s)}getDisplayLabel(t,r,n){return n0(this.validator,t,r,this.rootSchema,n,this.experimental_customMergeAllOf)}getClosestMatchingOption(t,r,n,s){return ii(this.validator,this.rootSchema,t,r,n,s,this.experimental_customMergeAllOf)}getFirstMatchingOption(t,r,n){return Ra(this.validator,t,r,this.rootSchema,n)}getFromSchema(t,r,n){return Ca(this.validator,this.rootSchema,t,r,n,this.experimental_customMergeAllOf)}isFilesArray(t,r){return um(this.validator,t,r,this.rootSchema,this.experimental_customMergeAllOf)}isMultiSelect(t){return Jc(this.validator,t,this.rootSchema,this.experimental_customMergeAllOf)}isSelect(t){return Ka(this.validator,t,this.rootSchema,this.experimental_customMergeAllOf)}omitExtraData(t,r){return o0(this.validator,t,this.rootSchema,r)}retrieveSchema(t,r,n){return bt(this.validator,t,this.rootSchema,r,this.experimental_customMergeAllOf,n)}sanitizeDataForNewSchema(t,r,n){return bc(this.validator,this.rootSchema,t,r,n,this.experimental_customMergeAllOf)}toPathSchema(t,r,n){return l0(this.validator,t,r,this.rootSchema,n,this.experimental_customMergeAllOf)}}function d0(e,t,r={},n){return new u0(e,t,r,n)}function f0(e){if(!e.includes("data:"))throw new Error("File is invalid: URI must be a dataURI");const r=e.slice(5).split(";base64,");if(r.length!==2)throw new Error("File is invalid: dataURI must be base64");const[n,s]=r,[i,...a]=n.split(";"),o=i||"",c=decodeURI(a.map(l=>l.split("=")).find(([l])=>l==="name")?.[1]||"unknown");try{const l=atob(s),u=new Array(l.length);for(let b=0;b 0, got one of each`);const s=new Date().getFullYear(),i=r?s+e:e,a=r?s+t:t;if(i>a)return hm(t,e).reverse();const o=[];for(let c=i;c<=a;c+=1)o.push({value:c,label:Lr(c,2)});return o}function h0(e,t){let r=e;if(Array.isArray(t)){const n=r.split(/(%\d)/);t.forEach((s,i)=>{const a=n.findIndex(o=>o===`%${i+1}`);a>=0&&(n[a]=s)}),r=n.join("")}return r}function m0(e,t){return h0(e,t)}function Ga(e,t=[],r){if(Array.isArray(e))return e.map(i=>Ga(i,t)).filter(i=>i!==void 0);const n=e===""||e===null?-1:Number(e),s=t[n];return s?s.value:r}function p0(e,t,r=[]){const n=Ga(e,r);return Array.isArray(t)?t.filter(s=>!je(s,n)):je(n,t)?void 0:t}function Wa(e,t){return Array.isArray(t)?t.some(r=>je(r,e)):je(t,e)}function mm(e,t=[],r=!1){const n=t.map((s,i)=>Wa(s.value,e)?String(i):void 0).filter(s=>typeof s<"u");return r?n:n[0]}function y0(e,t,r,n="indexed",s){if(typeof e>"u"||r&&Array.isArray(e)&&e.length<1||!r&&e===s)return s;if(n==="realValue")return r?e.map(String):String(e);const a=mm(e,t,r);return typeof a>"u"?s:a}function g0(e,t,r=[]){const n=Ga(e,r);if(n!=null){const s=r.findIndex(o=>n===o.value),i=r.map(({value:o})=>o);return t.slice(0,s).concat(n,t.slice(s)).sort((o,c)=>+(i.indexOf(o)>i.indexOf(c)))}return t}function cu(e,t,r){if(e===""||!Array.isArray(t))return r;const n=t.find(i=>String(i.value)===e);if(n)return n.value;const s=Number(e);return!Number.isNaN(s)&&s>=0&&scu(s,t,n)):cu(e,t,n)}function Xc(e,t,r="indexed"){return r!=="realValue"?String(t):e==null?"":String(typeof e=="object"?t:e)}class pm{errorSchema={};constructor(t){this.resetAllErrors(t)}get ErrorSchema(){return this.errorSchema}getOrCreateErrorBlock(t){const r=typeof t=="string"?rr(t):t??[];if(r.length===0)return this.errorSchema;let n=me(this.errorSchema,r);return n||(n={},at(this.errorSchema,r,n,!0)),n}resetAllErrors(t){return this.errorSchema=t?structuredClone(t):{},this}addErrors(t,r){const n=this.getOrCreateErrorBlock(r);let s=n[vt];return Array.isArray(s)||(s=[],n[vt]=s),Array.isArray(t)?n[vt]=[...new Set([...s,...t])]:n[vt]=[...new Set([...s,t])],this}setErrors(t,r){const n=this.getOrCreateErrorBlock(r),s=Array.isArray(t)?[...new Set([...t])]:[t];return n[vt]=s,this}clearErrors(t){const r=this.getOrCreateErrorBlock(t);return r[vt]=[],this}}function ym(e,t){return Or(e)&&Or(t)?Ea(e,t,!0):Array.isArray(e)&&Array.isArray(t)&&e.length===t.length?e.flatMap((r,n)=>{if(je(r,t[n]))return[];const s=ym(r,t[n]);return s.length?s.map(i=>`${n}.${i}`):[String(n)]}):[]}function Ea(e,t,r=!1){if(e===t)return[];if(!Or(e))return Or(t)?Object.keys(t):[];if(!Or(t))return Object.keys(e);const n=Object.keys(e),s=new Set(n),i=n.filter(o=>!je(e[o],me(t,o))).flatMap(o=>{if(!r)return[o];const c=ym(e[o],me(t,o));return c.length?c.map(l=>`${o}.${l}`):[o]}),a=Object.keys(t).filter(o=>!s.has(o));return[...i,...a]}function v0(e,t,r=[1900,new Date().getFullYear()+2],n="YMD"){const{day:s,month:i,year:a,hour:o,minute:c,second:l}=e,u={type:"day",range:[1,31],value:s},p={type:"month",range:[1,12],value:i},b={type:"year",range:r,value:a},v=[];switch(n){case"MDY":v.push(p,u,b);break;case"DMY":v.push(u,p,b);break;case"YMD":default:v.push(b,p,u)}return t&&v.push({type:"hour",range:[0,23],value:o},{type:"minute",range:[0,59],value:c},{type:"second",range:[0,59],value:l}),v}function b0(e){const t={};return e.multipleOf&&(t.step=e.multipleOf),(e.minimum||e.minimum===0)&&(t.min=e.minimum),(e.maximum||e.maximum===0)&&(t.max=e.maximum),t}function _0(e,t,r={},n=!0){const s={type:t||"text",...b0(e)};return r.inputType?s.type=r.inputType:t||(e.type==="number"?(s.type="number",n&&s.step===void 0&&(s.step="any")):e.type==="integer"&&(s.type="number",s.step===void 0&&(s.step=1))),["date","datetime-local","time","week","month"].includes(s.type)&&(e.formatMinimum!==void 0&&(s.min=e.formatMinimum),e.formatMaximum!==void 0&&(s.max=e.formatMaximum)),r.autocomplete&&(s.autoComplete=r.autocomplete),r.autocapitalize&&(s.autoCapitalize=r.autocapitalize),r.accept&&(s.accept=r.accept),s}function Zc(e){return e?.optionValueFormat??"indexed"}const lu={props:{disabled:!1},submitText:"Submit",norender:!1};function S0(e={}){const t=pe(e);if(t?.[ka]){const r=t[ka];return{...lu,...r}}return lu}function _e(e,t,r={}){const{templates:n}=t;if(e==="ButtonTemplates")return n[e];if(Object.hasOwn(r,e)&&typeof r[e]=="string"&&Object.hasOwn(n,r[e])){const s=r[e];return n[s]}return r[e]||n[e]}let uu=0;function Qc(){if(me(globalThis,["process","env","NODE_ENV"])!=="test")return{};const e=new Map;return new Proxy({},{get(t,r){return e.has(r)||(uu+=1,e.set(r,`test-id-${uu}`)),e.get(r)}})}var Io={exports:{}},Be={};var du;function w0(){if(du)return Be;du=1;var e=Symbol.for("react.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),a=Symbol.for("react.context"),o=Symbol.for("react.server_context"),c=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),u=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),b=Symbol.for("react.lazy"),v=Symbol.for("react.offscreen"),S;S=Symbol.for("react.module.reference");function E(g){if(typeof g=="object"&&g!==null){var y=g.$$typeof;switch(y){case e:switch(g=g.type,g){case r:case s:case n:case l:case u:return g;default:switch(g=g&&g.$$typeof,g){case o:case a:case c:case b:case p:case i:return g;default:return y}}case t:return y}}}return Be.ContextConsumer=a,Be.ContextProvider=i,Be.Element=e,Be.ForwardRef=c,Be.Fragment=r,Be.Lazy=b,Be.Memo=p,Be.Portal=t,Be.Profiler=s,Be.StrictMode=n,Be.Suspense=l,Be.SuspenseList=u,Be.isAsyncMode=function(){return!1},Be.isConcurrentMode=function(){return!1},Be.isContextConsumer=function(g){return E(g)===a},Be.isContextProvider=function(g){return E(g)===i},Be.isElement=function(g){return typeof g=="object"&&g!==null&&g.$$typeof===e},Be.isForwardRef=function(g){return E(g)===c},Be.isFragment=function(g){return E(g)===r},Be.isLazy=function(g){return E(g)===b},Be.isMemo=function(g){return E(g)===p},Be.isPortal=function(g){return E(g)===t},Be.isProfiler=function(g){return E(g)===s},Be.isStrictMode=function(g){return E(g)===n},Be.isSuspense=function(g){return E(g)===l},Be.isSuspenseList=function(g){return E(g)===u},Be.isValidElementType=function(g){return typeof g=="string"||typeof g=="function"||g===r||g===s||g===n||g===l||g===u||g===v||typeof g=="object"&&g!==null&&(g.$$typeof===b||g.$$typeof===p||g.$$typeof===i||g.$$typeof===a||g.$$typeof===c||g.$$typeof===S||g.getModuleId!==void 0)},Be.typeOf=E,Be}var fu;function C0(){return fu||(fu=1,Io.exports=w0()),Io.exports}var E0=C0();const hu=Fi(E0),Ro={boolean:{checkbox:"CheckboxWidget",radio:"RadioWidget",select:"SelectWidget",hidden:"HiddenWidget"},string:{text:"TextWidget",password:"PasswordWidget",email:"EmailWidget",hostname:"TextWidget",ipv4:"TextWidget",ipv6:"TextWidget",uri:"URLWidget","data-url":"FileWidget",radio:"RadioWidget",select:"SelectWidget",textarea:"TextareaWidget",hidden:"HiddenWidget",date:"DateWidget",datetime:"DateTimeWidget","date-time":"DateTimeWidget","alt-date":"AltDateWidget","alt-datetime":"AltDateTimeWidget",time:"TimeWidget",color:"ColorWidget",file:"FileWidget"},number:{text:"TextWidget",select:"SelectWidget",updown:"UpDownWidget",range:"RangeWidget",radio:"RadioWidget",hidden:"HiddenWidget"},integer:{text:"TextWidget",select:"SelectWidget",updown:"UpDownWidget",range:"RangeWidget",radio:"RadioWidget",hidden:"HiddenWidget"},array:{select:"SelectWidget",checkboxes:"CheckboxesWidget",files:"FileWidget",hidden:"HiddenWidget"}};function A0(e){let{MergedWidget:t}=e;if(!t){const r=e.defaultProps?.options||{};t=({options:n,...s})=>N.jsx(e,{options:{...r,...n},...s}),e.MergedWidget=t}return t}function vr(e,t,r={}){const n=Gt(e);if(typeof t=="function"||t&&hu.isForwardRef(X.createElement(t))||hu.isMemo(t))return A0(t);if(typeof t!="string")throw new Error(`Unsupported widget definition: ${typeof t} in schema: ${JSON.stringify(e)}`);if(t in r){const s=r[t];return vr(e,s,r)}if(typeof n=="string"){if(!(n in Ro))throw new Error(`No widget for type '${n}' in schema: ${JSON.stringify(e)}`);if(t in Ro[n]){const s=r[Ro[n][t]];return vr(e,s,r)}}throw new Error(`No widget '${t}' for type '${n}' in schema: ${JSON.stringify(e)}`)}function gm(e){let t=0;for(let r=0;rs===void 0?"undefined":$a(s)).join(",")}]`;if(e===null||typeof e!="object")return JSON.stringify(typeof e=="function"?null:e);const r=e;return`{${Object.keys(r).sort().filter(s=>t(r[s])).map(s=>`${JSON.stringify(s)}:${$a(r[s])}`).join(",")}}`}function zt(e){return gm($a(e))}function x0(e){return gm($a(e))}function P0(e,t,r={}){try{return vr(e,t,r),!0}catch(n){const s=n;if(s.message&&(s.message.startsWith("No widget")||s.message.startsWith("Unsupported widget")))return!1;throw n}}function Rn(e,t){return`${typeof e=="string"?e:e[Ue]}__${t}`}function ai(e){return Rn(e,"description")}function vm(e){return Rn(e,"error")}function el(e){return Rn(e,"examples")}function bm(e){return Rn(e,"help")}function tl(e){return Rn(e,"title")}function $n(e,t=!1){const r=t?` ${el(e)}`:"";return`${vm(e)} ${ai(e)} ${bm(e)}${r}`}function _m(e,t){return`${e}-${t}`}function _n(e,t){return Rn(e,t)}function $o(e,t){return Rn(e,`optional${t}`)}function oi(e){return e==null?!1:typeof e!="object"||Array.isArray(e)?!0:Object.keys(e).length>0}function O0(e,t){const{rootSchema:r,schemaUtils:n}=e;if(je(t,r))return!0;if(Je in r){const s=n.retrieveSchema(r);return je(t,s)}return!1}function j0(e,t,r){return t?r:e}function k0(e){return e?new Date(e).toJSON():void 0}function N0(e,t,r,n=!1){!n&&Array.isArray(r)&&t.default!==void 0&&mm(t.default,r,n)===void 0&&console.error(`The schema default value "${t.default}" is not one of the values in the enum options for "${e}"`)}function rl(e,t,r){const n=[Iy];return lt(e,Fl)&&n.unshift(Fl),me(e,[...n,t],r)}function Fo(){}function I0(e,t){if(!Array.isArray(t))return e;const r=u=>u.reduce((p,b)=>(p[b]=!0,p),{}),n=u=>u.length>1?`properties '${u.join("', '")}'`:`property '${u[0]}'`,s=r(e),i=t.filter(u=>u==="*"||s[u]),a=r(i),o=e.filter(u=>!a[u]),c=i.indexOf("*");if(c===-1){if(o.length)throw new Error(`uiSchema order list does not contain ${n(o)}`);return i}if(c!==i.lastIndexOf("*"))throw new Error("uiSchema order list contains more than one wildcard item");const l=[...i];return l.splice(c,1,...o),l}function Do(e,t=!0){if(!e)return{year:-1,month:-1,day:-1,hour:t?-1:0,minute:t?-1:0,second:t?-1:0};const r=new Date(e);if(Number.isNaN(r.getTime()))throw new Error(`Unable to parse date ${e}`);return{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate(),hour:t?r.getUTCHours():0,minute:t?r.getUTCMinutes():0,second:t?r.getUTCSeconds():0}}function R0(e,t,r){const n=e[_a]??e[Je],s=r.uiSchemaDefinitions,i=n&&s?s[n]:void 0;let a;if(i?!t||Object.keys(t).length===0?a={...i}:a=Xr(i,t):a=t||{},s){let o=e;if(n&&e[Je]&&!e[_a])try{o=ki(n,r.rootSchema)}catch(c){return console.warn(`could not resolve $ref in resolveUiSchema: +`,c),a}for(const c of[Se,Ie]){const l=o[c];if(Array.isArray(l)&&l.length>0){const u=a[c],p=Array.isArray(u)?[...u]:[];let b=!1;for(let v=0;vAa(r);return e.allOf.some(t)}return!1}function $0({hideLabel:e,id:t,multiple:r,options:n,registry:s,uiSchema:i,value:a}){if(r||e)return null;const{label:o=!0}=pe(i,s.globalUiOptions);if(!o)return null;const c=n.enumOptions?.find(({value:p})=>Wa(p,a)),l=c?.schema?.description;if(!l)return null;const u=_e("DescriptionFieldTemplate",s,n);return N.jsx(u,{id:ai(t),description:l,schema:c.schema,uiSchema:i,registry:s})}function _c(e,t){if(Object.is(e,t))return!0;if(e==null||t==null||typeof e!="object"||typeof t!="object")return!1;const r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(let s=0;sue(r)?Gt(r):void 0).flat().filter(r=>r!==void 0))];return t.length===1?t[0]:t}function Di(e,t,r,n){const{enableOptionalDataFieldForType:s=[]}=pe(n,e.globalUiOptions);let i;return Ie in t&&Array.isArray(t[Ie])?i=mu(t[Ie]):Se in t&&Array.isArray(t[Se])?i=mu(t[Se]):i=Gt(t),!O0(e,t)&&!r&&!!i&&!Array.isArray(i)&&!!s.find(a=>a===i)}function pu(e,t=!0){const{year:r,month:n,day:s,hour:i=0,minute:a=0,second:o=0}=e,c=Date.UTC(r,n-1,s,i,a,o),l=new Date(c).toJSON();return t?l:l.slice(0,10)}function Sm(e,t=[]){return e?wm(e,t):[]}function wm(e,t){const r=e[vt],n=`.${t.join(".")}`,s=Array.isArray(r)?r.map(i=>({property:n,message:i,stack:`${n} ${i}`})):[];return Object.keys(e).reduce((i,a)=>{const o=e[a];return a!==vt&&Or(o)?i.concat(wm(o,[...t,a])):i},s)}function D0(e){const t=new pm;return e.length&&e.forEach(r=>{const{property:n,message:s}=r,i=n?rr(n):[];s&&t.addErrors(s,i)}),t.ErrorSchema}function nr(e,t,r,n){const s=Array.isArray(r)?r:r?.path,i=e===""?[]:[e],a=s?s.concat(...i):i,o=[t.idPrefix,...a].join(t.idSeparator);let c;return t.nameGenerator&&a.length>0&&(c=t.nameGenerator(a,t.idPrefix,n)),{path:a,[Ue]:o,...c!==void 0&&{name:c}}}function T0(e){return Cm(e)}function Cm(e){return Object.keys(e).reduce((t,r)=>{if(r==="addError")return t;const n=e[r];return Or(n)?{...t,[r]:Cm(n)}:{...t,[r]:n}},{})}function M0(e){return Object.values(e).every(t=>t!==-1)}function q0(e){const{className:t="form-control",type:r,range:n,value:s,select:i,rootId:a,name:o,disabled:c,readonly:l,autofocus:u,registry:p,onBlur:b,onFocus:v}=e,S=`${a}_${r}`,{SelectWidget:E}=p.widgets,g=X.useCallback(y=>i(r,y),[i,r]);return N.jsx(E,{schema:{type:"integer"},id:S,name:o,className:t,options:{enumOptions:hm(n[0],n[1])},placeholder:r,value:s,disabled:c,readonly:l,autofocus:u,onChange:g,onBlur:b,onFocus:v,registry:p,label:"","aria-describedby":$n(a)})}function U0(e){const{time:t=!1,disabled:r=!1,readonly:n=!1,options:s,onChange:i,value:a}=e,[o,c]=X.useState(Do(a,t));X.useEffect(()=>{c(Do(a,t))},[t,a]);const l=X.useCallback((v,S)=>{const E={...o,[v]:typeof S>"u"?-1:S};M0(E)?i(pu(E,t)):c(E)},[o,i,t]),u=X.useCallback(v=>{v.preventDefault(),!(r||n)&&i(void 0)},[r,n,i]),p=X.useCallback(v=>{if(v.preventDefault(),r||n)return;const S=Do(new Date().toJSON(),t);i(pu(S,t))},[r,n,t,i]);return{elements:X.useMemo(()=>v0(o,t,s.yearsRange,s.format),[o,t,s.yearsRange,s.format]),handleChange:l,handleClear:u,handleSetNow:p}}function ci(e){const t=X.useRef(e);return je(e,t.current)||(t.current=e),t.current}function L0(e,t){return e.replace(";base64",`;name=${encodeURIComponent(t)};base64`)}async function V0(e){const{name:t,size:r,type:n}=e;return new Promise((s,i)=>{const a=new window.FileReader;a.onerror=i,a.onload=o=>{typeof o.target?.result=="string"?s({dataURL:L0(o.target.result,t),name:t,size:r,type:n}):s({dataURL:null,name:t,size:r,type:n})},a.readAsDataURL(e)})}async function z0(e){return Promise.all(Array.from(e).map(V0))}function yu(e){return e.reduce((t,r)=>{if(!r)return t;try{const{blob:n,name:s}=f0(r);return[...t,{dataURL:r,name:s,size:n.size,type:n.type}]}catch{return t}},[])}function B0(e,t,r=!1){const n=X.useMemo(()=>r&&e?Array.isArray(e)?e:[e]:[],[e,r]),s=X.useMemo(()=>Array.isArray(e)?yu(e):yu([e||""]),[e]),i=X.useCallback(async o=>{const l=(await z0(o)).map(u=>u.dataURL||null);t(r?n.concat(...l):l[0])},[n,r,t]),a=X.useCallback(o=>{if(r){const c=n.filter((l,u)=>u!==o);t(c)}else t(void 0)},[n,r,t]);return{filesInfo:s,handleChange:i,handleRemove:a}}function H0(e){if(!e)return"";const t=new Date(e),r=Lr(t.getFullYear(),4),n=Lr(t.getMonth()+1,2),s=Lr(t.getDate(),2),i=Lr(t.getHours(),2),a=Lr(t.getMinutes(),2),o=Lr(t.getSeconds(),2),c=Lr(t.getMilliseconds(),3);return`${r}-${n}-${s}T${i}:${a}:${o}.${c}`}function Pi(e,t,r=!1){if(!t)return e;const{errors:n,errorSchema:s}=e;let i=Sm(t),a=t;return s&&Object.keys(s).length>0&&(a=Xr(s,t,r?"preventDuplicates":!0),i=[...n].concat(i)),{errorSchema:a,errors:i}}function K0(e){const t=e;for(const r in t)if(Object.hasOwn(t,r)){const n=t[r];r===Je&&typeof n=="string"&&n.startsWith("#")?t[r]=Vh+n:t[r]=nl(n)}return e}function G0(e){return e.map(t=>nl(t))}function nl(e){return Array.isArray(e)?G0([...e]):ue(e)?K0({...e}):e}var $e;(function(e){e.ArrayItemTitle="Item",e.MissingItems="Missing items definition",e.EmptyArray="No items yet. Use the button below to add some.",e.YesLabel="Yes",e.NoLabel="No",e.CloseLabel="Close",e.ErrorsLabel="Errors",e.NewStringDefault="New Value",e.AddButton="Add",e.AddItemButton="Add Item",e.CopyButton="Copy",e.ExpandButton="Expand Cycle",e.MoveDownButton="Move down",e.MoveUpButton="Move up",e.RemoveButton="Remove",e.NowLabel="Now",e.ClearLabel="Clear",e.AriaDateLabel="Select a date",e.PreviewLabel="Preview",e.DecrementAriaLabel="Decrease value by 1",e.IncrementAriaLabel="Increase value by 1",e.OptionalObjectAdd="Add data for optional field",e.OptionalObjectRemove="Remove data for optional field",e.OptionalObjectEmptyMsg="No data for optional field",e.Type="Type",e.Value="Value",e.ClearButton="clear input",e.UnknownFieldType="Unknown field type %1",e.OptionPrefix="Option %1",e.TitleOptionPrefix="%1 option %2",e.KeyLabel="%1 Key",e.DeprecatedLabel="%1 (deprecated)",e.CycleDetected='Circular reference ($ref cycle) detected for field "%1". You may choose to expand to the next cycle break',e.InvalidObjectField='Invalid "%1" object field configuration: _%2_.',e.UnsupportedField="Unsupported field schema.",e.UnsupportedFieldWithId="Unsupported field schema for field `%1`.",e.UnsupportedFieldWithReason="Unsupported field schema: _%1_.",e.UnsupportedFieldWithIdAndReason="Unsupported field schema for field `%1`: _%2_.",e.FilesInfo="**%1** (%2, %3 bytes)"})($e||($e={}));let gu=0;function Sc(){return gu+=1,`rjsf-array-item-${gu}`}function vu(e){return Array.isArray(e)?e.map(t=>({key:Sc(),item:t})):[]}function Em(e){return Array.isArray(e)?e.map(t=>t.item):[]}function W0(e){return Array.isArray(e.type)?!e.type.includes("null"):e.type!=="null"}function Am(e,t,r,n){let{addable:s}=pe(n,e.globalUiOptions);return s!==!1&&(t.maxItems!==void 0?s=r.lengthz.retrieveSchema(S,E),[z,S,E]),A=X.useMemo(()=>nr(r,Z,y),[r,Z,y]),C=G||J,j=_e("ArrayFieldItemTemplate",o,c),m=z.getDisplayLabel(re,g,Q),{description:d}=pe(g),x=!!d||!!re.description,{orderable:I=!0,removable:T=!0,copyable:F=!1}=c,B={moveUp:I&&b,moveDown:I&&v,copy:F&&u,remove:T&&p,toolbar:!1};B.toolbar=Object.keys(B).some(Y=>B[Y]);const H=X.useCallback(Y=>{M(Y,r+1)},[M,r]),R=X.useCallback(Y=>{q(Y,r)},[q,r]),D=X.useCallback(Y=>{U(Y,r)},[U,r]),V=X.useCallback(Y=>{L(Y,r,r-1)},[L,r]),K=X.useCallback(Y=>{L(Y,r,r+1)},[L,r]),W={children:N.jsx(C,{name:n,title:$,index:r,schema:re,uiSchema:g,formData:E,errorSchema:f,fieldPathId:A,required:W0(re),onChange:_,onBlur:P,onFocus:h,registry:o,disabled:s,readonly:a,hideError:i,autofocus:w,rawErrors:O}),buttonsProps:{fieldPathId:A,disabled:s,readonly:a,canAdd:u,hasCopy:B.copy,hasMoveUp:B.moveUp,hasMoveDown:B.moveDown,hasRemove:B.remove,index:r,totalItems:k,onAddItem:H,onCopyItem:R,onRemoveItem:D,onMoveUpItem:V,onMoveDownItem:K,registry:o,schema:re,uiSchema:g},itemKey:t,className:"rjsf-array-item",disabled:s,hasToolbar:B.toolbar,index:r,totalItems:k,readonly:a,registry:o,schema:re,uiSchema:g,parentUiSchema:l,displayLabel:m,hasDescription:x};return N.jsx(j,{...W})}const Pm=X.memo(Q0);function ev(e){const{schema:t,uiSchema:r={},errorSchema:n,fieldPathId:s,formData:i,name:a,title:o,disabled:c=!1,readonly:l=!1,autofocus:u=!1,required:p=!1,hideError:b=!1,registry:v,onBlur:S,onFocus:E,rawErrors:g,onChange:y,keyedFormData:f,handleAddItem:w,handleCopyItem:P,handleRemoveItem:h,handleReorderItems:_}=e,O=t.title||o||a,{schemaUtils:k,fields:$,formContext:M,globalUiOptions:q}=v,{OptionalDataControlsField:U}=$,L=X.useMemo(()=>pe(r,q),[r,q]),z=X.useMemo(()=>ue(t.items)?t.items:{},[t.items]),G=X.useMemo(()=>k.retrieveSchema(z),[k,z]),J=X.useMemo(()=>Em(f),[f]),Q=Di(v,t,p,r),Z=oi(i),re=X.useMemo(()=>Am(v,t,J,r)&&(!Q||Z),[v,t,J,r,Q,Z]),A=Z?f:[],C=Q?" rjsf-optional-array-field":"",j=e.childFieldPathId??s,m=Q?N.jsx(U,{...e,fieldPathId:j}):void 0,d={canAdd:re,items:A.map((I,T)=>{const{key:F,item:B}=I,H=B,R=n?n[T]:void 0,D=xm(r,B,T,M),V={itemKey:F,index:T,name:a&&`${a}-${T}`,registry:v,uiOptions:L,parentUiSchema:r,hideError:b,readonly:l,disabled:c,required:p,title:O?`${O}-${T+1}`:void 0,canAdd:re,canMoveUp:T>0,canMoveDown:Tpe(r,q),[r,q]),{OptionalDataControlsField:L}=$,z=Di(v,t,p,r),G=oi(n),J=X.useMemo(()=>Array.isArray(t.items)?t.items:[],[t.items]),Q=ue(t.additionalItems),Z=e.childFieldPathId??i;O.length{const{key:T,item:F}=x,B=F,H=I>=J.length,R=(H&&ue(t.additionalItems)?t.additionalItems:J[I])||{};let D;H?D=r.additionalItems:Array.isArray(r.items)?D=r.items[I]:D=xm(r,F,I,M);const V=s?s[I]:void 0,K={index:I,itemKey:T,name:a&&`${a}-${I}`,registry:v,uiOptions:U,parentUiSchema:r,hideError:b,readonly:l,disabled:c,required:p,title:k?`${k}-${I+1}`:void 0,canAdd:j,canRemove:H,canMoveUp:I>=J.length+1,canMoveDown:H&&Izt(e),[e]),[r,n]=X.useState(()=>({formDataHash:t,keyedFormData:vu(e)}));let{keyedFormData:s,formDataHash:i}=r;if(t!==i){const o=Array.isArray(e)?e:[],c=s||[];s=o.length===c.length?c.map((l,u)=>({key:l.key,item:o[u]})):vu(o),i=t,n({formDataHash:i,keyedFormData:s})}const a=X.useCallback(o=>{const c=Em(o),l=zt(c);return n({formDataHash:l,keyedFormData:o}),c},[]);return{keyedFormData:s,updateKeyedFormData:a}}function nv(e){const{schema:t,uiSchema:r,errorSchema:n,fieldPathId:s,registry:i,formData:a,onChange:o}=e,{globalFormOptions:c,schemaUtils:l,translateString:u}=i,{keyedFormData:p,updateKeyedFormData:b}=rv(a),v=X.useRef(p);v.current=p;const S=X.useRef(n);S.current=n;const E=e.childFieldPathId??s,g=X.useCallback((k,$)=>{k&&k.preventDefault();let M;if(S.current){M={};for(const L of Object.keys(S.current)){const z=parseInt(L,10);$===void 0||z<$?at(M,z,S.current[z]):z>=$&&at(M,z+1,S.current[z])}}const q={key:Sc(),item:J0(i,t)},U=[...v.current];$!==void 0?U.splice($,0,q):U.push(q),o(b(U),E.path,M)},[i,t,o,b,E]),y=X.useCallback((k,$)=>{k&&k.preventDefault();let M;if(S.current){M={};for(const L of Object.keys(S.current)){const z=parseInt(L,10);z<=$?at(M,z,S.current[z]):z>$&&at(M,z+1,S.current[z])}}const q={key:Sc(),item:structuredClone(v.current[$].item)},U=[...v.current];$!==void 0?U.splice($+1,0,q):U.push(q),o(b(U),E.path,M)},[o,b,E]),f=X.useCallback((k,$)=>{k&&k.preventDefault();let M;if(S.current){M={};for(const U of Object.keys(S.current)){const L=parseInt(U,10);L<$?at(M,L,S.current[L]):L>$&&at(M,L-1,S.current[L])}}const q=v.current.filter((U,L)=>L!==$);o(b(q),E.path,M)},[o,b,E]),w=X.useCallback((k,$,M)=>{k&&(k.preventDefault(),k.currentTarget.blur());let q;if(S.current){q={};for(const z of Object.keys(S.current)){const G=parseInt(z,10);G===$?at(q,M,S.current[$]):G===M?at(q,$,S.current[M]):at(q,z,S.current[G])}}function U(){const z=v.current.slice();return z.splice($,1),z.splice(M,0,v.current[$]),z}const L=U();o(b(L),E.path,q)},[o,b,E]),P=X.useCallback((k,$,M,q)=>{const U=typeof $.at(-1)=="number";o(U&&k===void 0?null:k,$,M,q)},[o]),h=X.useCallback(k=>{o(k,E.path,void 0,E?.[Ue])},[o,E]),_={...e,formData:a,fieldPathId:E,onSelectChange:h},O={...e,handleAddItem:g,handleCopyItem:y,handleRemoveItem:f,handleReorderItems:w,keyedFormData:p,onChange:P};if(!(ni in t)){if(!c.useFallbackUiForUnsupportedType){const $=pe(r),M=_e("UnsupportedFieldTemplate",i,$);return N.jsx(M,{schema:t,fieldPathId:s,reason:u($e.MissingItems),registry:i})}const k={...t,[ni]:{type:void 0}};_.schema=k,O.schema=k}return l.isMultiSelect(_.schema)?N.jsx(Y0,{..._}):lm(r)?N.jsx(X0,{..._}):Wc(_.schema)?N.jsx(tv,{...O}):l.isFilesArray(_.schema,r)?N.jsx(Z0,{..._}):N.jsx(ev,{...O})}function iv(e){const{schema:t,name:r,uiSchema:n,fieldPathId:s,formData:i,registry:a,required:o,disabled:c,readonly:l,hideError:u,autofocus:p,title:b,onChange:v,onFocus:S,onBlur:E,rawErrors:g}=e,{title:y}=t,{widgets:f,translateString:w,globalUiOptions:P}=a,{widget:h="checkbox",title:_,label:O=!0,enumNames:k,...$}=pe(n,P),M=vr(t,h,f),q=w($e.YesLabel),U=w($e.NoLabel);let L;const z=_??y??b??r;if(Array.isArray(t.oneOf))L=xn({oneOf:t.oneOf.map(J=>{if(ue(J))return{...J,title:J.title||(J.const===!0?q:U)}}).filter(J=>J)},n);else{const J=t.enum??[!0,!1];!k&&J.length===2&&J.every(Q=>typeof Q=="boolean")?L=[{value:J[0],label:J[0]?q:U},{value:J[1],label:J[1]?q:U}]:L=xn({enum:J},n)}const G=X.useCallback((J,Q,Z)=>v(J,s.path,Q,Z),[v,s]);return N.jsx(M,{options:{...$,enumOptions:L},schema:t,uiSchema:n,id:s.$id,name:r,onChange:G,onFocus:S,onBlur:E,label:z,hideLabel:!O,value:i,required:o,disabled:c,readonly:l,hideError:u,registry:a,autofocus:p,rawErrors:g,htmlName:s.name})}function sv(e){const[t,r]=X.useState(!1),{name:n,registry:s,schema:i,uiSchema:a,fieldPathId:o}=e,{globalUiOptions:c}=s,l=pe(a,c),u=_e("CyclicSchemaExpandTemplate",s,l);if(!t)return N.jsx(u,{registry:s,schema:i,uiSchema:a,name:n,fieldPathId:o,onExpand:()=>r(!0)});const{fields:p}=s,{SchemaField:b}=p;return N.jsx(b,{...e,schema:{...i,[zc]:!1}})}function av(e){return{type:"string",enum:["string","number","boolean","object","array"],default:"string",title:e}}function ov(e){const t=typeof e;return t==="string"||t==="number"||t==="boolean"?t:t==="object"?Array.isArray(e)?"array":"object":"string"}function cv(e,t){switch(t){case"string":return String(e);case"number":{const r=Number(e);return Number.isNaN(r)?0:r}case"boolean":return!!e;default:return e}}function lv(e){const{id:t,formData:r,displayLabel:n=!0,schema:s,name:i,uiSchema:a,required:o,disabled:c=!1,readonly:l=!1,onBlur:u,onFocus:p,registry:b,fieldPathId:v,onChange:S,errorSchema:E}=e,{translateString:g,fields:y,globalFormOptions:f}=b,[w,P]=X.useState(ov(r)),h=pe(a),_=ci(nr("__internal_type_selector",f,v)),O=g($e.Type),k=X.useMemo(()=>av(O),[O]),$=U=>{U!=null&&(P(U),S(cv(r,U),v.path,E,t))};if(!f.useFallbackUiForUnsupportedType){const{reason:U=g($e.UnknownFieldType,[String(s.type)])}=e,L=_e("UnsupportedFieldTemplate",b,h);return N.jsx(L,{schema:s,fieldPathId:v,reason:U,registry:b})}const M=_e("FallbackFieldTemplate",b,h),{SchemaField:q}=y;return N.jsx(M,{schema:s,registry:b,typeSelector:N.jsx(q,{fieldPathId:_,name:`${i}__fallback_type`,schema:k,formData:w,onChange:$,onBlur:u,onFocus:p,registry:b,hideLabel:!n,disabled:c,readonly:l,required:o},r?zt(r):"__empty__"),schemaField:N.jsx(q,{...e,schema:{type:w,title:g($e.Value),...w==="object"&&{additionalProperties:!0}}})})}var mr;(function(e){e.ROW="ui:row",e.COLUMN="ui:col",e.COLUMNS="ui:columns",e.CONDITION="ui:condition"})(mr||(mr={}));var ji;(function(e){e.ALL="all",e.SOME="some",e.NONE="none"})(ji||(ji={}));const uv=/^\$lookup=(.+)/,To="layoutGrid";function bu(e,t){return e??t}function dv(e){return/^\d+?$/.test(e)}const Gr=Qc();function fv(e,t,r,n,s){const i=r?.[pc]??{},a=me(r,rr(e)),o={...a?.[Br]??{},...t,...i},c={...a};Object.keys(o).length>0&&(c[Br]=o),Object.keys(i).length>0&&(c[pc]=i);let{readonly:l}=pe(c);if(s===!0||l===void 0&&n===!0){l=!0;const u=c[Br];u&&_o in u?u[_o]=!0:c[`ui:${_o}`]=!0}return{fieldUiSchema:c,uiReadonly:l}}function hv(e,t,r="$0m3tH1nG Un3xP3cT3d"){const n=[t].flat().sort(),s=[r].flat().sort();switch(e){case ji.ALL:return je(n,s);case ji.SOME:return n.some(i=>s.includes(i));case ji.NONE:return!n.some(i=>s.includes(i));default:return!1}}function Ja(e,t,r){let n={},s=e[t];if(Or(s)){const{children:i,className:a,...o}=s;if(s=i,a){const l=a.split(" ").map(u=>rl(r,u,u)).join(" ");n={...o,className:l}}else n=o}if(!Array.isArray(s))throw new TypeError(`Expected array for "${t}" in ${JSON.stringify(e)}`);return{children:s,gridProps:n}}function _u(e,t,r){let n,s=t;if(dv(r)&&e&&e?.type==="array"&&ni in e){const i=Number(r),a=e[ni];Array.isArray(a)?i>a.length?n=a.at(-1):n=a[i]:n=a,s={[Ue]:t[Ue],path:[...t.path.slice(0,t.path.length-1),i]}}return{rawSchema:n,fieldPathId:s}}function mv(e,t,r,n,s){const{schemaUtils:i,globalFormOptions:a}=e;let o=r,c=s;const l=t.split("."),u=l.pop();let p=i.retrieveSchema(o,n),b=n,v=p.readOnly;l.forEach(g=>{c=nr(g,a,c);const y=p?.[nt];if(y)o=y[g]??{};else if(p&&(Se in p||Ie in p)){const f=Se in p?Se:Ie,w=i.findSelectedOptionInXxxOf(p,g,f,b);o=gr(w,g)}else{const f=_u(p,c,g);o=f.rawSchema??{},c=f.fieldPathId}b=me(b,g,{}),p=i.retrieveSchema(o,b),v=bu(p.readOnly,v)});let S,E=!1;if((!p||Object.keys(p).length===0)&&(p=void 0),p&&u){if(p&&(Se in p||Ie in p)){const y=Se in p?Se:Ie;p=i.findSelectedOptionInXxxOf(p,u,y,b)}c=nr(u,a,c),E=p!==void 0&&Array.isArray(p.required)&&p.required.includes(u);const g=_u(p,c,u);if(g.rawSchema?(p=g.rawSchema,c=g.fieldPathId):(p=p?.[nt]?.[u],p=p&&i.retrieveSchema(p)),v=bu(p?.readOnly,v),p&&(Se in p||Ie in p)){const y=Se in p?Se:Ie,f=Kt(p);S={options:p[y],hasDiscriminator:!!f}}}return{schema:p,isRequired:E,isReadonly:v,optionsInfo:S,fieldPathId:c}}function pv(e,t){let r=e;return typeof r=="string"&&(r=rl(t,r)),typeof r=="function"?r:null}function yv(e,t){let r,n=null,s={},i;if(typeof t=="string"||t===void 0)r=t??"";else{const{name:a="",render:o,...c}=t;r=a,s=c,Object.entries(s).forEach(([l,u])=>{if(typeof u=="string"){const p=uv.exec(u);if(Array.isArray(p)&&p.length>1){const b=p[1];s[l]=rl(e,b,b)}}}),n=pv(o,e),!a&&n&&(i=N.jsx(n,{...c,"data-testid":Gr.uiComponent}))}return{name:r,UIComponent:n,uiProps:s,rendered:i}}function Ya(e){const{childrenLayoutGridSchemaId:t,...r}=e,{registry:n,schema:s,formData:i}=r,{schemaUtils:a}=n,o=a.retrieveSchema(s,i);return t.map(c=>X.createElement(il,{...r,key:`layoutGrid-${zt(c)}`,schema:o,layoutGridSchema:c}))}function gv(e){const{layoutGridSchema:t,...r}=e,{formData:n,registry:s}=r,{children:i,gridProps:a}=Ja(t,mr.CONDITION,s),{operator:o,field:c="",value:l}=a,u=me(n,rr(c),null);return hv(o,u,l)?N.jsx(Ya,{...r,childrenLayoutGridSchemaId:i}):null}function vv(e){const{layoutGridSchema:t,...r}=e,{registry:n,uiSchema:s}=r,{children:i,gridProps:a}=Ja(t,mr.COLUMN,n),o=pe(s),c=_e("GridTemplate",n,o);return N.jsx(c,{column:!0,"data-testid":Gr.col,...a,children:N.jsx(Ya,{...r,childrenLayoutGridSchemaId:i})})}function bv(e){const{layoutGridSchema:t,...r}=e,{registry:n,uiSchema:s}=r,{children:i,gridProps:a}=Ja(t,mr.COLUMNS,n),o=pe(s),c=_e("GridTemplate",n,o);return i.map(l=>N.jsx(c,{column:!0,"data-testid":Gr.col,...a,children:N.jsx(Ya,{...r,childrenLayoutGridSchemaId:[l]})},`column-${zt(l)}`))}function _v(e){const{layoutGridSchema:t,...r}=e,{registry:n,uiSchema:s}=r,{children:i,gridProps:a}=Ja(t,mr.ROW,n),o=pe(s),c=_e("GridTemplate",n,o);return N.jsx(c,{...a,"data-testid":Gr.row,children:N.jsx(Ya,{...r,childrenLayoutGridSchemaId:i})})}function Sv(e){const{gridSchema:t,schema:r,uiSchema:n,errorSchema:s,fieldPathId:i,onBlur:a,onFocus:o,formData:c,readonly:l,registry:u,layoutGridSchema:p,...b}=e,{onChange:v}=b,{fields:S}=u,{SchemaField:E,LayoutMultiSchemaField:g}=S,y=yv(u,t),{name:f,UIComponent:w,uiProps:P}=y,{schema:h,isRequired:_,isReadonly:O,optionsInfo:k,fieldPathId:$}=mv(u,f,r,c,i),M=ci($);if(y.rendered)return y.rendered;if(h){const q=k?.hasDiscriminator?g:E,{fieldUiSchema:U,uiReadonly:L}=fv(f,P,n,O,l),z=rr(f);return N.jsx(q,{"data-testid":k?.hasDiscriminator?Gr.layoutMultiSchemaField:Gr.field,...b,name:f,required:_,readonly:L,schema:h,uiSchema:U,errorSchema:me(s,z),fieldPathId:M,formData:me(c,z),onChange:v,onBlur:a,onFocus:o,options:k?.options,registry:u})}return w?N.jsx(w,{"data-testid":Gr.uiComponent,...b,name:f,required:_,formData:c,readOnly:!!O||l,errorSchema:s,uiSchema:n,schema:r,fieldPathId:i,onBlur:a,onFocus:o,registry:u,...P}):null}function il(e){const{uiSchema:t}=e;let{layoutGridSchema:r}=e;const n=pe(t);if(!r&&To in n&&ue(n[To])&&(r=n[To]),ue(r)){if(mr.ROW in r)return N.jsx(_v,{...e,layoutGridSchema:r});if(mr.COLUMN in r)return N.jsx(vv,{...e,layoutGridSchema:r});if(mr.COLUMNS in r)return N.jsx(bv,{...e,layoutGridSchema:r});if(mr.CONDITION in r)return N.jsx(gv,{...e,layoutGridSchema:r})}return N.jsx(Sv,{...e,gridSchema:r})}il.TEST_IDS=Gr;function wv(e){const{fieldPathId:t,title:r,schema:n,uiSchema:s,required:i,registry:a,name:o}=e,c=pe(s,a.globalUiOptions),{title:l}=c,{title:u}=n,p=l||r||u||o;if(!p)return null;const b=_e("TitleFieldTemplate",a,c);return N.jsx(b,{id:tl(t),title:p,required:i,schema:n,uiSchema:s,registry:a})}function Mo(e,t,r){const n="!@#!@$@#$!@$#";return e.map(({schema:i})=>i).find(i=>{const a=i[nt]?.[t];return me(a,An,me(a,Nt,n))===r})}function Su(e,t,r,n,s){const i=t.map(c=>r.retrieveSchema(c,s));let a=e;Se in e?a={...e,[Se]:i}:Ie in e&&(a={...e,[Ie]:i});const o=xn(a,n);if(!o)throw new Error(`No enumOptions were computed from the schema ${JSON.stringify(a)}`);return o}function Cv(e){const{name:t,baseType:r,disabled:n=!1,formData:s,fieldPathId:i,onBlur:a,onChange:o,options:c,onFocus:l,registry:u,uiSchema:p,schema:b,autofocus:v,readonly:S,required:E,errorSchema:g,hideError:y=!1}=e,{widgets:f,schemaUtils:w,globalUiOptions:P}=u,[h,_]=X.useState(Su(b,c,w,p,s)),O=i[Ue],k=Kt(b),$=_e("FieldErrorTemplate",u,c),M=_e("FieldTemplate",u,c),q=zt(b),U=zt(c),L=p?zt(p):"",z=s?zt(s):"";X.useEffect(()=>{_(Su(b,c,w,p,s))},[q,U,w,L,z]);const{widget:G=k?"radio":"select",title:J="",placeholder:Q="",optionsSchemaSelector:Z=k,hideError:re,...A}=pe(p);if(!Z)throw new Error("No selector field provided for the LayoutMultiSchemaField");const C=me(s,Z);let j=gr(h[0]?.schema,Z);const m=Mo(h,Z,C);j=j?.type?j:{...j,type:m?.type||r};const d=vr(j,G,f),x=re===void 0?y:!!re,I=g?.[vt]??[],T={...g};delete T[vt];const F=w.getDisplayLabel(b,p,P),B=D=>{if(n||S)return;const V=Mo(h,Z,D),K=Mo(h,Z,C);let W=w.sanitizeDataForNewSchema(V,K,s);W&&V&&(W=w.getDefaultFormState(V,W,"excludeObjectChildren")),W&&at(W,Z,D),o(W,i.path,void 0,O)},H={enumOptions:h,...A},R=!x&&I.length>0?N.jsx($,{fieldPathId:i,schema:b,errors:I,registry:u}):void 0;return N.jsx(M,{fieldPathId:i,id:O,schema:b,label:(J||b.title)??"",disabled:n||Array.isArray(h)&&h.length===0,uiSchema:p,required:E,readonly:!!S,registry:u,displayLabel:F,errors:R,onChange:o,onKeyRename:Fo,onKeyRenameBlur:Fo,onRemoveProperty:Fo,children:N.jsx(d,{id:O,name:t,schema:b,label:(J||b.title)??"",disabled:n||Array.isArray(h)&&h.length===0,uiSchema:p,autofocus:v,readonly:S,required:E,registry:u,multiple:!1,rawErrors:I,hideError:x,hideLabel:!F,errorSchema:T,placeholder:Q,onChange:B,onBlur:a,onFocus:l,value:C,options:H,htmlName:i.name})})}function wu(e){const{name:t,disabled:r=!1,errorSchema:n,formData:s,fieldPathId:i,onBlur:a,onChange:o,onFocus:c,options:l,readonly:u,registry:p,required:b=!1,schema:v,uiSchema:S}=e,{schemaUtils:E}=p,g=zt(s??null),y=X.useMemo(()=>l.map(Y=>E.retrieveSchema(Y,s)),[l,E,g]),[f,w]=X.useState(()=>{const Y=Kt(v);return E.getClosestMatchingOption(s,y,0,Y)}),P=X.useRef(!1),h=X.useRef(s),_=X.useRef(i.$id);X.useEffect(()=>{const Y=h.current,te=_.current;if(h.current=s,_.current=i.$id,!je(s,Y)&&i.$id===te){if(P.current){P.current=!1;return}const ne=Kt(v),se=E.getClosestMatchingOption(s,y,f,ne);se!==f&&w(se)}});const O=`${i.$id}${v.oneOf?"__oneof_select":"__anyof_select"}`,k=X.useCallback(Y=>{if(r||u)return;const te=Y!==void 0?parseInt(Y,10):-1;if(te===f)return;const ne=te>=0?y[te]:void 0,se=f>=0?y[f]:void 0;let ce=E.sanitizeDataForNewSchema(ne,se,s);ne&&(ce=E.getDefaultFormState(ne,ce,"excludeObjectChildren")),w(te),P.current=!0,o(ce,i.path,void 0,O)},[f,y,r,u,E,s,i,o,O]),{widgets:$,fields:M,translateString:q,globalUiOptions:U}=p,{SchemaField:L}=M,z=_e("MultiSchemaFieldTemplate",p,U),G=Di(p,v,b,S),J=oi(s),{widget:Q="select",placeholder:Z,autofocus:re,autocomplete:A,title:C=v.title,...j}=pe(S,U),m=vr({type:"number"},Q,$),d=n?.[vt]??[],x={...n};delete x[vt];const I=E.getDisplayLabel(v,S,U),T=f>=0&&y[f]||null;let F;if(T){const{required:Y,type:te}=v,ne={};Y&&(ne.required=Y),te!==void 0&&!("type"in T)&&(ne.type=te),F=Object.keys(ne).length>0?jr(ne,T):T}let B=[];Se in v&&S&&Se in S?Array.isArray(S[Se])?B=S[Se]:console.warn(`uiSchema.oneOf is not an array for "${C||t}"`):Ie in v&&S&&Ie in S&&(Array.isArray(S[Ie])?B=S[Ie]:console.warn(`uiSchema.anyOf is not an array for "${C||t}"`));let H=S;f>=0&&B.length>f&&(H=B[f]);const R=C?$e.TitleOptionPrefix:$e.OptionPrefix,D=C?[C]:[],V=y.map((Y,te)=>{const{title:ne=Y.title}=pe(B[te]);return{label:ne||q(R,D.concat(String(te+1))),value:te}}),K=!G||J?N.jsx(m,{id:O,name:`${t}${v.oneOf?"__oneof_select":"__anyof_select"}`,schema:{type:"number",default:0},onChange:k,onBlur:a,onFocus:c,disabled:r||V.length===0,multiple:!1,rawErrors:d,errorSchema:x,value:f>=0?f:void 0,options:{enumOptions:V,...j},registry:p,placeholder:Z,autocomplete:A,autofocus:re,label:C??t,hideLabel:!I,readonly:u}):void 0,W=F&&F.type!=="null"&&N.jsx(L,{...e,schema:F,uiSchema:H})||null;return N.jsx(z,{schema:v,registry:p,uiSchema:S,selector:K,optionSchemaField:W})}function Ev(e){const{formData:t,onChange:r,fieldPathId:n}=e;return X.useEffect(()=>{t===void 0&&r(null,n.path)},[n,t,r]),null}const Av=/\.([0-9]*0)*$/,xv=/[0.]0*$/;function Pv(e){const{registry:t,onChange:r,formData:n,value:s}=e,[i,a]=X.useState(s),{StringField:o}=t.fields,c=Th(),l=c==="."?"\\.":c;let u=n;const p=X.useCallback((v,S,E,g)=>{a(v);const y=typeof v=="string"?v.replace(c,"."):v,f=`${y}`.startsWith(".")?`0${y}`:y,w=typeof f=="string"&&Av.exec(f)?$l(f.replace(xv,"")):$l(f);r(w,S,E,g)},[r,c]);if(typeof i=="string"&&typeof u=="number"){const v=new RegExp(`^(${String(u).replace(".",l)})?${l}?0*$`);i.match(v)&&(u=i)}let b=u;if(typeof u=="number"&&c!=="."){const{schema:v,uiSchema:S}=e,{schemaUtils:E}=t,y=(E.isSelect(v)?xn(v,S):void 0)?"select":"text",{widget:f=y}=pe(S);f!=="radio"&&f!=="select"&&f!=="hidden"&&(b=String(u).replace(".",c))}return N.jsx(o,{...e,formData:b,onChange:p})}var Ki;function Ov(e){if(!Ki){if(typeof document>"u")return;Ki=document.createElement("textarea")}var t=`&${e};`;Ki.innerHTML=t;var r=Ki.value;return r===t?void 0:r}var ie=32,ae=9,Zr=13,de=10,Le=96,ut=126,tt=91,Nr=94,Pe=62,Wt=35,wc=37,we=45,Bt=61,mt=92,it=42,Qe=95,He=60,Om=64,ir=93,It=33,Xa=38,Ct=58,Cc=70,Pn=102,Fa=104,En=119,ei=116,Ec=112,jm=115,jv=160,kv=12,Nv=44,Da=59,li=63,Ht=46,et=47,On=39,jn=34,Qr=43,ht=124,kn=123,sl=125,er=40,tr=41,Iv=78,Rv=110,$v=79,Fv=111,km=120,Nm=88,Ac=30,Ae=48,xe=57,ve=65,be=90,ze=97,Xe=122,Za=128,Qt=32,Dv={blockQuote:0,breakLine:1,breakThematic:2,codeBlock:3,codeInline:4,footnote:5,footnoteReference:6,frontmatter:7,gfmTask:8,heading:9,htmlBlock:10,htmlComment:11,htmlSelfClosing:12,image:13,link:14,orderedList:15,paragraph:16,ref:17,refCollection:18,table:19,text:20,textFormatted:21,unorderedList:22},ee=Dv;function Tv(e){if(!Eu(e,"---"))return null;let t=3;for(;t=e.length||e[t]!==` +`)return null;t++;let r=!1;for(;t=e.length)break;let s=t;if(e[t]==="\r"&&t++,t=ze&&a<=Xe||a>=ve&&a<=be||a>=Ae&&a<=xe||a===Qe){for(i++;i=ze&&a<=Xe||a>=ve&&a<=be||a>=Ae&&a<=xe||a===Qe||a===we||a===Ht);)i++;i=s?r=!0:(a=e.charCodeAt(i),(a===ie||a===ae)&&(r=!0)))}}}}return null}var Mv=/&([a-zA-Z0-9]+|#[0-9]{1,7}|#x[0-9a-fA-F]{1,6});/gi,qv={class:"className",for:"htmlFor",allowfullscreen:"allowFullScreen",allowtransparency:"allowTransparency",autocomplete:"autoComplete",autofocus:"autoFocus",autoplay:"autoPlay",cellpadding:"cellPadding",cellspacing:"cellSpacing",charset:"charSet",classid:"classId",colspan:"colSpan",contenteditable:"contentEditable",contextmenu:"contextMenu",crossorigin:"crossOrigin",enctype:"encType",formaction:"formAction",formenctype:"formEncType",formmethod:"formMethod",formnovalidate:"formNoValidate",formtarget:"formTarget",frameborder:"frameBorder",hreflang:"hrefLang",inputmode:"inputMode",keyparams:"keyParams",keytype:"keyType",marginheight:"marginHeight",marginwidth:"marginWidth",maxlength:"maxLength",mediagroup:"mediaGroup",minlength:"minLength",novalidate:"noValidate",radiogroup:"radioGroup",readonly:"readOnly",rowspan:"rowSpan",spellcheck:"spellCheck",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet",tabindex:"tabIndex",usemap:"useMap",viewbox:"viewBox"},Uv={};function Im(e){if(!e)return Uv;var t={};for(var r in e){var n=r.toLowerCase(),s=qv[n];if(s)t[s]=e[r];else{var i=r.indexOf(":");i===-1?t[r]=e[r]:t[r.slice(0,i)+r[i+1].toUpperCase()+r.slice(i+2)]=e[r]}}return t}var Lv=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s|^<(div|p|h[1-6]|ul|ol|li|blockquote|pre|table|thead|tbody|tr|td|th|dl|dt|dd|hr|address|article|aside|details|dialog|figure|figcaption|footer|form|header|main|menu|nav|section|summary|textarea|fieldset|legend|center|dir|hgroup|marquee|search|output|template)\b)/i;function Wr(e){return e.indexOf("&")===-1?e:e.replace(Mv,(t,r)=>{var n=Ov(r);if(n)return n;if(r[0]==="#"){var s=r[1]==="x"||r[1]==="X"?Number.parseInt(r.slice(2),16):Number.parseInt(r.slice(1),10);return s===0||s>=55296&&s<=57343||s>1114111?"�":s<=65535?String.fromCharCode(s):String.fromCharCode(55296+(s-65536>>10),56320+(s-65536&1023))}return t})}var Cu=/(javascript|vbscript|data(?!:image)):/i;function Pr(e){if(Cu.test(e))return null;if(e.indexOf("%")===-1)return e;try{let t=decodeURIComponent(e).replace(/[^A-Za-z0-9/:]/g,"");if(Cu.test(t))return null}catch{return null}return e}var wt={},jt,dt;for(jt=[192,193,194,195,196,197,224,225,226,227,228,229,230,198],dt=0;dt=ze&&i<=Xe||i>=Ae&&i<=xe){r<0&&(r=s);continue}if(i>=ve&&i<=be){r>=0&&(t+=e.slice(r,s),r=-1),t+=String.fromCharCode(i+Qt);continue}if(i===ie||i===we){r>=0&&(t+=e.slice(r,s),r=-1),t+="-";continue}r>=0&&(t+=e.slice(r,s),r=-1);var a=wt[i];a&&(t+=a)}return r>=0&&(t+=e.slice(r)),t}function Eu(e,t,r){return e.startsWith(t,r)}var Au=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr","circle","ellipse","line","path","polygon","polyline","rect","use","stop","animate","set"]);function Ti(e){let t=e.toLowerCase();if(Au.has(t))return!0;let r=t.indexOf(":");return r!==-1?(t=t.slice(r+1),Au.has(t)):!1}var bn=1,xu=2,Xn=4,Pu=8,Vv=16,Yt=32,Fr=64,zv=(()=>{var e=new Uint8Array(128),t;for(e[ae]=bn,e[de]=bn|xu,e[kv]=bn,e[Zr]=bn|xu,e[ie]=bn,t=It;t<=et;t++)e[t]=Xn;for(t=Ct;t<=Om;t++)e[t]=Xn;for(t=tt;t<=Le;t++)e[t]=Xn;for(t=kn;t<=ut;t++)e[t]=Xn;for(t=Ae;t<=xe;t++)e[t]=Vv;for(t=ve;t<=be;t++)e[t]=Pu;for(t=ze;t<=Xe;t++)e[t]=Pu;return e})(),Bv=/[\p{P}\p{S}]/u,Hv=new RegExp("\\p{Zs}","u"),dn=[];function Kv(e){var t=e.indexOf("\r"),r=e.indexOf("\0");if(t===-1&&r===-1)return e;var n=e.length;dn.length=0;var s=0,i=0;for(t===-1?i=r:r===-1?i=t:i=t\s+<").replace(/\n+/g," ").trim()}function Wv(e,t,r){let n=r??e.length;for(;t0&&(e[t-1]===` +`||e[t-1]==="\r");)t--;return`${e.slice(0,t).replace(Yv,"")} + +`}function Zn(e){if((e.type===ee.htmlSelfClosing||e.type===ee.htmlBlock)&&e.a)return[];if(e.type===ee.paragraph){var t=e.children;return t?t.flatMap(Zn):[]}return e.type===ee.text?e.text?.trim()?[e]:[]:e.type===ee.htmlBlock&&e.children?[{...e,children:e.children?.flatMap(Zn)}]:[e]}function $m(e){for(var t=0;t`,a=s.toLowerCase().indexOf(i);if(a!==-1){var o=s.slice(a+i.length).replace(/<\/[a-z][a-z0-9-]*\s*>/gi,"");o.trim()&&(n=!0)}}n||(r.c=!1)}"children"in e[t]&&e[t].children&&$m(e[t].children)}}function Zv(e,t){for(var r=0;r0&&o.push({type:ee.paragraph,children:s.slice(0,i)});var c=[];if(i+1!(u.type===ee.htmlSelfClosing&&u.a));l.length>0&&(c=l)}return c=c.concat(e.slice(r+1)),{found:!0,beforeClose:o,afterClose:c}}}if((n.type===ee.htmlSelfClosing||n.type===ee.htmlBlock)&&n.a&&n.tag.toLowerCase()===t)return{found:!0,beforeClose:e.slice(0,r),afterClose:e.slice(r+1)}}return{found:!1,beforeClose:e,afterClose:[]}}function Qv(e){var t="";for(var r in e){var n=e[r];n===!0?t+=` ${r}`:n!==void 0&&n!=null&&n!==!1&&(t+=` ${r}="${String(n)}"`)}return t}function Ou(e,t,r,n){var s;return t===void 0?s=Qv(r):s=t.length>0&&t.charCodeAt(0)>ie?` ${t}`:t,`<${e}${s}${n}`}function ju(e){var t=e.tag,r=e.type===ee.htmlSelfClosing,n=e,s=n.b,i=``;if(!r&&n.a)return{kind:"literal",literal:(n.h||i)+(n.e||"")};if(r){var a=e;return a.a?{kind:"literal",literal:a.h||i}:a.m?{kind:"literal",literal:a.m}:{kind:"literal",literal:Ou(t,s,e.attrs," />")}}var o=Ou(t,s,e.attrs,">"),c=n.children,l=c!=null&&c.length>0;if(n.c&&n.j!==void 0)return l?{kind:"sandwich",open:o,close:i}:{kind:"literal",literal:n.j};if(n.c&&!l)return{kind:"literal",literal:o+(n.e||"")+(n.h||i)};if(c!=null&&c.length>0){for(var u="",p=0;p0&&typeof o.at(-1)=="string"?o[o.length-1]=o.at(-1)+l:o.push(l)}return o}function Wn(e){return e==null||e.tagfilter!==!1}function tb(e,t,r,n){var s=t(e,r,n);return s===null?null:nb(s)}function rb(e){var t=[];if(!e)return t;for(var r in e)r.charCodeAt(0)===94&&t.push({identifier:r,footnote:e[r].target});return t}function xc(e,t,r){if(t.indexOf(".")===-1)return e?.[t]||r;for(var n=e,s=t.split("."),i=0;i=123){t=!0;break}}if(!t)return e;for(var s="",r=0;r=Ae&&i<=xe||i>=ve&&i<=Cc||i>=ze&&i<=Pn)&&(a>=Ae&&a<=xe||a>=ve&&a<=Cc||a>=ze&&a<=Pn)){s+=e[r]+e[r+1]+e[r+2],r+=2;continue}}if(n>=55296&&n<=57343){if(n<=56319&&r+1=56320&&o<=57343){s+=encodeURI(e[r]+e[r+1]),r++;continue}}s+=e[r];continue}s+=encodeURI(e[r])}return s}function ib(...e){return e.filter(Boolean).join(" ")}var sb=new Set(["title","textarea","style","xmp","iframe","noembed","noframes","script","plaintext"]),Ta=/<(\/?)(title|textarea|style|xmp|iframe|noembed|noframes|script|plaintext)(\s|>|\/)/gi;function ku(e){return sb.has(e.toLowerCase())}function ab(e){return Ta.lastIndex=0,Ta.test(e)}function Nu(e){return Ta.lastIndex=0,e.replace(Ta,(t,r,n,s)=>`<${r}${n}${s}`)}function al(e,t){var r=e||{},n=r.slugify,s;if(n){var i=n;s=a=>i(a,Nn)}else s=Nn;return{disableAutoLink:r.disableAutoLink,disableFrontmatter:r.disableFrontmatter,disableParsingRawHTML:r.disableParsingRawHTML,enforceAtxHeadings:r.enforceAtxHeadings,evalUnserializableExpressions:r.evalUnserializableExpressions,forceBlock:r.forceBlock,forceInline:t===void 0?r.forceInline:t,ignoreHTMLBlocks:r.ignoreHTMLBlocks,optimizeForStreaming:r.optimizeForStreaming,preserveFrontmatter:r.preserveFrontmatter,sanitizer:r.sanitizer||Pr,slugify:s,tagfilter:Wn(r)}}var ob=/^<([a-zA-Z][a-zA-Z0-9-]*)\s[^>]*>/,cb=/^<[A-Z]/,Pc=["script","pre","style","textarea"],Mi=new Set(Pc),lb=/<(?:pre|script|style|textarea)\b/i,Iu=/<(?:pre|script|style|textarea)\b/iy,qo=/^(\s{0,3}#[#\s]|\s{0,3}[-*+]\s|\s{0,3}\d+\.\s|\s{0,3}>\s|\s{0,3}```)/m,Ru=/^<([a-z][^ >/\n\r]*) ?([^>]*?)>/im,Fm=new Uint8Array(128);(()=>{for(var e=[Le,it,Qe,ut,Bt,tt,It,He,mt,Xa,de,Fa,En,Pn],t=0;t=s)return!1;e.charCodeAt(n)===ht&&n++;for(var i=0;n=s)break;if(e.charCodeAt(n)===ht&&i>0){for(var a=n+1;a=s)return!0}if(e.charCodeAt(n)===Ct&&n++,n>=s||e.charCodeAt(n)!==we)return!1;for(;n0}var fb=/[\u0000-\u001F\u007F]/g,hb={action:1,background:1,cite:1,data:1,formaction:1,href:1,longdesc:1,poster:1,src:1,"xlink:href":1},mb=/&#(x[0-9a-f]+|[0-9]+);?/gi;function pb(e){return e.indexOf("&#")===-1?e:e.replace(mb,(t,r)=>{var n=r.charCodeAt(0)===km||r.charCodeAt(0)===Nm?Number.parseInt(r.slice(1),16):Number.parseInt(r,10);return n>0&&n<=1114111?String.fromCodePoint(n):t})}function yb(e,t,r){if(r&&t.charCodeAt(0)===kn)return!1;var n=e.charCodeAt(0),s=e.charCodeAt(1);if((n===Fv||n===$v)&&(s===Rv||s===Iv))return!(r&&t==="");var i=e.toLowerCase();if(i==="srcdoc")return!0;if(i==="style")return/url\s*\(\s*(javascript|vbscript|data:(?!image\/))/i.test(t);if(hb[i]===1){var a=pb(Wr(t));if(Pr(a)===null)return!0;var o=a.replace(fb,"");return o!==a&&Pr(o)===null}return!1}function Oc(e){return"<"+(e.f?"/":"")+e.tag+e.g+e.b+(e.n?e.r?" />":"/>":">")}function Fu(e,t,r,n){for(var s=[],i=t,a=0;ai){var c=e.slice(i,o).trim();c&&s.push(c)}i=n[a+1]}if(i=ze&&a<=Xe||a>=ve&&a<=be))return null;for(;r=ze&&e.charCodeAt(r)<=Xe||e.charCodeAt(r)>=ve&&e.charCodeAt(r)<=be||e.charCodeAt(r)>=Ae&&e.charCodeAt(r)<=xe||e.charCodeAt(r)===we);)r++;let o=e.slice(i,r);if(!o)return null;let c=o.charCodeAt(0),l=c>=ve&&c<=be||o.indexOf("-")!==-1,u=r;for(;rv&&e.charCodeAt(r-1)===ie;let z=g?Fu(e,v,r,g):e.slice(v,r);return{r:E,u:l,f:s,b:z,q:g!=null,n:!0,g:p,attrs:S,end:r+2,tag:o}}var y=r,f=e.charCodeAt(r);if(!(f>=ze&&f<=Xe||f>=ve&&f<=be||f===Qe||f===Ct))return null;for(r++;r=ze&&w<=Xe||w>=ve&&w<=be||w>=Ae&&w<=xe||w===Qe||w===Ht||w===Ct||w===we)r++;else break}for(var P=e.slice(y,r),h=r;r=n)return null;if(_=e.slice($,r),r++,r0;){var w=e.charCodeAt(r);w===kn?q++:w===sl&&q--,r++}_=e.slice($,r),O=r}else{for(var $=r;r=c){i=!1,n=o<0?s:o+1;continue}if(u<4){var p=e.charCodeAt(l);if(p===Le||p===ut){for(var b=p,v=0,S=l;S=3){var E=!0;if(b===Le){for(var g=S;g=v){for(;f=s||e.charCodeAt(f)===de){n=f>=s?s:f+1;break}}}for(;y=s&&(n=s,a=!0);continue}}}}for(var _=l;_=4)break;i=!1}if(!i&&u<4&&_=3&&M>=c)}else i=!0;n=o<0?s:o+1}return a}function Tm(e,t,r){let n=e.length;if(e.charCodeAt(t)!==tt)return null;let s=t+1n||e.charCodeAt(i-1)!==ir)return null;let o=e.slice(t+1,i-1);if(o.length>999)return null;let c=xa(o);if(!c||i>=n||e.charCodeAt(i)!==Ct)return null;i++;let l=!1;for(;i=n||e.charCodeAt(i)!==Pe)return null;u=e.slice(p,i),i++;for(var b=e.indexOf(` +`,i),v=b<0?n:b,S=i;S=n||e.charCodeAt(U)===de)&&(w=e.slice(M,$),P=!0,h=U0,s=0;s126||i>=ve&&i<=be){n=!1;break}else r=!1}if(n&&!r)return e;var a=e.replace(/\s+/g," ").trim();return a.indexOf("ẞ")!==-1?a.replace(/\u1E9E/g,"ss").toLowerCase():a.toLowerCase()}function ol(e){return e?@[\\\]^_`{|}~])/g,"$1")}var jc=null,kc=-1,Pa=-1;function Ve(e,t){if(t>=kc&&t<=Pa&&e===jc)return Pa;var r=e.indexOf(` +`,t),n=r<0?e.length:r;return jc=e,kc=t,Pa=n,n}function Ne(e,t){let r=Ve(e,t);return r=r}function vb(e,t){if(!e)return e;var r=t.v||(t.v=Object.create(null)),n=r[e];if(n===void 0)return r[e]=0,e;for(var s=n+1,i=`${e}-${s}`;r[i]!==void 0;)s++,i=`${e}-${s}`;return r[e]=s,r[i]=0,i}function bb(e,t,r,n){let s=Ve(e,t);if(ot(e,t,s),qe>3)return null;let i=t+De;if(e.charCodeAt(i)!==Wt)return null;let a=en(e,i,s,35);if(a<1||a>6||(i+=a,ii&&e.charCodeAt(o-1)===ie;)o--;for(var c=o;o>i&&e.charCodeAt(o-1)===Wt;)o--;if(oi&&e.charCodeAt(o-1)===ie;)o--;else o=c;let l=e.slice(i,o),u=ri(l,!1,r,n);return{node:{type:ee.heading,level:a,children:u,id:""},end:Ne(e,s)}}function _b(e,t,r){var n=e.charCodeAt(t);if(n!==Bt&&n!==we)return!1;for(var s=t;s=r}function Jr(e,t){let r=Ve(e,t);if(ot(e,t,r),qe>3)return null;let n=t+De,s=e.charCodeAt(n);if(s!==we&&s!==it&&s!==Qe)return null;let i=0;for(;n3)return null;let s=qe,i=t+De,a=e.charCodeAt(i);if(a!==Le&&a!==ut)return null;let o=en(e,i,n,a);if(o<3)return null;i+=o;let c=Ri(e,i,n),l=n;if(a===Le){for(let z=c;zc&&(e.charCodeAt(l-1)===ie||e.charCodeAt(l-1)===ae);)l--;let u=e.slice(c,l),p="",b="",v=u.indexOf(" ");v===-1?p=u:(p=u.slice(0,v),b=u.slice(v+1).trim()),p=ti(p);var S;if(b){$u.lastIndex=0;for(var E;(E=$u.exec(b))!=null;)S||(S={}),S[E[1]]=E[2]===void 0?E[3]:E[2]}let g=Ne(e,n),y=e.length,f=e.length;var w;a===Mu&&o===qu?w=Uu:(w=String.fromCharCode(a).repeat(o),Mu=a,qu=o,Uu=w);for(var P=g;P0&&O<4&&e.charCodeAt(_-1)===ie;)_--,O++;if(O<=3&&(_===0||e.charCodeAt(_-1)===de)){for(var k=h+o;kg&&e.charCodeAt(y-1)===de?e.slice(g,y-1):e.slice(g,y);else{M="";for(var q=g;q0&&M.charCodeAt(M.length-1)===de&&(M=M.slice(0,-1))}return{node:{type:ee.codeBlock,lang:p||void 0,text:M,infoString:b||void 0,attrs:S},end:f}}function Lu(e,t,r){for(var n=0,s=t;s=4&&(n+=i,s=a);break}if(s!==a)break;continue}if(qe<4)break;let v=0,S=0;var c=0;for(let E=s;E4&&(c=S+l-4),S+=l}else S++;v++}var u="";if(c>0)for(var p=0;p0&&n.charCodeAt(n.length-1)===de;)n=n.slice(0,-1);return n?{node:{type:ee.codeBlock,lang:void 0,text:n,infoString:void 0,attrs:void 0},end:s}:null}function Cb(e,t,r,n){let s=Ve(e,t);if(ot(e,t,s),qe>3)return null;let i=t+De;if(e.charCodeAt(i)!==Pe)return null;let a="",o=t,c,l=!1,u=!1,p=!1;for(;o0,o=Ne(e,J)}else if(a&&!kt(e,o,J)&&u){if(qe<4){var $=o+De,M=$=Ae&&M<=xe){for(var q=$;q=Ae&&e.charCodeAt(q)<=xe;)q++;if(q3)return null;var n=t+De;if(n>=r)return null;var s=e.charCodeAt(n),i=qe,a=n,o=n;if(s===we||s===it||s===Qr){if(a=n+1,a=Ae&&s<=xe){for(;oxe)break;o++}if(o>n&&o=r)return{ordered:s>=Ae&&s<=xe,marker:s>=Ae&&s<=xe?e[o]:e[n],start:s>=Ae&&s<=xe?Number.parseInt(e.slice(n,o),10):void 0,contentStart:u,contentCol:p+1,markerCol:i,isEmpty:!0};for(;v=r,y=S-p;return g||y>4?(S=p+1,v=u+1,b=1):b===0&&(S=p+1,v=u,b=1),{ordered:s>=Ae&&s<=xe,marker:s>=Ae&&s<=xe?e[o]:e[n],start:s>=Ae&&s<=xe?Number.parseInt(e.slice(n,o),10):void 0,contentStart:v,contentCol:S,markerCol:i,isEmpty:g}}var Qn=0;function Vu(e,t,r,n){var s=0,i=t;for(Qn=0;in){Qn=s+o-n,i++,s=n;break}s+=o}else if(a===ie)s++;else break;i++}return i}function zu(e,t,r,n){var s=Ve(e,t),i=Dr(e,t,s);if(!i)return null;var a=[],o=t,c=i.contentCol,l="",u=i.isEmpty,p=!1,b=!1;if(!i.isEmpty){for(var v=!1,S=i.contentStart;S0)for(var f=0;f0||$<_){for(var M="",q=0;q=c){var A=Vu(e,o,_,c);if(Qn>0){for(var C="",j=c,m=0;m=Ae&&R<=xe&&Dr(e,o,_)!=null;if(!D){l+=`${e.slice(H,_)} +`,o=Ne(e,_);continue}}break}if(a.push({contentCol:c,raw:l,hasBlankAfter:p,isEmpty:u}),a.length===0)return null;var V=b;if(!V)for(var K=0;K=ge&&Ye.slice(ye).trim()===""&&(he=!1),te=fe=0?ce=!0:ne&&(se=!0),te=fe=0){if(qe>=Fe){te=fe=3){if(se&&ne){V=!0;break}he=!0,le=ke,ge=Et,ne=!0,te=fe0&&Rt.charCodeAt(_t-1)===de;)_t--;var xt=_t=3&&xt.charCodeAt(0)===tt){var Ir=xt[1];(Ir===" "||Ir==="x"||Ir==="X")&&xt.charCodeAt(2)===ir&&(sn={type:ee.gfmTask,completed:Ir==="x"||Ir==="X"},xt=xt.slice(3))}var st;if(At.isEmpty&&xt.trim()==="")st=[];else if(V){var an=r.inList;r.inList=!0;var Ui=r.i;r.i=Ui||pt!==a.length-1,st=Yr(xt,r,n),r.i=Ui,r.inList=an}else{var _r=r.inList;r.inList=!0;var on=r.i;if(r.i=on||pt!==a.length-1,st=Yr(xt,r,n),r.i=on,r.inList=_r,st.length===1&&st[0].type===ee.paragraph)st=st[0].children;else if(r.p){var Rr=[];r.p.push({src:st,dest:Rr,unwrap:!0}),st=Rr}else{for(var or=[],$t=0;$t{let E=S.indexOf(":");if(E===-1)return;let g=S.slice(0,E).trim(),y=S.slice(E+1).trim();if(g&&y){if(/url\s*\(\s*(javascript|vbscript|data:(?!image\/))/i.test(y)){v=!0;return}let f=g.indexOf("-")===-1?g:g.replace(/-([a-z])/g,(w,P)=>P.toUpperCase());l[f]=y}}),!v&&Object.keys(l).length>0&&(n[a]=l)}else if((c==="href"||c==="src")&&r?.sanitizer){let l=r.sanitizer(o,t,c);l!=null&&(n[a]=l)}else if(o==="")n[a]=!0;else if(o.length>=2&&o.charCodeAt(0)===kn&&o.charCodeAt(o.length-1)===sl){var s=o.slice(1,-1);if(s.length>0){var i=s.charCodeAt(0);if(i===tt||i===kn)try{n[a]=JSON.parse(s);continue}catch{}}if(s==="true"){n[a]=!0;continue}if(s==="false"){n[a]=!1;continue}if(r?.evalUnserializableExpressions)try{n[a]=(0,eval)(`(${s})`);continue}catch{}n[a]=s}else n[a]=o}return n}function zr(e,t,r){let n=t.length;if(n===0)return r;var s=t.charCodeAt(0),i=s>=ve&&s<=be||s>=ze&&s<=Xe;if(!i){for(var a=String.fromCharCode(s),o=e.length-n,c=r;c<=o;){var l=e.indexOf(a,c);if(l===-1||l>o)return-1;for(var u=!0,p=1;p=ve&&b<=be&&(b+=Qt),v>=ve&&v<=be&&(v+=Qt),b!==v){u=!1;break}}if(u)return l;c=l+1}return-1}s>=ve&&s<=be&&(s+=Qt);for(let E=r;E<=e.length-n;E++){var S=e.charCodeAt(E);if(S>=ve&&S<=be&&(S+=Qt),S!==s)continue;let g=!0;for(let y=1;y=ve&&f<=be&&(f+=Qt),w>=ve&&w<=be&&(w+=Qt),f!==w){g=!1;break}}if(g)return E}return-1}function Eb(e,t,r){let n=t.length;var s=t.charCodeAt(0);s>=ve&&s<=be&&(s+=Qt);for(let a=Math.min(r,e.length-n);a>=0;a--){var i=e.charCodeAt(a);if(i>=ve&&i<=be&&(i+=Qt),i!==s)continue;let o=!0;for(let c=1;c=ve&&l<=be&&(l+=Qt),u>=ve&&u<=be&&(u+=Qt),l!==u){o=!1;break}}if(o)return a}return-1}var qa=-1;function Nc(e,t,r){let n=r.toLowerCase(),s=`<${n}`,i=`0;){let p=zr(e,s,o),b=zr(e,i,o);if(b===-1)return-1;if(p!==-1&&p3&&!r.inHTML)return null;var i=t+De;if(e.charCodeAt(i)!==He)return null;var a=e.indexOf(">",i+1);if(a!==-1&&a=1&&c<=5){var l=e.length;if(c===1){for(var u=e.length,p=0;p`,i);b>=0&&b",u);l=v>=0?Ne(e,v+1):e.length}}else{var S=c===2?"-->":c===3?"?>":c===4?">":"]]>",E=e.indexOf(S,i);E>=0&&(l=Ne(e,E+S.length))}var g=e.slice(i,l);if(c>=2)return{node:{type:ee.htmlComment,text:g,s:!1,raw:!0},end:l};var y="div",f=g.match(/^<\/?([a-zA-Z][a-zA-Z0-9-]*)/);f&&(y=f[1]);var w=fr(e,i),P={},h;w&&!w.f&&(P=dr(w.attrs,y,n),h=w.g+w.b);var _=[],O=y.toLowerCase(),k=`0&&z.charCodeAt(z.length-1)===de;)z=z.slice(0,-1);z&&(U=qt(z))}else if(w&&!w.f){var G=w.end-i;if($===-1){for(var J=g;J.length>0&&J.charCodeAt(J.length-1)===de;)J=J.slice(0,-1);q=qt(J)}else{var Q=G;g.charCodeAt(Q)===de&&Q++;for(var Z=$;Z>Q;){var re=g.charCodeAt(Z-1);if(re!==ie&&re!==ae&&re!==de&&re!==Zr)break;Z--}var A=g.slice(Q,Z);A&&(U=qt(A));for(var C=g.slice($);C.length>0&&C.charCodeAt(C.length-1)===de;)C=C.slice(0,-1);L=qt(C),M=g.slice(G,$).trim()}}var j=w?w.f:!1;return{node:{type:ee.htmlBlock,tag:y,attrs:P,b:h,children:_,e:U,h:L,j:q,text:M,c:!0,a:j},end:l}}if(c===6||c===7){var m=Tu(e,t),d=m0;){var he=zr(V,`<${B}`,ce),le=zr(V,te,ce);if(le===-1)break;if(he!==-1&&he=2&&xt===He)){rt=!0;break}if(Rt=!1,xt===He){var sn=e.charCodeAt(_t+1)|32;if((sn===Ec||sn===jm||sn===ei)&&(Iu.lastIndex=_t,Iu.test(e))){Ke=!0;break}}_t++}}if(Et&&!rt&&!Ke){var Ir=Ve(e,oe);d=Ir,I=Ne(e,Ir),V=e.slice(i,d),x=e.slice(i,d),K=ft-i,W=oe-i,Y=!0}}}}var st=T.b.indexOf(` +`)!==-1||T.g.indexOf(` +`)!==-1,an=!1;if(K!==-1){var Ui=V.slice(W).trim();an=Ui.length===0}var _r=!1,on=d,Rr=I;if(K!==-1){var or=i+W,$t=Ve(e,or-1);if(or<$t){for(var cr=or;cr<$t&&(e.charCodeAt(cr)===ie||e.charCodeAt(cr)===ae);)cr++;if(cr<$t&&e.charCodeAt(cr)===He){var Fn=fr(e,cr);Fn&&!Fn.f&&(_r=!0,on=or,Rr=or,an=!0)}}if(!_r){var cn=Ne(e,$t);if(cn=2&&Dt.charCodeAt(0)===de&&Dt.charCodeAt(Dt.length-1)===de&&!gl;hp&&!vl&&!co?Dn=[{type:ee.text,text:Tn}]:fp||co?(r.inline=!1,Dn=Yr(Dt,r,n)):(r.inline=!0,Dn=ri(Tn,!1,r,n))}r.inline=cp,r.inHTML=lp,r.d=up}}var bl=!1;if(c===6&&K!==-1&&!r.inHTML&&!st){var mp=/<[a-zA-Z][^>]*>/.test(Dt),pp=Dt.indexOf(` + +`)!==-1||qo.test(Dt);mp&&!pp&&(bl=!0)}var yp=!Y&&(r.inHTML||c===7||st||!an||bl);if(yp){var ui,lr,_l=!1;if(K!==-1&&_r){var Sl=!1;if(r.inHTML&&W1&&lo.charCodeAt(0)===He&&lo.charCodeAt(1)!==et}lr=Sl?V.slice(T.end-i):Dt,_l=!0}else(c===7||r.inHTML)&&K!==-1?(lr=V.slice(T.end-i),lr.charCodeAt(0)===de&&(lr=lr.slice(1))):_r?ui=e.slice(i,on):st?ui=x:(lr=V.slice(T.end-i),lr.charCodeAt(0)===de&&(lr=lr.slice(1)));var wl=ui!==void 0,uo=qt(ui===void 0?lr||"":ui),Cl={type:ee.htmlBlock,tag:F,attrs:dr(T.attrs,F,n),b:T.g+T.b,children:Dn,e:wl?void 0:uo,j:wl?uo:void 0,text:uo,c:!0,a:!1};return _l&&(Cl.x=!0),{node:Cl,end:Rr}}var El=qt(Dt);return{node:{type:ee.htmlBlock,tag:F,attrs:dr(T.attrs,F,n),b:T.g+T.b,children:Dn,e:Y?void 0:El,text:El,c:!1,a:!1},end:Rr}}var Vi=x.match(/^<(\/?)([a-zA-Z][a-zA-Z0-9-]*)/),gp=Vi?Vi[2]:"div",fo=Vi?Vi[1]==="/":!1,ho,Al,xl,zi="";if(fo){var mo=x.indexOf(">");mo===-1?ho=x:(ho=x.slice(0,mo+1),zi=x.slice(mo+1),zi&&(Al=qt(zi)))}else xl=qt(x);return{node:{type:ee.htmlBlock,tag:gp,attrs:{},children:[],e:Al,h:ho,j:xl,text:fo?zi:x,c:!0,a:fo},end:I}}var St=fr(e,i);if(!St)return null;var $r=St.tag,po=$r.toLowerCase(),Pl=$r.charCodeAt(0),yo=Pl>=ve&&Pl<=be;if(!(yo||Ma.has(po)||Mi.has(po)||po.includes("-")))return null;if(St.f)return{node:{type:ee.htmlSelfClosing,tag:$r,attrs:{},h:e.slice(i,St.end),a:!0},end:St.end};var Mn=Nc(e,St.end,$r),di=[];if(Mn!==-1){var vp=qa,Bi=e.slice(St.end,vp),Hi=Bi.trim();if(Hi){var bp=Bi.indexOf(` + +`)!==-1,_p=qo.test(Hi),Sp=Ru.test(Hi),wp=r.inline,Cp=r.inHTML,Ep=r.d;r.inHTML=!0,r.d=(r.d||0)+1,bp||_p||Sp?(r.inline=!1,di=Yr(Bi,r,n)):(r.inline=!0,di=ri(Hi,!1,r,n)),r.inline=wp,r.inHTML=Cp,r.d=Ep}var Ap=Ve(e,Mn),xp=e.slice(Mn,Ap).trim(),Ol=xp?Mn:Ne(e,Mn),jl=yo?e.slice(i,Mn):e.slice(i,Ol);return{node:{type:ee.htmlBlock,tag:$r,attrs:dr(St.attrs,$r,n),b:St.g+St.b,children:di,j:qt(jl),text:yo?Bi:jl,c:!0,a:!1},end:Ol}}var fi=Tu(e,St.end),Pp=fi=ve&&s<=be)return 4;if(e.slice(r+1,r+8)==="[CDATA[")return 5}for(var i=e.charCodeAt(r)===et,a=i?r+1:r,o=a;o=ve&&c<=be||c>=ze&&c<=Xe||c>=Ae&&c<=xe||c===we)o++;else break}if(o===a)return 0;var l=e.slice(a,o);if(Mi.has(l.toLowerCase())){if(i)return 0;var u=e.charCodeAt(o);return u===ie||u===ae||u===Pe||u===de||o>=n?1:0}if(Ma.has(l.toLowerCase())){if(i){for(var p=o;pn&&(e.charCodeAt(s-1)===ie||e.charCodeAt(s-1)===ae);)s--;nn&&e.charCodeAt(s-1)===ht&&(s-2{var y=g.indexOf("\\|")===-1?g:g.replace(/\\\|/g,"|");return y?ri(y,!1,t,r):[]})}function Hu(e,t,r,n){let s=Ve(e,t);var i=e.indexOf("|",t);if(i<0||i>=s)return null;let a=Ne(e,s);if(a>=e.length)return null;let o=Ve(e,a);if(!Dm(e,a,o))return null;let c=e.slice(t,s),l=e.slice(a,o);for(var u=[],p=0,b=l.length;p=b||l.charCodeAt(p)===ht)break;var v=l.charCodeAt(p)===Ct;for(v&&p++;p=3)break}}g.push(Bu(k,r,n)),y=Ne(e,O)}if(n.optimizeForStreaming&&g.length===0)return null;for(var h=E.length,_=0;_h&&(g[_].length=h);return{node:{type:ee.table,header:E,cells:g,align:u},end:y}}function xb(e,t,r){var n=Ve(e,t);if(ot(e,t,n),qe>3)return null;var s=t+De;if(e.charCodeAt(s)!==tt)return null;if(s+1=n||e.charCodeAt(t+1)!==Nr)return null;for(var s=t+2,i=s;s=n)return null;var a=`^${e.slice(i,s)}`.toLowerCase();if(s++,s>=n||e.charCodeAt(s)!==Ct)return null;for(s++;s=2&&!kt(e,l,u))c+=` +${e.slice(l,u)}`,l=Ne(e,u);else if(kt(e,l,u)){var p=Ne(e,u);if(p=2){c+=` +`,l=Ne(e,u);continue}}break}else break}var v=r.refs;return v&&!v[a]&&(v[a]={target:c,title:void 0}),{node:{type:ee.footnote},end:l}}function Ob(e,t,r,n){let s=t,i=0,a=0,o=-1;for(;s=0?o:Ve(e,s);if(o=-1,kt(e,s,L))break;if(ot(e,s,L),qe<4&&a>0&&!r.l){let G=e.charCodeAt(s+De);if(G===Bt||G===we){let J=s+De;for(;J=L){i=G===Bt?1:2,s=Ne(e,L);break}}}a=L;let z=Ne(e,L);if(z=1&&u<=6&&(l>=G||e.charCodeAt(l)===ie||e.charCodeAt(l)===ae)){s=z;break}}if(J===Le||J===ut){for(var p=z+De,b=0;p=3){s=z;break}}if(J===He){var v=z+De+1,S=v=ve&&e.charCodeAt(y)<=be||e.charCodeAt(y)>=ze&&e.charCodeAt(y)<=Xe||e.charCodeAt(y)>=Ae&&e.charCodeAt(y)<=xe||e.charCodeAt(y)===we);)y++;y>g&&(E=Ma.has(e.slice(g,y).toLowerCase()))}else if(!E){for(var f=v;f=ve&&e.charCodeAt(f)<=be||e.charCodeAt(f)>=ze&&e.charCodeAt(f)<=Xe||e.charCodeAt(f)>=Ae&&e.charCodeAt(f)<=xe||e.charCodeAt(f)===we);)f++;if(f>v){var w=e.slice(v,f).toLowerCase();E=Ma.has(w)||Mi.has(w)}}if(E&&qm(e,z,r,n)){s=z;break}}if(J===we||J===it||J===Qr){let Q=z+De+1;if(Q=Ae&&J<=xe){let Q=z+De;for(;Q=Ae&&e.charCodeAt(Q)<=xe;)Q++;if(Qt&&(e.charCodeAt(O-1)===de||e.charCodeAt(O-1)===Zr||e.charCodeAt(O-1)===ie||e.charCodeAt(O-1)===ae);)O--;for(var k=t;k=O)return null;for(var $=!1,M=k;M=r)return null;let a=en(e,i,r,96);if(a===n){let o=e.slice(t+n,i);return o.indexOf(` +`)!==-1&&(o=o.replace(/\n/g," ")),o.length>0&&o[0]===" "&&o.at(-1)===" "&&o.trim().length>0&&(o=o.slice(1,-1)),{node:{type:ee.codeInline,text:o},end:i+a}}s=i+a}return null}function cl(e,t,r){if(e.charCodeAt(t)!==Le)return t;let n=en(e,t,r,96),s=t+n;for(;s=r)return t;let a=en(e,i,r,96);if(a===n)return i+a;s=i+a}return t}function kb(e,t,r){if(e.charCodeAt(t)!==He)return t;if(t+1",t+4);return l>=0?l+3:t}let n=t+1,s=n;for(;n=ve&&l<=be||l>=ze&&l<=Xe||l>=Ae&&l<=xe||l===we)n++;else break}if(n===s)return t;let i=e.slice(s,n).toLowerCase(),a=!1;for(;n0;)if(e.charCodeAt(n)===He)if(n+1=ve&&e.charCodeAt(u)<=be||e.charCodeAt(u)>=ze&&e.charCodeAt(u)<=Xe);)u++;if(e.slice(l,u).toLowerCase()===i){for(;u=ve&&e.charCodeAt(u)<=be||e.charCodeAt(u)>=ze&&e.charCodeAt(u)<=Xe);)u++;e.slice(l,u).toLowerCase()===i&&c++,n++}else n++;return n}function Nb(e,t,r,n,s){if(e.charCodeAt(t)!==ut||t+1>=r||e.charCodeAt(t+1)!==ut)return null;let i=t+2;for(;i+1i){i=o;continue}}if(a===ut&&e.charCodeAt(i+1)===ut){let o=e.slice(t+2,i),c=pr(o,0,o.length,n,s);return{node:{type:ee.textFormatted,tag:"del",children:c},end:i+2}}a===mt&&i+1=r||e.charCodeAt(t+1)!==Bt)return null;let i=t+2;for(;i+1i){i=o;continue}}if(a===Bt&&e.charCodeAt(i+1)===Bt&&i>t+2){let o=e.slice(t+2,i),c=pr(o,0,o.length,n,s);return{node:{type:ee.textFormatted,tag:"mark",children:c},end:i+2}}a===mt&&i+10?e.charCodeAt(t-1):32,a=t+s0?Ku(i,e,t-1):!1,u=t+sf;P--){var h=t[P];if(!(!h.active||h.ch!==E.ch||!h.canOpen)&&!((E.canOpen||h.canClose)&&(h.len+E.len)%3===0&&h.len%3!==0)){w=P;break}}if(w<0){b[y]=S-1,!E.canOpen&&(E.active=!1),S++;continue}var _=t[w],O=_.len>=2&&E.len>=2,k=O?2:1;_.len-=k,E.len-=k;var $=u[w],M=u[S],q=$.node,U=M.node;q.text=q.text.slice(0,q.text.length-k),U.text=U.text.slice(k);for(var L=[],z=$.next;z&&z!==M;)L.push(z.node),z=z.next;var G={type:ee.textFormatted,tag:O?"strong":"em",children:L},J={node:G,prev:$,next:M};$.next=J,M.prev=J;for(var Q=w+1;Q0&&e[A-1].type===ee.text){e[A-1].text+=m.text,C=C.next;continue}}e[A++]=j,C=C.next}e.length=A}}function Wi(e,t,r,n){return t(e,r,n)===null?null:e}var Wu=0,Ic=0,Ju=0,Rc=0,Yu=0,$c=0,Uo=0,Vt=0;function Fb(){return Uo===2147483647&&(Ic=0,Rc=0,$c=0,Oa=0,Uo=0),++Uo}var Lo=null,Oa=0,Ji=[],Vo=256;function Xu(e,t,r,n,s){let i=e.charCodeAt(t)===It,a=i?t+1:t;if(e.charCodeAt(a)!==tt||Rc===Vt&&a>=Ju)return null;var o=Oa===Vt?Lo:null,c=o===null?0:o[a];if(c<0)return null;var l=c;if(c===0){var u=e.indexOf("]",a+1);if(u<0||u>=r)return Ju=a,Rc=Vt,null;l=a+1;var p=0;Ji[p++]=a;for(var b=r-a>=Vo;l0;){var v=e.charCodeAt(l);if(v===mt&&l+1l){l=S;continue}}if(v===He){var E=Um(e,l,r);if(E){l=E.end;continue}var g=kb(e,l,r);if(g>l){l=g;continue}}if(v===tt)Ji[p++]=l;else if(v===ir){var y=Ji[--p];o===null&&b&&l-a>=Vo&&(o=Lo=new Int32Array(r),Oa=Vt),o!==null&&(o[y]=l+1)}l++}if(p>0){if(o===null&&b&&l-a>=Vo&&(o=Lo=new Int32Array(r),Oa=Vt),o!==null)for(;p>0;)o[Ji[--p]]=-1;return null}}var f=l-1,w=e.slice(a+1,f),P=l=r||e.charCodeAt(k)!==Pe)&&(_=!1),_&&(O=e.slice(l,k),k++)}else if(_){var $=Ic===Vt?Wu:-1;if($>=0&&l>=$)_=!1;else{for(var M=0,q=!1;k=r&&!q&&($<0||l<$)&&(Wu=l,Ic=Vt),O=e.slice(l,k)}}if(_){for(l=k;l=r?_=!1:(L=e.slice(J,l),l++)}}if(_){for(;l=r||e.charCodeAt(l)!==tr)&&(_=!1)}}if(_){if(l++,O=Wr(ti(O)),L!==void 0&&(L=Wr(ti(L))),i){var Q=pr(w,0,w.length,n,s),Z=Ua(Q);return{node:{type:ee.image,target:Wi(O,s?.sanitizer||Pr,"img","src"),alt:Z,title:L},end:l}}var re=n.inAnchor;n.inAnchor=!0;var T=re?[{type:ee.text,text:w}]:pr(w,0,w.length,n,s);return n.inAnchor=re,!n.inAnchor&&Fc(T)?null:{node:{type:ee.link,target:Wi(O,s?.sanitizer||Pr,"a","href"),title:L,children:T},end:l}}l=f+1,h=!0}var A="",C=l;if(!h&&P===tt){var j=l+1;C=j;for(var m=!1;C=r)return null;var d=e.slice(j,C);if(d.trim())A=xa(d);else{if(Du(w))return null;A=xa(w)}C+=1}else{if(Du(w))return null;A=xa(w)}var x=n.refs?.[A];if(!x)return null;if(i)return{node:{type:ee.image,target:Wi(x.target,s?.sanitizer||Pr,"img","src"),alt:Ua(pr(w,0,w.length,n,s)),title:x.title},end:C};var I=n.inAnchor;n.inAnchor=!0;var T=I?[{type:ee.text,text:w}]:pr(w,0,w.length,n,s);return n.inAnchor=I,!n.inAnchor&&Fc(T)?null:{node:{type:ee.link,target:Wi(x.target,s?.sanitizer||Pr,"a","href"),title:x.title,children:T},end:C}}function Um(e,t,r){if(e.charCodeAt(t)!==He)return null;for(var n=t+1;n=r||e.charCodeAt(n)!==Pe)return null;var i=e.slice(t+1,n),a=i.match(/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^\x00-\x20]*)$/);return a?{node:{type:ee.link,target:i,title:void 0,children:[{type:ee.text,text:i}]},end:n+1}:i.indexOf("@")!==-1&&/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(i)?{node:{type:ee.link,target:`mailto:${i}`,title:void 0,children:[{type:ee.text,text:i}]},end:n+1}:null}function Db(e,t,r,n){if(e.charCodeAt(t)!==tt||t+1>=r||e.charCodeAt(t+1)!==Nr||$c===Vt&&t>=Yu)return null;let s=t+2;for(;s=r)return Yu=t,$c=Vt,null;if(e.charCodeAt(s)!==ir)return null;let i=e.slice(t+2,s);return i?{node:{type:ee.footnoteReference,target:`#${Nn(i)}`,text:i},end:s+1}:null}function Tb(e,t,r,n){if(n.disableBareUrls)return null;var s="",i=!1,a=e.charCodeAt(t);if(a===Fa||a===72?t+8<=r&&e.charCodeAt(t+1)===ei&&e.charCodeAt(t+2)===ei&&e.charCodeAt(t+3)===Ec&&(e.charCodeAt(t+4)===jm&&e.charCodeAt(t+5)===Ct&&e.charCodeAt(t+6)===et&&e.charCodeAt(t+7)===et?s="https://":e.charCodeAt(t+4)===Ct&&e.charCodeAt(t+5)===et&&e.charCodeAt(t+6)===et&&(s="http://")):a===Pn||a===70?t+6<=r&&e.charCodeAt(t+1)===ei&&e.charCodeAt(t+2)===Ec&&e.charCodeAt(t+3)===Ct&&e.charCodeAt(t+4)===et&&e.charCodeAt(t+5)===et&&(s="ftp://"):(a===En||a===87)&&t+4<=r&&e.charCodeAt(t+1)===En&&e.charCodeAt(t+2)===En&&e.charCodeAt(t+3)===Ht&&(s="www.",i=!0),!s)return null;let o=t+s.length;for(;ot+s.length;){let _=e.charCodeAt(b-1);if(_===Ht||_===Nv||_===Ct||_===It||_===li||_===tr||_===it||_===Qe||_===ut){if(_===tr){if(c>=l)break;l--}b--}else if(_===Da){for(var v=b-2;v>t&&(e.charCodeAt(v)>=ve&&e.charCodeAt(v)<=be||e.charCodeAt(v)>=ze&&e.charCodeAt(v)<=Xe||e.charCodeAt(v)>=Ae&&e.charCodeAt(v)<=xe);)v--;v>=t&&e.charCodeAt(v)===Xa?b=v:b--}else break}if(b<=t+s.length)return null;var S=t+(i?4:s.length),E=e.indexOf("/",S);if((E<0||E>b)&&(E=b),i&&e.indexOf(".",S)===-1)return null;for(var g=-1,y=-1,f=E-1;f>=S;f--)if(e.charCodeAt(f)===Ht)if(g<0)g=f;else{y=f;break}for(var w=y>=0?y+1:S,f=w;f=ve&&a<=be||a>=ze&&a<=Xe||a>=Ae&&a<=xe||a===Ht||a===It||a===Wt||a===36||a===wc||a===Xa||a===On||a===it||a===Qr||a===et||a===Bt||a===li||a===Nr||a===Qe||a===Le||a===kn||a===ht||a===sl||a===ut||a===we)s++;else break}if(s===i||s>=r||e.charCodeAt(s)!==Om)return null;s++;for(var o=s,c=-1,l=s;s=ve&&a<=be||a>=ze&&a<=Xe||a>=Ae&&a<=xe)s++;else if((a===we||a===Qe)&&s>o)s++;else if(a===Ht){if(s===o)break;var u=e.charCodeAt(s-1);if(u===we||u===Qe||s-l>63)break;if(s+1=ve&&p<=be||p>=ze&&p<=Xe||p>=Ae&&p<=xe)c=s,l=s+1,s++;else break}else break}else break}if(s-l>63||c<0)return null;var b=e.charCodeAt(s-1);if(!(b>=ve&&b<=be||b>=ze&&b<=Xe||b>=Ae&&b<=xe)||s<=c+1)return null;for(var v=-1,S=c-1;S>=o;S--)if(e.charCodeAt(S)===Ht){v=S;break}for(var E=v>=0?v+1:o,S=E;S=r)return-1;if(e.charCodeAt(n)===Wt){n++;var s=n=Ae&&o<=xe||s&&(o>=ve&&o<=Cc||o>=ze&&o<=Pn);if(!c)break;n++}return n===i||n-i>a?-1:n=ve&&u<=be||u>=ze&&u<=Xe||u>=Ae&&u<=xe){n++;continue}break}return n===l?-1:n=r)return null;var a=e.charCodeAt(i);if(a===It&&i+1",o);return c!==-1&&c<=r-3?{node:{type:ee.htmlComment,text:e.slice(t+4,c),s:!1},end:c+3}:null}if(a===li){var l=e.indexOf("?>",i+1);return l!==-1&&l",i+8);return p!==-1&&p=ve&&u<=be){var b=e.indexOf(">",i+2);return b!==-1&&b=r)return null;var S=e.charCodeAt(v);if(!(S>=ve&&S<=be||S>=ze&&S<=Xe))return null;for(v++;v=ve&&E<=be||E>=ze&&E<=Xe||E>=Ae&&E<=xe||E===we)v++;else break}for(;v=ve&&a<=be||a>=ze&&a<=Xe))return null;var y=fr(e,t);if(!y)return null;var f=y.tag,w=f.toLowerCase(),P=y.n;if(P||Ti(f))return{node:{type:ee.htmlSelfClosing,tag:f,attrs:dr(y.attrs,f,s),m:y.q?Oc(y):e.slice(t,y.end),a:!1},end:y.end};var h=Mi.has(w),_=Nc(e.slice(0,r),y.end,f);if(_===-1)return{node:{type:ee.htmlSelfClosing,tag:f,attrs:dr(y.attrs,f,s),m:y.q?Oc(y):e.slice(t,y.end),a:!1},end:y.end};var O=Eb(e,`Lb)return Oi--,[{type:ee.text,text:e.slice(t,r)}];var i=Vt;Vt=Fb();let a=n;if(s.optimizeForStreaming){let ye=function(rt,pt){for(var At=1,Rt=pt+1;Rt=0&&w.push([g,2]),l%2===1&&S>=0&&w.push([S,2]),u%2===1&&E>=0&&w.push([E,1]),o%2===1&&b>=0&&w.push([b,2]),c%2===1&&v>=0&&w.push([v,1]),w.sort((rt,pt)=>pt[0]-rt[0]);for(var P=0;P0&&oe.charCodeAt(U-1)===It,G=z?U-1:U,J=ye(oe,U);if(J===-1)k=G,q=z,$=U+1,M=oe.length;else{var Q=J+1;if(Q>=oe.length)k=G,q=z,$=U+1,M=J;else if(oe.charCodeAt(Q)===er){var Z=oe.indexOf(")",Q+1);Z===-1?(k=G,q=z,$=U+1,M=J,U=oe.length):U=Z}else if(oe.charCodeAt(Q)===tt){var re=oe.indexOf("]",Q+1);re===-1?(k=G,q=z,$=U+1,M=J,U=oe.length):U=re}else U=J}}}if(k>=0){var A=q?"":oe.slice($,M);oe=oe.slice(0,k)+A,O=!0}}let Ke=oe.match(/<([A-Z][A-Za-z0-9]*)(?:\s[^>]*)?>([^<]*)$/);if(Ke&&Ke.index!==void 0){var C=Ke[0].length-Ke[2].length,j=C>=2&&Ke[0].charCodeAt(C-2)===et;if(!j){for(var m=!1,d=0,x=0;x=r&&(H=-1);tF)&&(I.push(fn(B+e.slice(F,t))),B="");var V=e.slice(t,t+D.len),K=fn(V);T.push({idx:I.length,ch:ye,len:D.len,canOpen:D.canOpen,canClose:D.canClose,active:!0}),I.push(K),t+=D.len,F=t;continue}t+=D.len-1}}else if(ye===ut)oe=Nb(e,t,r,a,s);else if(ye===Bt)oe=Ib(e,t,r,a,s);else if(ye===tt)t+1=0&&H-t<=64&&!a.inAnchor&&!s.disableAutoLink&&!s.disableBareUrls&&(ye>=ve&&ye<=be||ye>=ze&&ye<=Xe||ye>=Ae&&ye<=xe)&&(oe=Mb(e,t,r,s),!oe&&t>=H&&(H=e.indexOf("@",t+1),H>=r&&(H=-1))),ye===de&&a.k){var se=!1,ce=0;if(t>F&&e.charCodeAt(t-1)===mt)se=!0,ce=1;else{for(var he=0,le=t-1;le>=F&&e.charCodeAt(le)===ie;)he++,le--;he>=2&&(se=!0,ce=he)}if(se){for((B||t-ce>F)&&(I.push(fn(B+e.slice(F,t-ce))),B=""),I.push({type:ee.breakLine}),t++;tF&&e.charCodeAt(t-1)===ie,Fe=t+1F&&e.charCodeAt(fe-1)===ie;)fe--;for(B+=`${e.slice(F,fe)} +`,t++;tF)&&(I.push(fn(B+e.slice(F,t))),B=""),I.push(oe.node),t=oe.end,F=t;else{if(ye===mt&&t+1F)&&(I.push(fn(B+e.slice(F,t))),B=""),I.push(fn(e[t+1])),t+=2,F=t;continue}}if(t++,H<0||H-t>64)for(;t=0&&H-t<=64);){var Ye=e.charCodeAt(t);if(YeF)&&(I.push(fn(B+e.slice(F,r))),B=""),T.length>0&&$b(I,T),Vt=i,Oi--,I}var Vb=500;function Yr(e,t,r){var n=t.o||0;if(n>Vb)return[{type:ee.text,text:e}];if(t.o=n+1,r.optimizeForStreaming&&!(t.i||t.w)){for(var s=e.length;s>0&&e.charCodeAt(s-1)===de;)s--;for(var i=s;i>0&&e.charCodeAt(i-1)!==de;)i--;if(s>i&&e.charCodeAt(i)===ht){for(var a=!1,o=i+1;o0;){for(var S=v;S>0&&e.charCodeAt(S-1)!==de;)S--;if(e.charCodeAt(S)!==ht)break;b=S;for(var E=!0,g=!1,y=S;y0?e.slice(0,i).trimEnd():e.slice(0,b).trimEnd()}for(var w=-1,P=-1,h=-1,_=!1,O=e.length-1;O>=0;O--)if(e.charCodeAt(O)===He){for(var k=O+1=ve&&k<=be||k>=ze&&k<=Xe,M=k===et&&O+2=ve&&e.charCodeAt(O+2)<=be||e.charCodeAt(O+2)>=ze&&e.charCodeAt(O+2)<=Xe),q=k===It||k===li,U=e.length;U>O+1&&e.charCodeAt(U-1)===de;)U--;var L=O+1>=U;if($||M||q||L){var z=O+1;if((M||$)&&(z=O+2),$||M)for(;z=ve&&G<=be||G>=ze&&G<=Xe||G>=Ae&&G<=xe)z++;else break}for(var J=$||M?z:O+2;J=e.length)w=O,_=!0;else if(($||M)&&e.charCodeAt(J-1)!==et){for(var Q=!1,Z=J+1;Z=0){for(var re=0,A=0;A0&&e.charCodeAt(j-1)===de;)j--;if(j>0){for(var m=j;m>0&&e.charCodeAt(m-1)!==de;)m--;for(var d=m,x=0;d0&&d0&&e.charCodeAt(T-1)!==de;)T--;kt(e,T,I)||(e=e.slice(0,m).trimEnd())}}var F=e.length;if(F>0){for(var B=e.lastIndexOf(` +`),H=B===-1?0:B+1,R=F,D=H,V=0;D=R||e.charCodeAt(Y)===ie||e.charCodeAt(Y)===ae){for(var te=Y;te=R&&(W=!0)}}else if(K>=Ae&&K<=xe){for(var ne=D;ne=Ae&&e.charCodeAt(ne)<=xe;)ne++;if(ne=R||e.charCodeAt(se)===ie||e.charCodeAt(se)===ae){for(var ce=se;ce=R&&(W=!0)}}}W&&(e=e.slice(0,H).trimEnd())}}}if(t.inline)return pr(e,0,e.length,t,r);let he=[],le=0,ge=e.length;if(le===0&&!r.disableFrontmatter&&e.startsWith("---")){let ke=Tv(e);if(ke?.hasValidYaml){if(r.preserveFrontmatter!==!1){let Et=e.slice(0,ke.endPos).trimEnd();he.push({type:ee.frontmatter,text:Et})}le=ke.endPos}}for(;le=ge)break;var Ye=e.charCodeAt(le)===Ac;ot(e,le,fe);let ke=null;if(jc=e,kc=le,Pa=fe,!Ye&&qe>=4&&!t.inHTML)ke=wb(e,le);else if(!Ye){let Et=le+De,Ke=e.charCodeAt(Et);Ke===Wt?ke=bb(e,le,t,r):Ke===Pe?ke=Cb(e,le,t,r):Ke===Le||Ke===ut?ke=Sb(e,le):Ke===we||Ke===it||Ke===Qe?(ke=Jr(e,le),!ke&&(ke=zu(e,le,t,r))):Ke===Qr||Ke>=Ae&&Ke<=xe?ke=zu(e,le,t,r):Ke===He?ke=qm(e,le,t,r):Ke===ht?ke=Hu(e,le,t,r):Ke===tt&&(ke=xb(e,le,t))}if(!ke){for(var ye=!1,oe=le;oe"u"?void 0:X.createContext(void 0);function Qu(e,t,r,n,s,i,a,o,c){switch(e.type){case ee.blockQuote:{let y={key:r.key};return e.alert&&(y.className=`markdown-alert-${i(e.alert.toLowerCase(),Nn)}`,e.children.unshift(Jv(e.alert))),n("blockquote",y,t(e.children,r))}case ee.breakLine:return n("br",{key:r.key});case ee.breakThematic:return n("hr",{key:r.key});case ee.frontmatter:return o.preserveFrontmatter?n("pre",{key:r.key},e.text):null;case ee.codeBlock:{let y=e.lang?Wr(e.lang):"";var l=e.attrs?Im(e.attrs):{};return l.className=y?`language-${y} lang-${y}`:"",n("pre",{key:r.key},n("code",l,e.text))}case ee.codeInline:return n("code",{key:r.key},e.text);case ee.footnoteReference:return n("a",{key:r.key,href:s(e.target,"a","href")||void 0},n("sup",null,e.text));case ee.gfmTask:return n("input",{checked:e.completed,key:r.key,readOnly:!0,type:"checkbox"});case ee.heading:return n(`h${e.level}`,{id:e.id,key:r.key},t(e.children,r));case ee.htmlBlock:{let y=e;if(Wn(o)&&ku(y.tag)){var u=ju(y);return u.kind==="literal"?n("span",{key:r.key},u.literal):n("span",{key:r.key},...eb(u.open,y.children?t(y.children,r):null,u.close))}let f=y.j,w=f!==void 0,P=w?f:y.a?y.e||"":(y.e||"")+(y.h||"");if(P&&y.c){let h=y.tag.toLowerCase(),_=ub(h),O=y.children,k=O!=null&&O.length>0;if(_){let G=w?f:y.e||"",J=Wn(o)?Nu(G):G;if(/<[a-z][^>]{0,100}>/i.test(P)){var p=Ut(r.key,e.attrs);return p.dangerouslySetInnerHTML={__html:J},c(e.tag,p)}return c(e.tag,Ut(r.key,e.attrs),J)}let $=new RegExp(`^<${y.tag}(\\s|>)`,"i");if(k&&!$.test(P)&&Wn(o)&&ab(P))return c(e.tag,Ut(r.key,e.attrs),t(O,r));if(db(P)){let G=Wn(o)?Nu(P):P;var b=Ut(r.key,e.attrs);return b.dangerouslySetInnerHTML={__html:G},c(e.tag,b)}let M=al({slugify:o.slugify,sanitizer:s,tagfilter:!0}),q=Gv(P);if(new RegExp(`^<${y.tag}(\\s[^>]*)?>(\\s*)?$`,"i").test(q))return y.children&&y.children.length>0?c(e.tag,Ut(r.key,e.attrs),t(y.children,r)):c(e.tag,Ut(r.key,e.attrs));let U=ll(q,{inline:!1,refs:a,inHTML:!1},M);$m(U);let L=y.tag.toLowerCase(),z=w;if(z&&k)return c(e.tag,Ut(r.key,e.attrs),t(O,r));if(z)return t(U.flatMap(Zn),r);var v=Zv(U,L);if(v.found&&v.afterClose.length>0){var S=v.beforeClose.flatMap(Zn),E=v.afterClose.flatMap(Zn);return Mc(X.Fragment,{children:[c(e.tag,Ut(r.key,e.attrs),t(S,r)),t(E,r)]},r.key)}return c(e.tag,Ut(r.key,e.attrs),t(U.flatMap(Zn),r))}return Ti(e.tag)?c(e.tag,Ut(r.key,e.attrs)):c(e.tag,Ut(r.key,e.attrs),e.children?t(e.children,r):"")}case ee.htmlSelfClosing:{let y=e;if(Wn(o)&&ku(y.tag)){var g=ju(y);return n("span",{key:r.key},g.kind==="literal"?g.literal:g.open+(g.close||""))}return c(e.tag,Ut(r.key,e.attrs))}case ee.image:{let y=e.target===null?null:s(e.target,"img","src");return n("img",{key:r.key,alt:e.alt&&e.alt.length>0?e.alt:void 0,title:e.title||void 0,src:y||void 0})}case ee.link:{let y={key:r.key};if(e.target!=null){let f=tb(e.target,s,"a","href");f!=null&&(y.href=f)}return e.title&&(y.title=e.title),n("a",y,t(e.children,r))}case ee.table:{let y=e;return n("table",{key:r.key},n("thead",{key:"thead"},n("tr",null,y.header.map(function(f,w){return n("th",{key:w,style:y.align[w]===null?{}:{textAlign:y.align[w]}},t(f,r))}))),y.cells.length>0&&n("tbody",{key:"tbody"},y.cells.map(function(f,w){return n("tr",{key:w},f.map(function(P,h){return n("td",{key:h,style:y.align[h]===null?{}:{textAlign:y.align[h]}},t(P,r))}))})))}case ee.text:return e.text;case ee.textFormatted:return n(e.tag,{key:r.key},t(e.children,r));case ee.orderedList:case ee.unorderedList:{let y=e.type===ee.orderedList?"ol":"ul";return n(y,{key:r.key,start:e.type===ee.orderedList?e.start:void 0},e.items.map(function(f,w){return n("li",{key:w},t(f,r))}))}case ee.paragraph:return n("p",{key:r.key},t(e.children,r));case ee.ref:return null;default:return null}}var Bb=(e,t,r,n,s,i,a)=>{var o=l=>l.map(u=>"text"in u?u.text:""),c=(l,u={})=>{var p=Array.isArray(l)?l:[l],b=(u.renderDepth||0)+1;if(b>2500)return o(p);u.renderDepth=b;for(var v=u.key,S=[],E=!1,g=0;g{let r=xc(t,e,void 0);return r?typeof r=="function"||typeof r=="object"&&"render"in r?r:xc(t,`${e}.component`,e):e};function Kb(e,t){let r={...t||{}};r.overrides=r.overrides||{};let n=r.slugify||Nn,s=r.sanitizer||Pr,i=r.createElement,a=Rm(r.overrides),o=w=>qc(w,{...r,wrapper:null});function c(w){for(var P in w){var h=w[P];if(typeof h=="string"&&h.length>0&&h.charCodeAt(0)===He&&(ob.test(h)||cb.test(h)||zb(h,0))){var _=o(h.trim());w[P]=P==="innerHTML"&&Array.isArray(_)?_[0]:_}}}function l(w,P,...h){var _=P||{},O=w;if(a){var k=xc(r.overrides,`${w}.props`,{});O=Hb(w,r.overrides),_={..._,...k,className:ib(_.className,k.className)||void 0}}if(!i){var $=_.key;return $!=null&&delete _.key,h.length===1?_.children=h[0]:h.length>1&&(_.children=h),Mc(O,_,$)}return i(O,_,...h)}function u(w,P,...h){return P&&c(P),l(w,P,...h)}let p=al(r,r.forceInline),b=e[0]&&e[0].type===ee.refCollection?e[0].refs:{},v=Bb(r.renderRule,l,s,n,b,r,u),S=v(e,{inline:r.forceInline,refs:b}),E=rb(b);if(E.length>0&&S.push(l("footer",{key:"footer"},E.map(function(w){let P=w.identifier.charCodeAt(0)===Nr?w.identifier.slice(1):w.identifier,h=ll(w.footnote,{inline:!0,refs:b},p);return l("div",{id:n(P,Nn),key:w.identifier},`${P}: `,v(h,{inline:!0,refs:b}))}))),r.wrapper===null)return S;let g=r.wrapper||(r.forceInline?"span":"div"),y;if(S.length>1||r.forceWrapper)y=S;else return S.length===1?S[0]:null;var f=r.wrapperProps?{...r.wrapperProps}:{};return f.children=y,Mc(g,f,"outer")}function qc(e="",t={}){let r={...t||{}};r.overrides=r.overrides||{},r.slugify,r.sanitizer;function n(i){let a=r.forceInline||!(r.forceBlock||Lv.test(i)),o=al(r,a),c=a?i:Xv(i),l=ll(c,{inline:a,refs:s},o);return Kb(l,{...r,forceInline:a})}let s={};return n(e)}function Gb(e){let t=X.useRef(e),r=t.current;if(r!==e){var n=!0,s=0;for(var i in e)if(s++,!Object.is(r[i],e[i])){n=!1;break}if(n){var a=0;for(var o in r)a++;n=a===s}n||(t.current=e)}return t.current}var qi=({children:e,options:t,...r})=>{if(!(typeof X.useContext<"u")){let o={...t,overrides:{...t?.overrides},wrapperProps:{...t?.wrapperProps,...r}};return qc(e??"",o)}let n=Zu?X.useContext(Zu):void 0,s=Gb(r),i=X.useMemo(()=>({...n,...t,overrides:{...n?.overrides,...t?.overrides},wrapperProps:{...n?.wrapperProps,...t?.wrapperProps,...s}}),[n,t,s]),a=e??"";return X.useMemo(()=>qc(a,i),[a,i])};const Lm=Symbol("remove-this-key"),ed=Symbol("reset");function Wb(e,t){return Array.isArray(e.required)&&e.required.includes(t)}function Jb(e,t){switch(t){case"array":return[];case"boolean":return!1;case"null":return null;case"number":return 0;case"object":return{};case"string":default:return e($e.NewStringDefault)}}function Vm(e){return!!e?.[Sn]}function td(e){return Object.keys(e).filter(t=>Vm(e[t]))}function Yb(e){const{fieldPathId:t,schema:r,registry:n,uiSchema:s,errorSchema:i,formData:a,onChange:o,onBlur:c,onFocus:l,disabled:u,readonly:p,required:b,hideError:v,propertyName:S,handleKeyRename:E,handleRemoveProperty:g,addedByAdditionalProperties:y}=e,[f,w]=X.useState(!1),{globalFormOptions:P,fields:h}=n,{SchemaField:_}=h,O=ci(nr(S,P,t.path)),k=X.useCallback((U,L,z,G)=>{let J=U;U===void 0&&y&&je(L,O.path)&&(J=""),o(J,L,z,G)},[o,y,O]),$=X.useCallback(U=>{S!==U&&w(!0),E(S,U)},[S,E]),M=X.useCallback(U=>{const{target:{value:L}}=U;$(L)},[$]),q=X.useCallback(()=>{g(S)},[S,g]);return N.jsx(_,{name:S,required:b,schema:r,uiSchema:s,errorSchema:i,fieldPathId:O,formData:a,wasPropertyKeyModified:f,onKeyRename:$,onKeyRenameBlur:M,onRemoveProperty:q,onChange:k,onBlur:c,onFocus:l,registry:n,disabled:u,readonly:p,hideError:v})}const Xb=X.memo(Yb);function Zb(e){const{schema:t,uiSchema:r={},formData:n,errorSchema:s,fieldPathId:i,name:a,required:o=!1,disabled:c,readonly:l,hideError:u,onBlur:p,onFocus:b,onChange:v,registry:S,title:E}=e,{fields:g,schemaUtils:y,translateString:f,globalUiOptions:w}=S,{OptionalDataControlsField:P}=g,h=X.useRef(n);h.current=n;const _=X.useMemo(()=>y.retrieveSchema(t,n,!0),[y,t,n]),O=X.useMemo(()=>pe(r,w),[r,w]),k=X.useMemo(()=>_.properties??{},[_.properties]),$=e.childFieldPathId??i,M=X.useRef({previousKey:"",currentKey:void 0}),[q,U]=X.useState(()=>td(k)),L=X.useMemo(()=>{const T=new Set(td(k));return Object.keys(k).filter(F=>!T.has(F))},[k]),z=O.title??_.title??E??a,G=O.description??_.description,J=Di(S,_,o,r),Q=oi(n);let Z=[];const re=X.useCallback((T,F)=>{const{duplicateKeySuffixSeparator:B="-"}=pe(r,w);let H=0,R=T;for(;lt(F,R);)H+=1,R=`${T}${B}${H}`;return R},[r,w]),A=X.useCallback(()=>{if(!(_.additionalProperties||_.patternProperties))return;const T={...n},F=re("newKey",T);if(_.patternProperties)at(T,F,null);else{let B,H,R;if(ue(_.additionalProperties)){B=_.additionalProperties.type,H=_.additionalProperties.const,R=_.additionalProperties.default;let V=_.additionalProperties;Je in V&&(V=y.retrieveSchema({[Je]:V[Je]},n),B=V.type,H=V.const,R=y.getDefaultFormState(V,R)),!B&&(Ie in V||Se in V)&&(B="object")}const D=H??R??Jb(f,B);at(T,F,D)}M.current.previousKey===F&&(M.current.currentKey=F,M.current.previousKey=re(F,T)),U(B=>[...B,F]),v(T,$.path)},[n,v,f,y,$,re,_]),C=X.useCallback((T,F)=>{if(T!==F){const B=h.current,H=re(F,B),R={...B},D={[T]:H},V=Object.keys(R).map(W=>({[Object.hasOwn(D,W)?D[W]:W]:R[W]})),K=Object.assign({},...V);h.current=K,T!==M.current.currentKey&&(M.current.previousKey=T),M.current.currentKey=H,U(W=>W.map(Y=>Y===T?H:Y)),v(K,$.path)}},[v,$,re]),j=X.useCallback(T=>{U(F=>F.filter(B=>B!==T)),v(Lm,[...$.path,T])},[v,$]),m=X.useCallback(T=>M.current.currentKey===T?M.current.previousKey:T,[]);if(!J||Q)try{const T=new Set(L),F=q.filter(B=>Object.hasOwn(k,B)&&!T.has(B));Z=I0([...L,...F],O.order)}catch(T){return N.jsxs("div",{children:[N.jsx("p",{className:"rjsf-config-error",style:{color:"red"},children:N.jsx(qi,{options:{disableParsingRawHTML:!0},children:f($e.InvalidObjectField,[a||"root",T.message])})}),N.jsx("pre",{children:JSON.stringify(_)})]})}const d=_e("ObjectFieldTemplate",S,O),x=J?N.jsx(P,{...e,fieldPathId:$,schema:_}):void 0,I={title:O.label===!1?"":z,description:O.label===!1?void 0:G,properties:Z.map(T=>{const F=Vm(_.properties?.[T]),B=F?r.additionalProperties:r[T],H=pe(B).widget==="hidden";return{content:N.jsx(Xb,{propertyName:T,required:Wb(_,T),schema:gr(_,T),uiSchema:B,errorSchema:me(s,T),fieldPathId:$,formData:me(n,T),handleKeyRename:C,handleRemoveProperty:j,addedByAdditionalProperties:F,onChange:v,onBlur:p,onFocus:b,registry:S,disabled:c,readonly:l,hideError:u},m(T)),name:T,readonly:l,disabled:c,required:o,hidden:H}}),readonly:l,disabled:c,required:o,fieldPathId:i,uiSchema:r,errorSchema:s,schema:_,formData:n,registry:S,optionalDataControl:x,className:J?"rjsf-optional-object-field":void 0};return N.jsx(d,{...I,onAddProperty:A})}function Qb(e){const{schema:t,uiSchema:r={},formData:n,disabled:s=!1,readonly:i=!1,onChange:a,errorSchema:o,fieldPathId:c,registry:l}=e,{globalUiOptions:u={},schemaUtils:p,translateString:b}=l,v=pe(r,u),S=_e("OptionalDataControlsTemplate",l,v),E=oi(n);let g,y,f,w;if(s||i)g=$o(c,"Msg"),y=E?void 0:b($e.OptionalObjectEmptyMsg);else{const P=E?$e.OptionalObjectRemove:$e.OptionalObjectAdd;y=b(P),E?(g=$o(c,"Remove"),w=()=>a(void 0,c.path,o)):(g=$o(c,"Add"),f=()=>{let h=p.getDefaultFormState(t,n,"excludeObjectChildren");h===void 0&&(h=Gt(t)==="array"?[]:{}),a(h,c.path,o)})}return y&&N.jsx(S,{id:g,registry:l,schema:t,uiSchema:r,label:y,onAddClick:f,onRemoveClick:w})}const e_={array:"ArrayField",boolean:"BooleanField",integer:"NumberField",number:"NumberField",object:"ObjectField",string:"StringField",null:"NullField"};function t_(e,t,r){const{field:n}=t,{fields:s,schemaUtils:i}=r;if(typeof n=="function")return n;if(typeof n=="string"&&n in s)return s[n];const a=Gt(e),o=Array.isArray(a)?a[0]:a||"",c=e.$id;let l=e_[o];return c&&c in s&&(l=c),(e.anyOf||e.oneOf)&&!i.isSelect(e)&&l!=="ObjectField"?()=>null:l in s?s[l]:s.FallbackField}function r_(e){const{schema:t,fieldPathId:r,uiSchema:n,formData:s,errorSchema:i,name:a,onChange:o,onKeyRename:c,onKeyRenameBlur:l,onRemoveProperty:u,required:p=!1,registry:b,wasPropertyKeyModified:v=!1}=e,{schemaUtils:S,globalFormOptions:E,globalUiOptions:g,fields:y}=b,{AnyOfField:f,OneOfField:w,CyclicSchemaField:P}=y,h=r[Ue],_=X.useCallback((ge,Fe,fe,Ye)=>o(ge,Fe,fe,Ye||h),[h,o]);if(t[zc])return N.jsx(P,{...e});const O=R0(t,n,b),k=pe(O,g),$=_e("FieldTemplate",b,k),M=_e("DescriptionFieldTemplate",b,k),q=_e("FieldHelpTemplate",b,k),U=_e("FieldErrorTemplate",b,k),L=S.retrieveSchema(t,s),z=t_(L,k,b),J=!!L.deprecated?k.deprecatedHandling??"label":void 0,Q=!!(k.disabled??e.disabled)||J==="disable",Z=!!(k.readonly??(e.readonly||e.schema.readOnly||L.readOnly)),re=k.hideError,A=re===void 0?e.hideError:!!re,C=!!(k.autofocus??e.autofocus);if(Object.keys(L).length===0)return null;let j=S.getDisplayLabel(L,O,g);const m=k.field&&k.fieldReplacesAnyOrOneOf===!0;let d,x,I={fieldPathId:r};if((Ie in L||Se in L)&&!m&&!S.isSelect(L)){L[Ie]?(d=f,x=L[Ie].map(fe=>S.retrieveSchema(ue(fe)?fe:{},s))):L[Se]&&(d=w,x=L[Se].map(fe=>S.retrieveSchema(ue(fe)?fe:{},s)));const ge=Di(b,L,p,O),Fe=oi(s);j=j&&(!ge||Fe),I={childFieldPathId:r,fieldPathId:nr("XxxOf",E,r)}}const{__errors:T,...F}=i||{},{"ui:classNames":B,classNames:H,"ui:style":R,...D}=O;if(Br in D){const{classNames:ge,style:Fe,...fe}=D[Br];D[Br]=fe}const V=N.jsx(z,{...e,onChange:_,...I,schema:L,uiSchema:D,disabled:Q,readonly:Z,hideError:A,autofocus:C,errorSchema:F,rawErrors:T}),K=r[Ue];let W;v?W=a:W=Sn in L?a:k.title||e.schema.title||L.title||e.title||a,J==="label"&&(W=b.translateString($e.DeprecatedLabel,[W]));const Y=k.description||e.schema.description||L.description||"",{help:te}=k,ne=k.widget==="hidden"||J==="hide",se=["rjsf-field",`rjsf-field-${Gt(L)}`];!A&&T&&T.length>0&&se.push("rjsf-field-error"),k.classNames&&se.push(k.classNames);const ce=N.jsx(q,{help:te,fieldPathId:r,schema:L,uiSchema:O,hasErrors:!A&&T&&T.length>0,registry:b}),he=A||d&&!S.isSelect(L)?void 0:N.jsx(U,{errors:T,errorSchema:i,fieldPathId:r,schema:L,uiSchema:O,registry:b}),le={description:N.jsx(M,{id:ai(K),description:Y,schema:L,uiSchema:O,registry:b}),rawDescription:Y,help:ce,rawHelp:typeof te=="string"?te:void 0,errors:he,rawErrors:A?void 0:T,fieldPathId:r,id:K,label:W,hidden:ne,onChange:o,onKeyRename:c,onKeyRenameBlur:l,onRemoveProperty:u,required:p,disabled:Q,readonly:Z,hideError:A,displayLabel:j,classNames:se.join(" ").trim(),style:k.style,formData:s,schema:L,uiSchema:O,registry:b};return N.jsx($,{...le,children:N.jsxs(N.Fragment,{children:[V,d&&N.jsx(d,{name:a,disabled:Q,readonly:Z,hideError:A,errorSchema:i,formData:s,fieldPathId:r,onBlur:e.onBlur,onChange:e.onChange,onFocus:e.onFocus,options:x,registry:b,required:p,schema:L,uiSchema:O})]})})}const n_=X.memo(r_,(e,t)=>{const{experimental_componentUpdateStrategy:r="customDeep"}=t.registry.globalFormOptions;return r==="always"?!1:r==="shallow"?_c(e,t):je(e,t)});function i_(e){const{schema:t,name:r,uiSchema:n,fieldPathId:s,formData:i,required:a,disabled:o=!1,readonly:c=!1,autofocus:l=!1,onChange:u,onBlur:p,onFocus:b,registry:v,rawErrors:S,hideError:E,title:g}=e,{title:y,format:f}=t,{widgets:w,schemaUtils:P,globalUiOptions:h}=v,_=P.isSelect(t)?xn(t,n):void 0;let O=_?"select":"text";f&&P0(t,f,w)&&(O=f);const{widget:k=O,placeholder:$="",title:M,...q}=pe(n),U=P.getDisplayLabel(t,n,h),L=M??g??y??r,z=vr(t,k,w),G=X.useCallback((J,Q,Z)=>u(J,s.path,Q,Z),[u,s]);return N.jsx(z,{options:{...q,enumOptions:_},schema:t,uiSchema:n,id:s.$id,name:r,label:L,hideLabel:!U,hideError:E,value:i,onChange:G,onBlur:p,onFocus:b,required:a,disabled:o,readonly:c,autofocus:l,registry:v,placeholder:$,rawErrors:S,htmlName:s.name})}function s_(){return{AnyOfField:wu,ArrayField:nv,BooleanField:iv,CyclicSchemaField:sv,FallbackField:lv,LayoutGridField:il,LayoutHeaderField:wv,LayoutMultiSchemaField:Cv,NumberField:Pv,ObjectField:Zb,OneOfField:wu,OptionalDataControlsField:Qb,SchemaField:n_,StringField:i_,NullField:Ev}}function a_(e){const{fieldPathId:t,description:r,registry:n,schema:s,uiSchema:i}=e,a=pe(i,n.globalUiOptions),{label:o=!0}=a;if(!r||!o)return null;const c=_e("DescriptionFieldTemplate",n,a);return N.jsx(c,{id:ai(t),description:r,schema:s,uiSchema:i,registry:n})}function o_(e){const{disabled:t,hasCopy:r,hasMoveDown:n,hasMoveUp:s,hasRemove:i,fieldPathId:a,onCopyItem:o,onRemoveItem:c,onMoveDownItem:l,onMoveUpItem:u,readonly:p,registry:b,uiSchema:v}=e,{CopyButton:S,MoveDownButton:E,MoveUpButton:g,RemoveButton:y}=b.templates.ButtonTemplates;return N.jsxs(N.Fragment,{children:[(s||n)&&N.jsx(g,{id:_n(a,"moveUp"),className:"rjsf-array-item-move-up",disabled:t||p||!s,onClick:u,uiSchema:v,registry:b}),(s||n)&&N.jsx(E,{id:_n(a,"moveDown"),className:"rjsf-array-item-move-down",disabled:t||p||!n,onClick:l,uiSchema:v,registry:b}),r&&N.jsx(S,{id:_n(a,"copy"),className:"rjsf-array-item-copy",disabled:t||p,onClick:o,uiSchema:v,registry:b}),i&&N.jsx(y,{id:_n(a,"remove"),className:"rjsf-array-item-remove",disabled:t||p,onClick:c,uiSchema:v,registry:b})]})}function c_(e){const{children:t,className:r,buttonsProps:n,displayLabel:s,hasDescription:i,hasToolbar:a,registry:o,uiSchema:c}=e,l=pe(c),u=_e("ArrayFieldItemButtonsTemplate",o,l),p={flex:1,paddingLeft:6,paddingRight:6,fontWeight:"bold"},b=i?31:9,v={display:"flex",alignItems:s?"center":"baseline"},S={display:"flex",justifyContent:"flex-end",marginTop:s?`${b}px`:0};return N.jsxs("div",{className:r,style:v,children:[N.jsx("div",{className:a?"col-xs-9 col-md-10 col-xl-11":"col-xs-12",children:t}),a&&N.jsx("div",{className:"col-xs-3 col-md-2 col-xl-1 array-item-toolbox",children:N.jsx("div",{className:"btn-group",style:S,children:N.jsx(u,{...n,style:p})})})]})}function l_(e){const{canAdd:t,className:r,disabled:n,fieldPathId:s,uiSchema:i,items:a,optionalDataControl:o,onAddClick:c,readonly:l,registry:u,required:p,schema:b,title:v}=e,S=pe(i),E=_e("ArrayFieldDescriptionTemplate",u,S),g=_e("ArrayFieldTitleTemplate",u,S),y=!l&&!n,{ButtonTemplates:{AddButton:f}}=u.templates;return N.jsxs("fieldset",{className:r,id:s.$id,children:[N.jsx(g,{fieldPathId:s,title:S.title||v,required:p,schema:b,uiSchema:i,registry:u,optionalDataControl:y?o:void 0}),N.jsx(E,{fieldPathId:s,description:S.description||b.description,schema:b,uiSchema:i,registry:u}),y?void 0:o,N.jsx("div",{className:"row array-item-list",children:a}),t&&N.jsx(f,{id:_n(s,"add"),className:"rjsf-array-item-add",onClick:c,disabled:n||l,uiSchema:i,registry:u})]})}function u_(e){const{fieldPathId:t,title:r,schema:n,uiSchema:s,required:i,registry:a,optionalDataControl:o}=e,c=pe(s,a.globalUiOptions),{label:l=!0}=c;if(!r||!l)return null;const u=_e("TitleFieldTemplate",a,c);return N.jsx(u,{id:tl(t),title:r,required:i,schema:n,uiSchema:s,registry:a,optionalDataControl:o})}function d_(e){const{id:t,schema:r}=e,{examples:n,default:s}=r;return Array.isArray(n)?N.jsx("datalist",{id:el(t),children:n.concat(s!==void 0&&!n.map(String).includes(String(s))?[s]:[]).map(i=>N.jsx("option",{value:i},String(i)))},`datalist_${t}`):null}function f_(e){const{id:t,name:r,htmlName:n,value:s,readonly:i,disabled:a,autofocus:o,onBlur:c,onFocus:l,onChange:u,onChangeOverride:p,options:b,schema:v,uiSchema:S,registry:E,rawErrors:g,type:y,hideLabel:f,hideError:w,...P}=e,{ClearButton:h}=E.templates.ButtonTemplates;if(!t)throw console.log("No id for",e),new Error(`no id for props ${JSON.stringify(e)}`);const _={...P,..._0(v,y,b)};let O;_.type==="number"||_.type==="integer"?O=s||s===0?s:"":O=s??"";const k=X.useCallback(({target:{value:U}})=>u(U===""?b.emptyValue:U),[u,b]),$=X.useCallback(({target:U})=>c(t,U?.value),[c,t]),M=X.useCallback(({target:U})=>l(t,U?.value),[l,t]),q=X.useCallback(U=>{U.preventDefault(),U.stopPropagation(),u(b.emptyValue)},[u,b.emptyValue]);return N.jsxs(N.Fragment,{children:[N.jsx("input",{id:t,name:n||t,className:"form-control",readOnly:i,disabled:a,autoFocus:o,value:O,..._,list:v.examples?el(t):void 0,onChange:p||k,onBlur:$,onFocus:M,"aria-describedby":$n(t,!!v.examples)}),b.allowClearTextInputs&&!i&&!a&&O&&N.jsx(h,{registry:E,onClick:q}),N.jsx(d_,{id:t,schema:v})]})}function h_(e){const{iconType:t="default",icon:r,className:n,uiSchema:s,registry:i,...a}=e;return N.jsx("button",{type:"button",className:`btn btn-${t} ${n}`,...a,children:N.jsx("i",{className:`glyphicon glyphicon-${r}`})})}const tn=X.memo(h_);function m_(e){const{registry:{translateString:t}}=e;return N.jsx(tn,{title:t($e.CopyButton),...e,icon:"copy"})}const p_=X.memo(m_);function y_(e){const{registry:{translateString:t}}=e;return N.jsx(tn,{title:t($e.MoveDownButton),...e,icon:"arrow-down"})}const g_=X.memo(y_);function v_(e){const{registry:{translateString:t}}=e;return N.jsx(tn,{title:t($e.MoveUpButton),...e,icon:"arrow-up"})}const b_=X.memo(v_);function __(e){const{registry:{translateString:t}}=e;return N.jsx(tn,{title:t($e.RemoveButton),...e,iconType:"danger",icon:"remove"})}const S_=X.memo(__);function w_({id:e,className:t,onClick:r,disabled:n,registry:s,...i}){const{translateString:a}=s;return N.jsx(tn,{id:e,iconType:"default",icon:"remove",className:"btn-clear col-xs-12",title:a($e.ClearButton),onClick:r,disabled:n,registry:s,...i})}const C_=X.memo(w_);function E_({id:e,className:t,onClick:r,disabled:n,registry:s}){const{translateString:i}=s;return N.jsx("div",{className:"row",children:N.jsx("p",{className:`col-xs-4 col-sm-2 col-lg-1 col-xs-offset-8 col-sm-offset-10 col-lg-offset-11 text-right ${t}`,children:N.jsx(tn,{id:e,iconType:"info",icon:"plus",className:"btn-add col-xs-12",title:i($e.AddButton),onClick:r,disabled:n,registry:s})})})}function A_({uiSchema:e}){const{submitText:t,norender:r,props:n={}}=S0(e);return r?null:N.jsx("div",{children:N.jsx("button",{type:"submit",...n,className:`btn btn-info ${n.className||""}`,children:t})})}function x_(){return{SubmitButton:A_,AddButton:E_,CopyButton:p_,MoveDownButton:g_,MoveUpButton:b_,RemoveButton:S_,ClearButton:C_}}function P_(e){const{name:t,fieldPathId:r,registry:n,onExpand:s}=e,{translateString:i}=n,a=`${r[Ue]}-button`;return N.jsxs("div",{style:{marginTop:"1rem"},children:[N.jsx("div",{className:"text-danger",children:i($e.CycleDetected,[t])}),N.jsxs("div",{children:[N.jsx("button",{id:a,type:"button",className:"btn btn-sm btn-warning",onClick:()=>s(r[Ue]),children:i($e.ExpandButton)})," "]})]})}const zm=Qc();function Bm({description:e,registry:t,uiSchema:r={}}){const{globalUiOptions:n}=t;return pe(r,n).enableMarkdownInDescription&&typeof e=="string"?N.jsx(qi,{options:{disableParsingRawHTML:!0},"data-testid":zm.markdown,children:e}):e}Bm.TEST_IDS=zm;function O_(e){const{id:t,description:r,registry:n,uiSchema:s}=e;return r?N.jsx("div",{id:t,className:"field-description",children:N.jsx(Bm,{description:r,registry:n,uiSchema:s})}):null}function j_({errors:e,registry:t}){const{translateString:r}=t;return N.jsxs("div",{className:"panel panel-danger errors",children:[N.jsx("div",{className:"panel-heading",children:N.jsx("h3",{className:"panel-title",children:r($e.ErrorsLabel)})}),N.jsx("ul",{className:"list-group",children:e.map((n,s)=>N.jsx("li",{className:"list-group-item text-danger",children:n.stack},s))})]})}function k_(e){const{schema:t,registry:r,typeSelector:n,schemaField:s}=e,i=_e("MultiSchemaFieldTemplate",r);return N.jsx(i,{selector:n,optionSchemaField:s,schema:t,registry:r})}function N_(e){const{errors:t=[],fieldPathId:r}=e;if(t.length===0)return null;const n=vm(r);return N.jsx("div",{children:N.jsx("ul",{id:n,className:"error-detail bs-callout bs-callout-info",children:t.filter(s=>!!s).map((s,i)=>N.jsx("li",{className:"text-danger",children:s},i))})})}const Hm=Qc();function Km({help:e,registry:t,uiSchema:r={}}){const{globalUiOptions:n}=t;return pe(r,n).enableMarkdownInHelp&&typeof e=="string"?N.jsx(qi,{options:{disableParsingRawHTML:!0},"data-testid":Hm.markdown,children:e}):e}Km.TEST_IDS=Hm;function I_(e){const{fieldPathId:t,help:r,uiSchema:n,registry:s}=e;return r?N.jsx("div",{id:bm(t),className:"help-block",children:N.jsx(Km,{help:r,registry:s,uiSchema:n})}):null}const R_="*";function Gm(e){const{label:t,required:r,id:n}=e;return t?N.jsxs("label",{className:"control-label",htmlFor:n,children:[t,r&&N.jsx("span",{className:"required",children:R_})]}):null}function $_(e){const{id:t,label:r,children:n,errors:s,help:i,description:a,hidden:o,required:c,displayLabel:l,registry:u,uiSchema:p}=e,b=pe(p),v=_e("WrapIfAdditionalTemplate",u,b);if(o)return N.jsx("div",{className:"hidden",children:n});const S=b.widget==="checkbox";return N.jsxs(v,{...e,children:[l&&!S&&N.jsx(Gm,{label:r,required:c,id:t}),l&&a?a:null,n,s,i]})}function F_(e){const{children:t,column:r,className:n,...s}=e;return N.jsx("div",{className:n,...s,children:t})}function D_(e){const{selector:t,optionSchemaField:r}=e;return N.jsxs("div",{className:"panel panel-default panel-body",children:[N.jsx("div",{className:"form-group",children:t}),r]})}function T_(e){const{className:t,description:r,disabled:n,formData:s,fieldPathId:i,onAddProperty:a,optionalDataControl:o,properties:c,readonly:l,registry:u,required:p,schema:b,title:v,uiSchema:S}=e,E=pe(S),g=_e("TitleFieldTemplate",u,E),y=_e("DescriptionFieldTemplate",u,E);if((b.oneOf||b.anyOf)&&!b.properties&&c.length===0)return null;const w=!l&&!n,{ButtonTemplates:{AddButton:P}}=u.templates;return N.jsxs("fieldset",{className:t,id:i.$id,children:[v&&N.jsx(g,{id:tl(i),title:v,required:p,schema:b,uiSchema:S,registry:u,optionalDataControl:w?o:void 0}),r&&N.jsx(y,{id:ai(i),description:r,schema:b,uiSchema:S,registry:u}),w?void 0:o,c.map(h=>h.content),Dy(b,S,s)&&N.jsx(P,{id:_n(i,"add"),className:"rjsf-object-property-expand",onClick:a,disabled:n||l,uiSchema:S,registry:u})]})}function M_(e){const{id:t,registry:r,label:n,onAddClick:s,onRemoveClick:i}=e;return s?N.jsx(tn,{id:t,registry:r,icon:"plus",className:"rjsf-add-optional-data btn-sm",onClick:s,title:n}):i?N.jsx(tn,{id:t,registry:r,icon:"remove",className:"rjsf-remove-optional-data btn-sm",onClick:i,title:n}):N.jsx("em",{id:t,children:n})}const q_="*";function U_(e){const{id:t,title:r,required:n,optionalDataControl:s}=e;return N.jsxs("legend",{id:t,children:[r,n&&N.jsx("span",{className:"required",children:q_}),s&&N.jsx("span",{className:"pull-right",style:{marginBottom:"2px"},children:s})]})}function L_(e){const{schema:t,fieldPathId:r,reason:n,registry:s}=e,{translateString:i}=s;let a=$e.UnsupportedField;const o=[];return r?.$id&&(a=$e.UnsupportedFieldWithId,o.push(r.$id)),n&&(a=a===$e.UnsupportedField?$e.UnsupportedFieldWithReason:$e.UnsupportedFieldWithIdAndReason,o.push(n)),N.jsxs("div",{className:"unsupported-field",children:[N.jsx("p",{children:N.jsx(qi,{options:{disableParsingRawHTML:!0},children:i(a,o)})}),t&&N.jsx("pre",{children:JSON.stringify(t,null,2)})]})}function V_(e){const{id:t,classNames:r,style:n,disabled:s,displayLabel:i,label:a,onKeyRenameBlur:o,onRemoveProperty:c,rawDescription:l,readonly:u,required:p,schema:b,hideError:v,rawErrors:S,children:E,uiSchema:g,registry:y}=e,{templates:f,translateString:w}=y,{RemoveButton:P}=f.ButtonTemplates,h=w($e.KeyLabel,[a]),_=Sn in b,O=!!l,k=["form-group",r];!v&&S&&S.length>0&&k.push("has-error has-danger");const $=k.join(" ").trim();if(!_)return N.jsx("div",{className:$,style:n,children:E});const M=O?46:26;return N.jsx("div",{className:$,style:n,children:N.jsxs("div",{className:"row",children:[N.jsx("div",{className:"col-xs-5 form-additional",children:N.jsxs("div",{className:"form-group",children:[i&&N.jsx(Gm,{label:h,required:p,id:`${t}-key`}),i&&l&&N.jsx("div",{children:" "}),N.jsx("input",{className:"form-control",type:"text",id:`${t}-key`,onBlur:o,defaultValue:a},a)]})}),N.jsx("div",{className:"form-additional form-group col-xs-5",children:E}),N.jsx("div",{className:"col-xs-2",style:{marginTop:i?`${M}px`:void 0},children:N.jsx(P,{id:_n(t,"remove"),className:"rjsf-object-property-remove btn-block",style:{border:"0"},disabled:s||u,onClick:c,uiSchema:g,registry:y})})]})})}function z_(){return{ArrayFieldDescriptionTemplate:a_,ArrayFieldItemTemplate:c_,ArrayFieldItemButtonsTemplate:o_,ArrayFieldTemplate:l_,ArrayFieldTitleTemplate:u_,ButtonTemplates:x_(),BaseInputTemplate:f_,CyclicSchemaExpandTemplate:P_,DescriptionFieldTemplate:O_,ErrorListTemplate:j_,FallbackFieldTemplate:k_,FieldTemplate:$_,FieldErrorTemplate:N_,FieldHelpTemplate:I_,GridTemplate:F_,MultiSchemaFieldTemplate:D_,ObjectFieldTemplate:T_,OptionalDataControlsTemplate:M_,TitleFieldTemplate:U_,UnsupportedFieldTemplate:L_,WrapIfAdditionalTemplate:V_}}function B_({time:e=!0,...t}){const{AltDateWidget:r}=t.registry.widgets;return N.jsx(r,{time:e,...t})}function H_(e){const{disabled:t=!1,readonly:r=!1,autofocus:n=!1,options:s,id:i,name:a,registry:o,onBlur:c,onFocus:l}=e,{translateString:u}=o,{elements:p,handleChange:b,handleClear:v,handleSetNow:S}=U0(e);return N.jsxs("ul",{className:"list-inline",children:[p.map((E,g)=>N.jsx("li",{className:"list-inline-item",children:N.jsx(q0,{rootId:i,name:a,select:b,...E,disabled:t,readonly:r,registry:o,onBlur:c,onFocus:l,autofocus:n&&g===0})},g)),(s.hideNowButton!=="undefined"?!s.hideNowButton:!0)&&N.jsx("li",{className:"list-inline-item",children:N.jsx("button",{type:"button",className:"btn btn-info btn-now",onClick:S,children:u($e.NowLabel)})}),(s.hideClearButton!=="undefined"?!s.hideClearButton:!0)&&N.jsx("li",{className:"list-inline-item",children:N.jsx("button",{type:"button",className:"btn btn-warning btn-clear",onClick:v,children:u($e.ClearLabel)})})]})}function K_({id:e,disabled:t,options:r,value:n,autofocus:s=!1,readonly:i,onChange:a,onBlur:o,onFocus:c,htmlName:l}){const{inline:u=!1,enumOptions:p,enumDisabled:b,emptyValue:v}=r,S=Zc(r),E=Array.isArray(n)?n:[n],g=X.useCallback(({target:f})=>o(e,Cn(f?.value,p,S,v)),[o,e,p,v,S]),y=X.useCallback(({target:f})=>c(e,Cn(f?.value,p,S,v)),[c,e,p,v,S]);return N.jsx("div",{className:"checkboxes",id:e,children:Array.isArray(p)&&p.map((f,w)=>{const P=Wa(f.value,E),h=Array.isArray(b)&&b.includes(f.value),_=t||h||i?"disabled":"",O=$=>{$.target.checked?a(g0(w,E,p)):a(p0(w,E,p))},k=N.jsxs("span",{children:[N.jsx("input",{type:"checkbox",id:_m(e,w),name:l||e,checked:P,value:Xc(f.value,w,S),disabled:t||h||i,autoFocus:s&&w===0,onChange:O,onBlur:g,onFocus:y,"aria-describedby":$n(e)}),N.jsx("span",{children:f.label})]});return u?N.jsx("label",{className:`checkbox-inline ${_}`,children:k},String(f.value)):N.jsx("div",{className:`checkbox ${_}`,children:N.jsx("label",{children:k})},String(f.value))})})}function G_({schema:e,uiSchema:t,options:r,id:n,value:s,disabled:i,readonly:a,label:o,hideLabel:c,autofocus:l=!1,onBlur:u,onFocus:p,onChange:b,registry:v,htmlName:S,required:E}){const g=_e("DescriptionFieldTemplate",v,r),y=Aa(e)&&E,f=X.useCallback(k=>b(k.target.checked),[b]),w=X.useCallback(k=>u(n,k.target.checked),[u,n]),P=X.useCallback(k=>p(n,k.target.checked),[p,n]),O=pe(t).widget==="checkbox"?void 0:r.description??e.description;return N.jsxs("div",{className:`checkbox ${i||a?"disabled":""}`,children:[!c&&O&&N.jsx(g,{id:ai(n),description:O,schema:e,uiSchema:t,registry:v}),N.jsxs("label",{children:[N.jsx("input",{type:"checkbox",id:n,name:S||n,checked:typeof s>"u"?!1:s,required:E,disabled:i||a,autoFocus:l,onChange:f,onBlur:w,onFocus:P,"aria-describedby":$n(n)}),j0(N.jsxs("span",{children:[o,y&&N.jsx("span",{className:"required",children:"*"})]}),c)]})]})}function W_(e){const{disabled:t,readonly:r,options:n,registry:s}=e,i=_e("BaseInputTemplate",s,n);return N.jsx(i,{type:"color",...e,disabled:t||r})}function J_(e){const{onChange:t,value:r,options:n,registry:s}=e,i=_e("BaseInputTemplate",s,n);return N.jsx(i,{type:"datetime-local",...e,value:H0(r),onChange:a=>t(k0(a))})}function Y_(e){const{onChange:t,options:r,registry:n}=e,s=_e("BaseInputTemplate",n,r),i=X.useCallback(a=>t(a||void 0),[t]);return N.jsx(s,{type:"date",...e,onChange:i})}function X_(e){const{options:t,registry:r}=e,n=_e("BaseInputTemplate",r,t);return N.jsx(n,{type:"email",...e})}function Z_({fileInfo:e,registry:t}){const{translateString:r}=t,{dataURL:n,type:s,name:i}=e;if(!n)return null;const a=r($e.PreviewLabel);return["image/jpeg","image/png"].includes(s)?N.jsx("img",{src:n,alt:a,style:{maxWidth:"100%"},className:"file-preview"}):N.jsxs(N.Fragment,{children:[" ",N.jsx("a",{download:`preview-${i}`,href:n,className:"file-download",children:a})]})}function Q_({filesInfo:e,registry:t,preview:r,onRemove:n,options:s}){if(e.length===0)return null;const{translateString:i}=t,{RemoveButton:a}=_e("ButtonTemplates",t,s);return N.jsx("ul",{className:"file-info",children:e.map((o,c)=>{const{name:l,size:u,type:p}=o,b=()=>n(c);return N.jsxs("li",{children:[N.jsx(qi,{children:i($e.FilesInfo,[l,p,String(u)])}),r&&N.jsx(Z_,{fileInfo:o,registry:t}),N.jsx(a,{onClick:b,registry:t})]},c)})})}function eS(e){const{disabled:t,readonly:r,required:n,multiple:s,onChange:i,value:a,options:o,registry:c}=e,{filesInfo:l,handleChange:u,handleRemove:p}=B0(a,i,s),b=_e("BaseInputTemplate",c,o),v=S=>{S.target.files&&u(S.target.files)};return N.jsxs("div",{children:[N.jsx(b,{...e,disabled:t||r,type:"file",required:a?!1:n,onChangeOverride:v,value:"",accept:o.accept?String(o.accept):void 0}),N.jsx(Q_,{filesInfo:l,onRemove:p,registry:c,preview:o.filePreview,options:o})]})}function tS({id:e,value:t,htmlName:r}){return N.jsx("input",{type:"hidden",id:e,name:r||e,value:typeof t>"u"?"":t})}function rS(e){const{options:t,registry:r}=e,n=_e("BaseInputTemplate",r,t);return N.jsx(n,{type:"password",...e})}function nS({options:e,value:t,required:r,disabled:n,readonly:s,autofocus:i=!1,onBlur:a,onFocus:o,onChange:c,id:l,htmlName:u}){const{enumOptions:p,enumDisabled:b,inline:v,emptyValue:S}=e,E=Zc(e),g=X.useCallback(({target:f})=>a(l,Cn(f?.value,p,E,S)),[a,p,S,l,E]),y=X.useCallback(({target:f})=>o(l,Cn(f?.value,p,E,S)),[o,p,S,l,E]);return N.jsx("div",{className:"field-radio-group",id:l,role:"radiogroup",children:Array.isArray(p)&&p.map((f,w)=>{const P=Wa(f.value,t),h=Array.isArray(b)&&b.includes(f.value),_=n||h||s?"disabled":"",O=()=>c(f.value),k=N.jsxs("span",{children:[N.jsx("input",{type:"radio",id:_m(l,w),checked:P,name:u||l,required:r,value:Xc(f.value,w,E),disabled:n||h||s,autoFocus:i&&w===0,onChange:O,onBlur:g,onFocus:y,"aria-describedby":$n(l)}),N.jsx("span",{children:f.label})]});return v?N.jsx("label",{className:`radio-inline ${_}`,children:k},String(f.value)):N.jsx("div",{className:`radio ${_}`,children:N.jsx("label",{children:k})},String(f.value))})})}function iS(e){const{value:t,registry:{templates:{BaseInputTemplate:r}}}=e;return N.jsxs("div",{className:"field-range-wrapper",children:[N.jsx(r,{type:"range",...e}),N.jsx("span",{className:"range-view",children:t})]})}function sS({id:e,value:t,required:r,disabled:n,readonly:s,onChange:i,onFocus:a,onBlur:o,schema:c,options:l,htmlName:u}){const{stars:p=5,shape:b="star"}=l,v=c.maximum?Math.min(c.maximum,5):Math.min(Math.max(p,1),5),S=c.minimum||0,E=X.useCallback(w=>{!n&&!s&&i(w)},[i,n,s]),g=X.useCallback(w=>{if(a){const P=Number(w.target.dataset.value);a(e,P)}},[a,e]),y=X.useCallback(w=>{if(o){const P=Number(w.target.dataset.value);o(e,P)}},[o,e]),f=w=>b==="heart"?w?"♥":"♡":w?"★":"☆";return N.jsxs("div",{className:"rating-widget",style:{display:"inline-flex",fontSize:"1.5rem",cursor:n||s?"default":"pointer"},children:[[...Array(v)].map((w,P)=>{const h=S+P,_=h<=t;return N.jsx("span",{onClick:()=>E(h),onKeyDown:O=>(O.key==="Enter"||O.key===" ")&&E(h),onFocus:g,onBlur:y,"data-value":h,tabIndex:n||s?-1:0,role:"radio","aria-checked":h===t,"aria-label":`${h} ${b==="heart"?"heart":"star"}${h===1?"":"s"}`,style:{color:_?"#FFD700":"#ccc",padding:"0 0.2rem",transition:"color 0.2s",userSelect:"none"},children:f(_)},P)}),N.jsx("input",{type:"hidden",id:e,name:u||e,value:t||"",required:r,disabled:n||s,"aria-hidden":"true"})]})}function zo(e,t){return t?Array.from(e.target.options).slice().filter(r=>r.selected).map(r=>r.value):e.target.value}function aS({schema:e,id:t,options:r,value:n,required:s,disabled:i,readonly:a,multiple:o=!1,autofocus:c=!1,onChange:l,onBlur:u,onFocus:p,placeholder:b,htmlName:v,registry:S,uiSchema:E}){const{enumOptions:g,enumDisabled:y,emptyValue:f}=r,w=o?[]:"",P=Zc(r),h=X.useCallback(M=>{const q=zo(M,o);return p(t,Cn(q,g,P,f))},[p,t,o,g,f,P]),_=X.useCallback(M=>{const q=zo(M,o);return u(t,Cn(q,g,P,f))},[u,t,o,g,f,P]),O=X.useCallback(M=>{const q=zo(M,o);return l(Cn(q,g,P,f))},[l,o,g,f,P]),k=y0(n,g,o,P,w),$=!o&&e.default===void 0;return N0(t,e,g,o),N.jsxs(N.Fragment,{children:[N.jsx($0,{id:t,multiple:o,options:r,registry:S,uiSchema:E,value:n}),N.jsxs("select",{id:t,name:v||t,multiple:o,className:"form-control",value:k,required:s,disabled:i||a,autoFocus:c,onBlur:_,onFocus:h,onChange:O,"aria-describedby":$n(t),children:[$&&N.jsx("option",{value:"",children:b}),Array.isArray(g)&&g.map(({value:M,label:q},U)=>{const L=y&&y.includes(M);return N.jsx("option",{value:Xc(M,U,P),disabled:L,children:q},String(M))})]})]})}function oS({id:e,options:t,placeholder:r,value:n,required:s,disabled:i,readonly:a,autofocus:o=!1,onChange:c,onBlur:l,onFocus:u,htmlName:p}){const b=X.useCallback(({target:{value:E}})=>c(E===""?t.emptyValue:E),[c,t.emptyValue]),v=X.useCallback(({target:E})=>l(e,E?.value),[l,e]),S=X.useCallback(({target:E})=>u(e,E?.value),[e,u]);return N.jsx("textarea",{id:e,name:p||e,className:"form-control",value:n||"",placeholder:r,required:s,disabled:i,readOnly:a,autoFocus:o,rows:t.rows,onBlur:v,onFocus:S,onChange:b,"aria-describedby":$n(e)})}function cS(e){const{options:t,registry:r}=e,n=_e("BaseInputTemplate",r,t);return N.jsx(n,{...e})}function lS(e){const{onChange:t,options:r,registry:n,schema:s,value:i}=e,a=_e("BaseInputTemplate",n,r),o=typeof s.multipleOf=="number"&&Number.isFinite(s.multipleOf)&&s.multipleOf<60,c=X.useCallback(u=>{t(u?o?u:`${u}:00`:void 0)},[o,t]),l=typeof i=="string"&&!o&&/^\d{2}:\d{2}:00$/.test(i)?i.slice(0,-3):i;return N.jsx(a,{type:"time",...e,value:l,onChange:c})}function uS(e){const{options:t,registry:r}=e,n=_e("BaseInputTemplate",r,t);return N.jsx(n,{type:"number",...e})}function dS(e){const{options:t,registry:r}=e,n=_e("BaseInputTemplate",r,t);return N.jsx(n,{type:"url",...e})}function fS(){return{AltDateWidget:H_,AltDateTimeWidget:B_,CheckboxWidget:G_,CheckboxesWidget:K_,ColorWidget:W_,DateWidget:Y_,DateTimeWidget:J_,EmailWidget:X_,FileWidget:eS,HiddenWidget:tS,PasswordWidget:rS,RadioWidget:nS,RangeWidget:iS,RatingWidget:sS,SelectWidget:aS,TextWidget:cS,TextareaWidget:oS,TimeWidget:lS,UpDownWidget:uS,URLWidget:dS}}function hS(){return{fields:s_(),templates:z_(),widgets:fS(),rootSchema:{},formContext:{},translateString:m0,globalFormOptions:{idPrefix:qh,idSeparator:Uh,useFallbackUiForUnsupportedType:!1}}}function Ln(e,t){const{schema:r,uiSchema:n,fieldPathId:s,schemaUtils:i,formData:a,edit:o,errors:c,errorSchema:l}=e;return{schema:r,uiSchema:n,fieldPathId:s,schemaUtils:i,formData:a,edit:o,errors:c,errorSchema:l,...t!==void 0&&{status:t}}}class Vr extends X.Component{formElement;pendingChanges=[];isProcessingUserChange=!1;static getDerivedStateFromProps(t,r){if(t.extraErrors!==r.prevExtraErrors){const n={errors:r.schemaValidationErrors||[],errorSchema:r.schemaValidationErrorSchema||{}};let{errors:s,errorSchema:i}=n;return t.extraErrors&&({errors:s,errorSchema:i}=Pi(n,t.extraErrors)),r.customErrors&&({errors:s,errorSchema:i}=Pi({errors:s,errorSchema:i},r.customErrors.ErrorSchema,!0)),{prevExtraErrors:t.extraErrors,errors:s,errorSchema:i}}return null}constructor(t){if(super(t),!t.validator)throw new Error("A validator is required for Form functionality to work");const{formData:r,initialFormData:n,onChange:s}=t,i=r??n;this.state={...this.getStateFromProps(t,i,void 0,void 0,void 0,!0),prevExtraErrors:t.extraErrors},s&&!je(this.state.formData,i)&&s(Ln(this.state)),this.formElement=X.createRef()}getSnapshotBeforeUpdate(t,r){if(!je(this.props,t)){const n=Ea(this.props.formData,t.formData),s=Ea(this.props.formData,this.state.formData),i=!je(t.schema,this.props.schema),a=n.length>0||!je(t.formData,this.props.formData),o=s.length>0||!je(this.state.formData,this.props.formData),c=this.getStateFromProps(this.props,this.props.formData,i||a?void 0:this.state.retrievedSchema,i,()=>Ea(this.props.formData,t.formData,!0),!o),l=!je(c,r);return{nextState:c,shouldUpdate:l}}return{shouldUpdate:!1}}componentDidUpdate(t,r,n){if(n.shouldUpdate){const{nextState:s}=n,i=!je(s.formData,this.props.formData),a=this.isProcessingUserChange;if(this.isProcessingUserChange=!1,a&&i)return;i&&!je(s.formData,r.formData)&&this.props.onChange&&this.props.onChange(Ln(s)),this.setState(s)}}getStateFromProps(t,r,n,s=!1,i=()=>[],a=!1,o=!1){const c=this.state||{},l="schema"in t?t.schema:this.props.schema,u="validator"in t?t.validator:this.props.validator,p=("uiSchema"in t?t.uiSchema:this.props.uiSchema)||{},b=t.formData===void 0&&this.props.formData===void 0,v=typeof r<"u",S="liveValidate"in t?t.liveValidate:this.props.liveValidate,E=v&&!t.noValidate&&S,g="experimental_defaultFormStateBehavior"in t?t.experimental_defaultFormStateBehavior:this.props.experimental_defaultFormStateBehavior,y="experimental_customMergeAllOf"in t?t.experimental_customMergeAllOf:this.props.experimental_customMergeAllOf;let{schemaUtils:f}=c;(!f||f.doesSchemaUtilsDiffer(u,l,g,y))&&(f=d0(u,l,g,y));const w=f.getRootSchema();let P=r;r===ed?P=void 0:r===void 0&&b&&(P=c.formData);let h,_,O=!1;const k=[];do{h=f.getDefaultFormState(w,P,!1,c.initialDefaultsGenerated);const Z=o?zt({formData:h}):"";if(_=this.updateRetrievedSchema(n??f.retrieveSchema(w,h)),o&&!k.includes(Z)&&!je(_,c.retrievedSchema)){const re=f.sanitizeDataForNewSchema(_,c.retrievedSchema,h);if(O=!je(re,h),O){h=re,P=re;const A=zt({formData:re});O=!k.includes(A),k.push(A)}k.push(Z)}else O=!1}while(O);const $=()=>t.noValidate||s?{errors:[],errorSchema:{}}:t.liveValidate?{errors:c.errors||[],errorSchema:c.errorSchema||{}}:{errors:c.schemaValidationErrors||[],errorSchema:c.schemaValidationErrorSchema||{}};let M,q,{schemaValidationErrors:U,schemaValidationErrorSchema:L}=c;if(E&&!a){const Z=this.liveValidate(w,f,c.errorSchema,h,void 0,c.customErrors,n,n!==void 0);M=Z.errors,q=Z.errorSchema,U=Z.schemaValidationErrors,L=Z.schemaValidationErrorSchema}else{const Z=$();if(M=Z.errors,q=Z.errorSchema,!E){const A=i();if(A.length>0){const C=A.reduce((j,m)=>{const d=rr(m);for(let x=1;xi0(t,r);getFieldNames=(t,r)=>s0(t,r);omitExtraData=t=>{const{schema:r,schemaUtils:n}=this.state;return n.omitExtraData(r,t)};setFieldValue=(t,r)=>{const{registry:n}=this.state,s=Array.isArray(t)?t:t.split("."),i=nr("",n.globalFormOptions,s);this.onChange(r,s,void 0,i[Ue])};onChange=(t,r,n,s)=>{this.pendingChanges.push({newValue:t,path:r,newErrorSchema:n,id:s}),this.pendingChanges.length===1&&this.processPendingChange()};processPendingChange(){if(this.pendingChanges.length===0)return;this.isProcessingUserChange=!0;const{newValue:t,path:r,id:n}=this.pendingChanges[0],{newErrorSchema:s}=this.pendingChanges[0],{extraErrors:i,omitExtraData:a,liveOmit:o,noValidate:c,liveValidate:l,onChange:u,disabled:p,readonly:b}=this.props,{formData:v,schemaUtils:S,schema:E,fieldPathId:g,schemaValidationErrorSchema:y,errors:f}=this.state;let{customErrors:w,retrievedSchema:P}=this.state,h=y;const _=g.path[0]||"",O=!r||r.length===0||r.length===1&&r[0]===_;let k=O?t:structuredClone(v);const $=ue(k)&&Object.keys(k).length>0&&Object.values(k).every(G=>G===void 0),M=v==null,q=$&&M?void 0:k;if(ue(k)||Array.isArray(k)){let G=!1;if(t===Lm)hg(k,r);else if(!O){let Z=t;if(t===void 0)if(typeof r[r.length-1]=="number")Z=null;else{const{field:A}=S.findFieldInSchema(E,r,v),C=A;!(C&&(Se in C||Ie in C))&&C!==void 0&&(G=!0)}G?at(k,r,void 0):at(k,r,Z)}const J=P&&!O&&!ue(t)&&!Array.isArray(t)&&!p&&!b,Q=this.getStateFromProps(this.props,q,void 0,void 0,void 0,!0,J);k=Q.formData,P=Q.retrievedSchema,G&&k&&at(k,r,void 0)}const U=!c&&(l===!0||l==="onChange");let L={formData:k,retrievedSchema:P},z=k;if(a===!0&&(o===!0||o==="onChange")&&(z=this.omitExtraData(k),L={...L,formData:z}),s){const G=O?y:me(y,r);if(G&&Object.keys(G).length>0)O?h=s:(h=structuredClone(y),at(h,r,s,!0));else if(w||(w=new pm),O){const J=s[vt];J&&w.setErrors(J)}else at(w.ErrorSchema,r,s,!0)}else w&&me(w.ErrorSchema,[...r,vt])&&w.clearErrors(r);if(U&&this.pendingChanges.length===1){const G=this.liveValidate(E,S,h,z,i,w,P);L={...L,formData:z,...G,customErrors:w}}else if(!c&&s){const G=Vr.mergeErrors({errorSchema:h,errors:f},i,w);L={...L,formData:z,...G,customErrors:w}}this.setState(L,()=>{u&&u(Ln({...this.state,...L}),n),this.pendingChanges.shift(),this.processPendingChange()})}updateRetrievedSchema(t){return je(t,this.state?.retrievedSchema)?this.state.retrievedSchema:t}reset=()=>{const{formData:t,initialFormData:r=ed,onChange:n}=this.props,a={formData:this.getStateFromProps(this.props,t??r,void 0,void 0,void 0,!0).formData,errorSchema:{},errors:[],schemaValidationErrors:[],schemaValidationErrorSchema:{},initialDefaultsGenerated:!1,customErrors:void 0};this.setState(a,()=>n?.(Ln({...this.state,...a})))};onBlur=(t,r)=>{const{onBlur:n,omitExtraData:s,liveOmit:i,liveValidate:a}=this.props;if(n&&n(t,r),s===!0&&i==="onBlur"||a==="onBlur"){const{onChange:o,extraErrors:c}=this.props,{formData:l}=this.state;let u=l,p={formData:u};if(s===!0&&i==="onBlur"&&(u=this.omitExtraData(l),p={formData:u}),a==="onBlur"){const{schema:v,schemaUtils:S,errorSchema:E,customErrors:g,retrievedSchema:y}=this.state,f=this.liveValidate(v,S,E,u,c,g,y);p={formData:u,...f,customErrors:g}}const b=Object.keys(p).filter(v=>!v.startsWith("schemaValidation")).some(v=>{const S=this.state[v],E=p[v];return!je(S,E)});this.setState(p,()=>{o&&b&&o(Ln({...this.state,...p}),t)})}};onFocus=(t,r)=>{const{onFocus:n}=this.props;n&&n(t,r)};onSubmit=t=>{if(t.preventDefault(),t.target!==t.currentTarget)return;t.persist();const{omitExtraData:r,extraErrors:n,noValidate:s,onSubmit:i}=this.props;let{formData:a}=this.state;if(r===!0&&(a=this.omitExtraData(a)),s||this.validateFormWithFormData(a)){const o=n||{},c=n?Sm(n):[];this.setState({formData:a,errors:c,errorSchema:o,schemaValidationErrors:[],schemaValidationErrorSchema:{}},()=>{i&&i(Ln({...this.state,formData:a},"submitted"),t)})}};static getGlobalFormOptions(t){const{uiSchema:r={},experimental_componentUpdateStrategy:n,idSeparator:s=Uh,idPrefix:i=qh,nameGenerator:a,useFallbackUiForUnsupportedType:o=!1}=t;return{idPrefix:r["ui:rootFieldId"]||i,idSeparator:s,useFallbackUiForUnsupportedType:o,...n!==void 0&&{experimental_componentUpdateStrategy:n},...a!==void 0&&{nameGenerator:a}}}static getRegistry(t,r,n){const{translateString:s,uiSchema:i={}}=t,{fields:a,templates:o,widgets:c,formContext:l,translateString:u}=hS();return{fields:{...a,...t.fields},templates:{...o,...t.templates,ButtonTemplates:{...o.ButtonTemplates,...t.templates?.ButtonTemplates}},widgets:{...c,...t.widgets},rootSchema:r,formContext:t.formContext||l,schemaUtils:n,translateString:s||u,globalUiOptions:i[pc],globalFormOptions:Vr.getGlobalFormOptions(t),uiSchemaDefinitions:i[$y]??{}}}submit=()=>{if(this.formElement.current){const t=new CustomEvent("submit",{cancelable:!0});t.preventDefault(),this.formElement.current.dispatchEvent(t),this.formElement.current.requestSubmit()}};focusOnError(t){const{idPrefix:r="root",idSeparator:n="_"}=this.props,{property:s}=t,i=rr(s??"");i.unshift(r);const a=i.join(n);let o=this.formElement.current.elements[a];o||(o=this.formElement.current.querySelector(`input[id^="${a}"], button[id^="${a}"]`)),o?.length&&(o=o[0]),o&&o.focus()}validateFormWithFormData=t=>{const{extraErrors:r,extraErrorsBlockSubmit:n,focusOnFirstError:s,onError:i}=this.props,{errors:a}=this.state,o=this.validate(t),{errors:c,errorSchema:l}=r?Vr.mergeErrors(o,r):o,u=o.errors.length>0||r&&n;return u?(s&&(typeof s=="function"?s(c[0]):this.focusOnError(c[0])),this.setState({errors:c,errorSchema:l,schemaValidationErrors:o.errors,schemaValidationErrorSchema:o.errorSchema},()=>{i?i(c):console.error("Form validation failed",c)})):c.length>0?this.setState({errors:c,errorSchema:l,schemaValidationErrors:[],schemaValidationErrorSchema:{}}):a.length>0&&this.setState({errors:[],errorSchema:{},schemaValidationErrors:[],schemaValidationErrorSchema:{}}),!u};validateForm(){const{omitExtraData:t}=this.props;let{formData:r}=this.state;return t===!0&&(r=this.omitExtraData(r)),this.validateFormWithFormData(r)}render(){const{children:t,id:r,className:n="",tagName:s,name:i,method:a,target:o,action:c,autoComplete:l,enctype:u,acceptCharset:p,noHtml5Validate:b=!1,disabled:v,readonly:S,showErrorList:E="top",_internalFormWrapper:g}=this.props,{schema:y,uiSchema:f,formData:w,errorSchema:P,fieldPathId:h,registry:_}=this.state,{SchemaField:O}=_.fields,{SubmitButton:k}=_.templates.ButtonTemplates,$=g?s:void 0,M=g||s||"form";let{[ka]:q={}}=pe(f);v&&(q={...q,props:{...q.props,disabled:!0}});const U={[Br]:{[ka]:q}};return N.jsxs(M,{className:n||"rjsf",id:r,name:i,method:a,target:o,action:c,autoComplete:l,encType:u,acceptCharset:p,noValidate:b,onSubmit:this.onSubmit,as:$,ref:this.formElement,children:[E==="top"&&this.renderErrors(_),N.jsx(O,{name:"",schema:y,uiSchema:f,errorSchema:P,fieldPathId:h,formData:w,onChange:this.onChange,onBlur:this.onBlur,onFocus:this.onFocus,registry:_,disabled:v,readonly:S}),t||N.jsx(k,{uiSchema:U,registry:_}),E==="bottom"&&this.renderErrors(_)]})}}function mS(e,t="none"){return t==="all"?e:e.reduce((r,n)=>{const{message:s,schemaPath:i}=n,a=t!=="anyOf"?i?.indexOf(`/${Ie}/`):void 0,o=t!=="oneOf"?i?.indexOf(`/${Se}/`):void 0;let c;return a&&a>=0?c=i?.substring(0,a):o&&o>=0&&(c=i?.substring(0,o)),(c?r.find(u=>u.message===s&&u.schemaPath?.startsWith(c)):void 0)||r.push(n),r},[])}function pS(e=[],t,r,n){const s=e.map(i=>{const{instancePath:a,keyword:o,params:c,schemaPath:l,parentSchema:u,...p}=i;let{message:b=""}=p,v=a.replace(/\//g,"."),S=`${v} ${b}`.trim(),E="";const g=[...c.deps?.split(", ")||[],c.missingProperty,c.property].filter(y=>y);if(g.length>0)g.forEach(y=>{const f=v?`${v}.${y}`:y;let w=pe(me(t,rr(f))).title;if(w===void 0){const P=l.replace(/\/properties\//g,"/").split("/").slice(1,-1).concat([y]);w=pe(me(t,P)).title}if(w===void 0){const P=v.replace(/^\./,"").split(".").filter(Boolean);w=me(t,[...P,y,"title"])}if(w)b=b.replace(`'${y}'`,`'${w}'`),E=w;else{const P=me(u,[nt,y,"title"]);if(P)b=b.replace(`'${y}'`,`'${P}'`),E=P;else if(n){const h=v.replace(/^\./,"").split(".").filter(Boolean),_=[];for(const k of h)_.push(nt,k);_.push(nt,y,"title");const O=me(n,_);O&&(b=b.replace(`'${y}'`,`'${O}'`),E=O)}}}),S=b;else{const y=pe(me(t,rr(v))).title;if(y)S=`'${y}' ${b}`.trim(),E=y;else{const f=u?.title;f&&(S=`'${f}' ${b}`.trim(),E=f)}}return"missingProperty"in c&&(v=v?`${v}.${c.missingProperty}`:c.missingProperty),{name:o,property:v,message:b,params:c,stack:S,schemaPath:l,title:E}});return mS(s,r)}function yS(e,t,r,n,s,i,a,o){const{validationError:c}=t;let l=pS(t.errors,a,o,n);c&&(l=[...l,{stack:c.message}]),typeof i=="function"&&(l=i(l,a));let u=D0(l);if(c&&(u={...u,$schema:{__errors:[c.message]}}),typeof s!="function")return{errors:l,errorSchema:u};const p=cm(e,n,r,n,!0),b=s(p,yc(p),a,u),v=T0(b);return Pi({errors:l,errorSchema:u},v)}var Yi={exports:{}},Bo={},Sr={},hn={},Ho={},Ko={},Go={},rd;function La(){return rd||(rd=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class t{}e._CodeOrName=t,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class r extends t{constructor(f){if(super(),!e.IDENTIFIER.test(f))throw new Error("CodeGen: name must be a valid identifier");this.str=f}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=r;class n extends t{constructor(f){super(),this._items=typeof f=="string"?[f]:f}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const f=this._items[0];return f===""||f==='""'}get str(){var f;return(f=this._str)!==null&&f!==void 0?f:this._str=this._items.reduce((w,P)=>`${w}${P}`,"")}get names(){var f;return(f=this._names)!==null&&f!==void 0?f:this._names=this._items.reduce((w,P)=>(P instanceof r&&(w[P.str]=(w[P.str]||0)+1),w),{})}}e._Code=n,e.nil=new n("");function s(y,...f){const w=[y[0]];let P=0;for(;P{if(p.scopePath===void 0)throw new Error(`CodeGen: name "${p}" has no value`);return(0,t._)`${l}${p.scopePath}`})}scopeCode(l=this._values,u,p){return this._reduceValues(l,b=>{if(b.value===void 0)throw new Error(`CodeGen: name "${b}" has no value`);return b.value.code},u,p)}_reduceValues(l,u,p={},b){let v=t.nil;for(const S in l){const E=l[S];if(!E)continue;const g=p[S]=p[S]||new Map;E.forEach(y=>{if(g.has(y))return;g.set(y,n.Started);let f=u(y);if(f){const w=this.opts.es5?e.varKinds.var:e.varKinds.const;v=(0,t._)`${v}${w} ${y} = ${f};${this.opts._n}`}else if(f=b?.(y))v=(0,t._)`${v}${f}${this.opts._n}`;else throw new r(y);g.set(y,n.Completed)})}return v}}e.ValueScope=o})(Wo)),Wo}var sd;function Re(){return sd||(sd=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const t=La(),r=id();var n=La();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return n._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return n.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return n.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return n.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return n.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return n.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return n.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return n.Name}});var s=id();Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return s.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return s.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return s.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return s.varKinds}}),e.operators={GT:new t._Code(">"),GTE:new t._Code(">="),LT:new t._Code("<"),LTE:new t._Code("<="),EQ:new t._Code("==="),NEQ:new t._Code("!=="),NOT:new t._Code("!"),OR:new t._Code("||"),AND:new t._Code("&&"),ADD:new t._Code("+")};class i{optimizeNodes(){return this}optimizeNames(d,x){return this}}class a extends i{constructor(d,x,I){super(),this.varKind=d,this.name=x,this.rhs=I}render({es5:d,_n:x}){const I=d?r.varKinds.var:this.varKind,T=this.rhs===void 0?"":` = ${this.rhs}`;return`${I} ${this.name}${T};`+x}optimizeNames(d,x){if(d[this.name.str])return this.rhs&&(this.rhs=z(this.rhs,d,x)),this}get names(){return this.rhs instanceof t._CodeOrName?this.rhs.names:{}}}class o extends i{constructor(d,x,I){super(),this.lhs=d,this.rhs=x,this.sideEffects=I}render({_n:d}){return`${this.lhs} = ${this.rhs};`+d}optimizeNames(d,x){if(!(this.lhs instanceof t.Name&&!d[this.lhs.str]&&!this.sideEffects))return this.rhs=z(this.rhs,d,x),this}get names(){const d=this.lhs instanceof t.Name?{}:{...this.lhs.names};return L(d,this.rhs)}}class c extends o{constructor(d,x,I,T){super(d,I,T),this.op=x}render({_n:d}){return`${this.lhs} ${this.op}= ${this.rhs};`+d}}class l extends i{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`${this.label}:`+d}}class u extends i{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`break${this.label?` ${this.label}`:""};`+d}}class p extends i{constructor(d){super(),this.error=d}render({_n:d}){return`throw ${this.error};`+d}get names(){return this.error.names}}class b extends i{constructor(d){super(),this.code=d}render({_n:d}){return`${this.code};`+d}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(d,x){return this.code=z(this.code,d,x),this}get names(){return this.code instanceof t._CodeOrName?this.code.names:{}}}class v extends i{constructor(d=[]){super(),this.nodes=d}render(d){return this.nodes.reduce((x,I)=>x+I.render(d),"")}optimizeNodes(){const{nodes:d}=this;let x=d.length;for(;x--;){const I=d[x].optimizeNodes();Array.isArray(I)?d.splice(x,1,...I):I?d[x]=I:d.splice(x,1)}return d.length>0?this:void 0}optimizeNames(d,x){const{nodes:I}=this;let T=I.length;for(;T--;){const F=I[T];F.optimizeNames(d,x)||(G(d,F.names),I.splice(T,1))}return I.length>0?this:void 0}get names(){return this.nodes.reduce((d,x)=>U(d,x.names),{})}}class S extends v{render(d){return"{"+d._n+super.render(d)+"}"+d._n}}class E extends v{}class g extends S{}g.kind="else";class y extends S{constructor(d,x){super(x),this.condition=d}render(d){let x=`if(${this.condition})`+super.render(d);return this.else&&(x+="else "+this.else.render(d)),x}optimizeNodes(){super.optimizeNodes();const d=this.condition;if(d===!0)return this.nodes;let x=this.else;if(x){const I=x.optimizeNodes();x=this.else=Array.isArray(I)?new g(I):I}if(x)return d===!1?x instanceof y?x:x.nodes:this.nodes.length?this:new y(J(d),x instanceof y?[x]:x.nodes);if(!(d===!1||!this.nodes.length))return this}optimizeNames(d,x){var I;if(this.else=(I=this.else)===null||I===void 0?void 0:I.optimizeNames(d,x),!!(super.optimizeNames(d,x)||this.else))return this.condition=z(this.condition,d,x),this}get names(){const d=super.names;return L(d,this.condition),this.else&&U(d,this.else.names),d}}y.kind="if";class f extends S{}f.kind="for";class w extends f{constructor(d){super(),this.iteration=d}render(d){return`for(${this.iteration})`+super.render(d)}optimizeNames(d,x){if(super.optimizeNames(d,x))return this.iteration=z(this.iteration,d,x),this}get names(){return U(super.names,this.iteration.names)}}class P extends f{constructor(d,x,I,T){super(),this.varKind=d,this.name=x,this.from=I,this.to=T}render(d){const x=d.es5?r.varKinds.var:this.varKind,{name:I,from:T,to:F}=this;return`for(${x} ${I}=${T}; ${I}<${F}; ${I}++)`+super.render(d)}get names(){const d=L(super.names,this.from);return L(d,this.to)}}class h extends f{constructor(d,x,I,T){super(),this.loop=d,this.varKind=x,this.name=I,this.iterable=T}render(d){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(d)}optimizeNames(d,x){if(super.optimizeNames(d,x))return this.iterable=z(this.iterable,d,x),this}get names(){return U(super.names,this.iterable.names)}}class _ extends S{constructor(d,x,I){super(),this.name=d,this.args=x,this.async=I}render(d){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(d)}}_.kind="func";class O extends v{render(d){return"return "+super.render(d)}}O.kind="return";class k extends S{render(d){let x="try"+super.render(d);return this.catch&&(x+=this.catch.render(d)),this.finally&&(x+=this.finally.render(d)),x}optimizeNodes(){var d,x;return super.optimizeNodes(),(d=this.catch)===null||d===void 0||d.optimizeNodes(),(x=this.finally)===null||x===void 0||x.optimizeNodes(),this}optimizeNames(d,x){var I,T;return super.optimizeNames(d,x),(I=this.catch)===null||I===void 0||I.optimizeNames(d,x),(T=this.finally)===null||T===void 0||T.optimizeNames(d,x),this}get names(){const d=super.names;return this.catch&&U(d,this.catch.names),this.finally&&U(d,this.finally.names),d}}class $ extends S{constructor(d){super(),this.error=d}render(d){return`catch(${this.error})`+super.render(d)}}$.kind="catch";class M extends S{render(d){return"finally"+super.render(d)}}M.kind="finally";class q{constructor(d,x={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...x,_n:x.lines?` +`:""},this._extScope=d,this._scope=new r.Scope({parent:d}),this._nodes=[new E]}toString(){return this._root.render(this.opts)}name(d){return this._scope.name(d)}scopeName(d){return this._extScope.name(d)}scopeValue(d,x){const I=this._extScope.value(d,x);return(this._values[I.prefix]||(this._values[I.prefix]=new Set)).add(I),I}getScopeValue(d,x){return this._extScope.getValue(d,x)}scopeRefs(d){return this._extScope.scopeRefs(d,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(d,x,I,T){const F=this._scope.toName(x);return I!==void 0&&T&&(this._constants[F.str]=I),this._leafNode(new a(d,F,I)),F}const(d,x,I){return this._def(r.varKinds.const,d,x,I)}let(d,x,I){return this._def(r.varKinds.let,d,x,I)}var(d,x,I){return this._def(r.varKinds.var,d,x,I)}assign(d,x,I){return this._leafNode(new o(d,x,I))}add(d,x){return this._leafNode(new c(d,e.operators.ADD,x))}code(d){return typeof d=="function"?d():d!==t.nil&&this._leafNode(new b(d)),this}object(...d){const x=["{"];for(const[I,T]of d)x.length>1&&x.push(","),x.push(I),(I!==T||this.opts.es5)&&(x.push(":"),(0,t.addCodeArg)(x,T));return x.push("}"),new t._Code(x)}if(d,x,I){if(this._blockNode(new y(d)),x&&I)this.code(x).else().code(I).endIf();else if(x)this.code(x).endIf();else if(I)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(d){return this._elseNode(new y(d))}else(){return this._elseNode(new g)}endIf(){return this._endBlockNode(y,g)}_for(d,x){return this._blockNode(d),x&&this.code(x).endFor(),this}for(d,x){return this._for(new w(d),x)}forRange(d,x,I,T,F=this.opts.es5?r.varKinds.var:r.varKinds.let){const B=this._scope.toName(d);return this._for(new P(F,B,x,I),()=>T(B))}forOf(d,x,I,T=r.varKinds.const){const F=this._scope.toName(d);if(this.opts.es5){const B=x instanceof t.Name?x:this.var("_arr",x);return this.forRange("_i",0,(0,t._)`${B}.length`,H=>{this.var(F,(0,t._)`${B}[${H}]`),I(F)})}return this._for(new h("of",T,F,x),()=>I(F))}forIn(d,x,I,T=this.opts.es5?r.varKinds.var:r.varKinds.const){if(this.opts.ownProperties)return this.forOf(d,(0,t._)`Object.keys(${x})`,I);const F=this._scope.toName(d);return this._for(new h("in",T,F,x),()=>I(F))}endFor(){return this._endBlockNode(f)}label(d){return this._leafNode(new l(d))}break(d){return this._leafNode(new u(d))}return(d){const x=new O;if(this._blockNode(x),this.code(d),x.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(O)}try(d,x,I){if(!x&&!I)throw new Error('CodeGen: "try" without "catch" and "finally"');const T=new k;if(this._blockNode(T),this.code(d),x){const F=this.name("e");this._currNode=T.catch=new $(F),x(F)}return I&&(this._currNode=T.finally=new M,this.code(I)),this._endBlockNode($,M)}throw(d){return this._leafNode(new p(d))}block(d,x){return this._blockStarts.push(this._nodes.length),d&&this.code(d).endBlock(x),this}endBlock(d){const x=this._blockStarts.pop();if(x===void 0)throw new Error("CodeGen: not in self-balancing block");const I=this._nodes.length-x;if(I<0||d!==void 0&&I!==d)throw new Error(`CodeGen: wrong number of nodes: ${I} vs ${d} expected`);return this._nodes.length=x,this}func(d,x=t.nil,I,T){return this._blockNode(new _(d,x,I)),T&&this.code(T).endFunc(),this}endFunc(){return this._endBlockNode(_)}optimize(d=1){for(;d-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(d){return this._currNode.nodes.push(d),this}_blockNode(d){this._currNode.nodes.push(d),this._nodes.push(d)}_endBlockNode(d,x){const I=this._currNode;if(I instanceof d||x&&I instanceof x)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${x?`${d.kind}/${x.kind}`:d.kind}"`)}_elseNode(d){const x=this._currNode;if(!(x instanceof y))throw new Error('CodeGen: "else" without "if"');return this._currNode=x.else=d,this}get _root(){return this._nodes[0]}get _currNode(){const d=this._nodes;return d[d.length-1]}set _currNode(d){const x=this._nodes;x[x.length-1]=d}}e.CodeGen=q;function U(m,d){for(const x in d)m[x]=(m[x]||0)+(d[x]||0);return m}function L(m,d){return d instanceof t._CodeOrName?U(m,d.names):m}function z(m,d,x){if(m instanceof t.Name)return I(m);if(!T(m))return m;return new t._Code(m._items.reduce((F,B)=>(B instanceof t.Name&&(B=I(B)),B instanceof t._Code?F.push(...B._items):F.push(B),F),[]));function I(F){const B=x[F.str];return B===void 0||d[F.str]!==1?F:(delete d[F.str],B)}function T(F){return F instanceof t._Code&&F._items.some(B=>B instanceof t.Name&&d[B.str]===1&&x[B.str]!==void 0)}}function G(m,d){for(const x in d)m[x]=(m[x]||0)-(d[x]||0)}function J(m){return typeof m=="boolean"||typeof m=="number"||m===null?!m:(0,t._)`!${j(m)}`}e.not=J;const Q=C(e.operators.AND);function Z(...m){return m.reduce(Q)}e.and=Z;const re=C(e.operators.OR);function A(...m){return m.reduce(re)}e.or=A;function C(m){return(d,x)=>d===t.nil?x:x===t.nil?d:(0,t._)`${j(d)} ${m} ${j(x)}`}function j(m){return m instanceof t.Name?m:(0,t._)`(${m})`}})(Ko)),Ko}var Ce={},ad;function Te(){if(ad)return Ce;ad=1,Object.defineProperty(Ce,"__esModule",{value:!0}),Ce.checkStrictMode=Ce.getErrorPath=Ce.Type=Ce.useFunc=Ce.setEvaluated=Ce.evaluatedPropsToName=Ce.mergeEvaluated=Ce.eachItem=Ce.unescapeJsonPointer=Ce.escapeJsonPointer=Ce.escapeFragment=Ce.unescapeFragment=Ce.schemaRefOrVal=Ce.schemaHasRulesButRef=Ce.schemaHasRules=Ce.checkUnknownRules=Ce.alwaysValidSchema=Ce.toHash=void 0;const e=Re(),t=La();function r(h){const _={};for(const O of h)_[O]=!0;return _}Ce.toHash=r;function n(h,_){return typeof _=="boolean"?_:Object.keys(_).length===0?!0:(s(h,_),!i(_,h.self.RULES.all))}Ce.alwaysValidSchema=n;function s(h,_=h.schema){const{opts:O,self:k}=h;if(!O.strictSchema||typeof _=="boolean")return;const $=k.RULES.keywords;for(const M in _)$[M]||P(h,`unknown keyword: "${M}"`)}Ce.checkUnknownRules=s;function i(h,_){if(typeof h=="boolean")return!h;for(const O in h)if(_[O])return!0;return!1}Ce.schemaHasRules=i;function a(h,_){if(typeof h=="boolean")return!h;for(const O in h)if(O!=="$ref"&&_.all[O])return!0;return!1}Ce.schemaHasRulesButRef=a;function o({topSchemaRef:h,schemaPath:_},O,k,$){if(!$){if(typeof O=="number"||typeof O=="boolean")return O;if(typeof O=="string")return(0,e._)`${O}`}return(0,e._)`${h}${_}${(0,e.getProperty)(k)}`}Ce.schemaRefOrVal=o;function c(h){return p(decodeURIComponent(h))}Ce.unescapeFragment=c;function l(h){return encodeURIComponent(u(h))}Ce.escapeFragment=l;function u(h){return typeof h=="number"?`${h}`:h.replace(/~/g,"~0").replace(/\//g,"~1")}Ce.escapeJsonPointer=u;function p(h){return h.replace(/~1/g,"/").replace(/~0/g,"~")}Ce.unescapeJsonPointer=p;function b(h,_){if(Array.isArray(h))for(const O of h)_(O);else _(h)}Ce.eachItem=b;function v({mergeNames:h,mergeToName:_,mergeValues:O,resultToName:k}){return($,M,q,U)=>{const L=q===void 0?M:q instanceof e.Name?(M instanceof e.Name?h($,M,q):_($,M,q),q):M instanceof e.Name?(_($,q,M),M):O(M,q);return U===e.Name&&!(L instanceof e.Name)?k($,L):L}}Ce.mergeEvaluated={props:v({mergeNames:(h,_,O)=>h.if((0,e._)`${O} !== true && ${_} !== undefined`,()=>{h.if((0,e._)`${_} === true`,()=>h.assign(O,!0),()=>h.assign(O,(0,e._)`${O} || {}`).code((0,e._)`Object.assign(${O}, ${_})`))}),mergeToName:(h,_,O)=>h.if((0,e._)`${O} !== true`,()=>{_===!0?h.assign(O,!0):(h.assign(O,(0,e._)`${O} || {}`),E(h,O,_))}),mergeValues:(h,_)=>h===!0?!0:{...h,..._},resultToName:S}),items:v({mergeNames:(h,_,O)=>h.if((0,e._)`${O} !== true && ${_} !== undefined`,()=>h.assign(O,(0,e._)`${_} === true ? true : ${O} > ${_} ? ${O} : ${_}`)),mergeToName:(h,_,O)=>h.if((0,e._)`${O} !== true`,()=>h.assign(O,_===!0?!0:(0,e._)`${O} > ${_} ? ${O} : ${_}`)),mergeValues:(h,_)=>h===!0?!0:Math.max(h,_),resultToName:(h,_)=>h.var("items",_)})};function S(h,_){if(_===!0)return h.var("props",!0);const O=h.var("props",(0,e._)`{}`);return _!==void 0&&E(h,O,_),O}Ce.evaluatedPropsToName=S;function E(h,_,O){Object.keys(O).forEach(k=>h.assign((0,e._)`${_}${(0,e.getProperty)(k)}`,!0))}Ce.setEvaluated=E;const g={};function y(h,_){return h.scopeValue("func",{ref:_,code:g[_.code]||(g[_.code]=new t._Code(_.code))})}Ce.useFunc=y;var f;(function(h){h[h.Num=0]="Num",h[h.Str=1]="Str"})(f||(Ce.Type=f={}));function w(h,_,O){if(h instanceof e.Name){const k=_===f.Num;return O?k?(0,e._)`"[" + ${h} + "]"`:(0,e._)`"['" + ${h} + "']"`:k?(0,e._)`"/" + ${h}`:(0,e._)`"/" + ${h}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return O?(0,e.getProperty)(h).toString():"/"+u(h)}Ce.getErrorPath=w;function P(h,_,O=h.opts.strictSchema){if(O){if(_=`strict mode: ${_}`,O===!0)throw new Error(_);h.self.logger.warn(_)}}return Ce.checkStrictMode=P,Ce}var Xi={},od;function rn(){if(od)return Xi;od=1,Object.defineProperty(Xi,"__esModule",{value:!0});const e=Re(),t={data:new e.Name("data"),valCxt:new e.Name("valCxt"),instancePath:new e.Name("instancePath"),parentData:new e.Name("parentData"),parentDataProperty:new e.Name("parentDataProperty"),rootData:new e.Name("rootData"),dynamicAnchors:new e.Name("dynamicAnchors"),vErrors:new e.Name("vErrors"),errors:new e.Name("errors"),this:new e.Name("this"),self:new e.Name("self"),scope:new e.Name("scope"),json:new e.Name("json"),jsonPos:new e.Name("jsonPos"),jsonLen:new e.Name("jsonLen"),jsonPart:new e.Name("jsonPart")};return Xi.default=t,Xi}var cd;function Qa(){return cd||(cd=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const t=Re(),r=Te(),n=rn();e.keywordError={message:({keyword:g})=>(0,t.str)`must pass "${g}" keyword validation`},e.keyword$DataError={message:({keyword:g,schemaType:y})=>y?(0,t.str)`"${g}" keyword must be ${y} ($data)`:(0,t.str)`"${g}" keyword is invalid ($data)`};function s(g,y=e.keywordError,f,w){const{it:P}=g,{gen:h,compositeRule:_,allErrors:O}=P,k=p(g,y,f);w??(_||O)?c(h,k):l(P,(0,t._)`[${k}]`)}e.reportError=s;function i(g,y=e.keywordError,f){const{it:w}=g,{gen:P,compositeRule:h,allErrors:_}=w,O=p(g,y,f);c(P,O),h||_||l(w,n.default.vErrors)}e.reportExtraError=i;function a(g,y){g.assign(n.default.errors,y),g.if((0,t._)`${n.default.vErrors} !== null`,()=>g.if(y,()=>g.assign((0,t._)`${n.default.vErrors}.length`,y),()=>g.assign(n.default.vErrors,null)))}e.resetErrorsCount=a;function o({gen:g,keyword:y,schemaValue:f,data:w,errsCount:P,it:h}){if(P===void 0)throw new Error("ajv implementation error");const _=g.name("err");g.forRange("i",P,n.default.errors,O=>{g.const(_,(0,t._)`${n.default.vErrors}[${O}]`),g.if((0,t._)`${_}.instancePath === undefined`,()=>g.assign((0,t._)`${_}.instancePath`,(0,t.strConcat)(n.default.instancePath,h.errorPath))),g.assign((0,t._)`${_}.schemaPath`,(0,t.str)`${h.errSchemaPath}/${y}`),h.opts.verbose&&(g.assign((0,t._)`${_}.schema`,f),g.assign((0,t._)`${_}.data`,w))})}e.extendErrors=o;function c(g,y){const f=g.const("err",y);g.if((0,t._)`${n.default.vErrors} === null`,()=>g.assign(n.default.vErrors,(0,t._)`[${f}]`),(0,t._)`${n.default.vErrors}.push(${f})`),g.code((0,t._)`${n.default.errors}++`)}function l(g,y){const{gen:f,validateName:w,schemaEnv:P}=g;P.$async?f.throw((0,t._)`new ${g.ValidationError}(${y})`):(f.assign((0,t._)`${w}.errors`,y),f.return(!1))}const u={keyword:new t.Name("keyword"),schemaPath:new t.Name("schemaPath"),params:new t.Name("params"),propertyName:new t.Name("propertyName"),message:new t.Name("message"),schema:new t.Name("schema"),parentSchema:new t.Name("parentSchema")};function p(g,y,f){const{createErrors:w}=g.it;return w===!1?(0,t._)`{}`:b(g,y,f)}function b(g,y,f={}){const{gen:w,it:P}=g,h=[v(P,f),S(g,f)];return E(g,y,h),w.object(...h)}function v({errorPath:g},{instancePath:y}){const f=y?(0,t.str)`${g}${(0,r.getErrorPath)(y,r.Type.Str)}`:g;return[n.default.instancePath,(0,t.strConcat)(n.default.instancePath,f)]}function S({keyword:g,it:{errSchemaPath:y}},{schemaPath:f,parentSchema:w}){let P=w?y:(0,t.str)`${y}/${g}`;return f&&(P=(0,t.str)`${P}${(0,r.getErrorPath)(f,r.Type.Str)}`),[u.schemaPath,P]}function E(g,{params:y,message:f},w){const{keyword:P,data:h,schemaValue:_,it:O}=g,{opts:k,propertyName:$,topSchemaRef:M,schemaPath:q}=O;w.push([u.keyword,P],[u.params,typeof y=="function"?y(g):y||(0,t._)`{}`]),k.messages&&w.push([u.message,typeof f=="function"?f(g):f]),k.verbose&&w.push([u.schema,_],[u.parentSchema,(0,t._)`${M}${q}`],[n.default.data,h]),$&&w.push([u.propertyName,$])}})(Ho)),Ho}var ld;function gS(){if(ld)return hn;ld=1,Object.defineProperty(hn,"__esModule",{value:!0}),hn.boolOrEmptySchema=hn.topBoolOrEmptySchema=void 0;const e=Qa(),t=Re(),r=rn(),n={message:"boolean schema is false"};function s(o){const{gen:c,schema:l,validateName:u}=o;l===!1?a(o,!1):typeof l=="object"&&l.$async===!0?c.return(r.default.data):(c.assign((0,t._)`${u}.errors`,null),c.return(!0))}hn.topBoolOrEmptySchema=s;function i(o,c){const{gen:l,schema:u}=o;u===!1?(l.var(c,!1),a(o)):l.var(c,!0)}hn.boolOrEmptySchema=i;function a(o,c){const{gen:l,data:u}=o,p={gen:l,keyword:"false schema",data:u,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:o};(0,e.reportError)(p,n,void 0,c)}return hn}var yt={},mn={},ud;function Wm(){if(ud)return mn;ud=1,Object.defineProperty(mn,"__esModule",{value:!0}),mn.getRules=mn.isJSONType=void 0;const e=["string","number","integer","boolean","null","object","array"],t=new Set(e);function r(s){return typeof s=="string"&&t.has(s)}mn.isJSONType=r;function n(){const s={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...s,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},s.number,s.string,s.array,s.object],post:{rules:[]},all:{},keywords:{}}}return mn.getRules=n,mn}var wr={},dd;function Jm(){if(dd)return wr;dd=1,Object.defineProperty(wr,"__esModule",{value:!0}),wr.shouldUseRule=wr.shouldUseGroup=wr.schemaHasRulesForType=void 0;function e({schema:n,self:s},i){const a=s.RULES.types[i];return a&&a!==!0&&t(n,a)}wr.schemaHasRulesForType=e;function t(n,s){return s.rules.some(i=>r(n,i))}wr.shouldUseGroup=t;function r(n,s){var i;return n[s.keyword]!==void 0||((i=s.definition.implements)===null||i===void 0?void 0:i.some(a=>n[a]!==void 0))}return wr.shouldUseRule=r,wr}var fd;function Va(){if(fd)return yt;fd=1,Object.defineProperty(yt,"__esModule",{value:!0}),yt.reportTypeError=yt.checkDataTypes=yt.checkDataType=yt.coerceAndCheckDataType=yt.getJSONTypes=yt.getSchemaTypes=yt.DataType=void 0;const e=Wm(),t=Jm(),r=Qa(),n=Re(),s=Te();var i;(function(f){f[f.Correct=0]="Correct",f[f.Wrong=1]="Wrong"})(i||(yt.DataType=i={}));function a(f){const w=o(f.type);if(w.includes("null")){if(f.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!w.length&&f.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');f.nullable===!0&&w.push("null")}return w}yt.getSchemaTypes=a;function o(f){const w=Array.isArray(f)?f:f?[f]:[];if(w.every(e.isJSONType))return w;throw new Error("type must be JSONType or JSONType[]: "+w.join(","))}yt.getJSONTypes=o;function c(f,w){const{gen:P,data:h,opts:_}=f,O=u(w,_.coerceTypes),k=w.length>0&&!(O.length===0&&w.length===1&&(0,t.schemaHasRulesForType)(f,w[0]));if(k){const $=S(w,h,_.strictNumbers,i.Wrong);P.if($,()=>{O.length?p(f,w,O):g(f)})}return k}yt.coerceAndCheckDataType=c;const l=new Set(["string","number","integer","boolean","null"]);function u(f,w){return w?f.filter(P=>l.has(P)||w==="array"&&P==="array"):[]}function p(f,w,P){const{gen:h,data:_,opts:O}=f,k=h.let("dataType",(0,n._)`typeof ${_}`),$=h.let("coerced",(0,n._)`undefined`);O.coerceTypes==="array"&&h.if((0,n._)`${k} == 'object' && Array.isArray(${_}) && ${_}.length == 1`,()=>h.assign(_,(0,n._)`${_}[0]`).assign(k,(0,n._)`typeof ${_}`).if(S(w,_,O.strictNumbers),()=>h.assign($,_))),h.if((0,n._)`${$} !== undefined`);for(const q of P)(l.has(q)||q==="array"&&O.coerceTypes==="array")&&M(q);h.else(),g(f),h.endIf(),h.if((0,n._)`${$} !== undefined`,()=>{h.assign(_,$),b(f,$)});function M(q){switch(q){case"string":h.elseIf((0,n._)`${k} == "number" || ${k} == "boolean"`).assign($,(0,n._)`"" + ${_}`).elseIf((0,n._)`${_} === null`).assign($,(0,n._)`""`);return;case"number":h.elseIf((0,n._)`${k} == "boolean" || ${_} === null + || (${k} == "string" && ${_} && ${_} == +${_})`).assign($,(0,n._)`+${_}`);return;case"integer":h.elseIf((0,n._)`${k} === "boolean" || ${_} === null + || (${k} === "string" && ${_} && ${_} == +${_} && !(${_} % 1))`).assign($,(0,n._)`+${_}`);return;case"boolean":h.elseIf((0,n._)`${_} === "false" || ${_} === 0 || ${_} === null`).assign($,!1).elseIf((0,n._)`${_} === "true" || ${_} === 1`).assign($,!0);return;case"null":h.elseIf((0,n._)`${_} === "" || ${_} === 0 || ${_} === false`),h.assign($,null);return;case"array":h.elseIf((0,n._)`${k} === "string" || ${k} === "number" + || ${k} === "boolean" || ${_} === null`).assign($,(0,n._)`[${_}]`)}}}function b({gen:f,parentData:w,parentDataProperty:P},h){f.if((0,n._)`${w} !== undefined`,()=>f.assign((0,n._)`${w}[${P}]`,h))}function v(f,w,P,h=i.Correct){const _=h===i.Correct?n.operators.EQ:n.operators.NEQ;let O;switch(f){case"null":return(0,n._)`${w} ${_} null`;case"array":O=(0,n._)`Array.isArray(${w})`;break;case"object":O=(0,n._)`${w} && typeof ${w} == "object" && !Array.isArray(${w})`;break;case"integer":O=k((0,n._)`!(${w} % 1) && !isNaN(${w})`);break;case"number":O=k();break;default:return(0,n._)`typeof ${w} ${_} ${f}`}return h===i.Correct?O:(0,n.not)(O);function k($=n.nil){return(0,n.and)((0,n._)`typeof ${w} == "number"`,$,P?(0,n._)`isFinite(${w})`:n.nil)}}yt.checkDataType=v;function S(f,w,P,h){if(f.length===1)return v(f[0],w,P,h);let _;const O=(0,s.toHash)(f);if(O.array&&O.object){const k=(0,n._)`typeof ${w} != "object"`;_=O.null?k:(0,n._)`!${w} || ${k}`,delete O.null,delete O.array,delete O.object}else _=n.nil;O.number&&delete O.integer;for(const k in O)_=(0,n.and)(_,v(k,w,P,h));return _}yt.checkDataTypes=S;const E={message:({schema:f})=>`must be ${f}`,params:({schema:f,schemaValue:w})=>typeof f=="string"?(0,n._)`{type: ${f}}`:(0,n._)`{type: ${w}}`};function g(f){const w=y(f);(0,r.reportError)(w,E)}yt.reportTypeError=g;function y(f){const{gen:w,data:P,schema:h}=f,_=(0,s.schemaRefOrVal)(f,h,"type");return{gen:w,keyword:"type",data:P,schema:h.type,schemaCode:_,schemaValue:_,parentSchema:h,params:{},it:f}}return yt}var vi={},hd;function vS(){if(hd)return vi;hd=1,Object.defineProperty(vi,"__esModule",{value:!0}),vi.assignDefaults=void 0;const e=Re(),t=Te();function r(s,i){const{properties:a,items:o}=s.schema;if(i==="object"&&a)for(const c in a)n(s,c,a[c].default);else i==="array"&&Array.isArray(o)&&o.forEach((c,l)=>n(s,l,c.default))}vi.assignDefaults=r;function n(s,i,a){const{gen:o,compositeRule:c,data:l,opts:u}=s;if(a===void 0)return;const p=(0,e._)`${l}${(0,e.getProperty)(i)}`;if(c){(0,t.checkStrictMode)(s,`default is ignored for: ${p}`);return}let b=(0,e._)`${p} === undefined`;u.useDefaults==="empty"&&(b=(0,e._)`${b} || ${p} === null || ${p} === ""`),o.if(b,(0,e._)`${p} = ${(0,e.stringify)(a)}`)}return vi}var Xt={},Ge={},md;function sr(){if(md)return Ge;md=1,Object.defineProperty(Ge,"__esModule",{value:!0}),Ge.validateUnion=Ge.validateArray=Ge.usePattern=Ge.callValidateCode=Ge.schemaProperties=Ge.allSchemaProperties=Ge.noPropertyInData=Ge.propertyInData=Ge.isOwnProperty=Ge.hasPropFunc=Ge.reportMissingProp=Ge.checkMissingProp=Ge.checkReportMissingProp=void 0;const e=Re(),t=Te(),r=rn(),n=Te();function s(f,w){const{gen:P,data:h,it:_}=f;P.if(u(P,h,w,_.opts.ownProperties),()=>{f.setParams({missingProperty:(0,e._)`${w}`},!0),f.error()})}Ge.checkReportMissingProp=s;function i({gen:f,data:w,it:{opts:P}},h,_){return(0,e.or)(...h.map(O=>(0,e.and)(u(f,w,O,P.ownProperties),(0,e._)`${_} = ${O}`)))}Ge.checkMissingProp=i;function a(f,w){f.setParams({missingProperty:w},!0),f.error()}Ge.reportMissingProp=a;function o(f){return f.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,e._)`Object.prototype.hasOwnProperty`})}Ge.hasPropFunc=o;function c(f,w,P){return(0,e._)`${o(f)}.call(${w}, ${P})`}Ge.isOwnProperty=c;function l(f,w,P,h){const _=(0,e._)`${w}${(0,e.getProperty)(P)} !== undefined`;return h?(0,e._)`${_} && ${c(f,w,P)}`:_}Ge.propertyInData=l;function u(f,w,P,h){const _=(0,e._)`${w}${(0,e.getProperty)(P)} === undefined`;return h?(0,e.or)(_,(0,e.not)(c(f,w,P))):_}Ge.noPropertyInData=u;function p(f){return f?Object.keys(f).filter(w=>w!=="__proto__"):[]}Ge.allSchemaProperties=p;function b(f,w){return p(w).filter(P=>!(0,t.alwaysValidSchema)(f,w[P]))}Ge.schemaProperties=b;function v({schemaCode:f,data:w,it:{gen:P,topSchemaRef:h,schemaPath:_,errorPath:O},it:k},$,M,q){const U=q?(0,e._)`${f}, ${w}, ${h}${_}`:w,L=[[r.default.instancePath,(0,e.strConcat)(r.default.instancePath,O)],[r.default.parentData,k.parentData],[r.default.parentDataProperty,k.parentDataProperty],[r.default.rootData,r.default.rootData]];k.opts.dynamicRef&&L.push([r.default.dynamicAnchors,r.default.dynamicAnchors]);const z=(0,e._)`${U}, ${P.object(...L)}`;return M!==e.nil?(0,e._)`${$}.call(${M}, ${z})`:(0,e._)`${$}(${z})`}Ge.callValidateCode=v;const S=(0,e._)`new RegExp`;function E({gen:f,it:{opts:w}},P){const h=w.unicodeRegExp?"u":"",{regExp:_}=w.code,O=_(P,h);return f.scopeValue("pattern",{key:O.toString(),ref:O,code:(0,e._)`${_.code==="new RegExp"?S:(0,n.useFunc)(f,_)}(${P}, ${h})`})}Ge.usePattern=E;function g(f){const{gen:w,data:P,keyword:h,it:_}=f,O=w.name("valid");if(_.allErrors){const $=w.let("valid",!0);return k(()=>w.assign($,!1)),$}return w.var(O,!0),k(()=>w.break()),O;function k($){const M=w.const("len",(0,e._)`${P}.length`);w.forRange("i",0,M,q=>{f.subschema({keyword:h,dataProp:q,dataPropType:t.Type.Num},O),w.if((0,e.not)(O),$)})}}Ge.validateArray=g;function y(f){const{gen:w,schema:P,keyword:h,it:_}=f;if(!Array.isArray(P))throw new Error("ajv implementation error");if(P.some(M=>(0,t.alwaysValidSchema)(_,M))&&!_.opts.unevaluated)return;const k=w.let("valid",!1),$=w.name("_valid");w.block(()=>P.forEach((M,q)=>{const U=f.subschema({keyword:h,schemaProp:q,compositeRule:!0},$);w.assign(k,(0,e._)`${k} || ${$}`),f.mergeValidEvaluated(U,$)||w.if((0,e.not)(k))})),f.result(k,()=>f.reset(),()=>f.error(!0))}return Ge.validateUnion=y,Ge}var pd;function bS(){if(pd)return Xt;pd=1,Object.defineProperty(Xt,"__esModule",{value:!0}),Xt.validateKeywordUsage=Xt.validSchemaType=Xt.funcKeywordCode=Xt.macroKeywordCode=void 0;const e=Re(),t=rn(),r=sr(),n=Qa();function s(b,v){const{gen:S,keyword:E,schema:g,parentSchema:y,it:f}=b,w=v.macro.call(f.self,g,y,f),P=l(S,E,w);f.opts.validateSchema!==!1&&f.self.validateSchema(w,!0);const h=S.name("valid");b.subschema({schema:w,schemaPath:e.nil,errSchemaPath:`${f.errSchemaPath}/${E}`,topSchemaRef:P,compositeRule:!0},h),b.pass(h,()=>b.error(!0))}Xt.macroKeywordCode=s;function i(b,v){var S;const{gen:E,keyword:g,schema:y,parentSchema:f,$data:w,it:P}=b;c(P,v);const h=!w&&v.compile?v.compile.call(P.self,y,f,P):v.validate,_=l(E,g,h),O=E.let("valid");b.block$data(O,k),b.ok((S=v.valid)!==null&&S!==void 0?S:O);function k(){if(v.errors===!1)q(),v.modifying&&a(b),U(()=>b.error());else{const L=v.async?$():M();v.modifying&&a(b),U(()=>o(b,L))}}function $(){const L=E.let("ruleErrs",null);return E.try(()=>q((0,e._)`await `),z=>E.assign(O,!1).if((0,e._)`${z} instanceof ${P.ValidationError}`,()=>E.assign(L,(0,e._)`${z}.errors`),()=>E.throw(z))),L}function M(){const L=(0,e._)`${_}.errors`;return E.assign(L,null),q(e.nil),L}function q(L=v.async?(0,e._)`await `:e.nil){const z=P.opts.passContext?t.default.this:t.default.self,G=!("compile"in v&&!w||v.schema===!1);E.assign(O,(0,e._)`${L}${(0,r.callValidateCode)(b,_,z,G)}`,v.modifying)}function U(L){var z;E.if((0,e.not)((z=v.valid)!==null&&z!==void 0?z:O),L)}}Xt.funcKeywordCode=i;function a(b){const{gen:v,data:S,it:E}=b;v.if(E.parentData,()=>v.assign(S,(0,e._)`${E.parentData}[${E.parentDataProperty}]`))}function o(b,v){const{gen:S}=b;S.if((0,e._)`Array.isArray(${v})`,()=>{S.assign(t.default.vErrors,(0,e._)`${t.default.vErrors} === null ? ${v} : ${t.default.vErrors}.concat(${v})`).assign(t.default.errors,(0,e._)`${t.default.vErrors}.length`),(0,n.extendErrors)(b)},()=>b.error())}function c({schemaEnv:b},v){if(v.async&&!b.$async)throw new Error("async keyword in sync schema")}function l(b,v,S){if(S===void 0)throw new Error(`keyword "${v}" failed to compile`);return b.scopeValue("keyword",typeof S=="function"?{ref:S}:{ref:S,code:(0,e.stringify)(S)})}function u(b,v,S=!1){return!v.length||v.some(E=>E==="array"?Array.isArray(b):E==="object"?b&&typeof b=="object"&&!Array.isArray(b):typeof b==E||S&&typeof b>"u")}Xt.validSchemaType=u;function p({schema:b,opts:v,self:S,errSchemaPath:E},g,y){if(Array.isArray(g.keyword)?!g.keyword.includes(y):g.keyword!==y)throw new Error("ajv implementation error");const f=g.dependencies;if(f?.some(w=>!Object.prototype.hasOwnProperty.call(b,w)))throw new Error(`parent schema must have dependencies of ${y}: ${f.join(",")}`);if(g.validateSchema&&!g.validateSchema(b[y])){const P=`keyword "${y}" value is invalid at path "${E}": `+S.errorsText(g.validateSchema.errors);if(v.validateSchema==="log")S.logger.error(P);else throw new Error(P)}}return Xt.validateKeywordUsage=p,Xt}var Cr={},yd;function _S(){if(yd)return Cr;yd=1,Object.defineProperty(Cr,"__esModule",{value:!0}),Cr.extendSubschemaMode=Cr.extendSubschemaData=Cr.getSubschema=void 0;const e=Re(),t=Te();function r(i,{keyword:a,schemaProp:o,schema:c,schemaPath:l,errSchemaPath:u,topSchemaRef:p}){if(a!==void 0&&c!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(a!==void 0){const b=i.schema[a];return o===void 0?{schema:b,schemaPath:(0,e._)`${i.schemaPath}${(0,e.getProperty)(a)}`,errSchemaPath:`${i.errSchemaPath}/${a}`}:{schema:b[o],schemaPath:(0,e._)`${i.schemaPath}${(0,e.getProperty)(a)}${(0,e.getProperty)(o)}`,errSchemaPath:`${i.errSchemaPath}/${a}/${(0,t.escapeFragment)(o)}`}}if(c!==void 0){if(l===void 0||u===void 0||p===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:c,schemaPath:l,topSchemaRef:p,errSchemaPath:u}}throw new Error('either "keyword" or "schema" must be passed')}Cr.getSubschema=r;function n(i,a,{dataProp:o,dataPropType:c,data:l,dataTypes:u,propertyName:p}){if(l!==void 0&&o!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:b}=a;if(o!==void 0){const{errorPath:S,dataPathArr:E,opts:g}=a,y=b.let("data",(0,e._)`${a.data}${(0,e.getProperty)(o)}`,!0);v(y),i.errorPath=(0,e.str)`${S}${(0,t.getErrorPath)(o,c,g.jsPropertySyntax)}`,i.parentDataProperty=(0,e._)`${o}`,i.dataPathArr=[...E,i.parentDataProperty]}if(l!==void 0){const S=l instanceof e.Name?l:b.let("data",l,!0);v(S),p!==void 0&&(i.propertyName=p)}u&&(i.dataTypes=u);function v(S){i.data=S,i.dataLevel=a.dataLevel+1,i.dataTypes=[],a.definedProperties=new Set,i.parentData=a.data,i.dataNames=[...a.dataNames,S]}}Cr.extendSubschemaData=n;function s(i,{jtdDiscriminator:a,jtdMetadata:o,compositeRule:c,createErrors:l,allErrors:u}){c!==void 0&&(i.compositeRule=c),l!==void 0&&(i.createErrors=l),u!==void 0&&(i.allErrors=u),i.jtdDiscriminator=a,i.jtdMetadata=o}return Cr.extendSubschemaMode=s,Cr}var Pt={},Jo,gd;function eo(){return gd||(gd=1,Jo=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,s,i;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(s=n;s--!==0;)if(!e(t[s],r[s]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(i=Object.keys(t),n=i.length,n!==Object.keys(r).length)return!1;for(s=n;s--!==0;)if(!Object.prototype.hasOwnProperty.call(r,i[s]))return!1;for(s=n;s--!==0;){var a=i[s];if(!e(t[a],r[a]))return!1}return!0}return t!==t&&r!==r}),Jo}var Yo={exports:{}},vd;function SS(){if(vd)return Yo.exports;vd=1;var e=Yo.exports=function(n,s,i){typeof s=="function"&&(i=s,s={}),i=s.cb||i;var a=typeof i=="function"?i:i.pre||function(){},o=i.post||function(){};t(s,a,o,n,"",n)};e.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},e.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},e.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},e.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function t(n,s,i,a,o,c,l,u,p,b){if(a&&typeof a=="object"&&!Array.isArray(a)){s(a,o,c,l,u,p,b);for(var v in a){var S=a[v];if(Array.isArray(S)){if(v in e.arrayKeywords)for(var E=0;Eg+=o(f)),g===1/0))return 1/0}return g}function c(E,g="",y){y!==!1&&(g=p(g));const f=E.parse(g);return l(E,f)}Pt.getFullPath=c;function l(E,g){return E.serialize(g).split("#")[0]+"#"}Pt._getFullPath=l;const u=/#\/?$/;function p(E){return E?E.replace(u,""):""}Pt.normalizeId=p;function b(E,g,y){return y=p(y),E.resolve(g,y)}Pt.resolveUrl=b;const v=/^[a-z_][-a-z0-9._]*$/i;function S(E,g){if(typeof E=="boolean")return{};const{schemaId:y,uriResolver:f}=this.opts,w=p(E[y]||g),P={"":w},h=c(f,w,!1),_={},O=new Set;return r(E,{allKeys:!0},(M,q,U,L)=>{if(L===void 0)return;const z=h+q;let G=P[L];typeof M[y]=="string"&&(G=J.call(this,M[y])),Q.call(this,M.$anchor),Q.call(this,M.$dynamicAnchor),P[q]=G;function J(Z){const re=this.opts.uriResolver.resolve;if(Z=p(G?re(G,Z):Z),O.has(Z))throw $(Z);O.add(Z);let A=this.refs[Z];return typeof A=="string"&&(A=this.refs[A]),typeof A=="object"?k(M,A.schema,Z):Z!==p(z)&&(Z[0]==="#"?(k(M,_[Z],Z),_[Z]=M):this.refs[Z]=z),Z}function Q(Z){if(typeof Z=="string"){if(!v.test(Z))throw new Error(`invalid anchor "${Z}"`);J.call(this,`#${Z}`)}}}),_;function k(M,q,U){if(q!==void 0&&!t(M,q))throw $(U)}function $(M){return new Error(`reference "${M}" resolves to more than one schema`)}}return Pt.getSchemaRefs=S,Pt}var _d;function ro(){if(_d)return Sr;_d=1,Object.defineProperty(Sr,"__esModule",{value:!0}),Sr.getData=Sr.KeywordCxt=Sr.validateFunctionCode=void 0;const e=gS(),t=Va(),r=Jm(),n=Va(),s=vS(),i=bS(),a=_S(),o=Re(),c=rn(),l=to(),u=Te(),p=Qa();function b(R){if(h(R)&&(O(R),P(R))){g(R);return}v(R,()=>(0,e.topBoolOrEmptySchema)(R))}Sr.validateFunctionCode=b;function v({gen:R,validateName:D,schema:V,schemaEnv:K,opts:W},Y){W.code.es5?R.func(D,(0,o._)`${c.default.data}, ${c.default.valCxt}`,K.$async,()=>{R.code((0,o._)`"use strict"; ${f(V,W)}`),E(R,W),R.code(Y)}):R.func(D,(0,o._)`${c.default.data}, ${S(W)}`,K.$async,()=>R.code(f(V,W)).code(Y))}function S(R){return(0,o._)`{${c.default.instancePath}="", ${c.default.parentData}, ${c.default.parentDataProperty}, ${c.default.rootData}=${c.default.data}${R.dynamicRef?(0,o._)`, ${c.default.dynamicAnchors}={}`:o.nil}}={}`}function E(R,D){R.if(c.default.valCxt,()=>{R.var(c.default.instancePath,(0,o._)`${c.default.valCxt}.${c.default.instancePath}`),R.var(c.default.parentData,(0,o._)`${c.default.valCxt}.${c.default.parentData}`),R.var(c.default.parentDataProperty,(0,o._)`${c.default.valCxt}.${c.default.parentDataProperty}`),R.var(c.default.rootData,(0,o._)`${c.default.valCxt}.${c.default.rootData}`),D.dynamicRef&&R.var(c.default.dynamicAnchors,(0,o._)`${c.default.valCxt}.${c.default.dynamicAnchors}`)},()=>{R.var(c.default.instancePath,(0,o._)`""`),R.var(c.default.parentData,(0,o._)`undefined`),R.var(c.default.parentDataProperty,(0,o._)`undefined`),R.var(c.default.rootData,c.default.data),D.dynamicRef&&R.var(c.default.dynamicAnchors,(0,o._)`{}`)})}function g(R){const{schema:D,opts:V,gen:K}=R;v(R,()=>{V.$comment&&D.$comment&&L(R),M(R),K.let(c.default.vErrors,null),K.let(c.default.errors,0),V.unevaluated&&y(R),k(R),z(R)})}function y(R){const{gen:D,validateName:V}=R;R.evaluated=D.const("evaluated",(0,o._)`${V}.evaluated`),D.if((0,o._)`${R.evaluated}.dynamicProps`,()=>D.assign((0,o._)`${R.evaluated}.props`,(0,o._)`undefined`)),D.if((0,o._)`${R.evaluated}.dynamicItems`,()=>D.assign((0,o._)`${R.evaluated}.items`,(0,o._)`undefined`))}function f(R,D){const V=typeof R=="object"&&R[D.schemaId];return V&&(D.code.source||D.code.process)?(0,o._)`/*# sourceURL=${V} */`:o.nil}function w(R,D){if(h(R)&&(O(R),P(R))){_(R,D);return}(0,e.boolOrEmptySchema)(R,D)}function P({schema:R,self:D}){if(typeof R=="boolean")return!R;for(const V in R)if(D.RULES.all[V])return!0;return!1}function h(R){return typeof R.schema!="boolean"}function _(R,D){const{schema:V,gen:K,opts:W}=R;W.$comment&&V.$comment&&L(R),q(R),U(R);const Y=K.const("_errs",c.default.errors);k(R,Y),K.var(D,(0,o._)`${Y} === ${c.default.errors}`)}function O(R){(0,u.checkUnknownRules)(R),$(R)}function k(R,D){if(R.opts.jtd)return J(R,[],!1,D);const V=(0,t.getSchemaTypes)(R.schema),K=(0,t.coerceAndCheckDataType)(R,V);J(R,V,!K,D)}function $(R){const{schema:D,errSchemaPath:V,opts:K,self:W}=R;D.$ref&&K.ignoreKeywordsWithRef&&(0,u.schemaHasRulesButRef)(D,W.RULES)&&W.logger.warn(`$ref: keywords ignored in schema at path "${V}"`)}function M(R){const{schema:D,opts:V}=R;D.default!==void 0&&V.useDefaults&&V.strictSchema&&(0,u.checkStrictMode)(R,"default is ignored in the schema root")}function q(R){const D=R.schema[R.opts.schemaId];D&&(R.baseId=(0,l.resolveUrl)(R.opts.uriResolver,R.baseId,D))}function U(R){if(R.schema.$async&&!R.schemaEnv.$async)throw new Error("async schema in sync schema")}function L({gen:R,schemaEnv:D,schema:V,errSchemaPath:K,opts:W}){const Y=V.$comment;if(W.$comment===!0)R.code((0,o._)`${c.default.self}.logger.log(${Y})`);else if(typeof W.$comment=="function"){const te=(0,o.str)`${K}/$comment`,ne=R.scopeValue("root",{ref:D.root});R.code((0,o._)`${c.default.self}.opts.$comment(${Y}, ${te}, ${ne}.schema)`)}}function z(R){const{gen:D,schemaEnv:V,validateName:K,ValidationError:W,opts:Y}=R;V.$async?D.if((0,o._)`${c.default.errors} === 0`,()=>D.return(c.default.data),()=>D.throw((0,o._)`new ${W}(${c.default.vErrors})`)):(D.assign((0,o._)`${K}.errors`,c.default.vErrors),Y.unevaluated&&G(R),D.return((0,o._)`${c.default.errors} === 0`))}function G({gen:R,evaluated:D,props:V,items:K}){V instanceof o.Name&&R.assign((0,o._)`${D}.props`,V),K instanceof o.Name&&R.assign((0,o._)`${D}.items`,K)}function J(R,D,V,K){const{gen:W,schema:Y,data:te,allErrors:ne,opts:se,self:ce}=R,{RULES:he}=ce;if(Y.$ref&&(se.ignoreKeywordsWithRef||!(0,u.schemaHasRulesButRef)(Y,he))){W.block(()=>T(R,"$ref",he.all.$ref.definition));return}se.jtd||Z(R,D),W.block(()=>{for(const ge of he.rules)le(ge);le(he.post)});function le(ge){(0,r.shouldUseGroup)(Y,ge)&&(ge.type?(W.if((0,n.checkDataType)(ge.type,te,se.strictNumbers)),Q(R,ge),D.length===1&&D[0]===ge.type&&V&&(W.else(),(0,n.reportTypeError)(R)),W.endIf()):Q(R,ge),ne||W.if((0,o._)`${c.default.errors} === ${K||0}`))}}function Q(R,D){const{gen:V,schema:K,opts:{useDefaults:W}}=R;W&&(0,s.assignDefaults)(R,D.type),V.block(()=>{for(const Y of D.rules)(0,r.shouldUseRule)(K,Y)&&T(R,Y.keyword,Y.definition,D.type)})}function Z(R,D){R.schemaEnv.meta||!R.opts.strictTypes||(re(R,D),R.opts.allowUnionTypes||A(R,D),C(R,R.dataTypes))}function re(R,D){if(D.length){if(!R.dataTypes.length){R.dataTypes=D;return}D.forEach(V=>{m(R.dataTypes,V)||x(R,`type "${V}" not allowed by context "${R.dataTypes.join(",")}"`)}),d(R,D)}}function A(R,D){D.length>1&&!(D.length===2&&D.includes("null"))&&x(R,"use allowUnionTypes to allow union type keyword")}function C(R,D){const V=R.self.RULES.all;for(const K in V){const W=V[K];if(typeof W=="object"&&(0,r.shouldUseRule)(R.schema,W)){const{type:Y}=W.definition;Y.length&&!Y.some(te=>j(D,te))&&x(R,`missing type "${Y.join(",")}" for keyword "${K}"`)}}}function j(R,D){return R.includes(D)||D==="number"&&R.includes("integer")}function m(R,D){return R.includes(D)||D==="integer"&&R.includes("number")}function d(R,D){const V=[];for(const K of R.dataTypes)m(D,K)?V.push(K):D.includes("integer")&&K==="number"&&V.push("integer");R.dataTypes=V}function x(R,D){const V=R.schemaEnv.baseId+R.errSchemaPath;D+=` at "${V}" (strictTypes)`,(0,u.checkStrictMode)(R,D,R.opts.strictTypes)}class I{constructor(D,V,K){if((0,i.validateKeywordUsage)(D,V,K),this.gen=D.gen,this.allErrors=D.allErrors,this.keyword=K,this.data=D.data,this.schema=D.schema[K],this.$data=V.$data&&D.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,u.schemaRefOrVal)(D,this.schema,K,this.$data),this.schemaType=V.schemaType,this.parentSchema=D.schema,this.params={},this.it=D,this.def=V,this.$data)this.schemaCode=D.gen.const("vSchema",H(this.$data,D));else if(this.schemaCode=this.schemaValue,!(0,i.validSchemaType)(this.schema,V.schemaType,V.allowUndefined))throw new Error(`${K} value must be ${JSON.stringify(V.schemaType)}`);("code"in V?V.trackErrors:V.errors!==!1)&&(this.errsCount=D.gen.const("_errs",c.default.errors))}result(D,V,K){this.failResult((0,o.not)(D),V,K)}failResult(D,V,K){this.gen.if(D),K?K():this.error(),V?(this.gen.else(),V(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(D,V){this.failResult((0,o.not)(D),void 0,V)}fail(D){if(D===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(D),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(D){if(!this.$data)return this.fail(D);const{schemaCode:V}=this;this.fail((0,o._)`${V} !== undefined && (${(0,o.or)(this.invalid$data(),D)})`)}error(D,V,K){if(V){this.setParams(V),this._error(D,K),this.setParams({});return}this._error(D,K)}_error(D,V){(D?p.reportExtraError:p.reportError)(this,this.def.error,V)}$dataError(){(0,p.reportError)(this,this.def.$dataError||p.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,p.resetErrorsCount)(this.gen,this.errsCount)}ok(D){this.allErrors||this.gen.if(D)}setParams(D,V){V?Object.assign(this.params,D):this.params=D}block$data(D,V,K=o.nil){this.gen.block(()=>{this.check$data(D,K),V()})}check$data(D=o.nil,V=o.nil){if(!this.$data)return;const{gen:K,schemaCode:W,schemaType:Y,def:te}=this;K.if((0,o.or)((0,o._)`${W} === undefined`,V)),D!==o.nil&&K.assign(D,!0),(Y.length||te.validateSchema)&&(K.elseIf(this.invalid$data()),this.$dataError(),D!==o.nil&&K.assign(D,!1)),K.else()}invalid$data(){const{gen:D,schemaCode:V,schemaType:K,def:W,it:Y}=this;return(0,o.or)(te(),ne());function te(){if(K.length){if(!(V instanceof o.Name))throw new Error("ajv implementation error");const se=Array.isArray(K)?K:[K];return(0,o._)`${(0,n.checkDataTypes)(se,V,Y.opts.strictNumbers,n.DataType.Wrong)}`}return o.nil}function ne(){if(W.validateSchema){const se=D.scopeValue("validate$data",{ref:W.validateSchema});return(0,o._)`!${se}(${V})`}return o.nil}}subschema(D,V){const K=(0,a.getSubschema)(this.it,D);(0,a.extendSubschemaData)(K,this.it,D),(0,a.extendSubschemaMode)(K,D);const W={...this.it,...K,items:void 0,props:void 0};return w(W,V),W}mergeEvaluated(D,V){const{it:K,gen:W}=this;K.opts.unevaluated&&(K.props!==!0&&D.props!==void 0&&(K.props=u.mergeEvaluated.props(W,D.props,K.props,V)),K.items!==!0&&D.items!==void 0&&(K.items=u.mergeEvaluated.items(W,D.items,K.items,V)))}mergeValidEvaluated(D,V){const{it:K,gen:W}=this;if(K.opts.unevaluated&&(K.props!==!0||K.items!==!0))return W.if(V,()=>this.mergeEvaluated(D,o.Name)),!0}}Sr.KeywordCxt=I;function T(R,D,V,K){const W=new I(R,V,D);"code"in V?V.code(W,K):W.$data&&V.validate?(0,i.funcKeywordCode)(W,V):"macro"in V?(0,i.macroKeywordCode)(W,V):(V.compile||V.validate)&&(0,i.funcKeywordCode)(W,V)}const F=/^\/(?:[^~]|~0|~1)*$/,B=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function H(R,{dataLevel:D,dataNames:V,dataPathArr:K}){let W,Y;if(R==="")return c.default.rootData;if(R[0]==="/"){if(!F.test(R))throw new Error(`Invalid JSON-pointer: ${R}`);W=R,Y=c.default.rootData}else{const ce=B.exec(R);if(!ce)throw new Error(`Invalid JSON-pointer: ${R}`);const he=+ce[1];if(W=ce[2],W==="#"){if(he>=D)throw new Error(se("property/index",he));return K[D-he]}if(he>D)throw new Error(se("data",he));if(Y=V[D-he],!W)return Y}let te=Y;const ne=W.split("/");for(const ce of ne)ce&&(Y=(0,o._)`${Y}${(0,o.getProperty)((0,u.unescapeJsonPointer)(ce))}`,te=(0,o._)`${te} && ${Y}`);return te;function se(ce,he){return`Cannot access ${ce} ${he} levels up, current level is ${D}`}}return Sr.getData=H,Sr}var Zi={},Sd;function ul(){if(Sd)return Zi;Sd=1,Object.defineProperty(Zi,"__esModule",{value:!0});class e extends Error{constructor(r){super("validation failed"),this.errors=r,this.ajv=this.validation=!0}}return Zi.default=e,Zi}var Qi={},wd;function no(){if(wd)return Qi;wd=1,Object.defineProperty(Qi,"__esModule",{value:!0});const e=to();class t extends Error{constructor(n,s,i,a){super(a||`can't resolve reference ${i} from id ${s}`),this.missingRef=(0,e.resolveUrl)(n,s,i),this.missingSchema=(0,e.normalizeId)((0,e.getFullPath)(n,this.missingRef))}}return Qi.default=t,Qi}var Tt={},Cd;function dl(){if(Cd)return Tt;Cd=1,Object.defineProperty(Tt,"__esModule",{value:!0}),Tt.resolveSchema=Tt.getCompilingSchema=Tt.resolveRef=Tt.compileSchema=Tt.SchemaEnv=void 0;const e=Re(),t=ul(),r=rn(),n=to(),s=Te(),i=ro();class a{constructor(y){var f;this.refs={},this.dynamicAnchors={};let w;typeof y.schema=="object"&&(w=y.schema),this.schema=y.schema,this.schemaId=y.schemaId,this.root=y.root||this,this.baseId=(f=y.baseId)!==null&&f!==void 0?f:(0,n.normalizeId)(w?.[y.schemaId||"$id"]),this.schemaPath=y.schemaPath,this.localRefs=y.localRefs,this.meta=y.meta,this.$async=w?.$async,this.refs={}}}Tt.SchemaEnv=a;function o(g){const y=u.call(this,g);if(y)return y;const f=(0,n.getFullPath)(this.opts.uriResolver,g.root.baseId),{es5:w,lines:P}=this.opts.code,{ownProperties:h}=this.opts,_=new e.CodeGen(this.scope,{es5:w,lines:P,ownProperties:h});let O;g.$async&&(O=_.scopeValue("Error",{ref:t.default,code:(0,e._)`require("ajv/dist/runtime/validation_error").default`}));const k=_.scopeName("validate");g.validateName=k;const $={gen:_,allErrors:this.opts.allErrors,data:r.default.data,parentData:r.default.parentData,parentDataProperty:r.default.parentDataProperty,dataNames:[r.default.data],dataPathArr:[e.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:_.scopeValue("schema",this.opts.code.source===!0?{ref:g.schema,code:(0,e.stringify)(g.schema)}:{ref:g.schema}),validateName:k,ValidationError:O,schema:g.schema,schemaEnv:g,rootId:f,baseId:g.baseId||f,schemaPath:e.nil,errSchemaPath:g.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,e._)`""`,opts:this.opts,self:this};let M;try{this._compilations.add(g),(0,i.validateFunctionCode)($),_.optimize(this.opts.code.optimize);const q=_.toString();M=`${_.scopeRefs(r.default.scope)}return ${q}`,this.opts.code.process&&(M=this.opts.code.process(M,g));const L=new Function(`${r.default.self}`,`${r.default.scope}`,M)(this,this.scope.get());if(this.scope.value(k,{ref:L}),L.errors=null,L.schema=g.schema,L.schemaEnv=g,g.$async&&(L.$async=!0),this.opts.code.source===!0&&(L.source={validateName:k,validateCode:q,scopeValues:_._values}),this.opts.unevaluated){const{props:z,items:G}=$;L.evaluated={props:z instanceof e.Name?void 0:z,items:G instanceof e.Name?void 0:G,dynamicProps:z instanceof e.Name,dynamicItems:G instanceof e.Name},L.source&&(L.source.evaluated=(0,e.stringify)(L.evaluated))}return g.validate=L,g}catch(q){throw delete g.validate,delete g.validateName,M&&this.logger.error("Error compiling schema, function code:",M),q}finally{this._compilations.delete(g)}}Tt.compileSchema=o;function c(g,y,f){var w;f=(0,n.resolveUrl)(this.opts.uriResolver,y,f);const P=g.refs[f];if(P)return P;let h=b.call(this,g,f);if(h===void 0){const _=(w=g.localRefs)===null||w===void 0?void 0:w[f],{schemaId:O}=this.opts;_&&(h=new a({schema:_,schemaId:O,root:g,baseId:y}))}if(h!==void 0)return g.refs[f]=l.call(this,h)}Tt.resolveRef=c;function l(g){return(0,n.inlineRef)(g.schema,this.opts.inlineRefs)?g.schema:g.validate?g:o.call(this,g)}function u(g){for(const y of this._compilations)if(p(y,g))return y}Tt.getCompilingSchema=u;function p(g,y){return g.schema===y.schema&&g.root===y.root&&g.baseId===y.baseId}function b(g,y){let f;for(;typeof(f=this.refs[y])=="string";)y=f;return f||this.schemas[y]||v.call(this,g,y)}function v(g,y){const f=this.opts.uriResolver.parse(y),w=(0,n._getFullPath)(this.opts.uriResolver,f);let P=(0,n.getFullPath)(this.opts.uriResolver,g.baseId,void 0);if(Object.keys(g.schema).length>0&&w===P)return E.call(this,f,g);const h=(0,n.normalizeId)(w),_=this.refs[h]||this.schemas[h];if(typeof _=="string"){const O=v.call(this,g,_);return typeof O?.schema!="object"?void 0:E.call(this,f,O)}if(typeof _?.schema=="object"){if(_.validate||o.call(this,_),h===(0,n.normalizeId)(y)){const{schema:O}=_,{schemaId:k}=this.opts,$=O[k];return $&&(P=(0,n.resolveUrl)(this.opts.uriResolver,P,$)),new a({schema:O,schemaId:k,root:g,baseId:P})}return E.call(this,f,_)}}Tt.resolveSchema=v;const S=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function E(g,{baseId:y,schema:f,root:w}){var P;if(((P=g.fragment)===null||P===void 0?void 0:P[0])!=="/")return;for(const O of g.fragment.slice(1).split("/")){if(typeof f=="boolean")return;const k=f[(0,s.unescapeFragment)(O)];if(k===void 0)return;f=k;const $=typeof f=="object"&&f[this.opts.schemaId];!S.has(O)&&$&&(y=(0,n.resolveUrl)(this.opts.uriResolver,y,$))}let h;if(typeof f!="boolean"&&f.$ref&&!(0,s.schemaHasRulesButRef)(f,this.RULES)){const O=(0,n.resolveUrl)(this.opts.uriResolver,y,f.$ref);h=v.call(this,w,O)}const{schemaId:_}=this.opts;if(h=h||new a({schema:f,schemaId:_,root:w,baseId:y}),h.schema!==h.root.schema)return h}return Tt}const wS="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",CS="Meta-schema for $data reference (JSON AnySchema extension proposal)",ES="object",AS=["$data"],xS={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},PS=!1,OS={$id:wS,description:CS,type:ES,required:AS,properties:xS,additionalProperties:PS};var es={},bi={exports:{}},Xo,Ed;function Ym(){if(Ed)return Xo;Ed=1;const e=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),t=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),r=RegExp.prototype.test.bind(/^\d*$/u),n=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),s=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),i=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u),a=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u),o=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u),c=new Array(256);{const A="0123456789ABCDEF";for(let C=0;C<256;C++)c[C]="%"+A[C>>4]+A[C&15]}function l(A){return A<2048?c[192|A>>6]+c[128|A&63]:A<65536?c[224|A>>12]+c[128|A>>6&63]+c[128|A&63]:c[240|A>>18]+c[128|A>>12&63]+c[128|A>>6&63]+c[128|A&63]}function u(A){let C="",j=0,m=0;for(m=0;m=48&&j<=57||j>=65&&j<=70||j>=97&&j<=102))return"";C+=A[m];break}for(m+=1;m=48&&j<=57||j>=65&&j<=70||j>=97&&j<=102))return"";C+=A[m]}return C}const p=RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/),b=RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/),v=RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/),S=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function E(A){if(A.length===0)return!1;for(let C=0;Cj&&(j=d,C=m)):(m=-1,d=0);if(j<2)return A.join(":");const x=A.slice(0,C).join(":"),I=A.slice(C+j).join(":");return x+"::"+I}function y(A){const C=A.indexOf("::");if(C!==-1&&A.indexOf("::",C+1)!==-1)return;const j=C===-1?A.split(":"):A.slice(0,C).split(":"),m=C===-1?[]:A.slice(C+2).split(":");C!==-1&&(j.length===1&&j[0]===""&&(j.length=0),m.length===1&&m[0]===""&&(m.length=0));const d=j.concat(m);let x=0;for(let T=0;T=8)return;const I=d.slice(0,j.length);for(let T=x;T<8;T++)I.push("0");for(let T=j.length;Th[m])}function $(A,C=!1){if(A.indexOf("%")===-1)return A;let j="";for(let m=0;m57343)C+=l(d);else if(d<=56319&&j+1=56320&&x<=57343?(C+=l(65536+(d-55296<<10)+(x-56320)),j++):C+=l(65533)}else C+=l(65533)}}return C}function q(A,C=!1){let j="",m=C&&A[0]!=="/";for(let d=0;d57343)j+=l(I);else if(I<=56319&&d+1=56320&&T<=57343?(j+=l(65536+(I-55296<<10)+(T-56320)),d++):j+=l(65533)}else j+=l(65533)}}return j}function U(A,C){let j="";for(let m=0;m57343)j+=l(x);else if(x<=56319&&m+1=56320&&I<=57343?(j+=l(65536+(x-55296<<10)+(I-56320)),m++):j+=l(65533)}else j+=l(65533)}}return j}function L(A){return U(A,o)}function z(A){return U(A,a)}function G(A){return U(A,a)}function J(A){return A>=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===42||A===43||A===45||A===46||A===47||A===64||A===95}function Q(A){let C="";for(let j=0;j57343)C+=l(d);else if(d<=56319&&j+1=56320&&x<=57343?(C+=l(65536+(d-55296<<10)+(x-56320)),j++):C+=l(65533)}else C+=l(65533)}}return C}function Z(A){let C="";for(let j=0;j65535))return"URI port is malformed."}function M(A){if(A===void 0)return!1;let C=A.indexOf("%");for(;C!==-1;){if(C+2>=A.length||!/^[\da-f]{2}$/iu.test(A.slice(C+1,C+3)))return!0;C=A.indexOf("%",C+3)}return!1}function q(A){return A[0]==="["&&A[A.length-1]==="]"}function U(A){const C=A[4];return M(A[3])||C!==void 0&&!q(C)&&M(C)||M(A[6])||M(A[7])||M(A[8])}function L(A,C,j,m){if(!C.unicodeSupport&&(!j||!j.unicodeSupport)&&A.host&&!q(A.host)&&(C.domainHost||j&&j.domainHost)&&m===!1&&p(A.host))try{A.host=new URL("http://"+A.host).hostname}catch(d){return A.error=A.error||"Host's domain name can not be converted to ASCII: "+d,!0}return!1}function z(A,C){const j=Object.assign({},C),m={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0};let d=!1,x=!1,I=!1,T=!1,F=!1,B=!1,H=!1;j.reference==="suffix"&&(j.scheme?A=j.scheme+":"+A:A="//"+A);const R=A.match(O);R!==null&&R[1].indexOf("\\")!==-1&&(m.error="URI authority must not contain a literal backslash.",d=!0);const D=A.match(k);if(D!==null){const K=D[1],W=K.replace(/[\t\n\r]/g,"");W.length>=2&&(W.slice(0,2)!=="//"?(m.error=m.error||"URI authority must not contain a literal backslash.",d=!0):K.length!==W.length&&(m.error=m.error||"URI authority introducer must not contain whitespace.",d=!0))}const V=A.match(_);if(V){if(m.scheme=V[1],m.userinfo=V[3],m.host=V[4],m.port=parseInt(V[5],10),m.path=V[6]||"",m.query=V[7],m.fragment=V[8],m.scheme!==void 0){const Y=unescape(m.scheme);S.test(Y)?m.scheme=Y.toLowerCase():(m.error=m.error||E,B=!0)}x=U(V),x&&(m.error=m.error||"URI contains malformed percent-encoding."),isNaN(m.port)&&(m.port=V[5]);const K=$(m,V);if(K!==void 0&&(m.error=m.error||K,d=!0),m.host)if(u(m.host)===!1){const te=q(m.host),ne=m.host.indexOf("[")!==-1||m.host.indexOf("]")!==-1,se=e(m.host);H=se.isIPV6||se.isIPVFuture===!0,F=ne&&(!te||se.error===!0),m.host=H?se.host:se.host.toLowerCase(),F&&(m.error=m.error||"URI host is malformed.",d=!0)}else H=!0;m.scheme===void 0&&m.userinfo===void 0&&m.host===void 0&&m.port===void 0&&m.query===void 0&&!m.path?m.reference="same-document":m.scheme===void 0?m.reference="relative":m.fragment===void 0?m.reference="absolute":m.reference="uri",j.reference&&j.reference!=="suffix"&&j.reference!==m.reference&&(m.error=m.error||"URI is not a "+j.reference+" reference.");const W=v(j.scheme||m.scheme);if(F||(T=L(m,j,W,H)),!W||W&&!W.skipNormalize){if(A.indexOf("%")!==-1&&m.host!==void 0&&!F){const Y=H?m.host:n(m.host,!0);m.host=l(Y,H)}m.path&&(m.path=s(m.path)),m.query&&(m.query=a(m.query)),m.fragment&&(m.fragment=a(m.fragment))}W&&W.parse&&(W.parse(m,j),W===b.urn&&m.nid===void 0&&(I=!0))}else m.error=m.error||"URI can not be parsed.";return{parsed:m,malformedAuthorityOrPort:d,malformedPercentEncoding:x,malformedSchemeSpecific:I,malformedHost:T,malformedScheme:B}}function G(A,C){return z(A,C).parsed}function J(A,C){return Q(A,C).normalized}function Q(A,C){const{parsed:j,malformedAuthorityOrPort:m,malformedPercentEncoding:d,malformedSchemeSpecific:x,malformedHost:I,malformedScheme:T}=z(A,C);return{normalized:m||d||x||I||T?A:h(j,C),malformedAuthorityOrPort:m,malformedPercentEncoding:d,malformedSchemeSpecific:x,malformedHost:I,malformedScheme:T}}function Z(A,C){if(typeof A!="string"&&typeof A!="object")return;let j;try{j=typeof A=="string"?A:h(A,C)}catch{return}const{normalized:m,malformedAuthorityOrPort:d,malformedPercentEncoding:x,malformedSchemeSpecific:I,malformedHost:T,malformedScheme:F}=Q(j,C);return d||x||I||T||F?void 0:m}const re={SCHEMES:b,normalize:y,resolve:f,resolveComponent:w,equal:P,serialize:h,parse:G};return bi.exports=re,bi.exports.default=re,bi.exports.fastUri=re,bi.exports}var Pd;function NS(){if(Pd)return es;Pd=1,Object.defineProperty(es,"__esModule",{value:!0});const e=kS();return e.code='require("ajv/dist/runtime/uri").default',es.default=e,es}var Od;function IS(){return Od||(Od=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=ro();Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return t.KeywordCxt}});var r=Re();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return r._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return r.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return r.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return r.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return r.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return r.CodeGen}});const n=ul(),s=no(),i=Wm(),a=dl(),o=Re(),c=to(),l=Va(),u=Te(),p=OS,b=NS(),v=(A,C)=>new RegExp(A,C);v.code="new RegExp";const S=["removeAdditional","useDefaults","coerceTypes"],E=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),g={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},y={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},f=200;function w(A){var C,j,m,d,x,I,T,F,B,H,R,D,V,K,W,Y,te,ne,se,ce,he,le,ge,Fe,fe;const Ye=A.strict,ye=(C=A.code)===null||C===void 0?void 0:C.optimize,oe=ye===!0||ye===void 0?1:ye||0,ft=(m=(j=A.code)===null||j===void 0?void 0:j.regExp)!==null&&m!==void 0?m:v,ke=(d=A.uriResolver)!==null&&d!==void 0?d:b.default;return{strictSchema:(I=(x=A.strictSchema)!==null&&x!==void 0?x:Ye)!==null&&I!==void 0?I:!0,strictNumbers:(F=(T=A.strictNumbers)!==null&&T!==void 0?T:Ye)!==null&&F!==void 0?F:!0,strictTypes:(H=(B=A.strictTypes)!==null&&B!==void 0?B:Ye)!==null&&H!==void 0?H:"log",strictTuples:(D=(R=A.strictTuples)!==null&&R!==void 0?R:Ye)!==null&&D!==void 0?D:"log",strictRequired:(K=(V=A.strictRequired)!==null&&V!==void 0?V:Ye)!==null&&K!==void 0?K:!1,code:A.code?{...A.code,optimize:oe,regExp:ft}:{optimize:oe,regExp:ft},loopRequired:(W=A.loopRequired)!==null&&W!==void 0?W:f,loopEnum:(Y=A.loopEnum)!==null&&Y!==void 0?Y:f,meta:(te=A.meta)!==null&&te!==void 0?te:!0,messages:(ne=A.messages)!==null&&ne!==void 0?ne:!0,inlineRefs:(se=A.inlineRefs)!==null&&se!==void 0?se:!0,schemaId:(ce=A.schemaId)!==null&&ce!==void 0?ce:"$id",addUsedSchema:(he=A.addUsedSchema)!==null&&he!==void 0?he:!0,validateSchema:(le=A.validateSchema)!==null&&le!==void 0?le:!0,validateFormats:(ge=A.validateFormats)!==null&&ge!==void 0?ge:!0,unicodeRegExp:(Fe=A.unicodeRegExp)!==null&&Fe!==void 0?Fe:!0,int32range:(fe=A.int32range)!==null&&fe!==void 0?fe:!0,uriResolver:ke}}class P{constructor(C={}){this.schemas={},this.refs={},this.formats=Object.create(null),this._compilations=new Set,this._loading={},this._cache=new Map,C=this.opts={...C,...w(C)};const{es5:j,lines:m}=this.opts.code;this.scope=new o.ValueScope({scope:{},prefixes:E,es5:j,lines:m}),this.logger=U(C.logger);const d=C.validateFormats;C.validateFormats=!1,this.RULES=(0,i.getRules)(),h.call(this,g,C,"NOT SUPPORTED"),h.call(this,y,C,"DEPRECATED","warn"),this._metaOpts=M.call(this),C.formats&&k.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),C.keywords&&$.call(this,C.keywords),typeof C.meta=="object"&&this.addMetaSchema(C.meta),O.call(this),C.validateFormats=d}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:C,meta:j,schemaId:m}=this.opts;let d=p;m==="id"&&(d={...p},d.id=d.$id,delete d.$id),j&&C&&this.addMetaSchema(d,d[m],!1)}defaultMeta(){const{meta:C,schemaId:j}=this.opts;return this.opts.defaultMeta=typeof C=="object"?C[j]||C:void 0}validate(C,j){let m;if(typeof C=="string"){if(m=this.getSchema(C),!m)throw new Error(`no schema with key or ref "${C}"`)}else m=this.compile(C);const d=m(j);return"$async"in m||(this.errors=m.errors),d}compile(C,j){const m=this._addSchema(C,j);return m.validate||this._compileSchemaEnv(m)}compileAsync(C,j){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:m}=this.opts;return d.call(this,C,j);async function d(H,R){await x.call(this,H.$schema);const D=this._addSchema(H,R);return D.validate||I.call(this,D)}async function x(H){H&&!this.getSchema(H)&&await d.call(this,{$ref:H},!0)}async function I(H){try{return this._compileSchemaEnv(H)}catch(R){if(!(R instanceof s.default))throw R;return T.call(this,R),await F.call(this,R.missingSchema),I.call(this,H)}}function T({missingSchema:H,missingRef:R}){if(this.refs[H])throw new Error(`AnySchema ${H} is loaded but ${R} cannot be resolved`)}async function F(H){const R=await B.call(this,H);this.refs[H]||await x.call(this,R.$schema),this.refs[H]||this.addSchema(R,H,j)}async function B(H){const R=this._loading[H];if(R)return R;try{return await(this._loading[H]=m(H))}finally{delete this._loading[H]}}}addSchema(C,j,m,d=this.opts.validateSchema){if(Array.isArray(C)){for(const I of C)this.addSchema(I,void 0,m,d);return this}let x;if(typeof C=="object"){const{schemaId:I}=this.opts;if(x=C[I],x!==void 0&&typeof x!="string")throw new Error(`schema ${I} must be string`)}return j=(0,c.normalizeId)(j||x),this._checkUnique(j),this.schemas[j]=this._addSchema(C,m,j,d,!0),this}addMetaSchema(C,j,m=this.opts.validateSchema){return this.addSchema(C,j,!0,m),this}validateSchema(C,j){if(typeof C=="boolean")return!0;let m;if(m=C.$schema,m!==void 0&&typeof m!="string")throw new Error("$schema must be a string");if(m=m||this.opts.defaultMeta||this.defaultMeta(),!m)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const d=this.validate(m,C);if(!d&&j){const x="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(x);else throw new Error(x)}return d}getSchema(C){let j;for(;typeof(j=_.call(this,C))=="string";)C=j;if(j===void 0){const{schemaId:m}=this.opts,d=new a.SchemaEnv({schema:{},schemaId:m});if(j=a.resolveSchema.call(this,d,C),!j)return;this.refs[C]=j}return j.validate||this._compileSchemaEnv(j)}removeSchema(C){if(C instanceof RegExp)return this._removeAllSchemas(this.schemas,C),this._removeAllSchemas(this.refs,C),this;switch(typeof C){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const j=_.call(this,C);return typeof j=="object"&&this._cache.delete(j.schema),delete this.schemas[C],delete this.refs[C],this}case"object":{const j=C;this._cache.delete(j);let m=C[this.opts.schemaId];return m&&(m=(0,c.normalizeId)(m),delete this.schemas[m],delete this.refs[m]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(C){for(const j of C)this.addKeyword(j);return this}addKeyword(C,j){let m;if(typeof C=="string")m=C,typeof j=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),j.keyword=m);else if(typeof C=="object"&&j===void 0){if(j=C,m=j.keyword,Array.isArray(m)&&!m.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(z.call(this,m,j),!j)return(0,u.eachItem)(m,x=>G.call(this,x)),this;Q.call(this,j);const d={...j,type:(0,l.getJSONTypes)(j.type),schemaType:(0,l.getJSONTypes)(j.schemaType)};return(0,u.eachItem)(m,d.type.length===0?x=>G.call(this,x,d):x=>d.type.forEach(I=>G.call(this,x,d,I))),this}getKeyword(C){const j=this.RULES.all[C];return typeof j=="object"?j.definition:!!j}removeKeyword(C){const{RULES:j}=this;delete j.keywords[C],delete j.all[C];for(const m of j.rules){const d=m.rules.findIndex(x=>x.keyword===C);d>=0&&m.rules.splice(d,1)}return this}addFormat(C,j){return typeof j=="string"&&(j=new RegExp(j)),this.formats[C]=j,this}errorsText(C=this.errors,{separator:j=", ",dataVar:m="data"}={}){return!C||C.length===0?"No errors":C.map(d=>`${m}${d.instancePath} ${d.message}`).reduce((d,x)=>d+j+x)}$dataMetaSchema(C,j){const m=this.RULES.all;C=JSON.parse(JSON.stringify(C));for(const d of j){const x=d.split("/").slice(1);let I=C;for(const T of x)I=I[T];for(const T in m){const F=m[T];if(typeof F!="object")continue;const{$data:B}=F.definition,H=I[T];B&&H&&(I[T]=re(H))}}return C}_removeAllSchemas(C,j){for(const m in C){const d=C[m];(!j||j.test(m))&&(typeof d=="string"?delete C[m]:d&&!d.meta&&(this._cache.delete(d.schema),delete C[m]))}}_addSchema(C,j,m,d=this.opts.validateSchema,x=this.opts.addUsedSchema){let I;const{schemaId:T}=this.opts;if(typeof C=="object")I=C[T];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof C!="boolean")throw new Error("schema must be object or boolean")}let F=this._cache.get(C);if(F!==void 0)return F;m=(0,c.normalizeId)(I||m);const B=c.getSchemaRefs.call(this,C,m);return F=new a.SchemaEnv({schema:C,schemaId:T,meta:j,baseId:m,localRefs:B}),this._cache.set(F.schema,F),x&&!m.startsWith("#")&&(m&&this._checkUnique(m),this.refs[m]=F),d&&this.validateSchema(C,!0),F}_checkUnique(C){if(this.schemas[C]||this.refs[C])throw new Error(`schema with key or id "${C}" already exists`)}_compileSchemaEnv(C){if(C.meta?this._compileMetaSchema(C):a.compileSchema.call(this,C),!C.validate)throw new Error("ajv implementation error");return C.validate}_compileMetaSchema(C){const j=this.opts;this.opts=this._metaOpts;try{a.compileSchema.call(this,C)}finally{this.opts=j}}}P.ValidationError=n.default,P.MissingRefError=s.default,e.default=P;function h(A,C,j,m="error"){for(const d in A){const x=d;x in C&&this.logger[m](`${j}: option ${d}. ${A[x]}`)}}function _(A){return A=(0,c.normalizeId)(A),this.schemas[A]||this.refs[A]}function O(){const A=this.opts.schemas;if(A)if(Array.isArray(A))this.addSchema(A);else for(const C in A)this.addSchema(A[C],C)}function k(){for(const A in this.opts.formats){const C=this.opts.formats[A];C&&this.addFormat(A,C)}}function $(A){if(Array.isArray(A)){this.addVocabulary(A);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const C in A){const j=A[C];j.keyword||(j.keyword=C),this.addKeyword(j)}}function M(){const A={...this.opts};for(const C of S)delete A[C];return A}const q={log(){},warn(){},error(){}};function U(A){if(A===!1)return q;if(A===void 0)return console;if(A.log&&A.warn&&A.error)return A;throw new Error("logger must implement log, warn and error methods")}const L=/^[a-z_$][a-z0-9_$:-]*$/i;function z(A,C){const{RULES:j}=this;if((0,u.eachItem)(A,m=>{if(j.keywords[m])throw new Error(`Keyword ${m} is already defined`);if(!L.test(m))throw new Error(`Keyword ${m} has invalid name`)}),!!C&&C.$data&&!("code"in C||"validate"in C))throw new Error('$data keyword must have "code" or "validate" function')}function G(A,C,j){var m;const d=C?.post;if(j&&d)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:x}=this;let I=d?x.post:x.rules.find(({type:F})=>F===j);if(I||(I={type:j,rules:[]},x.rules.push(I)),x.keywords[A]=!0,!C)return;const T={keyword:A,definition:{...C,type:(0,l.getJSONTypes)(C.type),schemaType:(0,l.getJSONTypes)(C.schemaType)}};C.before?J.call(this,I,T,C.before):I.rules.push(T),x.all[A]=T,(m=C.implements)===null||m===void 0||m.forEach(F=>this.addKeyword(F))}function J(A,C,j){const m=A.rules.findIndex(d=>d.keyword===j);m>=0?A.rules.splice(m,0,C):(A.rules.push(C),this.logger.warn(`rule ${j} is not defined`))}function Q(A){let{metaSchema:C}=A;C!==void 0&&(A.$data&&this.opts.$data&&(C=re(C)),A.validateSchema=this.compile(C,!0))}const Z={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function re(A){return{anyOf:[A,Z]}}})(Bo)),Bo}var ts={},rs={},ns={},jd;function RS(){if(jd)return ns;jd=1,Object.defineProperty(ns,"__esModule",{value:!0});const e={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return ns.default=e,ns}var Tr={},kd;function $S(){if(kd)return Tr;kd=1,Object.defineProperty(Tr,"__esModule",{value:!0}),Tr.callRef=Tr.getValidate=void 0;const e=no(),t=sr(),r=Re(),n=rn(),s=dl(),i=Te(),a={keyword:"$ref",schemaType:"string",code(l){const{gen:u,schema:p,it:b}=l,{baseId:v,schemaEnv:S,validateName:E,opts:g,self:y}=b,{root:f}=S;if((p==="#"||p==="#/")&&v===f.baseId)return P();const w=s.resolveRef.call(y,f,v,p);if(w===void 0)throw new e.default(b.opts.uriResolver,v,p);if(w instanceof s.SchemaEnv)return h(w);return _(w);function P(){if(S===f)return c(l,E,S,S.$async);const O=u.scopeValue("root",{ref:f});return c(l,(0,r._)`${O}.validate`,f,f.$async)}function h(O){const k=o(l,O);c(l,k,O,O.$async)}function _(O){const k=u.scopeValue("schema",g.code.source===!0?{ref:O,code:(0,r.stringify)(O)}:{ref:O}),$=u.name("valid"),M=l.subschema({schema:O,dataTypes:[],schemaPath:r.nil,topSchemaRef:k,errSchemaPath:p},$);l.mergeEvaluated(M),l.ok($)}}};function o(l,u){const{gen:p}=l;return u.validate?p.scopeValue("validate",{ref:u.validate}):(0,r._)`${p.scopeValue("wrapper",{ref:u})}.validate`}Tr.getValidate=o;function c(l,u,p,b){const{gen:v,it:S}=l,{allErrors:E,schemaEnv:g,opts:y}=S,f=y.passContext?n.default.this:r.nil;b?w():P();function w(){if(!g.$async)throw new Error("async schema referenced by sync schema");const O=v.let("valid");v.try(()=>{v.code((0,r._)`await ${(0,t.callValidateCode)(l,u,f)}`),_(u),E||v.assign(O,!0)},k=>{v.if((0,r._)`!(${k} instanceof ${S.ValidationError})`,()=>v.throw(k)),h(k),E||v.assign(O,!1)}),l.ok(O)}function P(){l.result((0,t.callValidateCode)(l,u,f),()=>_(u),()=>h(u))}function h(O){const k=(0,r._)`${O}.errors`;v.assign(n.default.vErrors,(0,r._)`${n.default.vErrors} === null ? ${k} : ${n.default.vErrors}.concat(${k})`),v.assign(n.default.errors,(0,r._)`${n.default.vErrors}.length`)}function _(O){var k;if(!S.opts.unevaluated)return;const $=(k=p?.validate)===null||k===void 0?void 0:k.evaluated;if(S.props!==!0)if($&&!$.dynamicProps)$.props!==void 0&&(S.props=i.mergeEvaluated.props(v,$.props,S.props));else{const M=v.var("props",(0,r._)`${O}.evaluated.props`);S.props=i.mergeEvaluated.props(v,M,S.props,r.Name)}if(S.items!==!0)if($&&!$.dynamicItems)$.items!==void 0&&(S.items=i.mergeEvaluated.items(v,$.items,S.items));else{const M=v.var("items",(0,r._)`${O}.evaluated.items`);S.items=i.mergeEvaluated.items(v,M,S.items,r.Name)}}}return Tr.callRef=c,Tr.default=a,Tr}var Nd;function FS(){if(Nd)return rs;Nd=1,Object.defineProperty(rs,"__esModule",{value:!0});const e=RS(),t=$S(),r=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",e.default,t.default];return rs.default=r,rs}var is={},ss={},Id;function DS(){if(Id)return ss;Id=1,Object.defineProperty(ss,"__esModule",{value:!0});const e=Re(),t=e.operators,r={maximum:{okStr:"<=",ok:t.LTE,fail:t.GT},minimum:{okStr:">=",ok:t.GTE,fail:t.LT},exclusiveMaximum:{okStr:"<",ok:t.LT,fail:t.GTE},exclusiveMinimum:{okStr:">",ok:t.GT,fail:t.LTE}},n={message:({keyword:i,schemaCode:a})=>(0,e.str)`must be ${r[i].okStr} ${a}`,params:({keyword:i,schemaCode:a})=>(0,e._)`{comparison: ${r[i].okStr}, limit: ${a}}`},s={keyword:Object.keys(r),type:"number",schemaType:"number",$data:!0,error:n,code(i){const{keyword:a,data:o,schemaCode:c}=i;i.fail$data((0,e._)`${o} ${r[a].fail} ${c} || isNaN(${o})`)}};return ss.default=s,ss}var as={},Rd;function TS(){if(Rd)return as;Rd=1,Object.defineProperty(as,"__esModule",{value:!0});const e=Re(),r={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:n})=>(0,e.str)`must be multiple of ${n}`,params:({schemaCode:n})=>(0,e._)`{multipleOf: ${n}}`},code(n){const{gen:s,data:i,schemaCode:a,it:o}=n,c=o.opts.multipleOfPrecision,l=s.let("res"),u=c?(0,e._)`Math.abs(Math.round(${l}) - ${l}) > 1e-${c}`:(0,e._)`${l} !== parseInt(${l})`;n.fail$data((0,e._)`(${a} === 0 || (${l} = ${i}/${a}, ${u}))`)}};return as.default=r,as}var os={},cs={},$d;function MS(){if($d)return cs;$d=1,Object.defineProperty(cs,"__esModule",{value:!0});function e(t){const r=t.length;let n=0,s=0,i;for(;s=55296&&i<=56319&&s(0,e._)`{limit: ${i}}`},code(i){const{keyword:a,data:o,schemaCode:c,it:l}=i,u=a==="maxLength"?e.operators.GT:e.operators.LT,p=l.opts.unicode===!1?(0,e._)`${o}.length`:(0,e._)`${(0,t.useFunc)(i.gen,r.default)}(${o})`;i.fail$data((0,e._)`${p} ${u} ${c}`)}};return os.default=s,os}var ls={},Dd;function US(){if(Dd)return ls;Dd=1,Object.defineProperty(ls,"__esModule",{value:!0});const e=sr(),t=Te(),r=Re(),s={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:i})=>(0,r.str)`must match pattern "${i}"`,params:({schemaCode:i})=>(0,r._)`{pattern: ${i}}`},code(i){const{gen:a,data:o,$data:c,schema:l,schemaCode:u,it:p}=i,b=p.opts.unicodeRegExp?"u":"";if(c){const{regExp:v}=p.opts.code,S=v.code==="new RegExp"?(0,r._)`new RegExp`:(0,t.useFunc)(a,v),E=a.let("valid");a.try(()=>a.assign(E,(0,r._)`${S}(${u}, ${b}).test(${o})`),()=>a.assign(E,!1)),i.fail$data((0,r._)`!${E}`)}else{const v=(0,e.usePattern)(i,l);i.fail$data((0,r._)`!${v}.test(${o})`)}}};return ls.default=s,ls}var us={},Td;function LS(){if(Td)return us;Td=1,Object.defineProperty(us,"__esModule",{value:!0});const e=Re(),r={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:n,schemaCode:s}){const i=n==="maxProperties"?"more":"fewer";return(0,e.str)`must NOT have ${i} than ${s} properties`},params:({schemaCode:n})=>(0,e._)`{limit: ${n}}`},code(n){const{keyword:s,data:i,schemaCode:a}=n,o=s==="maxProperties"?e.operators.GT:e.operators.LT;n.fail$data((0,e._)`Object.keys(${i}).length ${o} ${a}`)}};return us.default=r,us}var ds={},Md;function VS(){if(Md)return ds;Md=1,Object.defineProperty(ds,"__esModule",{value:!0});const e=sr(),t=Re(),r=Te(),s={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:i}})=>(0,t.str)`must have required property '${i}'`,params:({params:{missingProperty:i}})=>(0,t._)`{missingProperty: ${i}}`},code(i){const{gen:a,schema:o,schemaCode:c,data:l,$data:u,it:p}=i,{opts:b}=p;if(!u&&o.length===0)return;const v=o.length>=b.loopRequired;if(p.allErrors?S():E(),b.strictRequired){const f=i.parentSchema.properties,{definedProperties:w}=i.it;for(const P of o)if(f?.[P]===void 0&&!w.has(P)){const h=p.schemaEnv.baseId+p.errSchemaPath,_=`required property "${P}" is not defined at "${h}" (strictRequired)`;(0,r.checkStrictMode)(p,_,p.opts.strictRequired)}}function S(){if(v||u)i.block$data(t.nil,g);else for(const f of o)(0,e.checkReportMissingProp)(i,f)}function E(){const f=a.let("missing");if(v||u){const w=a.let("valid",!0);i.block$data(w,()=>y(f,w)),i.ok(w)}else a.if((0,e.checkMissingProp)(i,o,f)),(0,e.reportMissingProp)(i,f),a.else()}function g(){a.forOf("prop",c,f=>{i.setParams({missingProperty:f}),a.if((0,e.noPropertyInData)(a,l,f,b.ownProperties),()=>i.error())})}function y(f,w){i.setParams({missingProperty:f}),a.forOf(f,c,()=>{a.assign(w,(0,e.propertyInData)(a,l,f,b.ownProperties)),a.if((0,t.not)(w),()=>{i.error(),a.break()})},t.nil)}}};return ds.default=s,ds}var fs={},qd;function zS(){if(qd)return fs;qd=1,Object.defineProperty(fs,"__esModule",{value:!0});const e=Re(),r={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:n,schemaCode:s}){const i=n==="maxItems"?"more":"fewer";return(0,e.str)`must NOT have ${i} than ${s} items`},params:({schemaCode:n})=>(0,e._)`{limit: ${n}}`},code(n){const{keyword:s,data:i,schemaCode:a}=n,o=s==="maxItems"?e.operators.GT:e.operators.LT;n.fail$data((0,e._)`${i}.length ${o} ${a}`)}};return fs.default=r,fs}var hs={},ms={},Ud;function fl(){if(Ud)return ms;Ud=1,Object.defineProperty(ms,"__esModule",{value:!0});const e=eo();return e.code='require("ajv/dist/runtime/equal").default',ms.default=e,ms}var Ld;function BS(){if(Ld)return hs;Ld=1,Object.defineProperty(hs,"__esModule",{value:!0});const e=Va(),t=Re(),r=Te(),n=fl(),i={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:a,j:o}})=>(0,t.str)`must NOT have duplicate items (items ## ${o} and ${a} are identical)`,params:({params:{i:a,j:o}})=>(0,t._)`{i: ${a}, j: ${o}}`},code(a){const{gen:o,data:c,$data:l,schema:u,parentSchema:p,schemaCode:b,it:v}=a;if(!l&&!u)return;const S=o.let("valid"),E=p.items?(0,e.getSchemaTypes)(p.items):[];a.block$data(S,g,(0,t._)`${b} === false`),a.ok(S);function g(){const P=o.let("i",(0,t._)`${c}.length`),h=o.let("j");a.setParams({i:P,j:h}),o.assign(S,!0),o.if((0,t._)`${P} > 1`,()=>(y()?f:w)(P,h))}function y(){return E.length>0&&!E.some(P=>P==="object"||P==="array")}function f(P,h){const _=o.name("item"),O=(0,e.checkDataTypes)(E,_,v.opts.strictNumbers,e.DataType.Wrong),k=o.const("indices",(0,t._)`{}`);o.for((0,t._)`;${P}--;`,()=>{o.let(_,(0,t._)`${c}[${P}]`),o.if(O,(0,t._)`continue`),E.length>1&&o.if((0,t._)`typeof ${_} == "string"`,(0,t._)`${_} += "_"`),o.if((0,t._)`typeof ${k}[${_}] == "number"`,()=>{o.assign(h,(0,t._)`${k}[${_}]`),a.error(),o.assign(S,!1).break()}).code((0,t._)`${k}[${_}] = ${P}`)})}function w(P,h){const _=(0,r.useFunc)(o,n.default),O=o.name("outer");o.label(O).for((0,t._)`;${P}--;`,()=>o.for((0,t._)`${h} = ${P}; ${h}--;`,()=>o.if((0,t._)`${_}(${c}[${P}], ${c}[${h}])`,()=>{a.error(),o.assign(S,!1).break(O)})))}}};return hs.default=i,hs}var ps={},Vd;function HS(){if(Vd)return ps;Vd=1,Object.defineProperty(ps,"__esModule",{value:!0});const e=Re(),t=Te(),r=fl(),s={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:i})=>(0,e._)`{allowedValue: ${i}}`},code(i){const{gen:a,data:o,$data:c,schemaCode:l,schema:u}=i;c||u&&typeof u=="object"?i.fail$data((0,e._)`!${(0,t.useFunc)(a,r.default)}(${o}, ${l})`):i.fail((0,e._)`${u} !== ${o}`)}};return ps.default=s,ps}var ys={},zd;function KS(){if(zd)return ys;zd=1,Object.defineProperty(ys,"__esModule",{value:!0});const e=Re(),t=Te(),r=fl(),s={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:i})=>(0,e._)`{allowedValues: ${i}}`},code(i){const{gen:a,data:o,$data:c,schema:l,schemaCode:u,it:p}=i;if(!c&&l.length===0)throw new Error("enum must have non-empty array");const b=l.length>=p.opts.loopEnum;let v;const S=()=>v??(v=(0,t.useFunc)(a,r.default));let E;if(b||c)E=a.let("valid"),i.block$data(E,g);else{if(!Array.isArray(l))throw new Error("ajv implementation error");const f=a.const("vSchema",u);E=(0,e.or)(...l.map((w,P)=>y(f,P)))}i.pass(E);function g(){a.assign(E,!1),a.forOf("v",u,f=>a.if((0,e._)`${S()}(${o}, ${f})`,()=>a.assign(E,!0).break()))}function y(f,w){const P=l[w];return typeof P=="object"&&P!==null?(0,e._)`${S()}(${o}, ${f}[${w}])`:(0,e._)`${o} === ${P}`}}};return ys.default=s,ys}var Bd;function GS(){if(Bd)return is;Bd=1,Object.defineProperty(is,"__esModule",{value:!0});const e=DS(),t=TS(),r=qS(),n=US(),s=LS(),i=VS(),a=zS(),o=BS(),c=HS(),l=KS(),u=[e.default,t.default,r.default,n.default,s.default,i.default,a.default,o.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},c.default,l.default];return is.default=u,is}var gs={},Vn={},Hd;function Xm(){if(Hd)return Vn;Hd=1,Object.defineProperty(Vn,"__esModule",{value:!0}),Vn.validateAdditionalItems=void 0;const e=Re(),t=Te(),n={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:i}})=>(0,e.str)`must NOT have more than ${i} items`,params:({params:{len:i}})=>(0,e._)`{limit: ${i}}`},code(i){const{parentSchema:a,it:o}=i,{items:c}=a;if(!Array.isArray(c)){(0,t.checkStrictMode)(o,'"additionalItems" is ignored when "items" is not an array of schemas');return}s(i,c)}};function s(i,a){const{gen:o,schema:c,data:l,keyword:u,it:p}=i;p.items=!0;const b=o.const("len",(0,e._)`${l}.length`);if(c===!1)i.setParams({len:a.length}),i.pass((0,e._)`${b} <= ${a.length}`);else if(typeof c=="object"&&!(0,t.alwaysValidSchema)(p,c)){const S=o.var("valid",(0,e._)`${b} <= ${a.length}`);o.if((0,e.not)(S),()=>v(S)),i.ok(S)}function v(S){o.forRange("i",a.length,b,E=>{i.subschema({keyword:u,dataProp:E,dataPropType:t.Type.Num},S),p.allErrors||o.if((0,e.not)(S),()=>o.break())})}}return Vn.validateAdditionalItems=s,Vn.default=n,Vn}var vs={},zn={},Kd;function Zm(){if(Kd)return zn;Kd=1,Object.defineProperty(zn,"__esModule",{value:!0}),zn.validateTuple=void 0;const e=Re(),t=Te(),r=sr(),n={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(i){const{schema:a,it:o}=i;if(Array.isArray(a))return s(i,"additionalItems",a);o.items=!0,!(0,t.alwaysValidSchema)(o,a)&&i.ok((0,r.validateArray)(i))}};function s(i,a,o=i.schema){const{gen:c,parentSchema:l,data:u,keyword:p,it:b}=i;E(l),b.opts.unevaluated&&o.length&&b.items!==!0&&(b.items=t.mergeEvaluated.items(c,o.length,b.items));const v=c.name("valid"),S=c.const("len",(0,e._)`${u}.length`);o.forEach((g,y)=>{(0,t.alwaysValidSchema)(b,g)||(c.if((0,e._)`${S} > ${y}`,()=>i.subschema({keyword:p,schemaProp:y,dataProp:y},v)),i.ok(v))});function E(g){const{opts:y,errSchemaPath:f}=b,w=o.length,P=w===g.minItems&&(w===g.maxItems||g[a]===!1);if(y.strictTuples&&!P){const h=`"${p}" is ${w}-tuple, but minItems or maxItems/${a} are not specified or different at path "${f}"`;(0,t.checkStrictMode)(b,h,y.strictTuples)}}}return zn.validateTuple=s,zn.default=n,zn}var Gd;function WS(){if(Gd)return vs;Gd=1,Object.defineProperty(vs,"__esModule",{value:!0});const e=Zm(),t={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:r=>(0,e.validateTuple)(r,"items")};return vs.default=t,vs}var bs={},Wd;function JS(){if(Wd)return bs;Wd=1,Object.defineProperty(bs,"__esModule",{value:!0});const e=Re(),t=Te(),r=sr(),n=Xm(),i={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:a}})=>(0,e.str)`must NOT have more than ${a} items`,params:({params:{len:a}})=>(0,e._)`{limit: ${a}}`},code(a){const{schema:o,parentSchema:c,it:l}=a,{prefixItems:u}=c;l.items=!0,!(0,t.alwaysValidSchema)(l,o)&&(u?(0,n.validateAdditionalItems)(a,u):a.ok((0,r.validateArray)(a)))}};return bs.default=i,bs}var _s={},Jd;function YS(){if(Jd)return _s;Jd=1,Object.defineProperty(_s,"__esModule",{value:!0});const e=Re(),t=Te(),n={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:s,max:i}})=>i===void 0?(0,e.str)`must contain at least ${s} valid item(s)`:(0,e.str)`must contain at least ${s} and no more than ${i} valid item(s)`,params:({params:{min:s,max:i}})=>i===void 0?(0,e._)`{minContains: ${s}}`:(0,e._)`{minContains: ${s}, maxContains: ${i}}`},code(s){const{gen:i,schema:a,parentSchema:o,data:c,it:l}=s;let u,p;const{minContains:b,maxContains:v}=o;l.opts.next?(u=b===void 0?1:b,p=v):u=1;const S=i.const("len",(0,e._)`${c}.length`);if(s.setParams({min:u,max:p}),p===void 0&&u===0){(0,t.checkStrictMode)(l,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(p!==void 0&&u>p){(0,t.checkStrictMode)(l,'"minContains" > "maxContains" is always invalid'),s.fail();return}if((0,t.alwaysValidSchema)(l,a)){let w=(0,e._)`${S} >= ${u}`;p!==void 0&&(w=(0,e._)`${w} && ${S} <= ${p}`),s.pass(w);return}l.items=!0;const E=i.name("valid");p===void 0&&u===1?y(E,()=>i.if(E,()=>i.break())):u===0?(i.let(E,!0),p!==void 0&&i.if((0,e._)`${c}.length > 0`,g)):(i.let(E,!1),g()),s.result(E,()=>s.reset());function g(){const w=i.name("_valid"),P=i.let("count",0);y(w,()=>i.if(w,()=>f(P)))}function y(w,P){i.forRange("i",0,S,h=>{s.subschema({keyword:"contains",dataProp:h,dataPropType:t.Type.Num,compositeRule:!0},w),P()})}function f(w){i.code((0,e._)`${w}++`),p===void 0?i.if((0,e._)`${w} >= ${u}`,()=>i.assign(E,!0).break()):(i.if((0,e._)`${w} > ${p}`,()=>i.assign(E,!1).break()),u===1?i.assign(E,!0):i.if((0,e._)`${w} >= ${u}`,()=>i.assign(E,!0)))}}};return _s.default=n,_s}var Qo={},Yd;function XS(){return Yd||(Yd=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;const t=Re(),r=Te(),n=sr();e.error={message:({params:{property:c,depsCount:l,deps:u}})=>{const p=l===1?"property":"properties";return(0,t.str)`must have ${p} ${u} when property ${c} is present`},params:({params:{property:c,depsCount:l,deps:u,missingProperty:p}})=>(0,t._)`{property: ${c}, + missingProperty: ${p}, + depsCount: ${l}, + deps: ${u}}`};const s={keyword:"dependencies",type:"object",schemaType:"object",error:e.error,code(c){const[l,u]=i(c);a(c,l),o(c,u)}};function i({schema:c}){const l={},u={};for(const p in c){if(p==="__proto__")continue;const b=Array.isArray(c[p])?l:u;b[p]=c[p]}return[l,u]}function a(c,l=c.schema){const{gen:u,data:p,it:b}=c;if(Object.keys(l).length===0)return;const v=u.let("missing");for(const S in l){const E=l[S];if(E.length===0)continue;const g=(0,n.propertyInData)(u,p,S,b.opts.ownProperties);c.setParams({property:S,depsCount:E.length,deps:E.join(", ")}),b.allErrors?u.if(g,()=>{for(const y of E)(0,n.checkReportMissingProp)(c,y)}):(u.if((0,t._)`${g} && (${(0,n.checkMissingProp)(c,E,v)})`),(0,n.reportMissingProp)(c,v),u.else())}}e.validatePropertyDeps=a;function o(c,l=c.schema){const{gen:u,data:p,keyword:b,it:v}=c,S=u.name("valid");for(const E in l)(0,r.alwaysValidSchema)(v,l[E])||(u.if((0,n.propertyInData)(u,p,E,v.opts.ownProperties),()=>{const g=c.subschema({keyword:b,schemaProp:E},S);c.mergeValidEvaluated(g,S)},()=>u.var(S,!0)),c.ok(S))}e.validateSchemaDeps=o,e.default=s})(Qo)),Qo}var Ss={},Xd;function ZS(){if(Xd)return Ss;Xd=1,Object.defineProperty(Ss,"__esModule",{value:!0});const e=Re(),t=Te(),n={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:s})=>(0,e._)`{propertyName: ${s.propertyName}}`},code(s){const{gen:i,schema:a,data:o,it:c}=s;if((0,t.alwaysValidSchema)(c,a))return;const l=i.name("valid");i.forIn("key",o,u=>{s.setParams({propertyName:u}),s.subschema({keyword:"propertyNames",data:u,dataTypes:["string"],propertyName:u,compositeRule:!0},l),i.if((0,e.not)(l),()=>{s.error(!0),c.allErrors||i.break()})}),s.ok(l)}};return Ss.default=n,Ss}var ws={},Zd;function Qm(){if(Zd)return ws;Zd=1,Object.defineProperty(ws,"__esModule",{value:!0});const e=sr(),t=Re(),r=rn(),n=Te(),i={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:a})=>(0,t._)`{additionalProperty: ${a.additionalProperty}}`},code(a){const{gen:o,schema:c,parentSchema:l,data:u,errsCount:p,it:b}=a;if(!p)throw new Error("ajv implementation error");const{allErrors:v,opts:S}=b;if(b.props=!0,S.removeAdditional!=="all"&&(0,n.alwaysValidSchema)(b,c))return;const E=(0,e.allSchemaProperties)(l.properties),g=(0,e.allSchemaProperties)(l.patternProperties);y(),a.ok((0,t._)`${p} === ${r.default.errors}`);function y(){o.forIn("key",u,_=>{!E.length&&!g.length?P(_):o.if(f(_),()=>P(_))})}function f(_){let O;if(E.length>8){const k=(0,n.schemaRefOrVal)(b,l.properties,"properties");O=(0,e.isOwnProperty)(o,k,_)}else E.length?O=(0,t.or)(...E.map(k=>(0,t._)`${_} === ${k}`)):O=t.nil;return g.length&&(O=(0,t.or)(O,...g.map(k=>(0,t._)`${(0,e.usePattern)(a,k)}.test(${_})`))),(0,t.not)(O)}function w(_){o.code((0,t._)`delete ${u}[${_}]`)}function P(_){if(S.removeAdditional==="all"||S.removeAdditional&&c===!1){w(_);return}if(c===!1){a.setParams({additionalProperty:_}),a.error(),v||o.break();return}if(typeof c=="object"&&!(0,n.alwaysValidSchema)(b,c)){const O=o.name("valid");S.removeAdditional==="failing"?(h(_,O,!1),o.if((0,t.not)(O),()=>{a.reset(),w(_)})):(h(_,O),v||o.if((0,t.not)(O),()=>o.break()))}}function h(_,O,k){const $={keyword:"additionalProperties",dataProp:_,dataPropType:n.Type.Str};k===!1&&Object.assign($,{compositeRule:!0,createErrors:!1,allErrors:!1}),a.subschema($,O)}}};return ws.default=i,ws}var Cs={},Qd;function QS(){if(Qd)return Cs;Qd=1,Object.defineProperty(Cs,"__esModule",{value:!0});const e=ro(),t=sr(),r=Te(),n=Qm(),s={keyword:"properties",type:"object",schemaType:"object",code(i){const{gen:a,schema:o,parentSchema:c,data:l,it:u}=i;u.opts.removeAdditional==="all"&&c.additionalProperties===void 0&&n.default.code(new e.KeywordCxt(u,n.default,"additionalProperties"));const p=(0,t.allSchemaProperties)(o);for(const g of p)u.definedProperties.add(g);u.opts.unevaluated&&p.length&&u.props!==!0&&(u.props=r.mergeEvaluated.props(a,(0,r.toHash)(p),u.props));const b=p.filter(g=>!(0,r.alwaysValidSchema)(u,o[g]));if(b.length===0)return;const v=a.name("valid");for(const g of b)S(g)?E(g):(a.if((0,t.propertyInData)(a,l,g,u.opts.ownProperties)),E(g),u.allErrors||a.else().var(v,!0),a.endIf()),i.it.definedProperties.add(g),i.ok(v);function S(g){return u.opts.useDefaults&&!u.compositeRule&&o[g].default!==void 0}function E(g){i.subschema({keyword:"properties",schemaProp:g,dataProp:g},v)}}};return Cs.default=s,Cs}var Es={},ef;function ew(){if(ef)return Es;ef=1,Object.defineProperty(Es,"__esModule",{value:!0});const e=sr(),t=Re(),r=Te(),n=Te(),s={keyword:"patternProperties",type:"object",schemaType:"object",code(i){const{gen:a,schema:o,data:c,parentSchema:l,it:u}=i,{opts:p}=u,b=(0,e.allSchemaProperties)(o),v=b.filter(P=>(0,r.alwaysValidSchema)(u,o[P]));if(b.length===0||v.length===b.length&&(!u.opts.unevaluated||u.props===!0))return;const S=p.strictSchema&&!p.allowMatchingProperties&&l.properties,E=a.name("valid");u.props!==!0&&!(u.props instanceof t.Name)&&(u.props=(0,n.evaluatedPropsToName)(a,u.props));const{props:g}=u;y();function y(){for(const P of b)S&&f(P),u.allErrors?w(P):(a.var(E,!0),w(P),a.if(E))}function f(P){for(const h in S)new RegExp(P).test(h)&&(0,r.checkStrictMode)(u,`property ${h} matches pattern ${P} (use allowMatchingProperties)`)}function w(P){a.forIn("key",c,h=>{a.if((0,t._)`${(0,e.usePattern)(i,P)}.test(${h})`,()=>{const _=v.includes(P);_||i.subschema({keyword:"patternProperties",schemaProp:P,dataProp:h,dataPropType:n.Type.Str},E),u.opts.unevaluated&&g!==!0?a.assign((0,t._)`${g}[${h}]`,!0):!_&&!u.allErrors&&a.if((0,t.not)(E),()=>a.break())})})}}};return Es.default=s,Es}var As={},tf;function tw(){if(tf)return As;tf=1,Object.defineProperty(As,"__esModule",{value:!0});const e=Te(),t={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(r){const{gen:n,schema:s,it:i}=r;if((0,e.alwaysValidSchema)(i,s)){r.fail();return}const a=n.name("valid");r.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},a),r.failResult(a,()=>r.reset(),()=>r.error())},error:{message:"must NOT be valid"}};return As.default=t,As}var xs={},rf;function rw(){if(rf)return xs;rf=1,Object.defineProperty(xs,"__esModule",{value:!0});const t={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:sr().validateUnion,error:{message:"must match a schema in anyOf"}};return xs.default=t,xs}var Ps={},nf;function nw(){if(nf)return Ps;nf=1,Object.defineProperty(Ps,"__esModule",{value:!0});const e=Re(),t=Te(),n={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:s})=>(0,e._)`{passingSchemas: ${s.passing}}`},code(s){const{gen:i,schema:a,parentSchema:o,it:c}=s;if(!Array.isArray(a))throw new Error("ajv implementation error");if(c.opts.discriminator&&o.discriminator)return;const l=a,u=i.let("valid",!1),p=i.let("passing",null),b=i.name("_valid");s.setParams({passing:p}),i.block(v),s.result(u,()=>s.reset(),()=>s.error(!0));function v(){l.forEach((S,E)=>{let g;(0,t.alwaysValidSchema)(c,S)?i.var(b,!0):g=s.subschema({keyword:"oneOf",schemaProp:E,compositeRule:!0},b),E>0&&i.if((0,e._)`${b} && ${u}`).assign(u,!1).assign(p,(0,e._)`[${p}, ${E}]`).else(),i.if(b,()=>{i.assign(u,!0),i.assign(p,E),g&&s.mergeEvaluated(g,e.Name)})})}}};return Ps.default=n,Ps}var Os={},sf;function iw(){if(sf)return Os;sf=1,Object.defineProperty(Os,"__esModule",{value:!0});const e=Te(),t={keyword:"allOf",schemaType:"array",code(r){const{gen:n,schema:s,it:i}=r;if(!Array.isArray(s))throw new Error("ajv implementation error");const a=n.name("valid");s.forEach((o,c)=>{if((0,e.alwaysValidSchema)(i,o))return;const l=r.subschema({keyword:"allOf",schemaProp:c},a);r.ok(a),r.mergeEvaluated(l)})}};return Os.default=t,Os}var js={},af;function sw(){if(af)return js;af=1,Object.defineProperty(js,"__esModule",{value:!0});const e=Re(),t=Te(),n={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:i})=>(0,e.str)`must match "${i.ifClause}" schema`,params:({params:i})=>(0,e._)`{failingKeyword: ${i.ifClause}}`},code(i){const{gen:a,parentSchema:o,it:c}=i;o.then===void 0&&o.else===void 0&&(0,t.checkStrictMode)(c,'"if" without "then" and "else" is ignored');const l=s(c,"then"),u=s(c,"else");if(!l&&!u)return;const p=a.let("valid",!0),b=a.name("_valid");if(v(),i.reset(),l&&u){const E=a.let("ifClause");i.setParams({ifClause:E}),a.if(b,S("then",E),S("else",E))}else l?a.if(b,S("then")):a.if((0,e.not)(b),S("else"));i.pass(p,()=>i.error(!0));function v(){const E=i.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},b);i.mergeEvaluated(E)}function S(E,g){return()=>{const y=i.subschema({keyword:E},b);a.assign(p,b),i.mergeValidEvaluated(y,p),g?a.assign(g,(0,e._)`${E}`):i.setParams({ifClause:E})}}}};function s(i,a){const o=i.schema[a];return o!==void 0&&!(0,t.alwaysValidSchema)(i,o)}return js.default=n,js}var ks={},of;function aw(){if(of)return ks;of=1,Object.defineProperty(ks,"__esModule",{value:!0});const e=Te(),t={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:r,parentSchema:n,it:s}){n.if===void 0&&(0,e.checkStrictMode)(s,`"${r}" without "if" is ignored`)}};return ks.default=t,ks}var cf;function ow(){if(cf)return gs;cf=1,Object.defineProperty(gs,"__esModule",{value:!0});const e=Xm(),t=WS(),r=Zm(),n=JS(),s=YS(),i=XS(),a=ZS(),o=Qm(),c=QS(),l=ew(),u=tw(),p=rw(),b=nw(),v=iw(),S=sw(),E=aw();function g(y=!1){const f=[u.default,p.default,b.default,v.default,S.default,E.default,a.default,o.default,i.default,c.default,l.default];return y?f.push(t.default,n.default):f.push(e.default,r.default),f.push(s.default),f}return gs.default=g,gs}var Ns={},Is={},lf;function cw(){if(lf)return Is;lf=1,Object.defineProperty(Is,"__esModule",{value:!0});const e=Re(),r={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:n})=>(0,e.str)`must match format "${n}"`,params:({schemaCode:n})=>(0,e._)`{format: ${n}}`},code(n,s){const{gen:i,data:a,$data:o,schema:c,schemaCode:l,it:u}=n,{opts:p,errSchemaPath:b,schemaEnv:v,self:S}=u;if(!p.validateFormats)return;o?E():g();function E(){const y=i.scopeValue("formats",{ref:S.formats,code:p.code.formats}),f=i.const("fDef",(0,e._)`${y}[${l}]`),w=i.let("fType"),P=i.let("format");i.if((0,e._)`typeof ${f} == "object" && !(${f} instanceof RegExp)`,()=>i.assign(w,(0,e._)`${f}.type || "string"`).assign(P,(0,e._)`${f}.validate`),()=>i.assign(w,(0,e._)`"string"`).assign(P,f)),n.fail$data((0,e.or)(h(),_()));function h(){return p.strictSchema===!1?e.nil:(0,e._)`${l} && !${P}`}function _(){const O=v.$async?(0,e._)`(${f}.async ? await ${P}(${a}) : ${P}(${a}))`:(0,e._)`${P}(${a})`,k=(0,e._)`(typeof ${P} == "function" ? ${O} : ${P}.test(${a}))`;return(0,e._)`${P} && ${P} !== true && ${w} === ${s} && !${k}`}}function g(){const y=S.formats[c];if(!y){h();return}if(y===!0)return;const[f,w,P]=_(y);f===s&&n.pass(O());function h(){if(p.strictSchema===!1){S.logger.warn(k());return}throw new Error(k());function k(){return`unknown format "${c}" ignored in schema at path "${b}"`}}function _(k){const $=k instanceof RegExp?(0,e.regexpCode)(k):p.code.formats?(0,e._)`${p.code.formats}${(0,e.getProperty)(c)}`:void 0,M=i.scopeValue("formats",{key:c,ref:k,code:$});return typeof k=="object"&&!(k instanceof RegExp)?[k.type||"string",k.validate,(0,e._)`${M}.validate`]:["string",k,M]}function O(){if(typeof y=="object"&&!(y instanceof RegExp)&&y.async){if(!v.$async)throw new Error("async format in sync schema");return(0,e._)`await ${P}(${a})`}return typeof w=="function"?(0,e._)`${P}(${a})`:(0,e._)`${P}.test(${a})`}}}};return Is.default=r,Is}var uf;function lw(){if(uf)return Ns;uf=1,Object.defineProperty(Ns,"__esModule",{value:!0});const t=[cw().default];return Ns.default=t,Ns}var pn={},df;function uw(){return df||(df=1,Object.defineProperty(pn,"__esModule",{value:!0}),pn.contentVocabulary=pn.metadataVocabulary=void 0,pn.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],pn.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]),pn}var ff;function dw(){if(ff)return ts;ff=1,Object.defineProperty(ts,"__esModule",{value:!0});const e=FS(),t=GS(),r=ow(),n=lw(),s=uw(),i=[e.default,t.default,(0,r.default)(),n.default,s.metadataVocabulary,s.contentVocabulary];return ts.default=i,ts}var Rs={},_i={},hf;function fw(){if(hf)return _i;hf=1,Object.defineProperty(_i,"__esModule",{value:!0}),_i.DiscrError=void 0;var e;return(function(t){t.Tag="tag",t.Mapping="mapping"})(e||(_i.DiscrError=e={})),_i}var mf;function hw(){if(mf)return Rs;mf=1,Object.defineProperty(Rs,"__esModule",{value:!0});const e=Re(),t=fw(),r=dl(),n=no(),s=Te(),a={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:o,tagName:c}})=>o===t.DiscrError.Tag?`tag "${c}" must be string`:`value of tag "${c}" must be in oneOf`,params:({params:{discrError:o,tag:c,tagName:l}})=>(0,e._)`{error: ${o}, tag: ${l}, tagValue: ${c}}`},code(o){const{gen:c,data:l,schema:u,parentSchema:p,it:b}=o,{oneOf:v}=p;if(!b.opts.discriminator)throw new Error("discriminator: requires discriminator option");const S=u.propertyName;if(typeof S!="string")throw new Error("discriminator: requires propertyName");if(u.mapping)throw new Error("discriminator: mapping is not supported");if(!v)throw new Error("discriminator: requires oneOf keyword");const E=c.let("valid",!1),g=c.const("tag",(0,e._)`${l}${(0,e.getProperty)(S)}`);c.if((0,e._)`typeof ${g} == "string"`,()=>y(),()=>o.error(!1,{discrError:t.DiscrError.Tag,tag:g,tagName:S})),o.ok(E);function y(){const P=w();c.if(!1);for(const h in P)c.elseIf((0,e._)`${g} === ${h}`),c.assign(E,f(P[h]));c.else(),o.error(!1,{discrError:t.DiscrError.Mapping,tag:g,tagName:S}),c.endIf()}function f(P){const h=c.name("valid"),_=o.subschema({keyword:"oneOf",schemaProp:P},h);return o.mergeEvaluated(_,e.Name),h}function w(){var P;const h={},_=k(p);let O=!0;for(let q=0;qthis.addVocabulary(S)),this.opts.discriminator&&this.addKeyword(s.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const S=this.opts.$data?this.$dataMetaSchema(i,a):i;this.addMetaSchema(S,o,!1),this.refs["http://json-schema.org/schema"]=o}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(o)?o:void 0)}}t.Ajv=c,e.exports=t=c,e.exports.Ajv=c,Object.defineProperty(t,"__esModule",{value:!0}),t.default=c;var l=ro();Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}});var u=Re();Object.defineProperty(t,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});var p=ul();Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return p.default}});var b=no();Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return b.default}})})(Yi,Yi.exports)),Yi.exports}var ww=Sw();const Cw=Fi(ww);var $s={exports:{}},ec={},yf;function Ew(){return yf||(yf=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.formatNames=e.fastFormats=e.fullFormats=void 0;function t($,M){return{validate:$,compare:M}}e.fullFormats={date:t(i,a),time:t(c,l),"date-time":t(p,b),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:E,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:k,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:y,int32:{type:"number",validate:P},int64:{type:"number",validate:h},float:{type:"number",validate:_},double:{type:"number",validate:_},password:!0,binary:!0},e.fastFormats={...e.fullFormats,date:t(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,a),time:t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,l),"date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,b),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},e.formatNames=Object.keys(e.fullFormats);function r($){return $%4===0&&($%100!==0||$%400===0)}const n=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,s=[0,31,28,31,30,31,30,31,31,30,31,30,31];function i($){const M=n.exec($);if(!M)return!1;const q=+M[1],U=+M[2],L=+M[3];return U>=1&&U<=12&&L>=1&&L<=(U===2&&r(q)?29:s[U])}function a($,M){if($&&M)return $>M?1:$M?1:$=f}function h($){return Number.isInteger($)}function _(){return!0}const O=/[^\\]\\Z/;function k($){if(O.test($))return!1;try{return new RegExp($),!0}catch{return!1}}})(ec)),ec}var tc={},Fs={exports:{}},rc={},Er={},yn={},nc={},ic={},sc={},gf;function za(){return gf||(gf=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class t{}e._CodeOrName=t,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class r extends t{constructor(f){if(super(),!e.IDENTIFIER.test(f))throw new Error("CodeGen: name must be a valid identifier");this.str=f}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=r;class n extends t{constructor(f){super(),this._items=typeof f=="string"?[f]:f}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const f=this._items[0];return f===""||f==='""'}get str(){var f;return(f=this._str)!==null&&f!==void 0?f:this._str=this._items.reduce((w,P)=>`${w}${P}`,"")}get names(){var f;return(f=this._names)!==null&&f!==void 0?f:this._names=this._items.reduce((w,P)=>(P instanceof r&&(w[P.str]=(w[P.str]||0)+1),w),{})}}e._Code=n,e.nil=new n("");function s(y,...f){const w=[y[0]];let P=0;for(;P{if(p.scopePath===void 0)throw new Error(`CodeGen: name "${p}" has no value`);return(0,t._)`${l}${p.scopePath}`})}scopeCode(l=this._values,u,p){return this._reduceValues(l,b=>{if(b.value===void 0)throw new Error(`CodeGen: name "${b}" has no value`);return b.value.code},u,p)}_reduceValues(l,u,p={},b){let v=t.nil;for(const S in l){const E=l[S];if(!E)continue;const g=p[S]=p[S]||new Map;E.forEach(y=>{if(g.has(y))return;g.set(y,n.Started);let f=u(y);if(f){const w=this.opts.es5?e.varKinds.var:e.varKinds.const;v=(0,t._)`${v}${w} ${y} = ${f};${this.opts._n}`}else if(f=b?.(y))v=(0,t._)`${v}${f}${this.opts._n}`;else throw new r(y);g.set(y,n.Completed)})}return v}}e.ValueScope=o})(ac)),ac}var _f;function Oe(){return _f||(_f=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const t=za(),r=bf();var n=za();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return n._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return n.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return n.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return n.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return n.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return n.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return n.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return n.Name}});var s=bf();Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return s.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return s.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return s.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return s.varKinds}}),e.operators={GT:new t._Code(">"),GTE:new t._Code(">="),LT:new t._Code("<"),LTE:new t._Code("<="),EQ:new t._Code("==="),NEQ:new t._Code("!=="),NOT:new t._Code("!"),OR:new t._Code("||"),AND:new t._Code("&&"),ADD:new t._Code("+")};class i{optimizeNodes(){return this}optimizeNames(d,x){return this}}class a extends i{constructor(d,x,I){super(),this.varKind=d,this.name=x,this.rhs=I}render({es5:d,_n:x}){const I=d?r.varKinds.var:this.varKind,T=this.rhs===void 0?"":` = ${this.rhs}`;return`${I} ${this.name}${T};`+x}optimizeNames(d,x){if(d[this.name.str])return this.rhs&&(this.rhs=z(this.rhs,d,x)),this}get names(){return this.rhs instanceof t._CodeOrName?this.rhs.names:{}}}class o extends i{constructor(d,x,I){super(),this.lhs=d,this.rhs=x,this.sideEffects=I}render({_n:d}){return`${this.lhs} = ${this.rhs};`+d}optimizeNames(d,x){if(!(this.lhs instanceof t.Name&&!d[this.lhs.str]&&!this.sideEffects))return this.rhs=z(this.rhs,d,x),this}get names(){const d=this.lhs instanceof t.Name?{}:{...this.lhs.names};return L(d,this.rhs)}}class c extends o{constructor(d,x,I,T){super(d,I,T),this.op=x}render({_n:d}){return`${this.lhs} ${this.op}= ${this.rhs};`+d}}class l extends i{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`${this.label}:`+d}}class u extends i{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`break${this.label?` ${this.label}`:""};`+d}}class p extends i{constructor(d){super(),this.error=d}render({_n:d}){return`throw ${this.error};`+d}get names(){return this.error.names}}class b extends i{constructor(d){super(),this.code=d}render({_n:d}){return`${this.code};`+d}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(d,x){return this.code=z(this.code,d,x),this}get names(){return this.code instanceof t._CodeOrName?this.code.names:{}}}class v extends i{constructor(d=[]){super(),this.nodes=d}render(d){return this.nodes.reduce((x,I)=>x+I.render(d),"")}optimizeNodes(){const{nodes:d}=this;let x=d.length;for(;x--;){const I=d[x].optimizeNodes();Array.isArray(I)?d.splice(x,1,...I):I?d[x]=I:d.splice(x,1)}return d.length>0?this:void 0}optimizeNames(d,x){const{nodes:I}=this;let T=I.length;for(;T--;){const F=I[T];F.optimizeNames(d,x)||(G(d,F.names),I.splice(T,1))}return I.length>0?this:void 0}get names(){return this.nodes.reduce((d,x)=>U(d,x.names),{})}}class S extends v{render(d){return"{"+d._n+super.render(d)+"}"+d._n}}class E extends v{}class g extends S{}g.kind="else";class y extends S{constructor(d,x){super(x),this.condition=d}render(d){let x=`if(${this.condition})`+super.render(d);return this.else&&(x+="else "+this.else.render(d)),x}optimizeNodes(){super.optimizeNodes();const d=this.condition;if(d===!0)return this.nodes;let x=this.else;if(x){const I=x.optimizeNodes();x=this.else=Array.isArray(I)?new g(I):I}if(x)return d===!1?x instanceof y?x:x.nodes:this.nodes.length?this:new y(J(d),x instanceof y?[x]:x.nodes);if(!(d===!1||!this.nodes.length))return this}optimizeNames(d,x){var I;if(this.else=(I=this.else)===null||I===void 0?void 0:I.optimizeNames(d,x),!!(super.optimizeNames(d,x)||this.else))return this.condition=z(this.condition,d,x),this}get names(){const d=super.names;return L(d,this.condition),this.else&&U(d,this.else.names),d}}y.kind="if";class f extends S{}f.kind="for";class w extends f{constructor(d){super(),this.iteration=d}render(d){return`for(${this.iteration})`+super.render(d)}optimizeNames(d,x){if(super.optimizeNames(d,x))return this.iteration=z(this.iteration,d,x),this}get names(){return U(super.names,this.iteration.names)}}class P extends f{constructor(d,x,I,T){super(),this.varKind=d,this.name=x,this.from=I,this.to=T}render(d){const x=d.es5?r.varKinds.var:this.varKind,{name:I,from:T,to:F}=this;return`for(${x} ${I}=${T}; ${I}<${F}; ${I}++)`+super.render(d)}get names(){const d=L(super.names,this.from);return L(d,this.to)}}class h extends f{constructor(d,x,I,T){super(),this.loop=d,this.varKind=x,this.name=I,this.iterable=T}render(d){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(d)}optimizeNames(d,x){if(super.optimizeNames(d,x))return this.iterable=z(this.iterable,d,x),this}get names(){return U(super.names,this.iterable.names)}}class _ extends S{constructor(d,x,I){super(),this.name=d,this.args=x,this.async=I}render(d){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(d)}}_.kind="func";class O extends v{render(d){return"return "+super.render(d)}}O.kind="return";class k extends S{render(d){let x="try"+super.render(d);return this.catch&&(x+=this.catch.render(d)),this.finally&&(x+=this.finally.render(d)),x}optimizeNodes(){var d,x;return super.optimizeNodes(),(d=this.catch)===null||d===void 0||d.optimizeNodes(),(x=this.finally)===null||x===void 0||x.optimizeNodes(),this}optimizeNames(d,x){var I,T;return super.optimizeNames(d,x),(I=this.catch)===null||I===void 0||I.optimizeNames(d,x),(T=this.finally)===null||T===void 0||T.optimizeNames(d,x),this}get names(){const d=super.names;return this.catch&&U(d,this.catch.names),this.finally&&U(d,this.finally.names),d}}class $ extends S{constructor(d){super(),this.error=d}render(d){return`catch(${this.error})`+super.render(d)}}$.kind="catch";class M extends S{render(d){return"finally"+super.render(d)}}M.kind="finally";class q{constructor(d,x={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...x,_n:x.lines?` +`:""},this._extScope=d,this._scope=new r.Scope({parent:d}),this._nodes=[new E]}toString(){return this._root.render(this.opts)}name(d){return this._scope.name(d)}scopeName(d){return this._extScope.name(d)}scopeValue(d,x){const I=this._extScope.value(d,x);return(this._values[I.prefix]||(this._values[I.prefix]=new Set)).add(I),I}getScopeValue(d,x){return this._extScope.getValue(d,x)}scopeRefs(d){return this._extScope.scopeRefs(d,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(d,x,I,T){const F=this._scope.toName(x);return I!==void 0&&T&&(this._constants[F.str]=I),this._leafNode(new a(d,F,I)),F}const(d,x,I){return this._def(r.varKinds.const,d,x,I)}let(d,x,I){return this._def(r.varKinds.let,d,x,I)}var(d,x,I){return this._def(r.varKinds.var,d,x,I)}assign(d,x,I){return this._leafNode(new o(d,x,I))}add(d,x){return this._leafNode(new c(d,e.operators.ADD,x))}code(d){return typeof d=="function"?d():d!==t.nil&&this._leafNode(new b(d)),this}object(...d){const x=["{"];for(const[I,T]of d)x.length>1&&x.push(","),x.push(I),(I!==T||this.opts.es5)&&(x.push(":"),(0,t.addCodeArg)(x,T));return x.push("}"),new t._Code(x)}if(d,x,I){if(this._blockNode(new y(d)),x&&I)this.code(x).else().code(I).endIf();else if(x)this.code(x).endIf();else if(I)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(d){return this._elseNode(new y(d))}else(){return this._elseNode(new g)}endIf(){return this._endBlockNode(y,g)}_for(d,x){return this._blockNode(d),x&&this.code(x).endFor(),this}for(d,x){return this._for(new w(d),x)}forRange(d,x,I,T,F=this.opts.es5?r.varKinds.var:r.varKinds.let){const B=this._scope.toName(d);return this._for(new P(F,B,x,I),()=>T(B))}forOf(d,x,I,T=r.varKinds.const){const F=this._scope.toName(d);if(this.opts.es5){const B=x instanceof t.Name?x:this.var("_arr",x);return this.forRange("_i",0,(0,t._)`${B}.length`,H=>{this.var(F,(0,t._)`${B}[${H}]`),I(F)})}return this._for(new h("of",T,F,x),()=>I(F))}forIn(d,x,I,T=this.opts.es5?r.varKinds.var:r.varKinds.const){if(this.opts.ownProperties)return this.forOf(d,(0,t._)`Object.keys(${x})`,I);const F=this._scope.toName(d);return this._for(new h("in",T,F,x),()=>I(F))}endFor(){return this._endBlockNode(f)}label(d){return this._leafNode(new l(d))}break(d){return this._leafNode(new u(d))}return(d){const x=new O;if(this._blockNode(x),this.code(d),x.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(O)}try(d,x,I){if(!x&&!I)throw new Error('CodeGen: "try" without "catch" and "finally"');const T=new k;if(this._blockNode(T),this.code(d),x){const F=this.name("e");this._currNode=T.catch=new $(F),x(F)}return I&&(this._currNode=T.finally=new M,this.code(I)),this._endBlockNode($,M)}throw(d){return this._leafNode(new p(d))}block(d,x){return this._blockStarts.push(this._nodes.length),d&&this.code(d).endBlock(x),this}endBlock(d){const x=this._blockStarts.pop();if(x===void 0)throw new Error("CodeGen: not in self-balancing block");const I=this._nodes.length-x;if(I<0||d!==void 0&&I!==d)throw new Error(`CodeGen: wrong number of nodes: ${I} vs ${d} expected`);return this._nodes.length=x,this}func(d,x=t.nil,I,T){return this._blockNode(new _(d,x,I)),T&&this.code(T).endFunc(),this}endFunc(){return this._endBlockNode(_)}optimize(d=1){for(;d-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(d){return this._currNode.nodes.push(d),this}_blockNode(d){this._currNode.nodes.push(d),this._nodes.push(d)}_endBlockNode(d,x){const I=this._currNode;if(I instanceof d||x&&I instanceof x)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${x?`${d.kind}/${x.kind}`:d.kind}"`)}_elseNode(d){const x=this._currNode;if(!(x instanceof y))throw new Error('CodeGen: "else" without "if"');return this._currNode=x.else=d,this}get _root(){return this._nodes[0]}get _currNode(){const d=this._nodes;return d[d.length-1]}set _currNode(d){const x=this._nodes;x[x.length-1]=d}}e.CodeGen=q;function U(m,d){for(const x in d)m[x]=(m[x]||0)+(d[x]||0);return m}function L(m,d){return d instanceof t._CodeOrName?U(m,d.names):m}function z(m,d,x){if(m instanceof t.Name)return I(m);if(!T(m))return m;return new t._Code(m._items.reduce((F,B)=>(B instanceof t.Name&&(B=I(B)),B instanceof t._Code?F.push(...B._items):F.push(B),F),[]));function I(F){const B=x[F.str];return B===void 0||d[F.str]!==1?F:(delete d[F.str],B)}function T(F){return F instanceof t._Code&&F._items.some(B=>B instanceof t.Name&&d[B.str]===1&&x[B.str]!==void 0)}}function G(m,d){for(const x in d)m[x]=(m[x]||0)-(d[x]||0)}function J(m){return typeof m=="boolean"||typeof m=="number"||m===null?!m:(0,t._)`!${j(m)}`}e.not=J;const Q=C(e.operators.AND);function Z(...m){return m.reduce(Q)}e.and=Z;const re=C(e.operators.OR);function A(...m){return m.reduce(re)}e.or=A;function C(m){return(d,x)=>d===t.nil?x:x===t.nil?d:(0,t._)`${j(d)} ${m} ${j(x)}`}function j(m){return m instanceof t.Name?m:(0,t._)`(${m})`}})(ic)),ic}var Ee={},Sf;function Me(){if(Sf)return Ee;Sf=1,Object.defineProperty(Ee,"__esModule",{value:!0}),Ee.checkStrictMode=Ee.getErrorPath=Ee.Type=Ee.useFunc=Ee.setEvaluated=Ee.evaluatedPropsToName=Ee.mergeEvaluated=Ee.eachItem=Ee.unescapeJsonPointer=Ee.escapeJsonPointer=Ee.escapeFragment=Ee.unescapeFragment=Ee.schemaRefOrVal=Ee.schemaHasRulesButRef=Ee.schemaHasRules=Ee.checkUnknownRules=Ee.alwaysValidSchema=Ee.toHash=void 0;const e=Oe(),t=za();function r(h){const _={};for(const O of h)_[O]=!0;return _}Ee.toHash=r;function n(h,_){return typeof _=="boolean"?_:Object.keys(_).length===0?!0:(s(h,_),!i(_,h.self.RULES.all))}Ee.alwaysValidSchema=n;function s(h,_=h.schema){const{opts:O,self:k}=h;if(!O.strictSchema||typeof _=="boolean")return;const $=k.RULES.keywords;for(const M in _)$[M]||P(h,`unknown keyword: "${M}"`)}Ee.checkUnknownRules=s;function i(h,_){if(typeof h=="boolean")return!h;for(const O in h)if(_[O])return!0;return!1}Ee.schemaHasRules=i;function a(h,_){if(typeof h=="boolean")return!h;for(const O in h)if(O!=="$ref"&&_.all[O])return!0;return!1}Ee.schemaHasRulesButRef=a;function o({topSchemaRef:h,schemaPath:_},O,k,$){if(!$){if(typeof O=="number"||typeof O=="boolean")return O;if(typeof O=="string")return(0,e._)`${O}`}return(0,e._)`${h}${_}${(0,e.getProperty)(k)}`}Ee.schemaRefOrVal=o;function c(h){return p(decodeURIComponent(h))}Ee.unescapeFragment=c;function l(h){return encodeURIComponent(u(h))}Ee.escapeFragment=l;function u(h){return typeof h=="number"?`${h}`:h.replace(/~/g,"~0").replace(/\//g,"~1")}Ee.escapeJsonPointer=u;function p(h){return h.replace(/~1/g,"/").replace(/~0/g,"~")}Ee.unescapeJsonPointer=p;function b(h,_){if(Array.isArray(h))for(const O of h)_(O);else _(h)}Ee.eachItem=b;function v({mergeNames:h,mergeToName:_,mergeValues:O,resultToName:k}){return($,M,q,U)=>{const L=q===void 0?M:q instanceof e.Name?(M instanceof e.Name?h($,M,q):_($,M,q),q):M instanceof e.Name?(_($,q,M),M):O(M,q);return U===e.Name&&!(L instanceof e.Name)?k($,L):L}}Ee.mergeEvaluated={props:v({mergeNames:(h,_,O)=>h.if((0,e._)`${O} !== true && ${_} !== undefined`,()=>{h.if((0,e._)`${_} === true`,()=>h.assign(O,!0),()=>h.assign(O,(0,e._)`${O} || {}`).code((0,e._)`Object.assign(${O}, ${_})`))}),mergeToName:(h,_,O)=>h.if((0,e._)`${O} !== true`,()=>{_===!0?h.assign(O,!0):(h.assign(O,(0,e._)`${O} || {}`),E(h,O,_))}),mergeValues:(h,_)=>h===!0?!0:{...h,..._},resultToName:S}),items:v({mergeNames:(h,_,O)=>h.if((0,e._)`${O} !== true && ${_} !== undefined`,()=>h.assign(O,(0,e._)`${_} === true ? true : ${O} > ${_} ? ${O} : ${_}`)),mergeToName:(h,_,O)=>h.if((0,e._)`${O} !== true`,()=>h.assign(O,_===!0?!0:(0,e._)`${O} > ${_} ? ${O} : ${_}`)),mergeValues:(h,_)=>h===!0?!0:Math.max(h,_),resultToName:(h,_)=>h.var("items",_)})};function S(h,_){if(_===!0)return h.var("props",!0);const O=h.var("props",(0,e._)`{}`);return _!==void 0&&E(h,O,_),O}Ee.evaluatedPropsToName=S;function E(h,_,O){Object.keys(O).forEach(k=>h.assign((0,e._)`${_}${(0,e.getProperty)(k)}`,!0))}Ee.setEvaluated=E;const g={};function y(h,_){return h.scopeValue("func",{ref:_,code:g[_.code]||(g[_.code]=new t._Code(_.code))})}Ee.useFunc=y;var f;(function(h){h[h.Num=0]="Num",h[h.Str=1]="Str"})(f||(Ee.Type=f={}));function w(h,_,O){if(h instanceof e.Name){const k=_===f.Num;return O?k?(0,e._)`"[" + ${h} + "]"`:(0,e._)`"['" + ${h} + "']"`:k?(0,e._)`"/" + ${h}`:(0,e._)`"/" + ${h}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return O?(0,e.getProperty)(h).toString():"/"+u(h)}Ee.getErrorPath=w;function P(h,_,O=h.opts.strictSchema){if(O){if(_=`strict mode: ${_}`,O===!0)throw new Error(_);h.self.logger.warn(_)}}return Ee.checkStrictMode=P,Ee}var Ds={},wf;function nn(){if(wf)return Ds;wf=1,Object.defineProperty(Ds,"__esModule",{value:!0});const e=Oe(),t={data:new e.Name("data"),valCxt:new e.Name("valCxt"),instancePath:new e.Name("instancePath"),parentData:new e.Name("parentData"),parentDataProperty:new e.Name("parentDataProperty"),rootData:new e.Name("rootData"),dynamicAnchors:new e.Name("dynamicAnchors"),vErrors:new e.Name("vErrors"),errors:new e.Name("errors"),this:new e.Name("this"),self:new e.Name("self"),scope:new e.Name("scope"),json:new e.Name("json"),jsonPos:new e.Name("jsonPos"),jsonLen:new e.Name("jsonLen"),jsonPart:new e.Name("jsonPart")};return Ds.default=t,Ds}var Cf;function io(){return Cf||(Cf=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const t=Oe(),r=Me(),n=nn();e.keywordError={message:({keyword:g})=>(0,t.str)`must pass "${g}" keyword validation`},e.keyword$DataError={message:({keyword:g,schemaType:y})=>y?(0,t.str)`"${g}" keyword must be ${y} ($data)`:(0,t.str)`"${g}" keyword is invalid ($data)`};function s(g,y=e.keywordError,f,w){const{it:P}=g,{gen:h,compositeRule:_,allErrors:O}=P,k=p(g,y,f);w??(_||O)?c(h,k):l(P,(0,t._)`[${k}]`)}e.reportError=s;function i(g,y=e.keywordError,f){const{it:w}=g,{gen:P,compositeRule:h,allErrors:_}=w,O=p(g,y,f);c(P,O),h||_||l(w,n.default.vErrors)}e.reportExtraError=i;function a(g,y){g.assign(n.default.errors,y),g.if((0,t._)`${n.default.vErrors} !== null`,()=>g.if(y,()=>g.assign((0,t._)`${n.default.vErrors}.length`,y),()=>g.assign(n.default.vErrors,null)))}e.resetErrorsCount=a;function o({gen:g,keyword:y,schemaValue:f,data:w,errsCount:P,it:h}){if(P===void 0)throw new Error("ajv implementation error");const _=g.name("err");g.forRange("i",P,n.default.errors,O=>{g.const(_,(0,t._)`${n.default.vErrors}[${O}]`),g.if((0,t._)`${_}.instancePath === undefined`,()=>g.assign((0,t._)`${_}.instancePath`,(0,t.strConcat)(n.default.instancePath,h.errorPath))),g.assign((0,t._)`${_}.schemaPath`,(0,t.str)`${h.errSchemaPath}/${y}`),h.opts.verbose&&(g.assign((0,t._)`${_}.schema`,f),g.assign((0,t._)`${_}.data`,w))})}e.extendErrors=o;function c(g,y){const f=g.const("err",y);g.if((0,t._)`${n.default.vErrors} === null`,()=>g.assign(n.default.vErrors,(0,t._)`[${f}]`),(0,t._)`${n.default.vErrors}.push(${f})`),g.code((0,t._)`${n.default.errors}++`)}function l(g,y){const{gen:f,validateName:w,schemaEnv:P}=g;P.$async?f.throw((0,t._)`new ${g.ValidationError}(${y})`):(f.assign((0,t._)`${w}.errors`,y),f.return(!1))}const u={keyword:new t.Name("keyword"),schemaPath:new t.Name("schemaPath"),params:new t.Name("params"),propertyName:new t.Name("propertyName"),message:new t.Name("message"),schema:new t.Name("schema"),parentSchema:new t.Name("parentSchema")};function p(g,y,f){const{createErrors:w}=g.it;return w===!1?(0,t._)`{}`:b(g,y,f)}function b(g,y,f={}){const{gen:w,it:P}=g,h=[v(P,f),S(g,f)];return E(g,y,h),w.object(...h)}function v({errorPath:g},{instancePath:y}){const f=y?(0,t.str)`${g}${(0,r.getErrorPath)(y,r.Type.Str)}`:g;return[n.default.instancePath,(0,t.strConcat)(n.default.instancePath,f)]}function S({keyword:g,it:{errSchemaPath:y}},{schemaPath:f,parentSchema:w}){let P=w?y:(0,t.str)`${y}/${g}`;return f&&(P=(0,t.str)`${P}${(0,r.getErrorPath)(f,r.Type.Str)}`),[u.schemaPath,P]}function E(g,{params:y,message:f},w){const{keyword:P,data:h,schemaValue:_,it:O}=g,{opts:k,propertyName:$,topSchemaRef:M,schemaPath:q}=O;w.push([u.keyword,P],[u.params,typeof y=="function"?y(g):y||(0,t._)`{}`]),k.messages&&w.push([u.message,typeof f=="function"?f(g):f]),k.verbose&&w.push([u.schema,_],[u.parentSchema,(0,t._)`${M}${q}`],[n.default.data,h]),$&&w.push([u.propertyName,$])}})(nc)),nc}var Ef;function Aw(){if(Ef)return yn;Ef=1,Object.defineProperty(yn,"__esModule",{value:!0}),yn.boolOrEmptySchema=yn.topBoolOrEmptySchema=void 0;const e=io(),t=Oe(),r=nn(),n={message:"boolean schema is false"};function s(o){const{gen:c,schema:l,validateName:u}=o;l===!1?a(o,!1):typeof l=="object"&&l.$async===!0?c.return(r.default.data):(c.assign((0,t._)`${u}.errors`,null),c.return(!0))}yn.topBoolOrEmptySchema=s;function i(o,c){const{gen:l,schema:u}=o;u===!1?(l.var(c,!1),a(o)):l.var(c,!0)}yn.boolOrEmptySchema=i;function a(o,c){const{gen:l,data:u}=o,p={gen:l,keyword:"false schema",data:u,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:o};(0,e.reportError)(p,n,void 0,c)}return yn}var gt={},gn={},Af;function ep(){if(Af)return gn;Af=1,Object.defineProperty(gn,"__esModule",{value:!0}),gn.getRules=gn.isJSONType=void 0;const e=["string","number","integer","boolean","null","object","array"],t=new Set(e);function r(s){return typeof s=="string"&&t.has(s)}gn.isJSONType=r;function n(){const s={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...s,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},s.number,s.string,s.array,s.object],post:{rules:[]},all:{},keywords:{}}}return gn.getRules=n,gn}var Ar={},xf;function tp(){if(xf)return Ar;xf=1,Object.defineProperty(Ar,"__esModule",{value:!0}),Ar.shouldUseRule=Ar.shouldUseGroup=Ar.schemaHasRulesForType=void 0;function e({schema:n,self:s},i){const a=s.RULES.types[i];return a&&a!==!0&&t(n,a)}Ar.schemaHasRulesForType=e;function t(n,s){return s.rules.some(i=>r(n,i))}Ar.shouldUseGroup=t;function r(n,s){var i;return n[s.keyword]!==void 0||((i=s.definition.implements)===null||i===void 0?void 0:i.some(a=>n[a]!==void 0))}return Ar.shouldUseRule=r,Ar}var Pf;function Ba(){if(Pf)return gt;Pf=1,Object.defineProperty(gt,"__esModule",{value:!0}),gt.reportTypeError=gt.checkDataTypes=gt.checkDataType=gt.coerceAndCheckDataType=gt.getJSONTypes=gt.getSchemaTypes=gt.DataType=void 0;const e=ep(),t=tp(),r=io(),n=Oe(),s=Me();var i;(function(f){f[f.Correct=0]="Correct",f[f.Wrong=1]="Wrong"})(i||(gt.DataType=i={}));function a(f){const w=o(f.type);if(w.includes("null")){if(f.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!w.length&&f.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');f.nullable===!0&&w.push("null")}return w}gt.getSchemaTypes=a;function o(f){const w=Array.isArray(f)?f:f?[f]:[];if(w.every(e.isJSONType))return w;throw new Error("type must be JSONType or JSONType[]: "+w.join(","))}gt.getJSONTypes=o;function c(f,w){const{gen:P,data:h,opts:_}=f,O=u(w,_.coerceTypes),k=w.length>0&&!(O.length===0&&w.length===1&&(0,t.schemaHasRulesForType)(f,w[0]));if(k){const $=S(w,h,_.strictNumbers,i.Wrong);P.if($,()=>{O.length?p(f,w,O):g(f)})}return k}gt.coerceAndCheckDataType=c;const l=new Set(["string","number","integer","boolean","null"]);function u(f,w){return w?f.filter(P=>l.has(P)||w==="array"&&P==="array"):[]}function p(f,w,P){const{gen:h,data:_,opts:O}=f,k=h.let("dataType",(0,n._)`typeof ${_}`),$=h.let("coerced",(0,n._)`undefined`);O.coerceTypes==="array"&&h.if((0,n._)`${k} == 'object' && Array.isArray(${_}) && ${_}.length == 1`,()=>h.assign(_,(0,n._)`${_}[0]`).assign(k,(0,n._)`typeof ${_}`).if(S(w,_,O.strictNumbers),()=>h.assign($,_))),h.if((0,n._)`${$} !== undefined`);for(const q of P)(l.has(q)||q==="array"&&O.coerceTypes==="array")&&M(q);h.else(),g(f),h.endIf(),h.if((0,n._)`${$} !== undefined`,()=>{h.assign(_,$),b(f,$)});function M(q){switch(q){case"string":h.elseIf((0,n._)`${k} == "number" || ${k} == "boolean"`).assign($,(0,n._)`"" + ${_}`).elseIf((0,n._)`${_} === null`).assign($,(0,n._)`""`);return;case"number":h.elseIf((0,n._)`${k} == "boolean" || ${_} === null + || (${k} == "string" && ${_} && ${_} == +${_})`).assign($,(0,n._)`+${_}`);return;case"integer":h.elseIf((0,n._)`${k} === "boolean" || ${_} === null + || (${k} === "string" && ${_} && ${_} == +${_} && !(${_} % 1))`).assign($,(0,n._)`+${_}`);return;case"boolean":h.elseIf((0,n._)`${_} === "false" || ${_} === 0 || ${_} === null`).assign($,!1).elseIf((0,n._)`${_} === "true" || ${_} === 1`).assign($,!0);return;case"null":h.elseIf((0,n._)`${_} === "" || ${_} === 0 || ${_} === false`),h.assign($,null);return;case"array":h.elseIf((0,n._)`${k} === "string" || ${k} === "number" + || ${k} === "boolean" || ${_} === null`).assign($,(0,n._)`[${_}]`)}}}function b({gen:f,parentData:w,parentDataProperty:P},h){f.if((0,n._)`${w} !== undefined`,()=>f.assign((0,n._)`${w}[${P}]`,h))}function v(f,w,P,h=i.Correct){const _=h===i.Correct?n.operators.EQ:n.operators.NEQ;let O;switch(f){case"null":return(0,n._)`${w} ${_} null`;case"array":O=(0,n._)`Array.isArray(${w})`;break;case"object":O=(0,n._)`${w} && typeof ${w} == "object" && !Array.isArray(${w})`;break;case"integer":O=k((0,n._)`!(${w} % 1) && !isNaN(${w})`);break;case"number":O=k();break;default:return(0,n._)`typeof ${w} ${_} ${f}`}return h===i.Correct?O:(0,n.not)(O);function k($=n.nil){return(0,n.and)((0,n._)`typeof ${w} == "number"`,$,P?(0,n._)`isFinite(${w})`:n.nil)}}gt.checkDataType=v;function S(f,w,P,h){if(f.length===1)return v(f[0],w,P,h);let _;const O=(0,s.toHash)(f);if(O.array&&O.object){const k=(0,n._)`typeof ${w} != "object"`;_=O.null?k:(0,n._)`!${w} || ${k}`,delete O.null,delete O.array,delete O.object}else _=n.nil;O.number&&delete O.integer;for(const k in O)_=(0,n.and)(_,v(k,w,P,h));return _}gt.checkDataTypes=S;const E={message:({schema:f})=>`must be ${f}`,params:({schema:f,schemaValue:w})=>typeof f=="string"?(0,n._)`{type: ${f}}`:(0,n._)`{type: ${w}}`};function g(f){const w=y(f);(0,r.reportError)(w,E)}gt.reportTypeError=g;function y(f){const{gen:w,data:P,schema:h}=f,_=(0,s.schemaRefOrVal)(f,h,"type");return{gen:w,keyword:"type",data:P,schema:h.type,schemaCode:_,schemaValue:_,parentSchema:h,params:{},it:f}}return gt}var Si={},Of;function xw(){if(Of)return Si;Of=1,Object.defineProperty(Si,"__esModule",{value:!0}),Si.assignDefaults=void 0;const e=Oe(),t=Me();function r(s,i){const{properties:a,items:o}=s.schema;if(i==="object"&&a)for(const c in a)n(s,c,a[c].default);else i==="array"&&Array.isArray(o)&&o.forEach((c,l)=>n(s,l,c.default))}Si.assignDefaults=r;function n(s,i,a){const{gen:o,compositeRule:c,data:l,opts:u}=s;if(a===void 0)return;const p=(0,e._)`${l}${(0,e.getProperty)(i)}`;if(c){(0,t.checkStrictMode)(s,`default is ignored for: ${p}`);return}let b=(0,e._)`${p} === undefined`;u.useDefaults==="empty"&&(b=(0,e._)`${b} || ${p} === null || ${p} === ""`),o.if(b,(0,e._)`${p} = ${(0,e.stringify)(a)}`)}return Si}var Zt={},We={},jf;function ar(){if(jf)return We;jf=1,Object.defineProperty(We,"__esModule",{value:!0}),We.validateUnion=We.validateArray=We.usePattern=We.callValidateCode=We.schemaProperties=We.allSchemaProperties=We.noPropertyInData=We.propertyInData=We.isOwnProperty=We.hasPropFunc=We.reportMissingProp=We.checkMissingProp=We.checkReportMissingProp=void 0;const e=Oe(),t=Me(),r=nn(),n=Me();function s(f,w){const{gen:P,data:h,it:_}=f;P.if(u(P,h,w,_.opts.ownProperties),()=>{f.setParams({missingProperty:(0,e._)`${w}`},!0),f.error()})}We.checkReportMissingProp=s;function i({gen:f,data:w,it:{opts:P}},h,_){return(0,e.or)(...h.map(O=>(0,e.and)(u(f,w,O,P.ownProperties),(0,e._)`${_} = ${O}`)))}We.checkMissingProp=i;function a(f,w){f.setParams({missingProperty:w},!0),f.error()}We.reportMissingProp=a;function o(f){return f.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,e._)`Object.prototype.hasOwnProperty`})}We.hasPropFunc=o;function c(f,w,P){return(0,e._)`${o(f)}.call(${w}, ${P})`}We.isOwnProperty=c;function l(f,w,P,h){const _=(0,e._)`${w}${(0,e.getProperty)(P)} !== undefined`;return h?(0,e._)`${_} && ${c(f,w,P)}`:_}We.propertyInData=l;function u(f,w,P,h){const _=(0,e._)`${w}${(0,e.getProperty)(P)} === undefined`;return h?(0,e.or)(_,(0,e.not)(c(f,w,P))):_}We.noPropertyInData=u;function p(f){return f?Object.keys(f).filter(w=>w!=="__proto__"):[]}We.allSchemaProperties=p;function b(f,w){return p(w).filter(P=>!(0,t.alwaysValidSchema)(f,w[P]))}We.schemaProperties=b;function v({schemaCode:f,data:w,it:{gen:P,topSchemaRef:h,schemaPath:_,errorPath:O},it:k},$,M,q){const U=q?(0,e._)`${f}, ${w}, ${h}${_}`:w,L=[[r.default.instancePath,(0,e.strConcat)(r.default.instancePath,O)],[r.default.parentData,k.parentData],[r.default.parentDataProperty,k.parentDataProperty],[r.default.rootData,r.default.rootData]];k.opts.dynamicRef&&L.push([r.default.dynamicAnchors,r.default.dynamicAnchors]);const z=(0,e._)`${U}, ${P.object(...L)}`;return M!==e.nil?(0,e._)`${$}.call(${M}, ${z})`:(0,e._)`${$}(${z})`}We.callValidateCode=v;const S=(0,e._)`new RegExp`;function E({gen:f,it:{opts:w}},P){const h=w.unicodeRegExp?"u":"",{regExp:_}=w.code,O=_(P,h);return f.scopeValue("pattern",{key:O.toString(),ref:O,code:(0,e._)`${_.code==="new RegExp"?S:(0,n.useFunc)(f,_)}(${P}, ${h})`})}We.usePattern=E;function g(f){const{gen:w,data:P,keyword:h,it:_}=f,O=w.name("valid");if(_.allErrors){const $=w.let("valid",!0);return k(()=>w.assign($,!1)),$}return w.var(O,!0),k(()=>w.break()),O;function k($){const M=w.const("len",(0,e._)`${P}.length`);w.forRange("i",0,M,q=>{f.subschema({keyword:h,dataProp:q,dataPropType:t.Type.Num},O),w.if((0,e.not)(O),$)})}}We.validateArray=g;function y(f){const{gen:w,schema:P,keyword:h,it:_}=f;if(!Array.isArray(P))throw new Error("ajv implementation error");if(P.some(M=>(0,t.alwaysValidSchema)(_,M))&&!_.opts.unevaluated)return;const k=w.let("valid",!1),$=w.name("_valid");w.block(()=>P.forEach((M,q)=>{const U=f.subschema({keyword:h,schemaProp:q,compositeRule:!0},$);w.assign(k,(0,e._)`${k} || ${$}`),f.mergeValidEvaluated(U,$)||w.if((0,e.not)(k))})),f.result(k,()=>f.reset(),()=>f.error(!0))}return We.validateUnion=y,We}var kf;function Pw(){if(kf)return Zt;kf=1,Object.defineProperty(Zt,"__esModule",{value:!0}),Zt.validateKeywordUsage=Zt.validSchemaType=Zt.funcKeywordCode=Zt.macroKeywordCode=void 0;const e=Oe(),t=nn(),r=ar(),n=io();function s(b,v){const{gen:S,keyword:E,schema:g,parentSchema:y,it:f}=b,w=v.macro.call(f.self,g,y,f),P=l(S,E,w);f.opts.validateSchema!==!1&&f.self.validateSchema(w,!0);const h=S.name("valid");b.subschema({schema:w,schemaPath:e.nil,errSchemaPath:`${f.errSchemaPath}/${E}`,topSchemaRef:P,compositeRule:!0},h),b.pass(h,()=>b.error(!0))}Zt.macroKeywordCode=s;function i(b,v){var S;const{gen:E,keyword:g,schema:y,parentSchema:f,$data:w,it:P}=b;c(P,v);const h=!w&&v.compile?v.compile.call(P.self,y,f,P):v.validate,_=l(E,g,h),O=E.let("valid");b.block$data(O,k),b.ok((S=v.valid)!==null&&S!==void 0?S:O);function k(){if(v.errors===!1)q(),v.modifying&&a(b),U(()=>b.error());else{const L=v.async?$():M();v.modifying&&a(b),U(()=>o(b,L))}}function $(){const L=E.let("ruleErrs",null);return E.try(()=>q((0,e._)`await `),z=>E.assign(O,!1).if((0,e._)`${z} instanceof ${P.ValidationError}`,()=>E.assign(L,(0,e._)`${z}.errors`),()=>E.throw(z))),L}function M(){const L=(0,e._)`${_}.errors`;return E.assign(L,null),q(e.nil),L}function q(L=v.async?(0,e._)`await `:e.nil){const z=P.opts.passContext?t.default.this:t.default.self,G=!("compile"in v&&!w||v.schema===!1);E.assign(O,(0,e._)`${L}${(0,r.callValidateCode)(b,_,z,G)}`,v.modifying)}function U(L){var z;E.if((0,e.not)((z=v.valid)!==null&&z!==void 0?z:O),L)}}Zt.funcKeywordCode=i;function a(b){const{gen:v,data:S,it:E}=b;v.if(E.parentData,()=>v.assign(S,(0,e._)`${E.parentData}[${E.parentDataProperty}]`))}function o(b,v){const{gen:S}=b;S.if((0,e._)`Array.isArray(${v})`,()=>{S.assign(t.default.vErrors,(0,e._)`${t.default.vErrors} === null ? ${v} : ${t.default.vErrors}.concat(${v})`).assign(t.default.errors,(0,e._)`${t.default.vErrors}.length`),(0,n.extendErrors)(b)},()=>b.error())}function c({schemaEnv:b},v){if(v.async&&!b.$async)throw new Error("async keyword in sync schema")}function l(b,v,S){if(S===void 0)throw new Error(`keyword "${v}" failed to compile`);return b.scopeValue("keyword",typeof S=="function"?{ref:S}:{ref:S,code:(0,e.stringify)(S)})}function u(b,v,S=!1){return!v.length||v.some(E=>E==="array"?Array.isArray(b):E==="object"?b&&typeof b=="object"&&!Array.isArray(b):typeof b==E||S&&typeof b>"u")}Zt.validSchemaType=u;function p({schema:b,opts:v,self:S,errSchemaPath:E},g,y){if(Array.isArray(g.keyword)?!g.keyword.includes(y):g.keyword!==y)throw new Error("ajv implementation error");const f=g.dependencies;if(f?.some(w=>!Object.prototype.hasOwnProperty.call(b,w)))throw new Error(`parent schema must have dependencies of ${y}: ${f.join(",")}`);if(g.validateSchema&&!g.validateSchema(b[y])){const P=`keyword "${y}" value is invalid at path "${E}": `+S.errorsText(g.validateSchema.errors);if(v.validateSchema==="log")S.logger.error(P);else throw new Error(P)}}return Zt.validateKeywordUsage=p,Zt}var xr={},Nf;function Ow(){if(Nf)return xr;Nf=1,Object.defineProperty(xr,"__esModule",{value:!0}),xr.extendSubschemaMode=xr.extendSubschemaData=xr.getSubschema=void 0;const e=Oe(),t=Me();function r(i,{keyword:a,schemaProp:o,schema:c,schemaPath:l,errSchemaPath:u,topSchemaRef:p}){if(a!==void 0&&c!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(a!==void 0){const b=i.schema[a];return o===void 0?{schema:b,schemaPath:(0,e._)`${i.schemaPath}${(0,e.getProperty)(a)}`,errSchemaPath:`${i.errSchemaPath}/${a}`}:{schema:b[o],schemaPath:(0,e._)`${i.schemaPath}${(0,e.getProperty)(a)}${(0,e.getProperty)(o)}`,errSchemaPath:`${i.errSchemaPath}/${a}/${(0,t.escapeFragment)(o)}`}}if(c!==void 0){if(l===void 0||u===void 0||p===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:c,schemaPath:l,topSchemaRef:p,errSchemaPath:u}}throw new Error('either "keyword" or "schema" must be passed')}xr.getSubschema=r;function n(i,a,{dataProp:o,dataPropType:c,data:l,dataTypes:u,propertyName:p}){if(l!==void 0&&o!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:b}=a;if(o!==void 0){const{errorPath:S,dataPathArr:E,opts:g}=a,y=b.let("data",(0,e._)`${a.data}${(0,e.getProperty)(o)}`,!0);v(y),i.errorPath=(0,e.str)`${S}${(0,t.getErrorPath)(o,c,g.jsPropertySyntax)}`,i.parentDataProperty=(0,e._)`${o}`,i.dataPathArr=[...E,i.parentDataProperty]}if(l!==void 0){const S=l instanceof e.Name?l:b.let("data",l,!0);v(S),p!==void 0&&(i.propertyName=p)}u&&(i.dataTypes=u);function v(S){i.data=S,i.dataLevel=a.dataLevel+1,i.dataTypes=[],a.definedProperties=new Set,i.parentData=a.data,i.dataNames=[...a.dataNames,S]}}xr.extendSubschemaData=n;function s(i,{jtdDiscriminator:a,jtdMetadata:o,compositeRule:c,createErrors:l,allErrors:u}){c!==void 0&&(i.compositeRule=c),l!==void 0&&(i.createErrors=l),u!==void 0&&(i.allErrors=u),i.jtdDiscriminator=a,i.jtdMetadata=o}return xr.extendSubschemaMode=s,xr}var Ot={},oc={exports:{}},If;function jw(){if(If)return oc.exports;If=1;var e=oc.exports=function(n,s,i){typeof s=="function"&&(i=s,s={}),i=s.cb||i;var a=typeof i=="function"?i:i.pre||function(){},o=i.post||function(){};t(s,a,o,n,"",n)};e.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},e.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},e.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},e.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function t(n,s,i,a,o,c,l,u,p,b){if(a&&typeof a=="object"&&!Array.isArray(a)){s(a,o,c,l,u,p,b);for(var v in a){var S=a[v];if(Array.isArray(S)){if(v in e.arrayKeywords)for(var E=0;Eg+=o(f)),g===1/0))return 1/0}return g}function c(E,g="",y){y!==!1&&(g=p(g));const f=E.parse(g);return l(E,f)}Ot.getFullPath=c;function l(E,g){return E.serialize(g).split("#")[0]+"#"}Ot._getFullPath=l;const u=/#\/?$/;function p(E){return E?E.replace(u,""):""}Ot.normalizeId=p;function b(E,g,y){return y=p(y),E.resolve(g,y)}Ot.resolveUrl=b;const v=/^[a-z_][-a-z0-9._]*$/i;function S(E,g){if(typeof E=="boolean")return{};const{schemaId:y,uriResolver:f}=this.opts,w=p(E[y]||g),P={"":w},h=c(f,w,!1),_={},O=new Set;return r(E,{allKeys:!0},(M,q,U,L)=>{if(L===void 0)return;const z=h+q;let G=P[L];typeof M[y]=="string"&&(G=J.call(this,M[y])),Q.call(this,M.$anchor),Q.call(this,M.$dynamicAnchor),P[q]=G;function J(Z){const re=this.opts.uriResolver.resolve;if(Z=p(G?re(G,Z):Z),O.has(Z))throw $(Z);O.add(Z);let A=this.refs[Z];return typeof A=="string"&&(A=this.refs[A]),typeof A=="object"?k(M,A.schema,Z):Z!==p(z)&&(Z[0]==="#"?(k(M,_[Z],Z),_[Z]=M):this.refs[Z]=z),Z}function Q(Z){if(typeof Z=="string"){if(!v.test(Z))throw new Error(`invalid anchor "${Z}"`);J.call(this,`#${Z}`)}}}),_;function k(M,q,U){if(q!==void 0&&!t(M,q))throw $(U)}function $(M){return new Error(`reference "${M}" resolves to more than one schema`)}}return Ot.getSchemaRefs=S,Ot}var $f;function ao(){if($f)return Er;$f=1,Object.defineProperty(Er,"__esModule",{value:!0}),Er.getData=Er.KeywordCxt=Er.validateFunctionCode=void 0;const e=Aw(),t=Ba(),r=tp(),n=Ba(),s=xw(),i=Pw(),a=Ow(),o=Oe(),c=nn(),l=so(),u=Me(),p=io();function b(R){if(h(R)&&(O(R),P(R))){g(R);return}v(R,()=>(0,e.topBoolOrEmptySchema)(R))}Er.validateFunctionCode=b;function v({gen:R,validateName:D,schema:V,schemaEnv:K,opts:W},Y){W.code.es5?R.func(D,(0,o._)`${c.default.data}, ${c.default.valCxt}`,K.$async,()=>{R.code((0,o._)`"use strict"; ${f(V,W)}`),E(R,W),R.code(Y)}):R.func(D,(0,o._)`${c.default.data}, ${S(W)}`,K.$async,()=>R.code(f(V,W)).code(Y))}function S(R){return(0,o._)`{${c.default.instancePath}="", ${c.default.parentData}, ${c.default.parentDataProperty}, ${c.default.rootData}=${c.default.data}${R.dynamicRef?(0,o._)`, ${c.default.dynamicAnchors}={}`:o.nil}}={}`}function E(R,D){R.if(c.default.valCxt,()=>{R.var(c.default.instancePath,(0,o._)`${c.default.valCxt}.${c.default.instancePath}`),R.var(c.default.parentData,(0,o._)`${c.default.valCxt}.${c.default.parentData}`),R.var(c.default.parentDataProperty,(0,o._)`${c.default.valCxt}.${c.default.parentDataProperty}`),R.var(c.default.rootData,(0,o._)`${c.default.valCxt}.${c.default.rootData}`),D.dynamicRef&&R.var(c.default.dynamicAnchors,(0,o._)`${c.default.valCxt}.${c.default.dynamicAnchors}`)},()=>{R.var(c.default.instancePath,(0,o._)`""`),R.var(c.default.parentData,(0,o._)`undefined`),R.var(c.default.parentDataProperty,(0,o._)`undefined`),R.var(c.default.rootData,c.default.data),D.dynamicRef&&R.var(c.default.dynamicAnchors,(0,o._)`{}`)})}function g(R){const{schema:D,opts:V,gen:K}=R;v(R,()=>{V.$comment&&D.$comment&&L(R),M(R),K.let(c.default.vErrors,null),K.let(c.default.errors,0),V.unevaluated&&y(R),k(R),z(R)})}function y(R){const{gen:D,validateName:V}=R;R.evaluated=D.const("evaluated",(0,o._)`${V}.evaluated`),D.if((0,o._)`${R.evaluated}.dynamicProps`,()=>D.assign((0,o._)`${R.evaluated}.props`,(0,o._)`undefined`)),D.if((0,o._)`${R.evaluated}.dynamicItems`,()=>D.assign((0,o._)`${R.evaluated}.items`,(0,o._)`undefined`))}function f(R,D){const V=typeof R=="object"&&R[D.schemaId];return V&&(D.code.source||D.code.process)?(0,o._)`/*# sourceURL=${V} */`:o.nil}function w(R,D){if(h(R)&&(O(R),P(R))){_(R,D);return}(0,e.boolOrEmptySchema)(R,D)}function P({schema:R,self:D}){if(typeof R=="boolean")return!R;for(const V in R)if(D.RULES.all[V])return!0;return!1}function h(R){return typeof R.schema!="boolean"}function _(R,D){const{schema:V,gen:K,opts:W}=R;W.$comment&&V.$comment&&L(R),q(R),U(R);const Y=K.const("_errs",c.default.errors);k(R,Y),K.var(D,(0,o._)`${Y} === ${c.default.errors}`)}function O(R){(0,u.checkUnknownRules)(R),$(R)}function k(R,D){if(R.opts.jtd)return J(R,[],!1,D);const V=(0,t.getSchemaTypes)(R.schema),K=(0,t.coerceAndCheckDataType)(R,V);J(R,V,!K,D)}function $(R){const{schema:D,errSchemaPath:V,opts:K,self:W}=R;D.$ref&&K.ignoreKeywordsWithRef&&(0,u.schemaHasRulesButRef)(D,W.RULES)&&W.logger.warn(`$ref: keywords ignored in schema at path "${V}"`)}function M(R){const{schema:D,opts:V}=R;D.default!==void 0&&V.useDefaults&&V.strictSchema&&(0,u.checkStrictMode)(R,"default is ignored in the schema root")}function q(R){const D=R.schema[R.opts.schemaId];D&&(R.baseId=(0,l.resolveUrl)(R.opts.uriResolver,R.baseId,D))}function U(R){if(R.schema.$async&&!R.schemaEnv.$async)throw new Error("async schema in sync schema")}function L({gen:R,schemaEnv:D,schema:V,errSchemaPath:K,opts:W}){const Y=V.$comment;if(W.$comment===!0)R.code((0,o._)`${c.default.self}.logger.log(${Y})`);else if(typeof W.$comment=="function"){const te=(0,o.str)`${K}/$comment`,ne=R.scopeValue("root",{ref:D.root});R.code((0,o._)`${c.default.self}.opts.$comment(${Y}, ${te}, ${ne}.schema)`)}}function z(R){const{gen:D,schemaEnv:V,validateName:K,ValidationError:W,opts:Y}=R;V.$async?D.if((0,o._)`${c.default.errors} === 0`,()=>D.return(c.default.data),()=>D.throw((0,o._)`new ${W}(${c.default.vErrors})`)):(D.assign((0,o._)`${K}.errors`,c.default.vErrors),Y.unevaluated&&G(R),D.return((0,o._)`${c.default.errors} === 0`))}function G({gen:R,evaluated:D,props:V,items:K}){V instanceof o.Name&&R.assign((0,o._)`${D}.props`,V),K instanceof o.Name&&R.assign((0,o._)`${D}.items`,K)}function J(R,D,V,K){const{gen:W,schema:Y,data:te,allErrors:ne,opts:se,self:ce}=R,{RULES:he}=ce;if(Y.$ref&&(se.ignoreKeywordsWithRef||!(0,u.schemaHasRulesButRef)(Y,he))){W.block(()=>T(R,"$ref",he.all.$ref.definition));return}se.jtd||Z(R,D),W.block(()=>{for(const ge of he.rules)le(ge);le(he.post)});function le(ge){(0,r.shouldUseGroup)(Y,ge)&&(ge.type?(W.if((0,n.checkDataType)(ge.type,te,se.strictNumbers)),Q(R,ge),D.length===1&&D[0]===ge.type&&V&&(W.else(),(0,n.reportTypeError)(R)),W.endIf()):Q(R,ge),ne||W.if((0,o._)`${c.default.errors} === ${K||0}`))}}function Q(R,D){const{gen:V,schema:K,opts:{useDefaults:W}}=R;W&&(0,s.assignDefaults)(R,D.type),V.block(()=>{for(const Y of D.rules)(0,r.shouldUseRule)(K,Y)&&T(R,Y.keyword,Y.definition,D.type)})}function Z(R,D){R.schemaEnv.meta||!R.opts.strictTypes||(re(R,D),R.opts.allowUnionTypes||A(R,D),C(R,R.dataTypes))}function re(R,D){if(D.length){if(!R.dataTypes.length){R.dataTypes=D;return}D.forEach(V=>{m(R.dataTypes,V)||x(R,`type "${V}" not allowed by context "${R.dataTypes.join(",")}"`)}),d(R,D)}}function A(R,D){D.length>1&&!(D.length===2&&D.includes("null"))&&x(R,"use allowUnionTypes to allow union type keyword")}function C(R,D){const V=R.self.RULES.all;for(const K in V){const W=V[K];if(typeof W=="object"&&(0,r.shouldUseRule)(R.schema,W)){const{type:Y}=W.definition;Y.length&&!Y.some(te=>j(D,te))&&x(R,`missing type "${Y.join(",")}" for keyword "${K}"`)}}}function j(R,D){return R.includes(D)||D==="number"&&R.includes("integer")}function m(R,D){return R.includes(D)||D==="integer"&&R.includes("number")}function d(R,D){const V=[];for(const K of R.dataTypes)m(D,K)?V.push(K):D.includes("integer")&&K==="number"&&V.push("integer");R.dataTypes=V}function x(R,D){const V=R.schemaEnv.baseId+R.errSchemaPath;D+=` at "${V}" (strictTypes)`,(0,u.checkStrictMode)(R,D,R.opts.strictTypes)}class I{constructor(D,V,K){if((0,i.validateKeywordUsage)(D,V,K),this.gen=D.gen,this.allErrors=D.allErrors,this.keyword=K,this.data=D.data,this.schema=D.schema[K],this.$data=V.$data&&D.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,u.schemaRefOrVal)(D,this.schema,K,this.$data),this.schemaType=V.schemaType,this.parentSchema=D.schema,this.params={},this.it=D,this.def=V,this.$data)this.schemaCode=D.gen.const("vSchema",H(this.$data,D));else if(this.schemaCode=this.schemaValue,!(0,i.validSchemaType)(this.schema,V.schemaType,V.allowUndefined))throw new Error(`${K} value must be ${JSON.stringify(V.schemaType)}`);("code"in V?V.trackErrors:V.errors!==!1)&&(this.errsCount=D.gen.const("_errs",c.default.errors))}result(D,V,K){this.failResult((0,o.not)(D),V,K)}failResult(D,V,K){this.gen.if(D),K?K():this.error(),V?(this.gen.else(),V(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(D,V){this.failResult((0,o.not)(D),void 0,V)}fail(D){if(D===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(D),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(D){if(!this.$data)return this.fail(D);const{schemaCode:V}=this;this.fail((0,o._)`${V} !== undefined && (${(0,o.or)(this.invalid$data(),D)})`)}error(D,V,K){if(V){this.setParams(V),this._error(D,K),this.setParams({});return}this._error(D,K)}_error(D,V){(D?p.reportExtraError:p.reportError)(this,this.def.error,V)}$dataError(){(0,p.reportError)(this,this.def.$dataError||p.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,p.resetErrorsCount)(this.gen,this.errsCount)}ok(D){this.allErrors||this.gen.if(D)}setParams(D,V){V?Object.assign(this.params,D):this.params=D}block$data(D,V,K=o.nil){this.gen.block(()=>{this.check$data(D,K),V()})}check$data(D=o.nil,V=o.nil){if(!this.$data)return;const{gen:K,schemaCode:W,schemaType:Y,def:te}=this;K.if((0,o.or)((0,o._)`${W} === undefined`,V)),D!==o.nil&&K.assign(D,!0),(Y.length||te.validateSchema)&&(K.elseIf(this.invalid$data()),this.$dataError(),D!==o.nil&&K.assign(D,!1)),K.else()}invalid$data(){const{gen:D,schemaCode:V,schemaType:K,def:W,it:Y}=this;return(0,o.or)(te(),ne());function te(){if(K.length){if(!(V instanceof o.Name))throw new Error("ajv implementation error");const se=Array.isArray(K)?K:[K];return(0,o._)`${(0,n.checkDataTypes)(se,V,Y.opts.strictNumbers,n.DataType.Wrong)}`}return o.nil}function ne(){if(W.validateSchema){const se=D.scopeValue("validate$data",{ref:W.validateSchema});return(0,o._)`!${se}(${V})`}return o.nil}}subschema(D,V){const K=(0,a.getSubschema)(this.it,D);(0,a.extendSubschemaData)(K,this.it,D),(0,a.extendSubschemaMode)(K,D);const W={...this.it,...K,items:void 0,props:void 0};return w(W,V),W}mergeEvaluated(D,V){const{it:K,gen:W}=this;K.opts.unevaluated&&(K.props!==!0&&D.props!==void 0&&(K.props=u.mergeEvaluated.props(W,D.props,K.props,V)),K.items!==!0&&D.items!==void 0&&(K.items=u.mergeEvaluated.items(W,D.items,K.items,V)))}mergeValidEvaluated(D,V){const{it:K,gen:W}=this;if(K.opts.unevaluated&&(K.props!==!0||K.items!==!0))return W.if(V,()=>this.mergeEvaluated(D,o.Name)),!0}}Er.KeywordCxt=I;function T(R,D,V,K){const W=new I(R,V,D);"code"in V?V.code(W,K):W.$data&&V.validate?(0,i.funcKeywordCode)(W,V):"macro"in V?(0,i.macroKeywordCode)(W,V):(V.compile||V.validate)&&(0,i.funcKeywordCode)(W,V)}const F=/^\/(?:[^~]|~0|~1)*$/,B=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function H(R,{dataLevel:D,dataNames:V,dataPathArr:K}){let W,Y;if(R==="")return c.default.rootData;if(R[0]==="/"){if(!F.test(R))throw new Error(`Invalid JSON-pointer: ${R}`);W=R,Y=c.default.rootData}else{const ce=B.exec(R);if(!ce)throw new Error(`Invalid JSON-pointer: ${R}`);const he=+ce[1];if(W=ce[2],W==="#"){if(he>=D)throw new Error(se("property/index",he));return K[D-he]}if(he>D)throw new Error(se("data",he));if(Y=V[D-he],!W)return Y}let te=Y;const ne=W.split("/");for(const ce of ne)ce&&(Y=(0,o._)`${Y}${(0,o.getProperty)((0,u.unescapeJsonPointer)(ce))}`,te=(0,o._)`${te} && ${Y}`);return te;function se(ce,he){return`Cannot access ${ce} ${he} levels up, current level is ${D}`}}return Er.getData=H,Er}var Ts={},Ff;function hl(){if(Ff)return Ts;Ff=1,Object.defineProperty(Ts,"__esModule",{value:!0});class e extends Error{constructor(r){super("validation failed"),this.errors=r,this.ajv=this.validation=!0}}return Ts.default=e,Ts}var Ms={},Df;function oo(){if(Df)return Ms;Df=1,Object.defineProperty(Ms,"__esModule",{value:!0});const e=so();class t extends Error{constructor(n,s,i,a){super(a||`can't resolve reference ${i} from id ${s}`),this.missingRef=(0,e.resolveUrl)(n,s,i),this.missingSchema=(0,e.normalizeId)((0,e.getFullPath)(n,this.missingRef))}}return Ms.default=t,Ms}var Mt={},Tf;function ml(){if(Tf)return Mt;Tf=1,Object.defineProperty(Mt,"__esModule",{value:!0}),Mt.resolveSchema=Mt.getCompilingSchema=Mt.resolveRef=Mt.compileSchema=Mt.SchemaEnv=void 0;const e=Oe(),t=hl(),r=nn(),n=so(),s=Me(),i=ao();class a{constructor(y){var f;this.refs={},this.dynamicAnchors={};let w;typeof y.schema=="object"&&(w=y.schema),this.schema=y.schema,this.schemaId=y.schemaId,this.root=y.root||this,this.baseId=(f=y.baseId)!==null&&f!==void 0?f:(0,n.normalizeId)(w?.[y.schemaId||"$id"]),this.schemaPath=y.schemaPath,this.localRefs=y.localRefs,this.meta=y.meta,this.$async=w?.$async,this.refs={}}}Mt.SchemaEnv=a;function o(g){const y=u.call(this,g);if(y)return y;const f=(0,n.getFullPath)(this.opts.uriResolver,g.root.baseId),{es5:w,lines:P}=this.opts.code,{ownProperties:h}=this.opts,_=new e.CodeGen(this.scope,{es5:w,lines:P,ownProperties:h});let O;g.$async&&(O=_.scopeValue("Error",{ref:t.default,code:(0,e._)`require("ajv/dist/runtime/validation_error").default`}));const k=_.scopeName("validate");g.validateName=k;const $={gen:_,allErrors:this.opts.allErrors,data:r.default.data,parentData:r.default.parentData,parentDataProperty:r.default.parentDataProperty,dataNames:[r.default.data],dataPathArr:[e.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:_.scopeValue("schema",this.opts.code.source===!0?{ref:g.schema,code:(0,e.stringify)(g.schema)}:{ref:g.schema}),validateName:k,ValidationError:O,schema:g.schema,schemaEnv:g,rootId:f,baseId:g.baseId||f,schemaPath:e.nil,errSchemaPath:g.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,e._)`""`,opts:this.opts,self:this};let M;try{this._compilations.add(g),(0,i.validateFunctionCode)($),_.optimize(this.opts.code.optimize);const q=_.toString();M=`${_.scopeRefs(r.default.scope)}return ${q}`,this.opts.code.process&&(M=this.opts.code.process(M,g));const L=new Function(`${r.default.self}`,`${r.default.scope}`,M)(this,this.scope.get());if(this.scope.value(k,{ref:L}),L.errors=null,L.schema=g.schema,L.schemaEnv=g,g.$async&&(L.$async=!0),this.opts.code.source===!0&&(L.source={validateName:k,validateCode:q,scopeValues:_._values}),this.opts.unevaluated){const{props:z,items:G}=$;L.evaluated={props:z instanceof e.Name?void 0:z,items:G instanceof e.Name?void 0:G,dynamicProps:z instanceof e.Name,dynamicItems:G instanceof e.Name},L.source&&(L.source.evaluated=(0,e.stringify)(L.evaluated))}return g.validate=L,g}catch(q){throw delete g.validate,delete g.validateName,M&&this.logger.error("Error compiling schema, function code:",M),q}finally{this._compilations.delete(g)}}Mt.compileSchema=o;function c(g,y,f){var w;f=(0,n.resolveUrl)(this.opts.uriResolver,y,f);const P=g.refs[f];if(P)return P;let h=b.call(this,g,f);if(h===void 0){const _=(w=g.localRefs)===null||w===void 0?void 0:w[f],{schemaId:O}=this.opts;_&&(h=new a({schema:_,schemaId:O,root:g,baseId:y}))}if(h!==void 0)return g.refs[f]=l.call(this,h)}Mt.resolveRef=c;function l(g){return(0,n.inlineRef)(g.schema,this.opts.inlineRefs)?g.schema:g.validate?g:o.call(this,g)}function u(g){for(const y of this._compilations)if(p(y,g))return y}Mt.getCompilingSchema=u;function p(g,y){return g.schema===y.schema&&g.root===y.root&&g.baseId===y.baseId}function b(g,y){let f;for(;typeof(f=this.refs[y])=="string";)y=f;return f||this.schemas[y]||v.call(this,g,y)}function v(g,y){const f=this.opts.uriResolver.parse(y),w=(0,n._getFullPath)(this.opts.uriResolver,f);let P=(0,n.getFullPath)(this.opts.uriResolver,g.baseId,void 0);if(Object.keys(g.schema).length>0&&w===P)return E.call(this,f,g);const h=(0,n.normalizeId)(w),_=this.refs[h]||this.schemas[h];if(typeof _=="string"){const O=v.call(this,g,_);return typeof O?.schema!="object"?void 0:E.call(this,f,O)}if(typeof _?.schema=="object"){if(_.validate||o.call(this,_),h===(0,n.normalizeId)(y)){const{schema:O}=_,{schemaId:k}=this.opts,$=O[k];return $&&(P=(0,n.resolveUrl)(this.opts.uriResolver,P,$)),new a({schema:O,schemaId:k,root:g,baseId:P})}return E.call(this,f,_)}}Mt.resolveSchema=v;const S=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function E(g,{baseId:y,schema:f,root:w}){var P;if(((P=g.fragment)===null||P===void 0?void 0:P[0])!=="/")return;for(const O of g.fragment.slice(1).split("/")){if(typeof f=="boolean")return;const k=f[(0,s.unescapeFragment)(O)];if(k===void 0)return;f=k;const $=typeof f=="object"&&f[this.opts.schemaId];!S.has(O)&&$&&(y=(0,n.resolveUrl)(this.opts.uriResolver,y,$))}let h;if(typeof f!="boolean"&&f.$ref&&!(0,s.schemaHasRulesButRef)(f,this.RULES)){const O=(0,n.resolveUrl)(this.opts.uriResolver,y,f.$ref);h=v.call(this,w,O)}const{schemaId:_}=this.opts;if(h=h||new a({schema:f,schemaId:_,root:w,baseId:y}),h.schema!==h.root.schema)return h}return Mt}const kw="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",Nw="Meta-schema for $data reference (JSON AnySchema extension proposal)",Iw="object",Rw=["$data"],$w={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},Fw=!1,Dw={$id:kw,description:Nw,type:Iw,required:Rw,properties:$w,additionalProperties:Fw};var qs={},wi={exports:{}},cc,Mf;function rp(){if(Mf)return cc;Mf=1;const e=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),t=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),r=RegExp.prototype.test.bind(/^\d*$/u),n=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),s=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),i=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u),a=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u),o=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u),c=new Array(256);{const A="0123456789ABCDEF";for(let C=0;C<256;C++)c[C]="%"+A[C>>4]+A[C&15]}function l(A){return A<2048?c[192|A>>6]+c[128|A&63]:A<65536?c[224|A>>12]+c[128|A>>6&63]+c[128|A&63]:c[240|A>>18]+c[128|A>>12&63]+c[128|A>>6&63]+c[128|A&63]}function u(A){let C="",j=0,m=0;for(m=0;m=48&&j<=57||j>=65&&j<=70||j>=97&&j<=102))return"";C+=A[m];break}for(m+=1;m=48&&j<=57||j>=65&&j<=70||j>=97&&j<=102))return"";C+=A[m]}return C}const p=RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/),b=RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/),v=RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/),S=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function E(A){if(A.length===0)return!1;for(let C=0;Cj&&(j=d,C=m)):(m=-1,d=0);if(j<2)return A.join(":");const x=A.slice(0,C).join(":"),I=A.slice(C+j).join(":");return x+"::"+I}function y(A){const C=A.indexOf("::");if(C!==-1&&A.indexOf("::",C+1)!==-1)return;const j=C===-1?A.split(":"):A.slice(0,C).split(":"),m=C===-1?[]:A.slice(C+2).split(":");C!==-1&&(j.length===1&&j[0]===""&&(j.length=0),m.length===1&&m[0]===""&&(m.length=0));const d=j.concat(m);let x=0;for(let T=0;T=8)return;const I=d.slice(0,j.length);for(let T=x;T<8;T++)I.push("0");for(let T=j.length;Th[m])}function $(A,C=!1){if(A.indexOf("%")===-1)return A;let j="";for(let m=0;m57343)C+=l(d);else if(d<=56319&&j+1=56320&&x<=57343?(C+=l(65536+(d-55296<<10)+(x-56320)),j++):C+=l(65533)}else C+=l(65533)}}return C}function q(A,C=!1){let j="",m=C&&A[0]!=="/";for(let d=0;d57343)j+=l(I);else if(I<=56319&&d+1=56320&&T<=57343?(j+=l(65536+(I-55296<<10)+(T-56320)),d++):j+=l(65533)}else j+=l(65533)}}return j}function U(A,C){let j="";for(let m=0;m57343)j+=l(x);else if(x<=56319&&m+1=56320&&I<=57343?(j+=l(65536+(x-55296<<10)+(I-56320)),m++):j+=l(65533)}else j+=l(65533)}}return j}function L(A){return U(A,o)}function z(A){return U(A,a)}function G(A){return U(A,a)}function J(A){return A>=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||A===42||A===43||A===45||A===46||A===47||A===64||A===95}function Q(A){let C="";for(let j=0;j57343)C+=l(d);else if(d<=56319&&j+1=56320&&x<=57343?(C+=l(65536+(d-55296<<10)+(x-56320)),j++):C+=l(65533)}else C+=l(65533)}}return C}function Z(A){let C="";for(let j=0;j65535))return"URI port is malformed."}function M(A){if(A===void 0)return!1;let C=A.indexOf("%");for(;C!==-1;){if(C+2>=A.length||!/^[\da-f]{2}$/iu.test(A.slice(C+1,C+3)))return!0;C=A.indexOf("%",C+3)}return!1}function q(A){return A[0]==="["&&A[A.length-1]==="]"}function U(A){const C=A[4];return M(A[3])||C!==void 0&&!q(C)&&M(C)||M(A[6])||M(A[7])||M(A[8])}function L(A,C,j,m){if(!C.unicodeSupport&&(!j||!j.unicodeSupport)&&A.host&&!q(A.host)&&(C.domainHost||j&&j.domainHost)&&m===!1&&p(A.host))try{A.host=new URL("http://"+A.host).hostname}catch(d){return A.error=A.error||"Host's domain name can not be converted to ASCII: "+d,!0}return!1}function z(A,C){const j=Object.assign({},C),m={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0};let d=!1,x=!1,I=!1,T=!1,F=!1,B=!1,H=!1;j.reference==="suffix"&&(j.scheme?A=j.scheme+":"+A:A="//"+A);const R=A.match(O);R!==null&&R[1].indexOf("\\")!==-1&&(m.error="URI authority must not contain a literal backslash.",d=!0);const D=A.match(k);if(D!==null){const K=D[1],W=K.replace(/[\t\n\r]/g,"");W.length>=2&&(W.slice(0,2)!=="//"?(m.error=m.error||"URI authority must not contain a literal backslash.",d=!0):K.length!==W.length&&(m.error=m.error||"URI authority introducer must not contain whitespace.",d=!0))}const V=A.match(_);if(V){if(m.scheme=V[1],m.userinfo=V[3],m.host=V[4],m.port=parseInt(V[5],10),m.path=V[6]||"",m.query=V[7],m.fragment=V[8],m.scheme!==void 0){const Y=unescape(m.scheme);S.test(Y)?m.scheme=Y.toLowerCase():(m.error=m.error||E,B=!0)}x=U(V),x&&(m.error=m.error||"URI contains malformed percent-encoding."),isNaN(m.port)&&(m.port=V[5]);const K=$(m,V);if(K!==void 0&&(m.error=m.error||K,d=!0),m.host)if(u(m.host)===!1){const te=q(m.host),ne=m.host.indexOf("[")!==-1||m.host.indexOf("]")!==-1,se=e(m.host);H=se.isIPV6||se.isIPVFuture===!0,F=ne&&(!te||se.error===!0),m.host=H?se.host:se.host.toLowerCase(),F&&(m.error=m.error||"URI host is malformed.",d=!0)}else H=!0;m.scheme===void 0&&m.userinfo===void 0&&m.host===void 0&&m.port===void 0&&m.query===void 0&&!m.path?m.reference="same-document":m.scheme===void 0?m.reference="relative":m.fragment===void 0?m.reference="absolute":m.reference="uri",j.reference&&j.reference!=="suffix"&&j.reference!==m.reference&&(m.error=m.error||"URI is not a "+j.reference+" reference.");const W=v(j.scheme||m.scheme);if(F||(T=L(m,j,W,H)),!W||W&&!W.skipNormalize){if(A.indexOf("%")!==-1&&m.host!==void 0&&!F){const Y=H?m.host:n(m.host,!0);m.host=l(Y,H)}m.path&&(m.path=s(m.path)),m.query&&(m.query=a(m.query)),m.fragment&&(m.fragment=a(m.fragment))}W&&W.parse&&(W.parse(m,j),W===b.urn&&m.nid===void 0&&(I=!0))}else m.error=m.error||"URI can not be parsed.";return{parsed:m,malformedAuthorityOrPort:d,malformedPercentEncoding:x,malformedSchemeSpecific:I,malformedHost:T,malformedScheme:B}}function G(A,C){return z(A,C).parsed}function J(A,C){return Q(A,C).normalized}function Q(A,C){const{parsed:j,malformedAuthorityOrPort:m,malformedPercentEncoding:d,malformedSchemeSpecific:x,malformedHost:I,malformedScheme:T}=z(A,C);return{normalized:m||d||x||I||T?A:h(j,C),malformedAuthorityOrPort:m,malformedPercentEncoding:d,malformedSchemeSpecific:x,malformedHost:I,malformedScheme:T}}function Z(A,C){if(typeof A!="string"&&typeof A!="object")return;let j;try{j=typeof A=="string"?A:h(A,C)}catch{return}const{normalized:m,malformedAuthorityOrPort:d,malformedPercentEncoding:x,malformedSchemeSpecific:I,malformedHost:T,malformedScheme:F}=Q(j,C);return d||x||I||T||F?void 0:m}const re={SCHEMES:b,normalize:y,resolve:f,resolveComponent:w,equal:P,serialize:h,parse:G};return wi.exports=re,wi.exports.default=re,wi.exports.fastUri=re,wi.exports}var Lf;function qw(){if(Lf)return qs;Lf=1,Object.defineProperty(qs,"__esModule",{value:!0});const e=Mw();return e.code='require("ajv/dist/runtime/uri").default',qs.default=e,qs}var Vf;function Uw(){return Vf||(Vf=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=ao();Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return t.KeywordCxt}});var r=Oe();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return r._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return r.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return r.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return r.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return r.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return r.CodeGen}});const n=hl(),s=oo(),i=ep(),a=ml(),o=Oe(),c=so(),l=Ba(),u=Me(),p=Dw,b=qw(),v=(A,C)=>new RegExp(A,C);v.code="new RegExp";const S=["removeAdditional","useDefaults","coerceTypes"],E=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),g={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},y={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},f=200;function w(A){var C,j,m,d,x,I,T,F,B,H,R,D,V,K,W,Y,te,ne,se,ce,he,le,ge,Fe,fe;const Ye=A.strict,ye=(C=A.code)===null||C===void 0?void 0:C.optimize,oe=ye===!0||ye===void 0?1:ye||0,ft=(m=(j=A.code)===null||j===void 0?void 0:j.regExp)!==null&&m!==void 0?m:v,ke=(d=A.uriResolver)!==null&&d!==void 0?d:b.default;return{strictSchema:(I=(x=A.strictSchema)!==null&&x!==void 0?x:Ye)!==null&&I!==void 0?I:!0,strictNumbers:(F=(T=A.strictNumbers)!==null&&T!==void 0?T:Ye)!==null&&F!==void 0?F:!0,strictTypes:(H=(B=A.strictTypes)!==null&&B!==void 0?B:Ye)!==null&&H!==void 0?H:"log",strictTuples:(D=(R=A.strictTuples)!==null&&R!==void 0?R:Ye)!==null&&D!==void 0?D:"log",strictRequired:(K=(V=A.strictRequired)!==null&&V!==void 0?V:Ye)!==null&&K!==void 0?K:!1,code:A.code?{...A.code,optimize:oe,regExp:ft}:{optimize:oe,regExp:ft},loopRequired:(W=A.loopRequired)!==null&&W!==void 0?W:f,loopEnum:(Y=A.loopEnum)!==null&&Y!==void 0?Y:f,meta:(te=A.meta)!==null&&te!==void 0?te:!0,messages:(ne=A.messages)!==null&&ne!==void 0?ne:!0,inlineRefs:(se=A.inlineRefs)!==null&&se!==void 0?se:!0,schemaId:(ce=A.schemaId)!==null&&ce!==void 0?ce:"$id",addUsedSchema:(he=A.addUsedSchema)!==null&&he!==void 0?he:!0,validateSchema:(le=A.validateSchema)!==null&&le!==void 0?le:!0,validateFormats:(ge=A.validateFormats)!==null&&ge!==void 0?ge:!0,unicodeRegExp:(Fe=A.unicodeRegExp)!==null&&Fe!==void 0?Fe:!0,int32range:(fe=A.int32range)!==null&&fe!==void 0?fe:!0,uriResolver:ke}}class P{constructor(C={}){this.schemas={},this.refs={},this.formats=Object.create(null),this._compilations=new Set,this._loading={},this._cache=new Map,C=this.opts={...C,...w(C)};const{es5:j,lines:m}=this.opts.code;this.scope=new o.ValueScope({scope:{},prefixes:E,es5:j,lines:m}),this.logger=U(C.logger);const d=C.validateFormats;C.validateFormats=!1,this.RULES=(0,i.getRules)(),h.call(this,g,C,"NOT SUPPORTED"),h.call(this,y,C,"DEPRECATED","warn"),this._metaOpts=M.call(this),C.formats&&k.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),C.keywords&&$.call(this,C.keywords),typeof C.meta=="object"&&this.addMetaSchema(C.meta),O.call(this),C.validateFormats=d}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:C,meta:j,schemaId:m}=this.opts;let d=p;m==="id"&&(d={...p},d.id=d.$id,delete d.$id),j&&C&&this.addMetaSchema(d,d[m],!1)}defaultMeta(){const{meta:C,schemaId:j}=this.opts;return this.opts.defaultMeta=typeof C=="object"?C[j]||C:void 0}validate(C,j){let m;if(typeof C=="string"){if(m=this.getSchema(C),!m)throw new Error(`no schema with key or ref "${C}"`)}else m=this.compile(C);const d=m(j);return"$async"in m||(this.errors=m.errors),d}compile(C,j){const m=this._addSchema(C,j);return m.validate||this._compileSchemaEnv(m)}compileAsync(C,j){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:m}=this.opts;return d.call(this,C,j);async function d(H,R){await x.call(this,H.$schema);const D=this._addSchema(H,R);return D.validate||I.call(this,D)}async function x(H){H&&!this.getSchema(H)&&await d.call(this,{$ref:H},!0)}async function I(H){try{return this._compileSchemaEnv(H)}catch(R){if(!(R instanceof s.default))throw R;return T.call(this,R),await F.call(this,R.missingSchema),I.call(this,H)}}function T({missingSchema:H,missingRef:R}){if(this.refs[H])throw new Error(`AnySchema ${H} is loaded but ${R} cannot be resolved`)}async function F(H){const R=await B.call(this,H);this.refs[H]||await x.call(this,R.$schema),this.refs[H]||this.addSchema(R,H,j)}async function B(H){const R=this._loading[H];if(R)return R;try{return await(this._loading[H]=m(H))}finally{delete this._loading[H]}}}addSchema(C,j,m,d=this.opts.validateSchema){if(Array.isArray(C)){for(const I of C)this.addSchema(I,void 0,m,d);return this}let x;if(typeof C=="object"){const{schemaId:I}=this.opts;if(x=C[I],x!==void 0&&typeof x!="string")throw new Error(`schema ${I} must be string`)}return j=(0,c.normalizeId)(j||x),this._checkUnique(j),this.schemas[j]=this._addSchema(C,m,j,d,!0),this}addMetaSchema(C,j,m=this.opts.validateSchema){return this.addSchema(C,j,!0,m),this}validateSchema(C,j){if(typeof C=="boolean")return!0;let m;if(m=C.$schema,m!==void 0&&typeof m!="string")throw new Error("$schema must be a string");if(m=m||this.opts.defaultMeta||this.defaultMeta(),!m)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const d=this.validate(m,C);if(!d&&j){const x="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(x);else throw new Error(x)}return d}getSchema(C){let j;for(;typeof(j=_.call(this,C))=="string";)C=j;if(j===void 0){const{schemaId:m}=this.opts,d=new a.SchemaEnv({schema:{},schemaId:m});if(j=a.resolveSchema.call(this,d,C),!j)return;this.refs[C]=j}return j.validate||this._compileSchemaEnv(j)}removeSchema(C){if(C instanceof RegExp)return this._removeAllSchemas(this.schemas,C),this._removeAllSchemas(this.refs,C),this;switch(typeof C){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const j=_.call(this,C);return typeof j=="object"&&this._cache.delete(j.schema),delete this.schemas[C],delete this.refs[C],this}case"object":{const j=C;this._cache.delete(j);let m=C[this.opts.schemaId];return m&&(m=(0,c.normalizeId)(m),delete this.schemas[m],delete this.refs[m]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(C){for(const j of C)this.addKeyword(j);return this}addKeyword(C,j){let m;if(typeof C=="string")m=C,typeof j=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),j.keyword=m);else if(typeof C=="object"&&j===void 0){if(j=C,m=j.keyword,Array.isArray(m)&&!m.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(z.call(this,m,j),!j)return(0,u.eachItem)(m,x=>G.call(this,x)),this;Q.call(this,j);const d={...j,type:(0,l.getJSONTypes)(j.type),schemaType:(0,l.getJSONTypes)(j.schemaType)};return(0,u.eachItem)(m,d.type.length===0?x=>G.call(this,x,d):x=>d.type.forEach(I=>G.call(this,x,d,I))),this}getKeyword(C){const j=this.RULES.all[C];return typeof j=="object"?j.definition:!!j}removeKeyword(C){const{RULES:j}=this;delete j.keywords[C],delete j.all[C];for(const m of j.rules){const d=m.rules.findIndex(x=>x.keyword===C);d>=0&&m.rules.splice(d,1)}return this}addFormat(C,j){return typeof j=="string"&&(j=new RegExp(j)),this.formats[C]=j,this}errorsText(C=this.errors,{separator:j=", ",dataVar:m="data"}={}){return!C||C.length===0?"No errors":C.map(d=>`${m}${d.instancePath} ${d.message}`).reduce((d,x)=>d+j+x)}$dataMetaSchema(C,j){const m=this.RULES.all;C=JSON.parse(JSON.stringify(C));for(const d of j){const x=d.split("/").slice(1);let I=C;for(const T of x)I=I[T];for(const T in m){const F=m[T];if(typeof F!="object")continue;const{$data:B}=F.definition,H=I[T];B&&H&&(I[T]=re(H))}}return C}_removeAllSchemas(C,j){for(const m in C){const d=C[m];(!j||j.test(m))&&(typeof d=="string"?delete C[m]:d&&!d.meta&&(this._cache.delete(d.schema),delete C[m]))}}_addSchema(C,j,m,d=this.opts.validateSchema,x=this.opts.addUsedSchema){let I;const{schemaId:T}=this.opts;if(typeof C=="object")I=C[T];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof C!="boolean")throw new Error("schema must be object or boolean")}let F=this._cache.get(C);if(F!==void 0)return F;m=(0,c.normalizeId)(I||m);const B=c.getSchemaRefs.call(this,C,m);return F=new a.SchemaEnv({schema:C,schemaId:T,meta:j,baseId:m,localRefs:B}),this._cache.set(F.schema,F),x&&!m.startsWith("#")&&(m&&this._checkUnique(m),this.refs[m]=F),d&&this.validateSchema(C,!0),F}_checkUnique(C){if(this.schemas[C]||this.refs[C])throw new Error(`schema with key or id "${C}" already exists`)}_compileSchemaEnv(C){if(C.meta?this._compileMetaSchema(C):a.compileSchema.call(this,C),!C.validate)throw new Error("ajv implementation error");return C.validate}_compileMetaSchema(C){const j=this.opts;this.opts=this._metaOpts;try{a.compileSchema.call(this,C)}finally{this.opts=j}}}P.ValidationError=n.default,P.MissingRefError=s.default,e.default=P;function h(A,C,j,m="error"){for(const d in A){const x=d;x in C&&this.logger[m](`${j}: option ${d}. ${A[x]}`)}}function _(A){return A=(0,c.normalizeId)(A),this.schemas[A]||this.refs[A]}function O(){const A=this.opts.schemas;if(A)if(Array.isArray(A))this.addSchema(A);else for(const C in A)this.addSchema(A[C],C)}function k(){for(const A in this.opts.formats){const C=this.opts.formats[A];C&&this.addFormat(A,C)}}function $(A){if(Array.isArray(A)){this.addVocabulary(A);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const C in A){const j=A[C];j.keyword||(j.keyword=C),this.addKeyword(j)}}function M(){const A={...this.opts};for(const C of S)delete A[C];return A}const q={log(){},warn(){},error(){}};function U(A){if(A===!1)return q;if(A===void 0)return console;if(A.log&&A.warn&&A.error)return A;throw new Error("logger must implement log, warn and error methods")}const L=/^[a-z_$][a-z0-9_$:-]*$/i;function z(A,C){const{RULES:j}=this;if((0,u.eachItem)(A,m=>{if(j.keywords[m])throw new Error(`Keyword ${m} is already defined`);if(!L.test(m))throw new Error(`Keyword ${m} has invalid name`)}),!!C&&C.$data&&!("code"in C||"validate"in C))throw new Error('$data keyword must have "code" or "validate" function')}function G(A,C,j){var m;const d=C?.post;if(j&&d)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:x}=this;let I=d?x.post:x.rules.find(({type:F})=>F===j);if(I||(I={type:j,rules:[]},x.rules.push(I)),x.keywords[A]=!0,!C)return;const T={keyword:A,definition:{...C,type:(0,l.getJSONTypes)(C.type),schemaType:(0,l.getJSONTypes)(C.schemaType)}};C.before?J.call(this,I,T,C.before):I.rules.push(T),x.all[A]=T,(m=C.implements)===null||m===void 0||m.forEach(F=>this.addKeyword(F))}function J(A,C,j){const m=A.rules.findIndex(d=>d.keyword===j);m>=0?A.rules.splice(m,0,C):(A.rules.push(C),this.logger.warn(`rule ${j} is not defined`))}function Q(A){let{metaSchema:C}=A;C!==void 0&&(A.$data&&this.opts.$data&&(C=re(C)),A.validateSchema=this.compile(C,!0))}const Z={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function re(A){return{anyOf:[A,Z]}}})(rc)),rc}var Us={},Ls={},Vs={},zf;function Lw(){if(zf)return Vs;zf=1,Object.defineProperty(Vs,"__esModule",{value:!0});const e={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return Vs.default=e,Vs}var Mr={},Bf;function Vw(){if(Bf)return Mr;Bf=1,Object.defineProperty(Mr,"__esModule",{value:!0}),Mr.callRef=Mr.getValidate=void 0;const e=oo(),t=ar(),r=Oe(),n=nn(),s=ml(),i=Me(),a={keyword:"$ref",schemaType:"string",code(l){const{gen:u,schema:p,it:b}=l,{baseId:v,schemaEnv:S,validateName:E,opts:g,self:y}=b,{root:f}=S;if((p==="#"||p==="#/")&&v===f.baseId)return P();const w=s.resolveRef.call(y,f,v,p);if(w===void 0)throw new e.default(b.opts.uriResolver,v,p);if(w instanceof s.SchemaEnv)return h(w);return _(w);function P(){if(S===f)return c(l,E,S,S.$async);const O=u.scopeValue("root",{ref:f});return c(l,(0,r._)`${O}.validate`,f,f.$async)}function h(O){const k=o(l,O);c(l,k,O,O.$async)}function _(O){const k=u.scopeValue("schema",g.code.source===!0?{ref:O,code:(0,r.stringify)(O)}:{ref:O}),$=u.name("valid"),M=l.subschema({schema:O,dataTypes:[],schemaPath:r.nil,topSchemaRef:k,errSchemaPath:p},$);l.mergeEvaluated(M),l.ok($)}}};function o(l,u){const{gen:p}=l;return u.validate?p.scopeValue("validate",{ref:u.validate}):(0,r._)`${p.scopeValue("wrapper",{ref:u})}.validate`}Mr.getValidate=o;function c(l,u,p,b){const{gen:v,it:S}=l,{allErrors:E,schemaEnv:g,opts:y}=S,f=y.passContext?n.default.this:r.nil;b?w():P();function w(){if(!g.$async)throw new Error("async schema referenced by sync schema");const O=v.let("valid");v.try(()=>{v.code((0,r._)`await ${(0,t.callValidateCode)(l,u,f)}`),_(u),E||v.assign(O,!0)},k=>{v.if((0,r._)`!(${k} instanceof ${S.ValidationError})`,()=>v.throw(k)),h(k),E||v.assign(O,!1)}),l.ok(O)}function P(){l.result((0,t.callValidateCode)(l,u,f),()=>_(u),()=>h(u))}function h(O){const k=(0,r._)`${O}.errors`;v.assign(n.default.vErrors,(0,r._)`${n.default.vErrors} === null ? ${k} : ${n.default.vErrors}.concat(${k})`),v.assign(n.default.errors,(0,r._)`${n.default.vErrors}.length`)}function _(O){var k;if(!S.opts.unevaluated)return;const $=(k=p?.validate)===null||k===void 0?void 0:k.evaluated;if(S.props!==!0)if($&&!$.dynamicProps)$.props!==void 0&&(S.props=i.mergeEvaluated.props(v,$.props,S.props));else{const M=v.var("props",(0,r._)`${O}.evaluated.props`);S.props=i.mergeEvaluated.props(v,M,S.props,r.Name)}if(S.items!==!0)if($&&!$.dynamicItems)$.items!==void 0&&(S.items=i.mergeEvaluated.items(v,$.items,S.items));else{const M=v.var("items",(0,r._)`${O}.evaluated.items`);S.items=i.mergeEvaluated.items(v,M,S.items,r.Name)}}}return Mr.callRef=c,Mr.default=a,Mr}var Hf;function zw(){if(Hf)return Ls;Hf=1,Object.defineProperty(Ls,"__esModule",{value:!0});const e=Lw(),t=Vw(),r=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",e.default,t.default];return Ls.default=r,Ls}var zs={},Bs={},Kf;function Bw(){if(Kf)return Bs;Kf=1,Object.defineProperty(Bs,"__esModule",{value:!0});const e=Oe(),t=e.operators,r={maximum:{okStr:"<=",ok:t.LTE,fail:t.GT},minimum:{okStr:">=",ok:t.GTE,fail:t.LT},exclusiveMaximum:{okStr:"<",ok:t.LT,fail:t.GTE},exclusiveMinimum:{okStr:">",ok:t.GT,fail:t.LTE}},n={message:({keyword:i,schemaCode:a})=>(0,e.str)`must be ${r[i].okStr} ${a}`,params:({keyword:i,schemaCode:a})=>(0,e._)`{comparison: ${r[i].okStr}, limit: ${a}}`},s={keyword:Object.keys(r),type:"number",schemaType:"number",$data:!0,error:n,code(i){const{keyword:a,data:o,schemaCode:c}=i;i.fail$data((0,e._)`${o} ${r[a].fail} ${c} || isNaN(${o})`)}};return Bs.default=s,Bs}var Hs={},Gf;function Hw(){if(Gf)return Hs;Gf=1,Object.defineProperty(Hs,"__esModule",{value:!0});const e=Oe(),r={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:n})=>(0,e.str)`must be multiple of ${n}`,params:({schemaCode:n})=>(0,e._)`{multipleOf: ${n}}`},code(n){const{gen:s,data:i,schemaCode:a,it:o}=n,c=o.opts.multipleOfPrecision,l=s.let("res"),u=c?(0,e._)`Math.abs(Math.round(${l}) - ${l}) > 1e-${c}`:(0,e._)`${l} !== parseInt(${l})`;n.fail$data((0,e._)`(${a} === 0 || (${l} = ${i}/${a}, ${u}))`)}};return Hs.default=r,Hs}var Ks={},Gs={},Wf;function Kw(){if(Wf)return Gs;Wf=1,Object.defineProperty(Gs,"__esModule",{value:!0});function e(t){const r=t.length;let n=0,s=0,i;for(;s=55296&&i<=56319&&s(0,e._)`{limit: ${i}}`},code(i){const{keyword:a,data:o,schemaCode:c,it:l}=i,u=a==="maxLength"?e.operators.GT:e.operators.LT,p=l.opts.unicode===!1?(0,e._)`${o}.length`:(0,e._)`${(0,t.useFunc)(i.gen,r.default)}(${o})`;i.fail$data((0,e._)`${p} ${u} ${c}`)}};return Ks.default=s,Ks}var Ws={},Yf;function Ww(){if(Yf)return Ws;Yf=1,Object.defineProperty(Ws,"__esModule",{value:!0});const e=ar(),t=Me(),r=Oe(),s={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:i})=>(0,r.str)`must match pattern "${i}"`,params:({schemaCode:i})=>(0,r._)`{pattern: ${i}}`},code(i){const{gen:a,data:o,$data:c,schema:l,schemaCode:u,it:p}=i,b=p.opts.unicodeRegExp?"u":"";if(c){const{regExp:v}=p.opts.code,S=v.code==="new RegExp"?(0,r._)`new RegExp`:(0,t.useFunc)(a,v),E=a.let("valid");a.try(()=>a.assign(E,(0,r._)`${S}(${u}, ${b}).test(${o})`),()=>a.assign(E,!1)),i.fail$data((0,r._)`!${E}`)}else{const v=(0,e.usePattern)(i,l);i.fail$data((0,r._)`!${v}.test(${o})`)}}};return Ws.default=s,Ws}var Js={},Xf;function Jw(){if(Xf)return Js;Xf=1,Object.defineProperty(Js,"__esModule",{value:!0});const e=Oe(),r={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:n,schemaCode:s}){const i=n==="maxProperties"?"more":"fewer";return(0,e.str)`must NOT have ${i} than ${s} properties`},params:({schemaCode:n})=>(0,e._)`{limit: ${n}}`},code(n){const{keyword:s,data:i,schemaCode:a}=n,o=s==="maxProperties"?e.operators.GT:e.operators.LT;n.fail$data((0,e._)`Object.keys(${i}).length ${o} ${a}`)}};return Js.default=r,Js}var Ys={},Zf;function Yw(){if(Zf)return Ys;Zf=1,Object.defineProperty(Ys,"__esModule",{value:!0});const e=ar(),t=Oe(),r=Me(),s={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:i}})=>(0,t.str)`must have required property '${i}'`,params:({params:{missingProperty:i}})=>(0,t._)`{missingProperty: ${i}}`},code(i){const{gen:a,schema:o,schemaCode:c,data:l,$data:u,it:p}=i,{opts:b}=p;if(!u&&o.length===0)return;const v=o.length>=b.loopRequired;if(p.allErrors?S():E(),b.strictRequired){const f=i.parentSchema.properties,{definedProperties:w}=i.it;for(const P of o)if(f?.[P]===void 0&&!w.has(P)){const h=p.schemaEnv.baseId+p.errSchemaPath,_=`required property "${P}" is not defined at "${h}" (strictRequired)`;(0,r.checkStrictMode)(p,_,p.opts.strictRequired)}}function S(){if(v||u)i.block$data(t.nil,g);else for(const f of o)(0,e.checkReportMissingProp)(i,f)}function E(){const f=a.let("missing");if(v||u){const w=a.let("valid",!0);i.block$data(w,()=>y(f,w)),i.ok(w)}else a.if((0,e.checkMissingProp)(i,o,f)),(0,e.reportMissingProp)(i,f),a.else()}function g(){a.forOf("prop",c,f=>{i.setParams({missingProperty:f}),a.if((0,e.noPropertyInData)(a,l,f,b.ownProperties),()=>i.error())})}function y(f,w){i.setParams({missingProperty:f}),a.forOf(f,c,()=>{a.assign(w,(0,e.propertyInData)(a,l,f,b.ownProperties)),a.if((0,t.not)(w),()=>{i.error(),a.break()})},t.nil)}}};return Ys.default=s,Ys}var Xs={},Qf;function Xw(){if(Qf)return Xs;Qf=1,Object.defineProperty(Xs,"__esModule",{value:!0});const e=Oe(),r={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:n,schemaCode:s}){const i=n==="maxItems"?"more":"fewer";return(0,e.str)`must NOT have ${i} than ${s} items`},params:({schemaCode:n})=>(0,e._)`{limit: ${n}}`},code(n){const{keyword:s,data:i,schemaCode:a}=n,o=s==="maxItems"?e.operators.GT:e.operators.LT;n.fail$data((0,e._)`${i}.length ${o} ${a}`)}};return Xs.default=r,Xs}var Zs={},Qs={},eh;function pl(){if(eh)return Qs;eh=1,Object.defineProperty(Qs,"__esModule",{value:!0});const e=eo();return e.code='require("ajv/dist/runtime/equal").default',Qs.default=e,Qs}var th;function Zw(){if(th)return Zs;th=1,Object.defineProperty(Zs,"__esModule",{value:!0});const e=Ba(),t=Oe(),r=Me(),n=pl(),i={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:a,j:o}})=>(0,t.str)`must NOT have duplicate items (items ## ${o} and ${a} are identical)`,params:({params:{i:a,j:o}})=>(0,t._)`{i: ${a}, j: ${o}}`},code(a){const{gen:o,data:c,$data:l,schema:u,parentSchema:p,schemaCode:b,it:v}=a;if(!l&&!u)return;const S=o.let("valid"),E=p.items?(0,e.getSchemaTypes)(p.items):[];a.block$data(S,g,(0,t._)`${b} === false`),a.ok(S);function g(){const P=o.let("i",(0,t._)`${c}.length`),h=o.let("j");a.setParams({i:P,j:h}),o.assign(S,!0),o.if((0,t._)`${P} > 1`,()=>(y()?f:w)(P,h))}function y(){return E.length>0&&!E.some(P=>P==="object"||P==="array")}function f(P,h){const _=o.name("item"),O=(0,e.checkDataTypes)(E,_,v.opts.strictNumbers,e.DataType.Wrong),k=o.const("indices",(0,t._)`{}`);o.for((0,t._)`;${P}--;`,()=>{o.let(_,(0,t._)`${c}[${P}]`),o.if(O,(0,t._)`continue`),E.length>1&&o.if((0,t._)`typeof ${_} == "string"`,(0,t._)`${_} += "_"`),o.if((0,t._)`typeof ${k}[${_}] == "number"`,()=>{o.assign(h,(0,t._)`${k}[${_}]`),a.error(),o.assign(S,!1).break()}).code((0,t._)`${k}[${_}] = ${P}`)})}function w(P,h){const _=(0,r.useFunc)(o,n.default),O=o.name("outer");o.label(O).for((0,t._)`;${P}--;`,()=>o.for((0,t._)`${h} = ${P}; ${h}--;`,()=>o.if((0,t._)`${_}(${c}[${P}], ${c}[${h}])`,()=>{a.error(),o.assign(S,!1).break(O)})))}}};return Zs.default=i,Zs}var ea={},rh;function Qw(){if(rh)return ea;rh=1,Object.defineProperty(ea,"__esModule",{value:!0});const e=Oe(),t=Me(),r=pl(),s={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:i})=>(0,e._)`{allowedValue: ${i}}`},code(i){const{gen:a,data:o,$data:c,schemaCode:l,schema:u}=i;c||u&&typeof u=="object"?i.fail$data((0,e._)`!${(0,t.useFunc)(a,r.default)}(${o}, ${l})`):i.fail((0,e._)`${u} !== ${o}`)}};return ea.default=s,ea}var ta={},nh;function e1(){if(nh)return ta;nh=1,Object.defineProperty(ta,"__esModule",{value:!0});const e=Oe(),t=Me(),r=pl(),s={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:i})=>(0,e._)`{allowedValues: ${i}}`},code(i){const{gen:a,data:o,$data:c,schema:l,schemaCode:u,it:p}=i;if(!c&&l.length===0)throw new Error("enum must have non-empty array");const b=l.length>=p.opts.loopEnum;let v;const S=()=>v??(v=(0,t.useFunc)(a,r.default));let E;if(b||c)E=a.let("valid"),i.block$data(E,g);else{if(!Array.isArray(l))throw new Error("ajv implementation error");const f=a.const("vSchema",u);E=(0,e.or)(...l.map((w,P)=>y(f,P)))}i.pass(E);function g(){a.assign(E,!1),a.forOf("v",u,f=>a.if((0,e._)`${S()}(${o}, ${f})`,()=>a.assign(E,!0).break()))}function y(f,w){const P=l[w];return typeof P=="object"&&P!==null?(0,e._)`${S()}(${o}, ${f}[${w}])`:(0,e._)`${o} === ${P}`}}};return ta.default=s,ta}var ih;function t1(){if(ih)return zs;ih=1,Object.defineProperty(zs,"__esModule",{value:!0});const e=Bw(),t=Hw(),r=Gw(),n=Ww(),s=Jw(),i=Yw(),a=Xw(),o=Zw(),c=Qw(),l=e1(),u=[e.default,t.default,r.default,n.default,s.default,i.default,a.default,o.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},c.default,l.default];return zs.default=u,zs}var ra={},Bn={},sh;function np(){if(sh)return Bn;sh=1,Object.defineProperty(Bn,"__esModule",{value:!0}),Bn.validateAdditionalItems=void 0;const e=Oe(),t=Me(),n={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:i}})=>(0,e.str)`must NOT have more than ${i} items`,params:({params:{len:i}})=>(0,e._)`{limit: ${i}}`},code(i){const{parentSchema:a,it:o}=i,{items:c}=a;if(!Array.isArray(c)){(0,t.checkStrictMode)(o,'"additionalItems" is ignored when "items" is not an array of schemas');return}s(i,c)}};function s(i,a){const{gen:o,schema:c,data:l,keyword:u,it:p}=i;p.items=!0;const b=o.const("len",(0,e._)`${l}.length`);if(c===!1)i.setParams({len:a.length}),i.pass((0,e._)`${b} <= ${a.length}`);else if(typeof c=="object"&&!(0,t.alwaysValidSchema)(p,c)){const S=o.var("valid",(0,e._)`${b} <= ${a.length}`);o.if((0,e.not)(S),()=>v(S)),i.ok(S)}function v(S){o.forRange("i",a.length,b,E=>{i.subschema({keyword:u,dataProp:E,dataPropType:t.Type.Num},S),p.allErrors||o.if((0,e.not)(S),()=>o.break())})}}return Bn.validateAdditionalItems=s,Bn.default=n,Bn}var na={},Hn={},ah;function ip(){if(ah)return Hn;ah=1,Object.defineProperty(Hn,"__esModule",{value:!0}),Hn.validateTuple=void 0;const e=Oe(),t=Me(),r=ar(),n={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(i){const{schema:a,it:o}=i;if(Array.isArray(a))return s(i,"additionalItems",a);o.items=!0,!(0,t.alwaysValidSchema)(o,a)&&i.ok((0,r.validateArray)(i))}};function s(i,a,o=i.schema){const{gen:c,parentSchema:l,data:u,keyword:p,it:b}=i;E(l),b.opts.unevaluated&&o.length&&b.items!==!0&&(b.items=t.mergeEvaluated.items(c,o.length,b.items));const v=c.name("valid"),S=c.const("len",(0,e._)`${u}.length`);o.forEach((g,y)=>{(0,t.alwaysValidSchema)(b,g)||(c.if((0,e._)`${S} > ${y}`,()=>i.subschema({keyword:p,schemaProp:y,dataProp:y},v)),i.ok(v))});function E(g){const{opts:y,errSchemaPath:f}=b,w=o.length,P=w===g.minItems&&(w===g.maxItems||g[a]===!1);if(y.strictTuples&&!P){const h=`"${p}" is ${w}-tuple, but minItems or maxItems/${a} are not specified or different at path "${f}"`;(0,t.checkStrictMode)(b,h,y.strictTuples)}}}return Hn.validateTuple=s,Hn.default=n,Hn}var oh;function r1(){if(oh)return na;oh=1,Object.defineProperty(na,"__esModule",{value:!0});const e=ip(),t={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:r=>(0,e.validateTuple)(r,"items")};return na.default=t,na}var ia={},ch;function n1(){if(ch)return ia;ch=1,Object.defineProperty(ia,"__esModule",{value:!0});const e=Oe(),t=Me(),r=ar(),n=np(),i={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:a}})=>(0,e.str)`must NOT have more than ${a} items`,params:({params:{len:a}})=>(0,e._)`{limit: ${a}}`},code(a){const{schema:o,parentSchema:c,it:l}=a,{prefixItems:u}=c;l.items=!0,!(0,t.alwaysValidSchema)(l,o)&&(u?(0,n.validateAdditionalItems)(a,u):a.ok((0,r.validateArray)(a)))}};return ia.default=i,ia}var sa={},lh;function i1(){if(lh)return sa;lh=1,Object.defineProperty(sa,"__esModule",{value:!0});const e=Oe(),t=Me(),n={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:s,max:i}})=>i===void 0?(0,e.str)`must contain at least ${s} valid item(s)`:(0,e.str)`must contain at least ${s} and no more than ${i} valid item(s)`,params:({params:{min:s,max:i}})=>i===void 0?(0,e._)`{minContains: ${s}}`:(0,e._)`{minContains: ${s}, maxContains: ${i}}`},code(s){const{gen:i,schema:a,parentSchema:o,data:c,it:l}=s;let u,p;const{minContains:b,maxContains:v}=o;l.opts.next?(u=b===void 0?1:b,p=v):u=1;const S=i.const("len",(0,e._)`${c}.length`);if(s.setParams({min:u,max:p}),p===void 0&&u===0){(0,t.checkStrictMode)(l,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(p!==void 0&&u>p){(0,t.checkStrictMode)(l,'"minContains" > "maxContains" is always invalid'),s.fail();return}if((0,t.alwaysValidSchema)(l,a)){let w=(0,e._)`${S} >= ${u}`;p!==void 0&&(w=(0,e._)`${w} && ${S} <= ${p}`),s.pass(w);return}l.items=!0;const E=i.name("valid");p===void 0&&u===1?y(E,()=>i.if(E,()=>i.break())):u===0?(i.let(E,!0),p!==void 0&&i.if((0,e._)`${c}.length > 0`,g)):(i.let(E,!1),g()),s.result(E,()=>s.reset());function g(){const w=i.name("_valid"),P=i.let("count",0);y(w,()=>i.if(w,()=>f(P)))}function y(w,P){i.forRange("i",0,S,h=>{s.subschema({keyword:"contains",dataProp:h,dataPropType:t.Type.Num,compositeRule:!0},w),P()})}function f(w){i.code((0,e._)`${w}++`),p===void 0?i.if((0,e._)`${w} >= ${u}`,()=>i.assign(E,!0).break()):(i.if((0,e._)`${w} > ${p}`,()=>i.assign(E,!1).break()),u===1?i.assign(E,!0):i.if((0,e._)`${w} >= ${u}`,()=>i.assign(E,!0)))}}};return sa.default=n,sa}var uc={},uh;function s1(){return uh||(uh=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;const t=Oe(),r=Me(),n=ar();e.error={message:({params:{property:c,depsCount:l,deps:u}})=>{const p=l===1?"property":"properties";return(0,t.str)`must have ${p} ${u} when property ${c} is present`},params:({params:{property:c,depsCount:l,deps:u,missingProperty:p}})=>(0,t._)`{property: ${c}, + missingProperty: ${p}, + depsCount: ${l}, + deps: ${u}}`};const s={keyword:"dependencies",type:"object",schemaType:"object",error:e.error,code(c){const[l,u]=i(c);a(c,l),o(c,u)}};function i({schema:c}){const l={},u={};for(const p in c){if(p==="__proto__")continue;const b=Array.isArray(c[p])?l:u;b[p]=c[p]}return[l,u]}function a(c,l=c.schema){const{gen:u,data:p,it:b}=c;if(Object.keys(l).length===0)return;const v=u.let("missing");for(const S in l){const E=l[S];if(E.length===0)continue;const g=(0,n.propertyInData)(u,p,S,b.opts.ownProperties);c.setParams({property:S,depsCount:E.length,deps:E.join(", ")}),b.allErrors?u.if(g,()=>{for(const y of E)(0,n.checkReportMissingProp)(c,y)}):(u.if((0,t._)`${g} && (${(0,n.checkMissingProp)(c,E,v)})`),(0,n.reportMissingProp)(c,v),u.else())}}e.validatePropertyDeps=a;function o(c,l=c.schema){const{gen:u,data:p,keyword:b,it:v}=c,S=u.name("valid");for(const E in l)(0,r.alwaysValidSchema)(v,l[E])||(u.if((0,n.propertyInData)(u,p,E,v.opts.ownProperties),()=>{const g=c.subschema({keyword:b,schemaProp:E},S);c.mergeValidEvaluated(g,S)},()=>u.var(S,!0)),c.ok(S))}e.validateSchemaDeps=o,e.default=s})(uc)),uc}var aa={},dh;function a1(){if(dh)return aa;dh=1,Object.defineProperty(aa,"__esModule",{value:!0});const e=Oe(),t=Me(),n={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:s})=>(0,e._)`{propertyName: ${s.propertyName}}`},code(s){const{gen:i,schema:a,data:o,it:c}=s;if((0,t.alwaysValidSchema)(c,a))return;const l=i.name("valid");i.forIn("key",o,u=>{s.setParams({propertyName:u}),s.subschema({keyword:"propertyNames",data:u,dataTypes:["string"],propertyName:u,compositeRule:!0},l),i.if((0,e.not)(l),()=>{s.error(!0),c.allErrors||i.break()})}),s.ok(l)}};return aa.default=n,aa}var oa={},fh;function sp(){if(fh)return oa;fh=1,Object.defineProperty(oa,"__esModule",{value:!0});const e=ar(),t=Oe(),r=nn(),n=Me(),i={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:a})=>(0,t._)`{additionalProperty: ${a.additionalProperty}}`},code(a){const{gen:o,schema:c,parentSchema:l,data:u,errsCount:p,it:b}=a;if(!p)throw new Error("ajv implementation error");const{allErrors:v,opts:S}=b;if(b.props=!0,S.removeAdditional!=="all"&&(0,n.alwaysValidSchema)(b,c))return;const E=(0,e.allSchemaProperties)(l.properties),g=(0,e.allSchemaProperties)(l.patternProperties);y(),a.ok((0,t._)`${p} === ${r.default.errors}`);function y(){o.forIn("key",u,_=>{!E.length&&!g.length?P(_):o.if(f(_),()=>P(_))})}function f(_){let O;if(E.length>8){const k=(0,n.schemaRefOrVal)(b,l.properties,"properties");O=(0,e.isOwnProperty)(o,k,_)}else E.length?O=(0,t.or)(...E.map(k=>(0,t._)`${_} === ${k}`)):O=t.nil;return g.length&&(O=(0,t.or)(O,...g.map(k=>(0,t._)`${(0,e.usePattern)(a,k)}.test(${_})`))),(0,t.not)(O)}function w(_){o.code((0,t._)`delete ${u}[${_}]`)}function P(_){if(S.removeAdditional==="all"||S.removeAdditional&&c===!1){w(_);return}if(c===!1){a.setParams({additionalProperty:_}),a.error(),v||o.break();return}if(typeof c=="object"&&!(0,n.alwaysValidSchema)(b,c)){const O=o.name("valid");S.removeAdditional==="failing"?(h(_,O,!1),o.if((0,t.not)(O),()=>{a.reset(),w(_)})):(h(_,O),v||o.if((0,t.not)(O),()=>o.break()))}}function h(_,O,k){const $={keyword:"additionalProperties",dataProp:_,dataPropType:n.Type.Str};k===!1&&Object.assign($,{compositeRule:!0,createErrors:!1,allErrors:!1}),a.subschema($,O)}}};return oa.default=i,oa}var ca={},hh;function o1(){if(hh)return ca;hh=1,Object.defineProperty(ca,"__esModule",{value:!0});const e=ao(),t=ar(),r=Me(),n=sp(),s={keyword:"properties",type:"object",schemaType:"object",code(i){const{gen:a,schema:o,parentSchema:c,data:l,it:u}=i;u.opts.removeAdditional==="all"&&c.additionalProperties===void 0&&n.default.code(new e.KeywordCxt(u,n.default,"additionalProperties"));const p=(0,t.allSchemaProperties)(o);for(const g of p)u.definedProperties.add(g);u.opts.unevaluated&&p.length&&u.props!==!0&&(u.props=r.mergeEvaluated.props(a,(0,r.toHash)(p),u.props));const b=p.filter(g=>!(0,r.alwaysValidSchema)(u,o[g]));if(b.length===0)return;const v=a.name("valid");for(const g of b)S(g)?E(g):(a.if((0,t.propertyInData)(a,l,g,u.opts.ownProperties)),E(g),u.allErrors||a.else().var(v,!0),a.endIf()),i.it.definedProperties.add(g),i.ok(v);function S(g){return u.opts.useDefaults&&!u.compositeRule&&o[g].default!==void 0}function E(g){i.subschema({keyword:"properties",schemaProp:g,dataProp:g},v)}}};return ca.default=s,ca}var la={},mh;function c1(){if(mh)return la;mh=1,Object.defineProperty(la,"__esModule",{value:!0});const e=ar(),t=Oe(),r=Me(),n=Me(),s={keyword:"patternProperties",type:"object",schemaType:"object",code(i){const{gen:a,schema:o,data:c,parentSchema:l,it:u}=i,{opts:p}=u,b=(0,e.allSchemaProperties)(o),v=b.filter(P=>(0,r.alwaysValidSchema)(u,o[P]));if(b.length===0||v.length===b.length&&(!u.opts.unevaluated||u.props===!0))return;const S=p.strictSchema&&!p.allowMatchingProperties&&l.properties,E=a.name("valid");u.props!==!0&&!(u.props instanceof t.Name)&&(u.props=(0,n.evaluatedPropsToName)(a,u.props));const{props:g}=u;y();function y(){for(const P of b)S&&f(P),u.allErrors?w(P):(a.var(E,!0),w(P),a.if(E))}function f(P){for(const h in S)new RegExp(P).test(h)&&(0,r.checkStrictMode)(u,`property ${h} matches pattern ${P} (use allowMatchingProperties)`)}function w(P){a.forIn("key",c,h=>{a.if((0,t._)`${(0,e.usePattern)(i,P)}.test(${h})`,()=>{const _=v.includes(P);_||i.subschema({keyword:"patternProperties",schemaProp:P,dataProp:h,dataPropType:n.Type.Str},E),u.opts.unevaluated&&g!==!0?a.assign((0,t._)`${g}[${h}]`,!0):!_&&!u.allErrors&&a.if((0,t.not)(E),()=>a.break())})})}}};return la.default=s,la}var ua={},ph;function l1(){if(ph)return ua;ph=1,Object.defineProperty(ua,"__esModule",{value:!0});const e=Me(),t={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(r){const{gen:n,schema:s,it:i}=r;if((0,e.alwaysValidSchema)(i,s)){r.fail();return}const a=n.name("valid");r.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},a),r.failResult(a,()=>r.reset(),()=>r.error())},error:{message:"must NOT be valid"}};return ua.default=t,ua}var da={},yh;function u1(){if(yh)return da;yh=1,Object.defineProperty(da,"__esModule",{value:!0});const t={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:ar().validateUnion,error:{message:"must match a schema in anyOf"}};return da.default=t,da}var fa={},gh;function d1(){if(gh)return fa;gh=1,Object.defineProperty(fa,"__esModule",{value:!0});const e=Oe(),t=Me(),n={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:s})=>(0,e._)`{passingSchemas: ${s.passing}}`},code(s){const{gen:i,schema:a,parentSchema:o,it:c}=s;if(!Array.isArray(a))throw new Error("ajv implementation error");if(c.opts.discriminator&&o.discriminator)return;const l=a,u=i.let("valid",!1),p=i.let("passing",null),b=i.name("_valid");s.setParams({passing:p}),i.block(v),s.result(u,()=>s.reset(),()=>s.error(!0));function v(){l.forEach((S,E)=>{let g;(0,t.alwaysValidSchema)(c,S)?i.var(b,!0):g=s.subschema({keyword:"oneOf",schemaProp:E,compositeRule:!0},b),E>0&&i.if((0,e._)`${b} && ${u}`).assign(u,!1).assign(p,(0,e._)`[${p}, ${E}]`).else(),i.if(b,()=>{i.assign(u,!0),i.assign(p,E),g&&s.mergeEvaluated(g,e.Name)})})}}};return fa.default=n,fa}var ha={},vh;function f1(){if(vh)return ha;vh=1,Object.defineProperty(ha,"__esModule",{value:!0});const e=Me(),t={keyword:"allOf",schemaType:"array",code(r){const{gen:n,schema:s,it:i}=r;if(!Array.isArray(s))throw new Error("ajv implementation error");const a=n.name("valid");s.forEach((o,c)=>{if((0,e.alwaysValidSchema)(i,o))return;const l=r.subschema({keyword:"allOf",schemaProp:c},a);r.ok(a),r.mergeEvaluated(l)})}};return ha.default=t,ha}var ma={},bh;function h1(){if(bh)return ma;bh=1,Object.defineProperty(ma,"__esModule",{value:!0});const e=Oe(),t=Me(),n={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:i})=>(0,e.str)`must match "${i.ifClause}" schema`,params:({params:i})=>(0,e._)`{failingKeyword: ${i.ifClause}}`},code(i){const{gen:a,parentSchema:o,it:c}=i;o.then===void 0&&o.else===void 0&&(0,t.checkStrictMode)(c,'"if" without "then" and "else" is ignored');const l=s(c,"then"),u=s(c,"else");if(!l&&!u)return;const p=a.let("valid",!0),b=a.name("_valid");if(v(),i.reset(),l&&u){const E=a.let("ifClause");i.setParams({ifClause:E}),a.if(b,S("then",E),S("else",E))}else l?a.if(b,S("then")):a.if((0,e.not)(b),S("else"));i.pass(p,()=>i.error(!0));function v(){const E=i.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},b);i.mergeEvaluated(E)}function S(E,g){return()=>{const y=i.subschema({keyword:E},b);a.assign(p,b),i.mergeValidEvaluated(y,p),g?a.assign(g,(0,e._)`${E}`):i.setParams({ifClause:E})}}}};function s(i,a){const o=i.schema[a];return o!==void 0&&!(0,t.alwaysValidSchema)(i,o)}return ma.default=n,ma}var pa={},_h;function m1(){if(_h)return pa;_h=1,Object.defineProperty(pa,"__esModule",{value:!0});const e=Me(),t={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:r,parentSchema:n,it:s}){n.if===void 0&&(0,e.checkStrictMode)(s,`"${r}" without "if" is ignored`)}};return pa.default=t,pa}var Sh;function p1(){if(Sh)return ra;Sh=1,Object.defineProperty(ra,"__esModule",{value:!0});const e=np(),t=r1(),r=ip(),n=n1(),s=i1(),i=s1(),a=a1(),o=sp(),c=o1(),l=c1(),u=l1(),p=u1(),b=d1(),v=f1(),S=h1(),E=m1();function g(y=!1){const f=[u.default,p.default,b.default,v.default,S.default,E.default,a.default,o.default,i.default,c.default,l.default];return y?f.push(t.default,n.default):f.push(e.default,r.default),f.push(s.default),f}return ra.default=g,ra}var ya={},ga={},wh;function y1(){if(wh)return ga;wh=1,Object.defineProperty(ga,"__esModule",{value:!0});const e=Oe(),r={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:n})=>(0,e.str)`must match format "${n}"`,params:({schemaCode:n})=>(0,e._)`{format: ${n}}`},code(n,s){const{gen:i,data:a,$data:o,schema:c,schemaCode:l,it:u}=n,{opts:p,errSchemaPath:b,schemaEnv:v,self:S}=u;if(!p.validateFormats)return;o?E():g();function E(){const y=i.scopeValue("formats",{ref:S.formats,code:p.code.formats}),f=i.const("fDef",(0,e._)`${y}[${l}]`),w=i.let("fType"),P=i.let("format");i.if((0,e._)`typeof ${f} == "object" && !(${f} instanceof RegExp)`,()=>i.assign(w,(0,e._)`${f}.type || "string"`).assign(P,(0,e._)`${f}.validate`),()=>i.assign(w,(0,e._)`"string"`).assign(P,f)),n.fail$data((0,e.or)(h(),_()));function h(){return p.strictSchema===!1?e.nil:(0,e._)`${l} && !${P}`}function _(){const O=v.$async?(0,e._)`(${f}.async ? await ${P}(${a}) : ${P}(${a}))`:(0,e._)`${P}(${a})`,k=(0,e._)`(typeof ${P} == "function" ? ${O} : ${P}.test(${a}))`;return(0,e._)`${P} && ${P} !== true && ${w} === ${s} && !${k}`}}function g(){const y=S.formats[c];if(!y){h();return}if(y===!0)return;const[f,w,P]=_(y);f===s&&n.pass(O());function h(){if(p.strictSchema===!1){S.logger.warn(k());return}throw new Error(k());function k(){return`unknown format "${c}" ignored in schema at path "${b}"`}}function _(k){const $=k instanceof RegExp?(0,e.regexpCode)(k):p.code.formats?(0,e._)`${p.code.formats}${(0,e.getProperty)(c)}`:void 0,M=i.scopeValue("formats",{key:c,ref:k,code:$});return typeof k=="object"&&!(k instanceof RegExp)?[k.type||"string",k.validate,(0,e._)`${M}.validate`]:["string",k,M]}function O(){if(typeof y=="object"&&!(y instanceof RegExp)&&y.async){if(!v.$async)throw new Error("async format in sync schema");return(0,e._)`await ${P}(${a})`}return typeof w=="function"?(0,e._)`${P}(${a})`:(0,e._)`${P}.test(${a})`}}}};return ga.default=r,ga}var Ch;function g1(){if(Ch)return ya;Ch=1,Object.defineProperty(ya,"__esModule",{value:!0});const t=[y1().default];return ya.default=t,ya}var vn={},Eh;function v1(){return Eh||(Eh=1,Object.defineProperty(vn,"__esModule",{value:!0}),vn.contentVocabulary=vn.metadataVocabulary=void 0,vn.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],vn.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]),vn}var Ah;function b1(){if(Ah)return Us;Ah=1,Object.defineProperty(Us,"__esModule",{value:!0});const e=zw(),t=t1(),r=p1(),n=g1(),s=v1(),i=[e.default,t.default,(0,r.default)(),n.default,s.metadataVocabulary,s.contentVocabulary];return Us.default=i,Us}var va={},Ci={},xh;function _1(){if(xh)return Ci;xh=1,Object.defineProperty(Ci,"__esModule",{value:!0}),Ci.DiscrError=void 0;var e;return(function(t){t.Tag="tag",t.Mapping="mapping"})(e||(Ci.DiscrError=e={})),Ci}var Ph;function S1(){if(Ph)return va;Ph=1,Object.defineProperty(va,"__esModule",{value:!0});const e=Oe(),t=_1(),r=ml(),n=oo(),s=Me(),a={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:o,tagName:c}})=>o===t.DiscrError.Tag?`tag "${c}" must be string`:`value of tag "${c}" must be in oneOf`,params:({params:{discrError:o,tag:c,tagName:l}})=>(0,e._)`{error: ${o}, tag: ${l}, tagValue: ${c}}`},code(o){const{gen:c,data:l,schema:u,parentSchema:p,it:b}=o,{oneOf:v}=p;if(!b.opts.discriminator)throw new Error("discriminator: requires discriminator option");const S=u.propertyName;if(typeof S!="string")throw new Error("discriminator: requires propertyName");if(u.mapping)throw new Error("discriminator: mapping is not supported");if(!v)throw new Error("discriminator: requires oneOf keyword");const E=c.let("valid",!1),g=c.const("tag",(0,e._)`${l}${(0,e.getProperty)(S)}`);c.if((0,e._)`typeof ${g} == "string"`,()=>y(),()=>o.error(!1,{discrError:t.DiscrError.Tag,tag:g,tagName:S})),o.ok(E);function y(){const P=w();c.if(!1);for(const h in P)c.elseIf((0,e._)`${g} === ${h}`),c.assign(E,f(P[h]));c.else(),o.error(!1,{discrError:t.DiscrError.Mapping,tag:g,tagName:S}),c.endIf()}function f(P){const h=c.name("valid"),_=o.subschema({keyword:"oneOf",schemaProp:P},h);return o.mergeEvaluated(_,e.Name),h}function w(){var P;const h={},_=k(p);let O=!0;for(let q=0;qthis.addVocabulary(S)),this.opts.discriminator&&this.addKeyword(s.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const S=this.opts.$data?this.$dataMetaSchema(i,a):i;this.addMetaSchema(S,o,!1),this.refs["http://json-schema.org/schema"]=o}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(o)?o:void 0)}}t.Ajv=c,e.exports=t=c,e.exports.Ajv=c,Object.defineProperty(t,"__esModule",{value:!0}),t.default=c;var l=ao();Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return l.KeywordCxt}});var u=Oe();Object.defineProperty(t,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});var p=hl();Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return p.default}});var b=oo();Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return b.default}})})(Fs,Fs.exports)),Fs.exports}var jh;function k1(){return jh||(jh=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.formatLimitDefinition=void 0;const t=j1(),r=Oe(),n=r.operators,s={formatMaximum:{okStr:"<=",ok:n.LTE,fail:n.GT},formatMinimum:{okStr:">=",ok:n.GTE,fail:n.LT},formatExclusiveMaximum:{okStr:"<",ok:n.LT,fail:n.GTE},formatExclusiveMinimum:{okStr:">",ok:n.GT,fail:n.LTE}},i={message:({keyword:o,schemaCode:c})=>r.str`should be ${s[o].okStr} ${c}`,params:({keyword:o,schemaCode:c})=>r._`{comparison: ${s[o].okStr}, limit: ${c}}`};e.formatLimitDefinition={keyword:Object.keys(s),type:"string",schemaType:"string",$data:!0,error:i,code(o){const{gen:c,data:l,schemaCode:u,keyword:p,it:b}=o,{opts:v,self:S}=b;if(!v.validateFormats)return;const E=new t.KeywordCxt(b,S.RULES.all.format.definition,"format");E.$data?g():y();function g(){const w=c.scopeValue("formats",{ref:S.formats,code:v.code.formats}),P=c.const("fmt",r._`${w}[${E.schemaCode}]`);o.fail$data(r.or(r._`typeof ${P} != "object"`,r._`${P} instanceof RegExp`,r._`typeof ${P}.compare != "function"`,f(P)))}function y(){const w=E.schema,P=S.formats[w];if(!P||P===!0)return;if(typeof P!="object"||P instanceof RegExp||typeof P.compare!="function")throw new Error(`"${p}": format "${w}" does not define "compare" function`);const h=c.scopeValue("formats",{key:w,ref:P,code:v.code.formats?r._`${v.code.formats}${r.getProperty(w)}`:void 0});o.fail$data(f(h))}function f(w){return r._`${w}.compare(${l}, ${u}) ${s[p].fail} 0`}},dependencies:["format"]};const a=o=>(o.addKeyword(e.formatLimitDefinition),o);e.default=a})(tc)),tc}var kh;function N1(){return kh||(kh=1,(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});const r=Ew(),n=k1(),s=Oe(),i=new s.Name("fullFormats"),a=new s.Name("fastFormats"),o=(l,u={keywords:!0})=>{if(Array.isArray(u))return c(l,u,r.fullFormats,i),l;const[p,b]=u.mode==="fast"?[r.fastFormats,a]:[r.fullFormats,i],v=u.formats||r.formatNames;return c(l,v,p,b),u.keywords&&n.default(l),l};o.get=(l,u="full")=>{const b=(u==="fast"?r.fastFormats:r.fullFormats)[l];if(!b)throw new Error(`Unknown format "${l}"`);return b};function c(l,u,p,b){var v,S;(v=(S=l.opts.code).formats)!==null&&v!==void 0||(S.formats=s._`require("ajv-formats/dist/formats").${b}`);for(const E of u)l.addFormat(E,p[E])}e.exports=t=o,Object.defineProperty(t,"__esModule",{value:!0}),t.default=o})($s,$s.exports)),$s.exports}var I1=N1();const Nh=Fi(I1),R1={allErrors:!0,multipleOfPrecision:8,strict:!1,verbose:!0,discriminator:!1},$1=/^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,F1=/^data:([a-z]+\/[a-z0-9-+.]+)?;(?:name=(.*);)?base64,(.*)$/;function D1(e,t,r={},n,s=Cw,i){let a=new s({...R1,...r});return n?Nh(a,n):n!==!1&&Nh(a),a.addFormat("data-url",F1),a.addFormat("color",$1),a.addKeyword(Bc),Array.isArray(e)&&a.addMetaSchema(e),ue(t)&&Object.keys(t).forEach(o=>{a.addFormat(o,t[o])}),i&&(a=i(a)),a}class T1{ajv;localizer;suppressDuplicateFiltering;lastSeenRootSchema;hasRegisteredRootSchema=!1;constructor(t,r){const{additionalMetaSchemas:n,customFormats:s,ajvOptionsOverrides:i,ajvFormatOptions:a,AjvClass:o,extenderFn:c,suppressDuplicateFiltering:l}=t;this.ajv=D1(n,s,i,a,o,c),this.localizer=r,this.suppressDuplicateFiltering=l}reset(){this.ajv.removeSchema(),this.lastSeenRootSchema=void 0,this.hasRegisteredRootSchema=!1}rawValidation(t,r){let n,s;try{t[Ue]&&(s=this.ajv.getSchema(t[Ue])),s===void 0&&(s=this.ajv.compile(t)),s(r)}catch(a){n=a,s===void 0&&this.ajv.removeSchema(t[Ue]!==void 0?t[Ue]:t)}let i;return s&&(typeof this.localizer=="function"&&((s.errors??[]).forEach(a=>{["missingProperty","property"].forEach(o=>{a.params?.[o]&&(a.params[o]=`'${a.params[o]}'`)}),a.params?.deps&&(a.params.deps=a.params.deps.split(", ").map(o=>`'${o}'`).join(", "))}),this.localizer(s.errors),(s.errors??[]).forEach(a=>{["missingProperty","property"].forEach(o=>{a.params?.[o]&&(a.params[o]=a.params[o].slice(1,-1))}),a.params?.deps&&(a.params.deps=a.params.deps.split(", ").map(o=>o.slice(1,-1)).join(", "))})),i=s.errors||void 0,s.errors=null),{errors:i,validationError:n}}validateFormData(t,r,n,s,i){const a=this.rawValidation(r,t);return yS(this,a,t,r,n,s,i,this.suppressDuplicateFiltering)}handleSchemaUpdate(t){if(this.lastSeenRootSchema===t&&this.hasRegisteredRootSchema)return;const r=t[Ue]??Vh;this.ajv.getSchema(r)===void 0?this.ajv.addSchema(t,r):je(t,this.ajv.getSchema(r)?.schema)||(this.ajv.removeSchema(r),this.ajv.addSchema(t,r)),this.lastSeenRootSchema=t,this.hasRegisteredRootSchema=!0}isValid(t,r,n){let s,i=!1;try{this.handleSchemaUpdate(n);const a=nl(t);s=a[Ue]??x0(a);let o;return o=this.ajv.getSchema(s),o===void 0&&(o=this.ajv.addSchema(a,s).getSchema(s)||this.ajv.compile(a)),i=!0,o(r)}catch(a){return console.warn("Error encountered compiling schema:",a),!i&&s!==void 0&&this.ajv.removeSchema(s),!1}}}function M1(e={},t){return new T1(e,t)}const q1=M1(),Ih=["#0ea5e9","#f97316","#22c55e","#a855f7","#ef4444","#eab308"],$i=X.createContext(0);function yl(){const e=X.useContext($i);return{color:Ih[e%Ih.length],depth:e}}function Uc(e,t=""){if(!e||typeof e!="object")return{};const r=Array.isArray(e.examples)?e.examples[0]:void 0,n=r===void 0?{}:{"ui:placeholder":String(r)};return e.writeOnly===!0?{"ui:widget":"SecretWidget","ui:options":{secretPath:t},...n}:e.type==="boolean"?{"ui:widget":"checkbox","ui:options":{label:!1}}:e.type==="array"&&e.items?{items:Uc(e.items,t?`${t}[]`:"[]")}:e.type!=="object"||!e.properties?n:Object.fromEntries(Object.entries(e.properties).map(([s,i])=>[s,Uc(i,t?`${t}.${s}`:s)]))}function U1({id:e,disabled:t,readonly:r,options:n,placeholder:s,registry:i}){const a=n.secretPath,o=i.formContext||{},c=o.secretOperations?.[a],l=!!o.configuredSecrets?.[a],u=c?.action==="replace",p=c?.action==="clear",b=t||r;function v(S){b||o.setSecretOperation?.(a,S)}return N.jsxs("div",{className:"configuration-secret space-y-0.5",children:[N.jsxs("div",{className:"flex flex-wrap items-center gap-0.5",children:[N.jsx("span",{className:"text-[0.7rem] text-slate-500",children:p?"Will be cleared when saved":u?"Replacement pending":l?"Configured":"Not configured"}),N.jsxs("div",{className:"flex gap-0.5",children:[N.jsx("button",{type:"button",className:"button-dark text-xs",disabled:b,onClick:()=>v(u?null:{action:"replace",value:""}),children:u?"Cancel replace":"Replace"}),N.jsx("button",{type:"button",className:p?"button-dark text-xs":"button-danger text-xs",disabled:b,onClick:()=>v(p?null:{action:"clear"}),children:p?"Undo clear":"Clear"})]})]}),u?N.jsx("input",{id:e,className:"field-input w-full",type:"password",autoComplete:"new-password",value:c.value,placeholder:s||"Enter replacement value",disabled:b,onChange:S=>v({action:"replace",value:S.target.value})}):null]})}function L1({children:e,classNames:t,description:r,errors:n,help:s,hidden:i,id:a,label:o,required:c,schema:l,style:u}){return i?N.jsx("div",{className:"hidden",children:e}):l?.type==="object"||l?.type==="array"?N.jsxs("div",{className:t,style:u,children:[e,n,s]}):N.jsxs("div",{className:`${t||""} configuration-line`,style:u,children:[N.jsx("div",{className:"configuration-key",children:N.jsxs("label",{htmlFor:a,className:"configuration-key-label",children:[o,c?N.jsx("span",{className:"ml-0.25 text-sky-300",children:"*"}):null]})}),N.jsxs("div",{className:"configuration-value",children:[r?N.jsx("div",{className:"configuration-value-description",children:r}):null,e,n,s]})]})}function V1({description:e,fieldPathId:t,properties:r,title:n}){const i=r.filter(c=>!c.hidden).map(c=>c.content),a=t.path.length===1,o=yl();return t.path.length===0?N.jsxs("div",{children:[e?N.jsx("div",{className:"configuration-root-description",children:e}):null,N.jsx($i.Provider,{value:0,children:N.jsx("div",{className:"configuration-tree",children:i})})]}):typeof t.path.at(-1)=="number"?N.jsxs("div",{children:[e?N.jsx("div",{className:"configuration-item-description",children:e}):null,i]}):N.jsxs(Ze,{title:n,color:o.color,clipOverflow:!1,stickyHeader:a,className:`configuration-card${a?" configuration-top-level-card":""}`,headerClassName:a?"configuration-card-header":"",bodyClassName:"configuration-card-body",children:[e?N.jsx("div",{className:"configuration-branch-description",children:e}):null,N.jsx($i.Provider,{value:o.depth+1,children:N.jsx("div",{className:"configuration-children",children:i})})]})}function z1({buttonsProps:e,children:t,hasToolbar:r,index:n}){const s=e.disabled||e.readonly,i=yl();return N.jsxs(Ze,{title:`Item ${n+1}`,color:i.color,clipOverflow:!1,className:"configuration-card configuration-array-item",bodyClassName:"configuration-card-body",children:[r?N.jsxs("div",{className:"configuration-item-actions",children:[e.hasMoveUp||e.hasMoveDown?N.jsx("button",{type:"button",className:"button-dark text-xs",disabled:s||!e.hasMoveUp,onClick:e.onMoveUpItem,children:"Move up"}):null,e.hasMoveUp||e.hasMoveDown?N.jsx("button",{type:"button",className:"button-dark text-xs",disabled:s||!e.hasMoveDown,onClick:e.onMoveDownItem,children:"Move down"}):null,e.hasCopy?N.jsx("button",{type:"button",className:"button-dark text-xs",disabled:s,onClick:e.onCopyItem,children:"Duplicate"}):null,e.hasRemove?N.jsx("button",{type:"button",className:"button-danger text-xs",disabled:s,onClick:e.onRemoveItem,children:"Remove"}):null]}):null,N.jsx($i.Provider,{value:i.depth+1,children:N.jsx("div",{className:"configuration-children",children:t})})]})}function B1({canAdd:e,disabled:t,fieldPathId:r,items:n,onAddClick:s,readonly:i,schema:a,title:o}){const c=r.path.length===1,l=yl();return N.jsxs(Ze,{title:o,meta:`${n.length} ${n.length===1?"item":"items"}`,color:l.color,clipOverflow:!1,stickyHeader:c,className:`configuration-card configuration-array${c?" configuration-top-level-card":""}`,headerClassName:c?"configuration-card-header":"",bodyClassName:"configuration-card-body",children:[a.description?N.jsx("div",{className:"configuration-branch-description",children:a.description}):null,e?N.jsx("div",{className:"configuration-array-actions",children:N.jsx("button",{type:"button",className:"button-dark text-xs",disabled:t||i,onClick:s,children:"Add item"})}):null,N.jsx($i.Provider,{value:l.depth+1,children:N.jsx("div",{className:"configuration-children",children:n.length?n:N.jsx("p",{className:"text-xs text-slate-500",children:"No items configured."})})})]})}function H1({schema:e,value:t,onChange:r,configuredSecrets:n,secretOperations:s,setSecretOperation:i}){const a=X.useMemo(()=>Uc(e),[e]),o=X.useMemo(()=>({SecretWidget:U1}),[]),c=X.useMemo(()=>({ArrayFieldItemTemplate:z1,ArrayFieldTemplate:B1,FieldTemplate:L1,ObjectFieldTemplate:V1}),[]),l=X.useMemo(()=>({configuredSecrets:n,secretOperations:s,setSecretOperation:i}),[n,s,i]);return N.jsx("div",{className:"configuration-schema-form",children:N.jsx(Vr,{schema:e,uiSchema:a,formData:t,validator:q1,widgets:o,templates:c,formContext:l,noHtml5Validate:!0,showErrorList:!1,onChange:({formData:u})=>r(u),children:N.jsx(N.Fragment,{})})})}function dc(e){return JSON.parse(JSON.stringify(e))}function K1({snapshot:e,socket:t,runSensitive:r,onSnapshot:n,onReload:s}){const i=e?.configuration?.config,a=e?.configuration?.schema,o=e?.configuration?.revision,[c,l]=X.useState(()=>dc(i)),[u,p]=X.useState({}),[b,v]=X.useState(!1),[S,E]=X.useState(!1),[g,y]=X.useState(null),[f,w]=X.useState(""),[P,h]=X.useState(""),[_,O]=X.useState([]),k=X.useRef(null),$=X.useRef(null);X.useEffect(()=>{l(dc(i)),p({}),h(""),y(null),O([])},[o,i]),X.useEffect(()=>{const G=k.current,J=$.current;if(!G||!J)return;const Q=()=>{G.style.setProperty("--configuration-sticky-top",`${J.offsetHeight}px`)};Q();const Z=typeof ResizeObserver=="function"?new ResizeObserver(Q):null;return Z?.observe(J),window.addEventListener("resize",Q),()=>{Z?.disconnect(),window.removeEventListener("resize",Q),G.style.removeProperty("--configuration-sticky-top")}},[i,a]);const M=X.useMemo(()=>JSON.stringify(c)!==JSON.stringify(i)||Object.keys(u).length>0,[c,u,i]),q=b||S;if(!i||!a)return N.jsx("p",{className:"surface p-1 text-sm text-red-200",children:"The configuration document is unavailable."});const U=(G,J)=>p(Q=>{const Z={...Q};return J?Z[G]=J:delete Z[G],Z});async function L(){v(!0),h(""),O([]);try{const G=await r(()=>Zp(t,{value:c,expectedRevision:o,secretOperations:u}));n(G.snapshot)}catch(G){h(G.message),O(G.validationErrors||[])}finally{v(!1)}}async function z(){if(!(!g||!window.confirm("Replace the current configuration with this YAML file and apply it now? Any unsaved edits will be discarded. Administrator accounts in the file will be ignored."))){E(!0),h(""),w(""),O([]);try{const J=await g.text(),Q=await r(()=>Qp(t,{fileName:g.name,yaml:J,expectedRevision:o}));n(Q.snapshot),w(Q.ignoredAdministratorCount>0?`Configuration imported and applied. ${Q.ignoredAdministratorCount} administrator entr${Q.ignoredAdministratorCount===1?"y was":"ies were"} ignored.`:"Configuration imported and applied.")}catch(J){h(J.message),O(J.validationErrors||[])}finally{E(!1)}}}return N.jsx("div",{ref:k,className:"configuration-editor",children:N.jsxs(Ze,{title:"Configuration",meta:`revision ${o}`,clipOverflow:!1,bodyClassName:"p-0.5",children:[N.jsxs("div",{ref:$,className:"configuration-toolbar sticky top-0 z-20 mb-0.5 space-y-0.5 border border-neutral-500/60 bg-neutral-900/95 p-0.5 backdrop-blur-sm",children:[N.jsx("p",{className:"text-xs text-slate-400",children:"Saving applies the complete revision immediately and reloads each affected service."}),N.jsxs("div",{className:"flex flex-wrap gap-0.5",children:[N.jsx("button",{type:"button",className:"button-dark",disabled:q,onClick:s,children:"Reload"}),N.jsx("button",{type:"button",className:"button-dark",disabled:!M||q,onClick:()=>{l(dc(i)),p({})},children:"Reset"}),N.jsx("button",{type:"button",className:"button-dark",disabled:!M||q,onClick:L,children:b?"Applying…":"Save configuration"})]})]}),N.jsxs(Ze,{title:"Import legacy YAML",bodyClassName:"space-y-0.5 p-1 text-sm",clipOverflow:!1,children:[N.jsx("p",{className:"text-sm text-slate-300",children:"Replace this configuration from an explicitly selected legacy file. Unknown old settings and administrator accounts are ignored; current settings are validated and applied immediately."}),N.jsxs("div",{className:"flex max-w-3xl flex-col gap-0.5 md:flex-row",children:[N.jsx("input",{className:"field-input min-w-0 flex-1",type:"file",accept:".yaml,.yml,text/yaml",disabled:q,onChange:G=>y(G.target.files?.[0]||null)},o),N.jsx("button",{type:"button",className:"button-dark",disabled:q||!g,onClick:z,children:S?"Importing…":"Import selected YAML"})]})]}),e.configurationApplication?.services?.some(G=>G.status==="failed")?N.jsxs("div",{className:"mb-0.5 border border-amber-500/60 bg-amber-950/40 p-1 text-xs text-amber-100",children:[N.jsx("p",{className:"font-semibold",children:"Configuration was saved, but some services could not reload"}),N.jsx("ul",{className:"mt-0.5 list-disc space-y-0.25 pl-4",children:e.configurationApplication.services.filter(G=>G.status==="failed").map((G,J)=>N.jsxs("li",{children:[G.section,": ",G.error]},`${G.section}-${J}`))})]}):null,P?N.jsx("p",{className:"border border-red-500/60 bg-red-950/40 p-1 text-xs text-red-100",children:P}):null,f?N.jsx("p",{className:"border border-emerald-500/60 bg-emerald-950/40 p-1 text-sm text-emerald-100",children:f}):null,_.length?N.jsxs("div",{className:"border border-red-500/60 bg-red-950/40 p-1 text-xs text-red-100",children:[N.jsx("p",{className:"font-semibold",children:"Configuration could not be saved"}),N.jsx("ul",{className:"mt-0.5 list-disc space-y-0.25 pl-4",children:_.map((G,J)=>N.jsxs("li",{children:[G.path,": ",G.message]},`${G.path}-${J}`))})]}):null,N.jsx(H1,{schema:a,value:c,onChange:l,configuredSecrets:e.configuration.configuredSecrets,secretOperations:u,setSecretOperation:U})]})})}function G1({open:e,busy:t,error:r,onCancel:n,onConfirm:s}){const[i,a]=X.useState("");if(!e)return null;async function o(l){l.preventDefault(),await s(i),a("")}function c(){a(""),n()}return N.jsx("div",{className:"fixed inset-0 z-1000 flex items-center justify-center bg-black/75 p-2",children:N.jsxs("form",{className:"w-full max-w-sm border border-neutral-500/70 bg-neutral-900 p-1 text-slate-100 shadow-2xl",onSubmit:o,children:[N.jsx("h2",{className:"text-base font-semibold",children:"Confirm password"}),N.jsx("p",{className:"mt-0.5 text-xs text-slate-400",children:"This sensitive action requires recent confirmation of your administrator password."}),N.jsx("input",{autoFocus:!0,autoComplete:"current-password",className:"field-input mt-1 w-full",type:"password",value:i,onChange:l=>a(l.target.value)}),r?N.jsx("p",{className:"mt-0.5 text-xs text-red-300",children:r}):null,N.jsxs("div",{className:"mt-1 flex justify-end gap-0.5",children:[N.jsx("button",{type:"button",className:"button-dark",disabled:t,onClick:c,children:"Cancel"}),N.jsx("button",{type:"submit",className:"button-dark",disabled:t||!i,children:t?"Confirming…":"Confirm"})]})]})})}const W1=[{key:"overview",label:"Overview"},{key:"fleet",label:"Fleet operations"},{key:"users",label:"Users and administrators",lockdownOnly:!0},{key:"configuration",label:"Configuration",lockdownOnly:!0},{key:"backup-restore",label:"Backup and restore",lockdownOnly:!0}];function X1(){Ip({identitySurface:"passive"});const e=Rh(),t=Nl(L=>L.session?.role||"user"),r=Nl(L=>L.connected),[n,s]=Rp(),i=n.get("section")||"overview",[a,o]=X.useState(null),[c,l]=X.useState(""),u=X.useRef(null),[p,b]=X.useState(!1),[v,S]=X.useState(!1),[E,g]=X.useState(""),{value:y}=$p("page",{backgroundTheme:Fp}),f=Dp(y?.backgroundTheme),w=t==="admin"||t==="lockdown",P=t==="lockdown",h=X.useCallback(async()=>{if(!P){o(null);return}l("");try{o(await ey(e))}catch(L){l(L.message)}},[P,e]);X.useEffect(()=>{h()},[h,r]);const _=X.useCallback(async L=>{try{return await L()}catch(z){if(z.code!=="PASSWORD_CONFIRMATION_REQUIRED")throw z;return new Promise((G,J)=>{u.current={operation:L,resolve:G,reject:J},g(""),b(!0)})}},[]);async function O(L){S(!0),g("");try{await ty(e,L);const z=u.current;if(u.current=null,b(!1),z)try{z.resolve(await z.operation())}catch(G){z.reject(G)}}catch(z){g(z.message)}finally{S(!1)}}function k(){const L=u.current;u.current=null,b(!1),L&&L.reject(new Error("Sensitive action cancelled."))}function $(L){s(L==="overview"?{}:{section:L})}const M=W1.filter(L=>!L.lockdownOnly||P),q=M.some(L=>L.key===i)?i:"overview";let U;return w?q==="fleet"?U=N.jsx(qp,{}):P?a?q==="users"?U=N.jsxs("div",{className:"space-y-0.5",children:[N.jsx(Ey,{administrators:a.administrators,socket:e,runSensitive:_,onSnapshot:o}),N.jsx(wy,{})]}):q==="configuration"?U=N.jsx(K1,{snapshot:a,socket:e,runSensitive:_,onSnapshot:o,onReload:h}):q==="backup-restore"?U=N.jsx(Py,{socket:e,runSensitive:_}):U=N.jsx(Ay,{snapshot:a,socket:e,runSensitive:_,onSnapshot:o}):U=N.jsx(Ze,{title:"Loading administration",bodyClassName:"p-1 text-sm text-slate-300",children:N.jsx("p",{children:c||"Loading configuration and audit state…"})}):U=N.jsx(Ze,{title:"Administrator access",bodyClassName:"p-1 text-sm text-slate-300",children:N.jsx("p",{children:"Routine fleet operations are available. Configuration, users, secrets, and system administration require a lockdown administrator."})}):U=N.jsx("div",{className:"mx-auto w-full max-w-md",children:N.jsx(Mp,{})}),N.jsxs("div",{className:`${f} min-h-screen text-slate-100`,children:[N.jsx(Tp,{}),N.jsx(G1,{open:p,busy:v,error:E,onCancel:k,onConfirm:O}),N.jsxs("main",{className:"mx-auto min-h-screen w-full max-w-[100rem] p-1",children:[N.jsx(Ze,{title:"MultiRover administration",meta:r?t:"offline",bodyClassName:"p-0.5 text-xs text-slate-400",children:N.jsx("p",{children:a?`Active configuration revision ${a.configuration.revision}. The running application has applied revision ${a.appliedRevision}.`:"Central server administration and configuration."})}),w?N.jsxs($h,{currentTab:q,onTabChange:$,children:[N.jsx("nav",{"aria-label":"Administration sections",children:N.jsx(Fh,{className:"my-0.5",children:M.map(L=>N.jsx(Kn,{id:L.key,children:L.label},L.key))})}),N.jsx(Dh,{children:N.jsx("section",{className:"min-w-0",children:U})})]}):N.jsx("section",{className:"mt-0.5 min-w-0",children:U})]})]})}export{X1 as default}; +//# sourceMappingURL=AdminApp-B_XqBka7.js.map diff --git a/server/public/assets/AdminApp-B_XqBka7.js.map b/server/public/assets/AdminApp-B_XqBka7.js.map new file mode 100644 index 00000000..6f18f5b3 --- /dev/null +++ b/server/public/assets/AdminApp-B_XqBka7.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AdminApp-B_XqBka7.js","sources":["../../../webui/src/database/identityDatabaseApi.js","../../../webui/src/database/identityDatabaseUtils.js","../../../webui/src/database/IdentityDatabasePanel.jsx","../../../webui/src/admin/components/AdministratorAccounts.jsx","../../../webui/src/admin/components/AdminOverview.jsx","../../../webui/src/admin/components/BackupRestorePanel.jsx","../../../webui/node_modules/@rjsf/utils/lib/isObject.js","../../../webui/node_modules/@rjsf/utils/lib/allowAdditionalItems.js","../../../webui/node_modules/@rjsf/utils/lib/getDecimalSeparator.js","../../../webui/node_modules/@rjsf/utils/lib/asNumber.js","../../../webui/node_modules/@rjsf/utils/lib/constants.js","../../../webui/node_modules/@rjsf/utils/lib/getUiOptions.js","../../../webui/node_modules/@rjsf/utils/lib/canExpand.js","../../../webui/node_modules/@rjsf/utils/lib/isPlainObject.js","../../../webui/node_modules/@rjsf/utils/lib/createErrorHandler.js","../../../webui/node_modules/fast-equals/dist/es/index.mjs","../../../webui/node_modules/@rjsf/utils/lib/deepEquals.js","../../../webui/node_modules/fast-uri/lib/utils.js","../../../webui/node_modules/fast-uri/lib/schemes.js","../../../webui/node_modules/fast-uri/index.js","../../../webui/node_modules/jsonpointer/jsonpointer.js","../../../webui/node_modules/@rjsf/utils/lib/findSchemaDefinition.js","../../../webui/node_modules/@rjsf/utils/lib/pathUtils.js","../../../webui/node_modules/@rjsf/utils/lib/getDiscriminatorFieldFromSchema.js","../../../webui/node_modules/@rjsf/utils/lib/guessType.js","../../../webui/node_modules/@rjsf/utils/lib/getSchemaType.js","../../../webui/node_modules/@rjsf/utils/lib/mergeSchemas.js","../../../webui/node_modules/@rjsf/utils/lib/getPropertySchema.js","../../../webui/node_modules/@rjsf/utils/lib/getOptionMatchingSimpleDiscriminator.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getFirstMatchingOption.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/object.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/json-schema.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/ord.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/array.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/memoize.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/compare/compare.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/function.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/math.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/merge/patterns.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/merge/merge.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/merge/all-of-merge.js","../../../webui/node_modules/@rjsf/utils/lib/schema/shallowAllOfMerge.js","../../../webui/node_modules/@rjsf/utils/lib/schema/retrieveSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/findSelectedOptionInXxxOf.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getFromSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/findFieldInSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getClosestMatchingOption.js","../../../webui/node_modules/@rjsf/utils/lib/constIsAjvDataReference.js","../../../webui/node_modules/@rjsf/utils/lib/isConstant.js","../../../webui/node_modules/@rjsf/utils/lib/isFixedItems.js","../../../webui/node_modules/@rjsf/utils/lib/mergeDefaultsWithFormData.js","../../../webui/node_modules/@rjsf/utils/lib/mergeObjects.js","../../../webui/node_modules/@rjsf/utils/lib/toConstant.js","../../../webui/node_modules/@rjsf/utils/lib/optionsList.js","../../../webui/node_modules/@rjsf/utils/lib/schema/isSelect.js","../../../webui/node_modules/@rjsf/utils/lib/schema/isMultiSelect.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getDefaultFormState.js","../../../webui/node_modules/@rjsf/utils/lib/isCustomWidget.js","../../../webui/node_modules/@rjsf/utils/lib/schema/isFilesArray.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getDisplayLabel.js","../../../webui/node_modules/@rjsf/utils/lib/schema/omitExtraData.js","../../../webui/node_modules/@rjsf/utils/lib/schema/sanitizeDataForNewSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/toPathSchema.js","../../../webui/node_modules/@rjsf/utils/lib/createSchemaUtils.js","../../../webui/node_modules/@rjsf/utils/lib/dataURItoBlob.js","../../../webui/node_modules/@rjsf/utils/lib/pad.js","../../../webui/node_modules/@rjsf/utils/lib/dateRangeOptions.js","../../../webui/node_modules/@rjsf/utils/lib/replaceStringParameters.js","../../../webui/node_modules/@rjsf/utils/lib/englishStringTranslator.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsValueForIndex.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsDeselectValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsIsSelected.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsIndexForValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionSelectedValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsSelectValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionValueDecoder.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionValueEncoder.js","../../../webui/node_modules/@rjsf/utils/lib/ErrorSchemaBuilder.js","../../../webui/node_modules/@rjsf/utils/lib/getChangedFields.js","../../../webui/node_modules/@rjsf/utils/lib/getDateElementProps.js","../../../webui/node_modules/@rjsf/utils/lib/rangeSpec.js","../../../webui/node_modules/@rjsf/utils/lib/getInputProps.js","../../../webui/node_modules/@rjsf/utils/lib/getOptionValueFormat.js","../../../webui/node_modules/@rjsf/utils/lib/getSubmitButtonOptions.js","../../../webui/node_modules/@rjsf/utils/lib/getTemplate.js","../../../webui/node_modules/@rjsf/utils/lib/getTestIds.js","../../../webui/node_modules/react-is/cjs/react-is.production.min.js","../../../webui/node_modules/react-is/index.js","../../../webui/node_modules/@rjsf/utils/lib/getWidget.js","../../../webui/node_modules/@rjsf/utils/lib/hashForSchema.js","../../../webui/node_modules/@rjsf/utils/lib/hasWidget.js","../../../webui/node_modules/@rjsf/utils/lib/idGenerators.js","../../../webui/node_modules/@rjsf/utils/lib/isFormDataAvailable.js","../../../webui/node_modules/@rjsf/utils/lib/isRootSchema.js","../../../webui/node_modules/@rjsf/utils/lib/labelValue.js","../../../webui/node_modules/@rjsf/utils/lib/localToUTC.js","../../../webui/node_modules/@rjsf/utils/lib/logUnsupportedDefaultForEnum.js","../../../webui/node_modules/@rjsf/utils/lib/lookupFromFormContext.js","../../../webui/node_modules/@rjsf/utils/lib/noop.js","../../../webui/node_modules/@rjsf/utils/lib/orderProperties.js","../../../webui/node_modules/@rjsf/utils/lib/parseDateString.js","../../../webui/node_modules/@rjsf/utils/lib/resolveUiSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schemaRequiresTrueValue.js","../../../webui/node_modules/@rjsf/utils/lib/SelectedOptionDescription.js","../../../webui/node_modules/@rjsf/utils/lib/shallowEquals.js","../../../webui/node_modules/@rjsf/utils/lib/shouldRender.js","../../../webui/node_modules/@rjsf/utils/lib/shouldRenderOptionalField.js","../../../webui/node_modules/@rjsf/utils/lib/toDateString.js","../../../webui/node_modules/@rjsf/utils/lib/toErrorList.js","../../../webui/node_modules/@rjsf/utils/lib/toErrorSchema.js","../../../webui/node_modules/@rjsf/utils/lib/toFieldPathId.js","../../../webui/node_modules/@rjsf/utils/lib/unwrapErrorHandler.js","../../../webui/node_modules/@rjsf/utils/lib/useAltDateWidgetProps.js","../../../webui/node_modules/@rjsf/utils/lib/useDeepCompareMemo.js","../../../webui/node_modules/@rjsf/utils/lib/useFileWidgetProps.js","../../../webui/node_modules/@rjsf/utils/lib/utcToLocal.js","../../../webui/node_modules/@rjsf/utils/lib/validationDataMerge.js","../../../webui/node_modules/@rjsf/utils/lib/withIdRefPrefix.js","../../../webui/node_modules/@rjsf/utils/lib/enums.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/ArrayField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/BooleanField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/CyclicSchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/FallbackField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/LayoutGridField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/LayoutHeaderField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/LayoutMultiSchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/MultiSchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/NullField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/NumberField.js","../../../webui/node_modules/markdown-to-jsx/dist/entities.browser.js","../../../webui/node_modules/markdown-to-jsx/dist/react.js","../../../webui/node_modules/@rjsf/core/lib/components/constants.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/ObjectField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/OptionalDataControlsField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/SchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/StringField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/index.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldDescriptionTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldItemButtonsTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldItemTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldTitleTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/SchemaExamples.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/BaseInputTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/IconButton.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/AddButton.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/SubmitButton.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/index.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/CyclicSchemaExpandTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/RichDescription.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/DescriptionField.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ErrorList.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FallbackFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldErrorTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/RichHelp.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldHelpTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldTemplate/Label.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldTemplate/FieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/GridTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/MultiSchemaFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ObjectFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/OptionalDataControlsTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/TitleField.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/UnsupportedField.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/WrapIfAdditionalTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/index.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/AltDateTimeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/AltDateWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/CheckboxesWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/CheckboxWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/ColorWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/DateTimeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/DateWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/EmailWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/FileWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/HiddenWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/PasswordWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/RadioWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/RangeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/RatingWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/SelectWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/TextareaWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/TextWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/TimeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/UpDownWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/URLWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/index.js","../../../webui/node_modules/@rjsf/core/lib/getDefaultRegistry.js","../../../webui/node_modules/@rjsf/core/lib/components/Form.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/processRawValidationErrors.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/codegen/code.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/codegen/scope.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/codegen/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/util.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/names.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/errors.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/validate/boolSchema.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/rules.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/validate/applicability.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/validate/dataType.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/validate/defaults.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/code.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/validate/keyword.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/validate/subschema.js","../../../webui/node_modules/fast-deep-equal/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/json-schema-traverse/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/resolve.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/validate/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/runtime/validation_error.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/ref_error.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/compile/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/fast-uri/lib/utils.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/fast-uri/lib/schemes.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/fast-uri/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/runtime/uri.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/core.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/core/id.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/core/ref.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/core/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/limitNumber.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/multipleOf.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/runtime/ucs2length.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/limitLength.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/pattern.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/limitProperties.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/required.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/limitItems.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/runtime/equal.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/const.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/enum.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/validation/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/items.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/items2020.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/contains.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/dependencies.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/properties.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/not.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/anyOf.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/oneOf.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/allOf.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/if.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/thenElse.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/applicator/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/format/format.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/format/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/metadata.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/draft7.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/discriminator/types.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/vocabularies/discriminator/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/node_modules/ajv/dist/ajv.js","../../../webui/node_modules/ajv-formats/dist/formats.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/codegen/code.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/codegen/scope.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/codegen/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/util.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/names.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/errors.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/validate/boolSchema.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/rules.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/validate/applicability.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/validate/dataType.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/validate/defaults.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/code.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/validate/keyword.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/validate/subschema.js","../../../webui/node_modules/ajv-formats/node_modules/json-schema-traverse/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/resolve.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/validate/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/runtime/validation_error.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/ref_error.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/compile/index.js","../../../webui/node_modules/ajv-formats/node_modules/fast-uri/lib/utils.js","../../../webui/node_modules/ajv-formats/node_modules/fast-uri/lib/schemes.js","../../../webui/node_modules/ajv-formats/node_modules/fast-uri/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/runtime/uri.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/core.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/core/id.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/core/ref.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/core/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/limitNumber.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/multipleOf.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/runtime/ucs2length.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/limitLength.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/pattern.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/limitProperties.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/required.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/limitItems.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/runtime/equal.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/const.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/enum.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/validation/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/items.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/items2020.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/contains.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/dependencies.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/properties.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/not.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/anyOf.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/oneOf.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/allOf.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/if.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/thenElse.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/applicator/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/format/format.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/format/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/metadata.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/draft7.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/discriminator/types.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/vocabularies/discriminator/index.js","../../../webui/node_modules/ajv-formats/node_modules/ajv/dist/ajv.js","../../../webui/node_modules/ajv-formats/dist/limit.js","../../../webui/node_modules/ajv-formats/dist/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/createAjvInstance.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/validator.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/customizeValidator.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/index.js","../../../webui/src/admin/components/SchemaConfigurationForm.jsx","../../../webui/src/admin/components/ConfigurationEditor.jsx","../../../webui/src/admin/components/PasswordConfirmationDialog.jsx","../../../webui/src/admin/AdminApp.jsx"],"sourcesContent":["// Identity Database API\n// Purpose: Keeps identity socket event names and acknowledgement handling local to the administration user editor.\n// Scope: Provides small promise helpers over the shared socket without adding app-wide SessionContext actions.\nexport function emitIdentityAdmin(socket, eventName, payload = {}) {\n return new Promise((resolve, reject) => {\n socket.emit(eventName, payload, (resp = {}) => {\n if (resp.error) {\n reject(new Error(resp.error));\n return;\n }\n resolve(resp);\n });\n });\n}\n\nexport function listUsers(socket, { query = '', filter = 'all' } = {}) {\n return emitIdentityAdmin(socket, 'identityAdmin:listUsers', { query, filter });\n}\n\nexport function getUser(socket, userId) {\n return emitIdentityAdmin(socket, 'identityAdmin:getUser', { userId });\n}\n\nexport function addSignal(socket, userId, type, value) {\n return emitIdentityAdmin(socket, 'identityAdmin:addSignal', { userId, type, value });\n}\n\nexport function removeSignal(socket, userId, type, value) {\n return emitIdentityAdmin(socket, 'identityAdmin:removeSignal', { userId, type, value });\n}\n\nexport function setVerified(socket, userId, enabled) {\n return emitIdentityAdmin(socket, 'identityAdmin:setVerified', { userId, enabled });\n}\n\nexport function setDeterrence(socket, userId, enabled, reason) {\n return emitIdentityAdmin(socket, 'identityAdmin:setDeterrence', { userId, enabled, reason });\n}\n\nexport function setMuted(socket, userId, enabled) {\n return emitIdentityAdmin(socket, 'identityAdmin:setMuted', { userId, enabled });\n}\n\nexport function setPermission(socket, userId, permissionKey, enabled) {\n return emitIdentityAdmin(socket, 'identityAdmin:setPermission', { userId, permissionKey, enabled });\n}\n\nexport function updateFeatureState(socket, userId, namespace, value) {\n return emitIdentityAdmin(socket, 'identityAdmin:updateFeatureState', { userId, namespace, value });\n}\n\nexport function deleteFeatureState(socket, userId, namespace) {\n return emitIdentityAdmin(socket, 'identityAdmin:deleteFeatureState', { userId, namespace });\n}\n","// Identity Database Utilities\n// Purpose: Provides local formatting, filtering, and JSON helpers for the administration user editor.\n// Scope: Avoids leaking database-editor-specific presentation helpers into shared UI modules.\nexport const SIGNAL_LABELS = {\n cookieUserId: 'Cookie keys',\n fingerprintId: 'Fingerprints',\n nickname: 'Nicknames',\n knownIp: 'Known IPs',\n};\n\nexport const SIGNAL_FIELDS = {\n cookieUserId: 'cookieUserIds',\n fingerprintId: 'fingerprintIds',\n nickname: 'nicknames',\n knownIp: 'knownIps',\n};\n\nexport function maskValue(value) {\n const text = String(value || '').trim();\n if (!text) return 'n/a';\n if (text.length <= 14) return text;\n return `${text.slice(0, 8)}...${text.slice(-6)}`;\n}\n\nexport function formatDateTime(value) {\n const ts = Number(value || 0);\n if (!Number.isFinite(ts) || ts <= 0) return 'never';\n try {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n }).format(new Date(ts));\n } catch {\n return new Date(ts).toLocaleString();\n }\n}\n\nexport function userMatchesQuery(user, query) {\n const needle = String(query || '').trim().toLowerCase();\n if (!needle) return true;\n const haystack = [\n user?.id,\n user?.nickname,\n ...(user?.cookieUserIds || []),\n ...(user?.fingerprintIds || []),\n ...(user?.nicknames || []),\n ...(user?.knownIps || []),\n ...(user?.featureNamespaces || []),\n ...(user?.permissions || []).map((permission) => permission.key),\n ].join(' ').toLowerCase();\n return haystack.includes(needle);\n}\n\nexport function userMatchesFilter(user, filter) {\n if (filter === 'verified') return Boolean(user?.verified?.enabled);\n if (filter === 'deterred') return Boolean(user?.deterrence?.enabled);\n if (filter === 'muted') return Boolean(user?.deterrence?.muted);\n if (filter === 'unverified') return !user?.verified?.enabled;\n return true;\n}\n\nexport function stringifyJson(value) {\n return JSON.stringify(value ?? {}, null, 2);\n}\n\nexport function parseEditableJson(text) {\n const parsed = JSON.parse(String(text || '').trim() || '{}');\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('JSON must be an object or array.');\n }\n return parsed;\n}\n","// Identity Database Panel\n// Purpose: Implements the lockdown admin identity database editor UI inside the centralized administration application.\n// Scope: Keeps list, detail, signal, status, feature-state, and raw JSON editing local to this feature.\nimport { useCallback, useEffect, useState } from 'react';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport Tabs, { Tab, TabList, TabPanel, TabPanels } from '../components/Tabs/index.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport {\n addSignal,\n deleteFeatureState,\n getUser,\n listUsers,\n removeSignal,\n setDeterrence,\n setMuted,\n setPermission,\n setVerified,\n updateFeatureState,\n} from './identityDatabaseApi.js';\nimport {\n SIGNAL_FIELDS,\n SIGNAL_LABELS,\n formatDateTime,\n maskValue,\n parseEditableJson,\n stringifyJson,\n} from './identityDatabaseUtils.js';\n\nconst FILTERS = [\n { key: 'all', label: 'All' },\n { key: 'verified', label: 'Verified' },\n { key: 'deterred', label: 'Deterred' },\n { key: 'muted', label: 'Muted' },\n { key: 'unverified', label: 'Unverified' },\n];\n\nfunction StatusPill({ active, children }) {\n return (\n \n {children}\n \n );\n}\n\nfunction UserListCard({ users, truncated, selectedUserId, query, filter, loading, onQuery, onFilter, onRefresh, onSearch, onSelect }) {\n const actions = (\n \n );\n\n return (\n \n
\n onQuery(event.target.value)}\n />\n \n \n \n {truncated ? (\n

\n Showing the first 100 matches. Narrow the search to find older users.\n

\n ) : null}\n
\n {users.length ? users.map((user) => (\n onSelect(user.id)}\n >\n \n {user.nickname || 'unknown user'}\n {user.id}\n {maskValue(user.cookieUserIds?.[0])} / {maskValue(user.fingerprintIds?.[0])}\n \n \n verified\n deterred\n muted\n \n \n )) : (\n

No users match this view.

\n )}\n
\n
\n );\n}\n\nfunction UserDetailsCard({ user }) {\n return (\n \n
\n

Canonical user id

\n

{user.id}

\n
\n
\n

Primary nickname

\n

{user.nickname || 'unknown user'}

\n
\n
\n

Created

\n

{formatDateTime(user.createdAt)}

\n
\n
\n

Last seen

\n

{formatDateTime(user.lastSeenAt)}

\n
\n
\n );\n}\n\nfunction SignalEditor({ user, type, onAdd, onRemove }) {\n const [draft, setDraft] = useState('');\n const values = user?.[SIGNAL_FIELDS[type]] || [];\n\n const submit = async (event) => {\n event.preventDefault();\n const value = draft.trim();\n if (!value) return;\n await onAdd(type, value);\n setDraft('');\n };\n\n return (\n
\n

{SIGNAL_LABELS[type]}

\n
\n {values.length ? values.map((value) => (\n
\n {value}\n \n
\n )) :

No values.

}\n
\n
\n setDraft(event.target.value)}\n />\n \n \n
\n );\n}\n\nfunction SignalsCard({ user, onAddSignal, onRemoveSignal }) {\n return (\n \n {Object.keys(SIGNAL_LABELS).map((type) => (\n \n ))}\n \n );\n}\n\nfunction StatusCard({ user, onVerified, onDeterrence, onMuted }) {\n const [reason, setReason] = useState(user?.deterrence?.reason || '');\n\n return (\n \n
\n

Verification

\n \n

Updated {formatDateTime(user?.verified?.at)}

\n
\n
\n

Deterrence

\n \n setReason(event.target.value)}\n />\n \n
\n \n {/*\n Mute is intentionally presented inside deterrence status because\n it is a narrower moderation action, while its own timestamp makes\n it clear that toggling mute does not toggle full deterrence.\n */}\n

Updated {formatDateTime(user?.deterrence?.mutedAt)}

\n
\n
\n
\n );\n}\n\nfunction FeatureStateCard({ user, onSaveFeature, onDeleteFeature }) {\n const namespaces = Object.keys(user?.features || {}).sort();\n const initialNamespace = namespaces[0] || '';\n const [namespace, setNamespace] = useState(initialNamespace);\n const [text, setText] = useState(stringifyJson(initialNamespace ? user.features[initialNamespace] : {}));\n const [error, setError] = useState('');\n\n const save = async () => {\n const ns = namespace.trim();\n if (!ns) {\n setError('Namespace required.');\n return;\n }\n try {\n const parsed = parseEditableJson(text);\n await onSaveFeature(ns, parsed);\n setError('');\n } catch (err) {\n setError(err.message || 'Invalid JSON.');\n }\n };\n\n const remove = async () => {\n const ns = namespace.trim();\n if (!ns) return;\n if (!window.confirm(`Delete feature state \"${ns}\" from ${user.id}?`)) return;\n await onDeleteFeature(ns);\n // The selected namespace no longer exists after deletion. Reset the local\n // editor directly instead of mirroring new props through an effect.\n setNamespace('');\n setText('{}');\n setError('');\n };\n\n return (\n \n
\n {\n const next = event.target.value;\n setNamespace(next);\n setText(stringifyJson(user.features?.[next] || {}));\n }}\n />\n \n {namespaces.map((entry) => \n \n \n
\n setText(event.target.value)}\n />\n {error ?

{error}

: null}\n
\n );\n}\n\nfunction RawRecordCard({ user }) {\n return (\n \n
\n        {stringifyJson(user)}\n      
\n
\n );\n}\n\nfunction PermissionsCard({ user, permissions, onPermission }) {\n const grantedKeys = new Set((user?.permissions || []).map((permission) => permission.key));\n return (\n \n {permissions.map((permission) => (\n \n ))}\n \n );\n}\n\nexport default function IdentityDatabasePanel() {\n const socket = useSocket();\n const [users, setUsers] = useState([]);\n const [permissions, setPermissions] = useState([]);\n const [selectedUser, setSelectedUser] = useState(null);\n const [query, setQuery] = useState('');\n const [filter, setFilter] = useState('all');\n const [truncated, setTruncated] = useState(false);\n const [loading, setLoading] = useState(false);\n const [message, setMessage] = useState('');\n\n const refreshUsers = useCallback(async () => {\n setLoading(true);\n try {\n const resp = await listUsers(socket, { query, filter });\n setUsers(resp.users || []);\n setTruncated(Boolean(resp.truncated));\n setPermissions(resp.permissions || []);\n if (selectedUser?.id) {\n const updated = await getUser(socket, selectedUser.id);\n setSelectedUser(updated.user || null);\n }\n setMessage('');\n } catch (err) {\n setMessage(err.message || 'Failed to load users.');\n } finally {\n setLoading(false);\n }\n }, [filter, query, selectedUser?.id, socket]);\n\n const selectUser = useCallback(async (userId) => {\n setLoading(true);\n try {\n const resp = await getUser(socket, userId);\n setSelectedUser(resp.user || null);\n setMessage('');\n } catch (err) {\n setMessage(err.message || 'Failed to load user.');\n } finally {\n setLoading(false);\n }\n }, [socket]);\n\n const applyUserUpdate = useCallback((user) => {\n setSelectedUser(user || null);\n if (!user?.id) return;\n setUsers((prev) => prev.map((entry) => (entry.id === user.id ? { ...entry, ...user } : entry)));\n }, []);\n\n const runMutation = useCallback(async (operation, successMessage) => {\n if (!selectedUser?.id) return;\n setLoading(true);\n try {\n const resp = await operation(selectedUser.id);\n applyUserUpdate(resp.user);\n setMessage(successMessage || 'Saved.');\n } catch (err) {\n setMessage(err.message || 'Save failed.');\n } finally {\n setLoading(false);\n }\n }, [applyUserUpdate, selectedUser?.id]);\n\n useEffect(() => {\n refreshUsers();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const submitSearch = (event) => {\n event.preventDefault();\n refreshUsers();\n };\n\n const handleAddSignal = (type, value) =>\n runMutation((userId) => addSignal(socket, userId, type, value), 'Signal added.');\n const handleRemoveSignal = (type, value) =>\n runMutation((userId) => removeSignal(socket, userId, type, value), 'Signal removed.');\n const handleVerified = (enabled) =>\n runMutation((userId) => setVerified(socket, userId, enabled), 'Verification updated.');\n const handleDeterrence = (enabled, reason) =>\n runMutation((userId) => setDeterrence(socket, userId, enabled, reason), 'Deterrence updated.');\n const handleMuted = (enabled) =>\n runMutation((userId) => setMuted(socket, userId, enabled), 'Mute updated.');\n const handlePermission = (permissionKey, enabled) =>\n runMutation(\n (userId) => setPermission(socket, userId, permissionKey, enabled),\n 'Permission updated.',\n );\n const handleSaveFeature = (namespace, value) =>\n runMutation((userId) => updateFeatureState(socket, userId, namespace, value), 'Feature state saved.');\n const handleDeleteFeature = (namespace) =>\n runMutation((userId) => deleteFeatureState(socket, userId, namespace), 'Feature state deleted.');\n\n return (\n
\n \n
\n {message ?

{message}

: null}\n {selectedUser ? (\n <>\n \n \n \n Signals\n Status\n Permissions\n Feature state\n Raw JSON\n \n \n \n \n \n \n {/* These editors own drafts for one identity. Keys remount them\n when selection changes without effect-driven state mirroring. */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n Select a user to inspect and edit the identity record.\n \n )}\n
\n
\n );\n}\n","// Administrator Accounts\n// Purpose: Provides lockdown administrators with explicit account creation, editing, password replacement, and deletion controls.\n// Scope: Never receives or displays password hashes; final-lockdown safety is enforced by the server.\nimport { useEffect, useState } from 'react';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport { createAdministrator, deleteAdministrator, updateAdministrator } from '../api.js';\n\nfunction AdministratorRow({ administrator, socket, runSensitive, onSnapshot }) {\n const [draft, setDraft] = useState({\n username: administrator.username,\n discordId: administrator.discordId,\n role: administrator.role,\n password: '',\n });\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n\n useEffect(() => {\n setDraft({ username: administrator.username, discordId: administrator.discordId, role: administrator.role, password: '' });\n }, [administrator]);\n\n async function perform(work) {\n setBusy(true);\n setError('');\n try {\n const response = await runSensitive(work);\n onSnapshot(response.snapshot);\n } catch (actionError) {\n setError(actionError.message);\n } finally {\n setBusy(false);\n }\n }\n\n return (\n
\n
\n setDraft({ ...draft, username: event.target.value })} />\n setDraft({ ...draft, discordId: event.target.value })} />\n \n setDraft({ ...draft, password: event.target.value })} />\n
\n {error ?

{error}

: null}\n
\n \n \n
\n
\n );\n}\n\nexport default function AdministratorAccounts({ administrators, socket, runSensitive, onSnapshot }) {\n const [draft, setDraft] = useState({ username: '', discordId: '', role: 'admin', password: '' });\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n\n async function create(event) {\n event.preventDefault();\n setBusy(true);\n setError('');\n try {\n const response = await runSensitive(() => createAdministrator(socket, draft));\n onSnapshot(response.snapshot);\n setDraft({ username: '', discordId: '', role: 'admin', password: '' });\n } catch (actionError) {\n setError(actionError.message);\n } finally {\n setBusy(false);\n }\n }\n\n return (\n \n
\n setDraft({ ...draft, username: event.target.value })} />\n setDraft({ ...draft, discordId: event.target.value })} />\n \n setDraft({ ...draft, password: event.target.value })} />\n {error ?

{error}

: }\n \n \n {(administrators || []).map((administrator) => (\n \n ))}\n
\n );\n}\n","// Administration Overview\n// Purpose: Summarizes configuration state, revision history, audit history, and links to existing health/report surfaces.\n// Scope: Presents persisted administration metadata without duplicating operational service implementations.\nimport { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport {\n checkForApplicationUpdate,\n getApplicationLifecycleStatus,\n restartApplication,\n restoreConfigurationRevision,\n updateApplication,\n} from '../api.js';\n\nfunction formatDate(value) {\n return Number.isFinite(Number(value)) ? new Date(Number(value)).toLocaleString() : 'unknown';\n}\n\nexport default function AdminOverview({ snapshot, socket, runSensitive, onSnapshot }) {\n const config = snapshot.configuration;\n const [restartRequested, setRestartRequested] = useState(false);\n const [lifecycle, setLifecycle] = useState(null);\n const [lifecycleError, setLifecycleError] = useState('');\n\n useEffect(() => {\n let mounted = true;\n async function refreshLifecycle() {\n if (!socket.connected) return;\n try {\n const response = await getApplicationLifecycleStatus(socket);\n if (!mounted) return;\n setLifecycle(response.lifecycle);\n setLifecycleError('');\n } catch (error) {\n if (mounted) setLifecycleError(error.message);\n }\n }\n\n refreshLifecycle();\n // Update work continues while this application is being replaced. Polling\n // the controller gives the page current progress before disconnect and the\n // persisted final result immediately after Socket.IO reconnects.\n const timer = window.setInterval(refreshLifecycle, 2500);\n return () => {\n mounted = false;\n window.clearInterval(timer);\n };\n }, [socket]);\n\n useEffect(() => {\n if (!restartRequested) return undefined;\n // The socket reconnect is the simplest authoritative success signal: the\n // replacement process is accepting browser connections again.\n const handleReconnect = () => setRestartRequested(false);\n socket.once('connect', handleReconnect);\n return () => socket.off('connect', handleReconnect);\n }, [restartRequested, socket]);\n\n async function restore(revision) {\n if (!window.confirm(`Restore configuration revision ${revision}? This creates and immediately applies a new active revision.`)) return;\n try {\n const response = await runSensitive(() => restoreConfigurationRevision(socket, {\n revision,\n expectedRevision: config.revision,\n }));\n onSnapshot(response.snapshot);\n } catch (error) {\n window.alert(error.message);\n }\n }\n\n async function restart() {\n if (!window.confirm('Restart the MultiRover application now? Connected rovers and browsers will disconnect briefly; the server host will not reboot.')) return;\n setRestartRequested(true);\n try {\n await runSensitive(() => restartApplication(socket));\n } catch (error) {\n setRestartRequested(false);\n window.alert(error.message);\n }\n }\n\n async function checkForUpdate() {\n try {\n const response = await runSensitive(() => checkForApplicationUpdate(socket));\n setLifecycle(response.lifecycle);\n } catch (error) {\n setLifecycleError(error.message);\n }\n }\n\n async function update() {\n if (!window.confirm('Pull the configured MultiRover image and replace the application container now? The page will reconnect automatically.')) return;\n try {\n const response = await runSensitive(() => updateApplication(socket));\n setLifecycle(response.lifecycle);\n } catch (error) {\n setLifecycleError(error.message);\n }\n }\n\n const lifecycleBusy = lifecycle?.state === 'running';\n const lifecycleAvailable = Boolean(lifecycle?.available);\n const updateSummary = lifecycle?.updateAvailable === true\n ? 'An update is available.'\n : lifecycle?.updateAvailable === false\n ? 'The running application matches the latest checked image.'\n : 'Check for updates to compare the running container with the configured image.';\n\n return (\n
\n \n

Active revision

{config.revision}

\n

Administrators

{snapshot.administrators.length}

\n

Last configuration save

{formatDate(config.createdAt)}

\n
\n \n Open fleet reports\n Open driver application\n \n \n
\n

{lifecycleAvailable ? updateSummary : 'Container updates are unavailable until the lifecycle service is running.'}

\n {lifecycle?.message ?

{lifecycle.message}

: null}\n {lifecycle?.rollback ?

Rollback: {lifecycle.rollback.status}{lifecycle.rollback.error ? ` — ${lifecycle.rollback.error}` : ''}

: null}\n {lifecycleError ?

{lifecycleError}

: null}\n
\n
\n \n \n \n
\n
\n \n {snapshot.revisions.map((revision) => (\n
\n #{revision.revision}{formatDate(revision.createdAt)}{revision.actor}{revision.source}\n \n
\n ))}\n
\n \n {snapshot.auditEvents.map((event) => (\n
\n {formatDate(event.createdAt)}{event.actor}{event.action}\n
\n ))}\n
\n
\n );\n}\n","// Backup and Restore Administration\n// Purpose: Downloads one complete server backup and validates a selected archive before explicit restore confirmation.\n// Scope: Transfers large bytes over one-use HTTP URLs while protected socket actions own authorization and restart intent.\nimport { useEffect, useState } from 'react';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport {\n confirmFullRestore,\n createFullBackup,\n createRestoreUpload,\n getBackupRestoreStatus,\n} from '../api.js';\n\nfunction formatBytes(value) {\n const bytes = Number(value) || 0;\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KiB', 'MiB', 'GiB', 'TiB'];\n let amount = bytes / 1024;\n let unitIndex = 0;\n while (amount >= 1024 && unitIndex < units.length - 1) {\n amount /= 1024;\n unitIndex += 1;\n }\n return `${amount.toFixed(amount >= 10 ? 1 : 2)} ${units[unitIndex]}`;\n}\n\nexport default function BackupRestorePanel({ socket, runSensitive }) {\n const [backupBusy, setBackupBusy] = useState(false);\n const [restoreBusy, setRestoreBusy] = useState(false);\n const [backupFile, setBackupFile] = useState(null);\n const [validatedRestore, setValidatedRestore] = useState(null);\n const [lastRestore, setLastRestore] = useState(null);\n const [message, setMessage] = useState('');\n\n useEffect(() => {\n getBackupRestoreStatus(socket)\n .then((response) => setLastRestore(response.lastRestore))\n .catch((error) => setMessage(error.message));\n }, [socket]);\n\n async function downloadBackup() {\n setBackupBusy(true);\n setMessage('Creating consistent database snapshots and copying server data…');\n try {\n const response = await runSensitive(() => createFullBackup(socket));\n /*\n A temporary anchor begins a normal streamed browser download without\n navigating away from administration. The one-use URL contains no\n credentials and expires if the browser never requests it.\n */\n const link = document.createElement('a');\n link.href = response.downloadUrl;\n link.download = '';\n document.body.appendChild(link);\n link.click();\n link.remove();\n const skipped = response.skippedUnstableFiles?.length || 0;\n setMessage(`Backup download started with ${response.fileCount} files.${skipped ? ` ${skipped} actively changing file(s) were skipped.` : ''}`);\n } catch (error) {\n setMessage(error.message);\n } finally {\n setBackupBusy(false);\n }\n }\n\n async function validateRestore() {\n if (!backupFile) return;\n setRestoreBusy(true);\n setValidatedRestore(null);\n setMessage('Uploading and validating the selected backup…');\n try {\n const authorization = await runSensitive(() => createRestoreUpload(socket));\n const uploadResponse = await fetch(authorization.uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/gzip' },\n body: backupFile,\n });\n const result = await uploadResponse.json();\n if (!uploadResponse.ok || result.error) throw new Error(result.error || 'Restore upload failed.');\n setValidatedRestore(result);\n setMessage('Backup validated. Review the summary before replacing server data.');\n } catch (error) {\n setMessage(error.message);\n } finally {\n setRestoreBusy(false);\n }\n }\n\n async function restore() {\n if (!validatedRestore) return;\n const confirmed = window.confirm(\n 'Replace the complete server data folder with this backup and restart the application? Configuration, administrators, identities, history, and media will all be replaced.',\n );\n if (!confirmed) return;\n setRestoreBusy(true);\n try {\n await runSensitive(() => confirmFullRestore(socket, validatedRestore.restoreId));\n setMessage('Restore accepted. Waiting for the application to restart…');\n } catch (error) {\n setRestoreBusy(false);\n setMessage(error.message);\n }\n }\n\n return (\n
\n \n

Downloads configuration, administrator accounts, secrets, identities, history, snapshots, replays, and other durable server data. Keep the archive private because it contains credentials.

\n \n
\n\n \n

Upload a MultiRover full backup for validation. Nothing changes until the validated restore is confirmed.

\n
\n {\n setBackupFile(event.target.files?.[0] || null);\n setValidatedRestore(null);\n }}\n />\n \n
\n {validatedRestore ? (\n
\n

{validatedRestore.summary.fileCount} files, {formatBytes(validatedRestore.summary.totalBytes)}

\n

Created {new Date(validatedRestore.summary.createdAt).toLocaleString()} by application version {validatedRestore.summary.applicationVersion}

\n \n
\n ) : null}\n
\n\n {message ?

{message}

: null}\n {lastRestore ? (\n \n

{lastRestore.completedAt ? new Date(lastRestore.completedAt).toLocaleString() : 'Completion time unavailable'}{lastRestore.error ? ` — ${lastRestore.error}` : ''}

\n
\n ) : null}\n
\n );\n}\n","/** Determines whether a `thing` is an object for the purposes of RJSF. In this case, `thing` is an object if it has\n * the type `object` but is NOT null, an array or a File.\n *\n * @param thing - The thing to check to see whether it is an object\n * @returns - True if it is a non-null, non-array, non-File object\n */\nexport default function isObject(thing) {\n if (typeof thing !== 'object' || thing === null) {\n return false;\n }\n // lastModified is guaranteed to be a number on a File instance\n // as per https://w3c.github.io/FileAPI/#dfn-lastModified\n if ('lastModified' in thing &&\n typeof thing.lastModified === 'number' &&\n typeof File !== 'undefined' &&\n thing instanceof File) {\n return false;\n }\n // getMonth is guaranteed to be a method on a Date instance\n // as per https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date.prototype.getmonth\n if ('getMonth' in thing &&\n typeof thing.getMonth === 'function' &&\n typeof Date !== 'undefined' &&\n thing instanceof Date) {\n return false;\n }\n return !Array.isArray(thing);\n}\n//# sourceMappingURL=isObject.js.map","import isObject from \"./isObject.js\";\n/** Checks the schema to see if it is allowing additional items, by verifying that `schema.additionalItems` is an\n * object. The user is warned in the console if `schema.additionalItems` has the value `true`.\n *\n * @param schema - The schema object to check\n * @returns - True if additional items is allowed, otherwise false\n */\nexport default function allowAdditionalItems(schema) {\n if (schema.additionalItems === true) {\n // oxlint-disable-next-line no-console\n console.warn('additionalItems=true is currently not supported');\n }\n return isObject(schema.additionalItems);\n}\n//# sourceMappingURL=allowAdditionalItems.js.map","/**\n * Determines the locale-specific decimal separator.\n * It uses the provided locale or the first locale in navigator.languages (if available) and falls back to \"en\".\n *\n * @param languages - Optional array of locales or a single locale string\n * @returns The decimal separator character (typically '.' or ',').\n */\nexport default function getDecimalSeparator(languages) {\n const locales = languages || (typeof navigator !== 'undefined' ? navigator.languages : undefined);\n if (locales) {\n try {\n const formatter = new Intl.NumberFormat(locales);\n const parts = formatter.formatToParts(1.1);\n return parts.find((part) => part.type === 'decimal')?.value || '.';\n }\n catch (e) {\n // Fallback\n }\n }\n return '.';\n}\n//# sourceMappingURL=getDecimalSeparator.js.map","import getDecimalSeparator from \"./getDecimalSeparator.js\";\n/** Attempts to convert the string into a number. If an empty string is provided, then `undefined` is returned.\n * If a `null` is provided, it is returned. If the string ends in a `.` or the locale-specific separator then the\n * string is returned because the user may be in the middle of typing a float number. If a number ends in a pattern\n * like `.0`, `.20`, `.030`, string is returned because the user may be typing number that will end in a non-zero\n * digit. Otherwise, the string is wrapped by `Number()` and if that result is not `NaN`, that number will be\n * returned, otherwise the string `value` will be.\n *\n * @param value - The string or null value to convert to a number\n * @returns - The `value` converted to a number when appropriate, otherwise the `value`\n */\nexport default function asNumber(value) {\n if (value === '') {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n const separator = getDecimalSeparator();\n // Normalize separator to standard '.' for pattern checking and parsing\n const standardValue = typeof value === 'string' && separator !== '.' ? value.replace(separator, '.') : value;\n // oxlint-disable-next-line typescript/prefer-string-starts-ends-with -- regex test() coerces undefined to \"undefined\" safely; endsWith() throws on undefined values passed at runtime\n if (/\\.$/.test(standardValue)) {\n // '3.' can't really be considered a number even if it parses in js. The\n // user is most likely entering a float.\n return value;\n }\n // oxlint-disable-next-line typescript/prefer-string-starts-ends-with -- same as above\n if (/\\.0$/.test(standardValue)) {\n // we need to return this as a string here, to allow for input like 3.07\n return value;\n }\n if (/\\.\\d*0$/.test(standardValue)) {\n // It's a number, that's cool - but we need it as a string so it doesn't screw\n // with the user when entering dollar amounts or other values (such as those with\n // specific precision or number of significant digits)\n return value;\n }\n const n = Number(standardValue);\n const valid = typeof n === 'number' && !Number.isNaN(n);\n return valid ? n : value;\n}\n//# sourceMappingURL=asNumber.js.map","/** Below are the list of all the keys into various elements of a RJSFSchema or UiSchema that are used by the various\n * utility functions. In addition to those keys, there are the special `ADDITIONAL_PROPERTY_FLAG`,\n * `RJSF_REF_KEY`, and `RJSF_REF_CYCLE_KEY` Symbols that are added to a schema under certain conditions by the\n * `retrieveSchema()` utility. Using Symbols keeps these internal markers invisible to JSON serialisation and\n * JSON Schema validators (AJV, ATA, etc.), which only enumerate string-keyed properties.\n */\nexport const ADDITIONAL_PROPERTY_FLAG = Symbol('__additional_property');\nexport const ADDITIONAL_PROPERTIES_KEY = 'additionalProperties';\nexport const ALL_OF_KEY = 'allOf';\nexport const ANY_OF_KEY = 'anyOf';\nexport const CONST_KEY = 'const';\nexport const DEFAULT_KEY = 'default';\nexport const DEFINITIONS_KEY = 'definitions';\nexport const DEPENDENCIES_KEY = 'dependencies';\nexport const ENUM_KEY = 'enum';\nexport const ERRORS_KEY = '__errors';\nexport const ID_KEY = '$id';\nexport const IF_KEY = 'if';\nexport const ITEMS_KEY = 'items';\nexport const JUNK_OPTION_ID = '_$junk_option_schema_id$_';\nexport const NAME_KEY = '$name';\nexport const ONE_OF_KEY = 'oneOf';\nexport const PATTERN_PROPERTIES_KEY = 'patternProperties';\nexport const PROPERTIES_KEY = 'properties';\nexport const READONLY_KEY = 'readonly';\nexport const REQUIRED_KEY = 'required';\nexport const SUBMIT_BTN_OPTIONS_KEY = 'submitButtonOptions';\nexport const REF_KEY = '$ref';\nexport const RJSF_REF_KEY = Symbol('__rjsf_ref');\nexport const RJSF_REF_CYCLE_KEY = Symbol('__rjsf_ref_cycle');\nexport const SCHEMA_KEY = '$schema';\nexport const DEFAULT_ID_PREFIX = 'root';\nexport const DEFAULT_ID_SEPARATOR = '_';\n/** The path of the discriminator value returned by the schema endpoint.\n * The discriminator is the value in a `oneOf` that determines which option is selected.\n */\nexport const DISCRIMINATOR_PATH = ['discriminator', 'propertyName'];\n/** The name of the `formContext` attribute in the React JSON Schema Form Registry\n */\nexport const FORM_CONTEXT_NAME = 'formContext';\n/** The name of the `layoutGridLookupMap` attribute in the form context\n */\nexport const LOOKUP_MAP_NAME = 'layoutGridLookupMap';\nexport const RJSF_PREFIX_KEY = '__rjsf';\nexport const RJSF_ADDITIONAL_PROPERTIES_FLAG = `${RJSF_PREFIX_KEY}_additionalProperties`;\nexport const ROOT_SCHEMA_PREFIX = `${RJSF_PREFIX_KEY}_rootSchema`;\nexport const UI_FIELD_KEY = 'ui:field';\nexport const UI_WIDGET_KEY = 'ui:widget';\nexport const UI_OPTIONS_KEY = 'ui:options';\nexport const UI_GLOBAL_OPTIONS_KEY = 'ui:globalOptions';\nexport const UI_DEFINITIONS_KEY = 'ui:definitions';\n/** The JSON Schema version strings\n */\nexport const JSON_SCHEMA_DRAFT_2019_09 = 'https://json-schema.org/draft/2019-09/schema';\nexport const JSON_SCHEMA_DRAFT_2020_12 = 'https://json-schema.org/draft/2020-12/schema';\n//# sourceMappingURL=constants.js.map","import { UI_OPTIONS_KEY, UI_WIDGET_KEY } from \"./constants.js\";\nimport isObject from \"./isObject.js\";\n/** Get all passed options from ui:options, and ui:, returning them in an object with the `ui:`\n * stripped off. Any `globalOptions` will always be returned, unless they are overridden by options in the `uiSchema`.\n *\n * @param [uiSchema={}] - The UI Schema from which to get any `ui:xxx` options\n * @param [globalOptions={}] - The optional Global UI Schema from which to get any fallback `xxx` options\n * @returns - An object containing all the `ui:xxx` options with the `ui:` stripped off along with all `globalOptions`\n */\nexport default function getUiOptions(uiSchema = {}, globalOptions = {}) {\n // Handle null or undefined uiSchema\n if (!uiSchema) {\n return { ...globalOptions };\n }\n return Object.keys(uiSchema)\n .filter((key) => key.startsWith('ui:'))\n .reduce((options, key) => {\n const value = uiSchema[key];\n if (key === UI_WIDGET_KEY && isObject(value)) {\n // oxlint-disable-next-line no-console\n console.error('Setting options via ui:widget object is no longer supported, use ui:options instead');\n return options;\n }\n if (key === UI_OPTIONS_KEY && isObject(value)) {\n return { ...options, ...value };\n }\n return { ...options, [key.substring(3)]: value };\n }, { ...globalOptions });\n}\n//# sourceMappingURL=getUiOptions.js.map","import getUiOptions from \"./getUiOptions.js\";\n/** Checks whether the field described by `schema`, having the `uiSchema` and `formData` supports expanding. The UI for\n * the field can expand if it has additional properties, is not forced as non-expandable by the `uiSchema` and the\n * `formData` object doesn't already have `schema.maxProperties` elements.\n *\n * @param schema - The schema for the field that is being checked\n * @param [uiSchema={}] - The uiSchema for the field\n * @param [formData] - The formData for the field\n * @returns - True if the schema element has additionalProperties, is expandable, and not at the maxProperties limit\n */\nexport default function canExpand(schema, uiSchema = {}, formData) {\n if (!(schema.additionalProperties || schema.patternProperties)) {\n return false;\n }\n const { expandable = true } = getUiOptions(uiSchema);\n if (expandable === false) {\n return expandable;\n }\n // if ui:options.expandable was not explicitly set to false, we can add\n // another property if we have not exceeded maxProperties yet\n if (schema.maxProperties !== undefined && formData) {\n return Object.keys(formData).length < schema.maxProperties;\n }\n return true;\n}\n//# sourceMappingURL=canExpand.js.map","/** Determines whether `thing` is a plain object, i.e. one created by the `Object` constructor or with a `null`\n * prototype. Unlike `isObject()`, class instances such as `Error` are not plain objects, which matters when\n * recursively walking a structure whose nested values are expected to be plain data.\n *\n * @param thing - The thing to check to see whether it is a plain object\n * @returns - True if it is a plain object, otherwise false\n */\nexport default function isPlainObject(thing) {\n if (typeof thing !== 'object' || thing === null) {\n return false;\n }\n const proto = Object.getPrototypeOf(thing);\n return proto === null || proto === Object.prototype;\n}\n//# sourceMappingURL=isPlainObject.js.map","import { ERRORS_KEY } from \"./constants.js\";\nimport isPlainObject from \"./isPlainObject.js\";\n/** Given a `formData` object, recursively creates a `FormValidation` error handling structure around it\n *\n * @param formData - The form data around which the error handler is created\n * @returns - A `FormValidation` object based on the `formData` structure\n */\nexport default function createErrorHandler(formData) {\n const handler = {\n // We store the list of errors for this node in a property named __errors\n // to avoid name collision with a possible sub schema field named\n // 'errors' (see `utils.toErrorSchema`).\n [ERRORS_KEY]: [],\n addError(message) {\n this[ERRORS_KEY].push(message);\n },\n };\n if (Array.isArray(formData)) {\n return formData.reduce((acc, value, key) => ({ ...acc, [key]: createErrorHandler(value) }), handler);\n }\n if (isPlainObject(formData)) {\n return Object.keys(formData).reduce((acc, key) => ({ ...acc, [key]: createErrorHandler(formData[key]) }), handler);\n }\n return handler;\n}\n//# sourceMappingURL=createErrorHandler.js.map","const { getOwnPropertyNames, getOwnPropertySymbols } = Object;\nconst { hasOwnProperty } = Object.prototype;\n/**\n * Combine two comparators into a single comparators.\n */\nfunction combineComparators(comparatorA, comparatorB) {\n return function isEqual(a, b, state) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nfunction createIsCircular(areItemsEqual) {\n return function isCircular(a, b, state) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n const { cache } = state;\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n cache.set(a, b);\n cache.set(b, a);\n const result = areItemsEqual(a, b, state);\n cache.delete(a);\n cache.delete(b);\n return result;\n };\n}\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nfunction getStrictProperties(object) {\n const symbols = getOwnPropertySymbols(object);\n return symbols.length\n ? getOwnPropertyNames(object).concat(symbols)\n : getOwnPropertyNames(object);\n}\n/**\n * Whether the object contains the property passed as an own property.\n */\nconst hasOwn = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.hasOwn || ((object, property) => hasOwnProperty.call(object, property));\n\nconst PREACT_VNODE = '__v';\nconst PREACT_OWNER = '__o';\nconst REACT_OWNER = '_owner';\n// `Float16Array` is recent enough that it cannot be referenced unguarded, and capturing its\n// availability once keeps that detail out of the comparison itself.\nconst HAS_FLOAT_16_ARRAY = typeof Float16Array !== 'undefined';\nconst { getOwnPropertyDescriptor, keys } = Object;\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevalue) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`) or both are `NaN`.\n *\n * @note\n * When available in the environment, this is just a re-export of the global\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) method.\n */\nconst sameValueEqual = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.is\n || function sameValueEqual(a, b) {\n return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;\n };\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevaluezero) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`), both are `NaN`, or both\n * are either positive or negative zero.\n */\nfunction sameValueZeroEqual(a, b) {\n return a === b || (a !== a && b !== b);\n}\n/**\n * Whether the values passed are equal based on a\n * [Strict Equality Comparison](https://262.ecma-international.org/7.0/#sec-strict-equality-comparison) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`).\n *\n * @note\n * This is mainly available as a convenience function, such as being a default when a function to determine equality between\n * two objects is used.\n */\nfunction strictEqual(a, b) {\n return a === b;\n}\n/**\n * Whether the array buffers are equal in value.\n */\nfunction areArrayBuffersEqual(a, b) {\n return a.byteLength === b.byteLength && areTypedArraysEqual(new Uint8Array(a), new Uint8Array(b));\n}\n/**\n * Whether the arrays are equal in value.\n */\nfunction areArraysEqual(a, b, state) {\n let index = a.length;\n if (b.length !== index) {\n return false;\n }\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the dataviews are equal in value.\n */\nfunction areDataViewsEqual(a, b) {\n return (a.byteLength === b.byteLength\n && areTypedArraysEqual(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)));\n}\n/**\n * Whether the dates passed are equal in value.\n */\nfunction areDatesEqual(a, b) {\n return sameValueEqual(a.getTime(), b.getTime());\n}\n/**\n * Whether the errors passed are equal in value.\n *\n * @note\n * `name`, `message` and `stack` are own properties but are not enumerable, so they are compared\n * explicitly. `cause` is compared by value rather than by reference, matching how every other\n * nested value in the comparison is treated. Own enumerable properties (which custom `Error`\n * subclasses commonly add) are compared by composing this with the object comparator in the\n * comparator config, so that the strict and circular variants apply to them as well.\n */\nfunction areErrorsEqual(a, b, state) {\n return (a.name === b.name\n && a.message === b.message\n && a.stack === b.stack\n && state.equals(a.cause, b.cause, 'cause', 'cause', a, b, state));\n}\n/**\n * Whether the `Map`s are equal in value.\n */\nfunction areMapsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Uint8Array(size);\n const aIterable = a.entries();\n let aResult;\n let bResult;\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.entries();\n let hasMatch = 0;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (matchedIndices[matchIndex]) {\n matchIndex++;\n continue;\n }\n const aEntry = aResult.value;\n const bEntry = bResult.value;\n if (state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state)\n && state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = 1;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n index++;\n }\n return true;\n}\n/**\n * Whether the objects are equal in value.\n */\nfunction areObjectsEqual(a, b, state) {\n const properties = keys(a);\n let index = properties.length;\n if (keys(b).length !== index) {\n return false;\n }\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n if (!isPropertyEqual(a, b, state, properties[index])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nfunction areObjectsEqualStrict(a, b, state) {\n const properties = getStrictProperties(a);\n let index = properties.length;\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n let property;\n let descriptorA;\n let descriptorB;\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index];\n if (!isPropertyEqual(a, b, state, property)) {\n return false;\n }\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n if ((descriptorA || descriptorB)\n && (!descriptorA\n || !descriptorB\n || descriptorA.configurable !== descriptorB.configurable\n || descriptorA.enumerable !== descriptorB.enumerable\n || descriptorA.writable !== descriptorB.writable)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nfunction arePrimitiveWrappersEqual(a, b) {\n return sameValueEqual(a.valueOf(), b.valueOf());\n}\n/**\n * Whether the regexps passed are equal in value.\n */\nfunction areRegExpsEqual(a, b) {\n return a.source === b.source && a.flags === b.flags;\n}\n/**\n * Whether the `Set`s are equal in value.\n */\nfunction areSetsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Uint8Array(size);\n const aIterable = a.values();\n let aResult;\n let bResult;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.values();\n let hasMatch = 0;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (!matchedIndices[matchIndex]\n && state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = 1;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the TypedArray instances are equal in value.\n */\nfunction areTypedArraysEqual(a, b) {\n let index = a.length;\n if (b.length !== index || a.byteOffset !== b.byteOffset) {\n return false;\n }\n // Only float-backed views can hold `NaN`, and the additional check needed to treat it as equal\n // to itself measurably slows the loop, so integer views keep the plain comparison. This is\n // hoisted out of the loop so the cost is paid once per call rather than once per element.\n if (a instanceof Float64Array || a instanceof Float32Array || (HAS_FLOAT_16_ARRAY && a instanceof Float16Array)) {\n while (index-- > 0) {\n // `NaN` is the only value not equal to itself, and it is treated as equal here to match\n // the SameValueZero semantics used for every other numeric comparison in the library.\n if (a[index] !== b[index] && (a[index] === a[index] || b[index] === b[index])) {\n return false;\n }\n }\n return true;\n }\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the URL instances are equal in value.\n */\nfunction areUrlsEqual(a, b) {\n // `href` is the normalized serialization of every component, so matching hrefs are equal without\n // any further work. Only a difference in query parameter ordering can survive a mismatch here.\n if (a.href === b.href) {\n return true;\n }\n return (a.protocol === b.protocol\n && a.username === b.username\n && a.password === b.password\n // `host` covers both the hostname and the port.\n && a.host === b.host\n && a.pathname === b.pathname\n && a.hash === b.hash\n && areSearchParamsEqual(a.searchParams, b.searchParams));\n}\n/**\n * Whether the search params passed are equal in value.\n *\n * @note\n * Order is not significant, matching how the other unordered collections in the library are\n * compared. Repeated keys are, so this is a comparison of multisets rather than of sets:\n * `a=1&a=2` is equal to `a=2&a=1`, but not to `a=1&a=1`.\n */\nfunction areSearchParamsEqual(a, b) {\n const serializedA = a.toString();\n const serializedB = b.toString();\n // Identical serializations are equal under any ordering, and this is by far the common case, so\n // it is worth checking before sorting anything.\n return serializedA === serializedB || sortSearchParams(serializedA) === sortSearchParams(serializedB);\n}\n/**\n * Reorder a serialized query string so that params holding the same pairs compare as equal\n * regardless of the order they appear in.\n *\n * @note\n * The serializer percent-encodes `&` and `=` wherever they appear inside a name or a value, so\n * splitting on `&` recovers exactly the pairs and nothing else.\n */\nfunction sortSearchParams(serialized) {\n return serialized.split('&').sort().join('&');\n}\nfunction isPropertyEqual(a, b, state, property) {\n if ((property === REACT_OWNER || property === PREACT_OWNER || property === PREACT_VNODE)\n && (a.$$typeof || b.$$typeof)) {\n return true;\n }\n return hasOwn(b, property) && state.equals(a[property], b[property], property, property, a, b, state);\n}\n\nconst toString = Object.prototype.toString;\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nfunction createEqualityComparator(config) {\n const supportedComparatorMap = createSupportedComparatorMap(config);\n const { areArraysEqual, areDatesEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, areRegExpsEqual, areSetsEqual, getUnsupportedCustomComparator, } = config;\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a, b, state) {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n // If either of the items are nullish and fail the strictly equal check\n // above, then they must be unequal.\n if (a == null || b == null) {\n return false;\n }\n const type = typeof a;\n if (type !== typeof b) {\n return false;\n }\n if (type !== 'object') {\n if (type === 'number' || type === 'bigint') {\n return areNumbersEqual(a, b, state);\n }\n if (type === 'function') {\n return areFunctionsEqual(a, b, state);\n }\n // If a primitive value that is not strictly equal, it must be unequal.\n return false;\n }\n const constructor = a.constructor;\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is creating a subclass from a native class, it will be\n // handled with the string tag comparison.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n if (constructor === Array) {\n return areArraysEqual(a, b, state);\n }\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n if (constructor === Promise) {\n // Avoid tag checks for promise values, since we know if they are not referentially equal\n // then they are not equal.\n return false;\n }\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` in edge cases.\n if (Array.isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n // Since this is a custom object, capture the string tag to determining its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = toString.call(a);\n const supportedComparator = supportedComparatorMap[tag];\n if (supportedComparator) {\n return supportedComparator(a, b, state);\n }\n const unsupportedCustomComparator = getUnsupportedCustomComparator && getUnsupportedCustomComparator(a, b, state, tag);\n if (unsupportedCustomComparator) {\n return unsupportedCustomComparator(a, b, state);\n }\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n/**\n * Create the configuration object used for building comparators.\n */\nfunction createEqualityComparatorConfig({ circular, createCustomConfig, strict, }) {\n let config = {\n areArrayBuffersEqual,\n areArraysEqual: strict ? areObjectsEqualStrict : areArraysEqual,\n areDataViewsEqual,\n areDatesEqual: areDatesEqual,\n // `Error` subclasses routinely carry their own enumerable properties (`status`, `code`, ...),\n // which the error comparator alone does not see, so it is composed with the object comparator.\n // `name` / `message` / `stack` are own but not enumerable, which is why errors need a\n // comparator of their own rather than being treated as plain objects in the first place.\n areErrorsEqual: strict\n ? combineComparators(areErrorsEqual, areObjectsEqualStrict)\n : combineComparators(areErrorsEqual, areObjectsEqual),\n areFunctionsEqual: strictEqual,\n areMapsEqual: strict ? combineComparators(areMapsEqual, areObjectsEqualStrict) : areMapsEqual,\n areNumbersEqual: sameValueEqual,\n areObjectsEqual: strict ? areObjectsEqualStrict : areObjectsEqual,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqual,\n areRegExpsEqual: areRegExpsEqual,\n areSetsEqual: strict ? combineComparators(areSetsEqual, areObjectsEqualStrict) : areSetsEqual,\n areTypedArraysEqual: strict\n ? combineComparators(areTypedArraysEqual, areObjectsEqualStrict)\n : areTypedArraysEqual,\n areUrlsEqual: areUrlsEqual,\n getUnsupportedCustomComparator: undefined,\n };\n if (createCustomConfig) {\n config = Object.assign({}, config, createCustomConfig(config));\n }\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n // Errors are included because comparing `cause` and own properties by value means an error\n // that references itself would otherwise recurse without bound.\n const areErrorsEqual = createIsCircular(config.areErrorsEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n config = Object.assign({}, config, {\n areArraysEqual,\n areErrorsEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n return config;\n}\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nfunction createInternalEqualityComparator(compare) {\n return function (a, b, _indexOrKeyA, _indexOrKeyB, _parentA, _parentB, state) {\n return compare(a, b, state);\n };\n}\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nfunction createIsEqual({ circular, comparator, createState, equals, strict }) {\n if (createState) {\n return function isEqual(a, b) {\n const { cache = circular ? new WeakMap() : undefined, meta } = createState();\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n });\n };\n }\n if (circular) {\n return function isEqual(a, b) {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined,\n strict,\n });\n };\n }\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n };\n return function isEqual(a, b) {\n return comparator(a, b, state);\n };\n}\n/**\n * Create a map of `toString()` values to their respective handlers for `tag`-based lookups.\n */\nfunction createSupportedComparatorMap({ areArrayBuffersEqual, areArraysEqual, areDataViewsEqual, areDatesEqual, areErrorsEqual, areFunctionsEqual, areMapsEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, areUrlsEqual, }) {\n return {\n '[object Arguments]': areObjectsEqual,\n '[object Array]': areArraysEqual,\n '[object ArrayBuffer]': areArrayBuffersEqual,\n '[object AsyncGeneratorFunction]': areFunctionsEqual,\n '[object BigInt]': arePrimitiveWrappersEqual,\n '[object BigInt64Array]': areTypedArraysEqual,\n '[object BigUint64Array]': areTypedArraysEqual,\n '[object Boolean]': arePrimitiveWrappersEqual,\n '[object DataView]': areDataViewsEqual,\n '[object Date]': areDatesEqual,\n // If an error tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n '[object Error]': areErrorsEqual,\n '[object Float16Array]': areTypedArraysEqual,\n '[object Float32Array]': areTypedArraysEqual,\n '[object Float64Array]': areTypedArraysEqual,\n '[object Function]': areFunctionsEqual,\n '[object GeneratorFunction]': areFunctionsEqual,\n '[object Int8Array]': areTypedArraysEqual,\n '[object Int16Array]': areTypedArraysEqual,\n '[object Int32Array]': areTypedArraysEqual,\n '[object Map]': areMapsEqual,\n '[object Number]': arePrimitiveWrappersEqual,\n '[object Object]': (a, b, state) => \n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n typeof a.then !== 'function' && typeof b.then !== 'function' && areObjectsEqual(a, b, state),\n // For RegExp, the properties are not enumerable, and therefore will give false positives if\n // tested like a standard object.\n '[object RegExp]': areRegExpsEqual,\n '[object Set]': areSetsEqual,\n '[object String]': arePrimitiveWrappersEqual,\n '[object URL]': areUrlsEqual,\n '[object Uint8Array]': areTypedArraysEqual,\n '[object Uint8ClampedArray]': areTypedArraysEqual,\n '[object Uint16Array]': areTypedArraysEqual,\n '[object Uint32Array]': areTypedArraysEqual,\n };\n}\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nconst deepEqual = createCustomEqual();\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nconst strictDeepEqual = createCustomEqual({ strict: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nconst circularDeepEqual = createCustomEqual({ circular: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nconst shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nconst strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nconst circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n strict: true,\n});\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nfunction createCustomEqual(options = {}) {\n const { circular = false, createInternalComparator: createCustomInternalComparator, createState, strict = false, } = options;\n const config = createEqualityComparatorConfig(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n\nexport { circularDeepEqual, circularShallowEqual, createCustomEqual, deepEqual, sameValueEqual, sameValueZeroEqual, shallowEqual, strictCircularDeepEqual, strictCircularShallowEqual, strictDeepEqual, strictEqual, strictShallowEqual };\n","import { createCustomEqual } from 'fast-equals';\n/** Implements a deep equals using `fast-equals.createCustomEqual`. Functions\n * are always considered equal, and circular references are tracked to avoid\n * infinite recursion on self-referential inputs.\n *\n * @param a - The first element to compare\n * @param b - The second element to compare\n * @returns - True if the `a` and `b` are deeply equal, false otherwise\n */\nconst deepEquals = createCustomEqual({\n circular: true,\n createCustomConfig: () => ({\n areFunctionsEqual(_a, b) {\n return typeof b === 'function';\n },\n }),\n});\nexport default deepEquals;\n//# sourceMappingURL=deepEquals.js.map","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/** @type {(value: string) => boolean} */\nconst isPort = RegExp.prototype.test.bind(/^\\d*$/u)\n\n/** @type {(value: string) => boolean} */\nconst isHexPair = RegExp.prototype.test.bind(/^[\\da-f]{2}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isUnreserved = RegExp.prototype.test.bind(/^[\\da-z\\-._~]$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:]$/u)\n\n/**\n * @param {Array} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/** @type {(value: string) => boolean} */\nconst isHextet = RegExp.prototype.test.bind(/^[\\dA-Fa-f]{1,4}$/)\n\n/** @type {(value: string) => boolean} */\nconst isIPvFuture = RegExp.prototype.test.bind(/^[vV][\\dA-Fa-f]+\\.[A-Za-z\\d\\-._~!$&'()*+,;=:]+$/)\n\n/** @type {(value: string) => boolean} */\nconst isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\\d\\-._~]$/)\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/** @type {(value: string) => boolean} */\nconst nonSimpleDomainChars = RegExp.prototype.test.bind(/[^\\d!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/** @type {(value: string) => boolean} */\nconst numericLastLabel = RegExp.prototype.test.bind(/(?:^|\\.)\\d+$/u)\n\n/**\n * True when `new URL('http://' + domain).hostname` may differ from `domain`,\n * i.e. when the caller must fall back to the WHATWG parser.\n *\n * Same purpose as `nonSimpleDomain`, but digits are allowed: for this character\n * set `hostname` is the identity, *except* that an all-numeric final label is\n * read as IPv4 shorthand (\"1.2.3\" -> \"1.2.0.3\", \"127.1\" -> \"127.0.0.1\",\n * \"a.b.1\" throws), which is why `nonSimpleDomain` excludes digits outright.\n * Rejecting that one shape lets the common `mail2.example.org` case stay on the\n * fast path.\n *\n * @param {string} domain - must already be lowercased\n * @returns {boolean}\n */\nfunction nonSimpleMailtoDomain (domain) {\n return nonSimpleDomainChars(domain) || numericLastLabel(domain)\n}\n\n/**\n * @param {string} zone\n * @returns {boolean}\n */\nfunction isZoneIdentifier (zone) {\n if (zone.length === 0) return false\n\n for (let i = 0; i < zone.length; i++) {\n if (isZoneCharacter(zone[i])) continue\n if (zone[i] === '%' && i + 2 < zone.length && isHexPair(zone.slice(i + 1, i + 3))) {\n i += 2\n continue\n }\n return false\n }\n\n return true\n}\n\n/**\n * Compresses the longest run of zero hextets to \"::\" per RFC 5952. A run of a\n * single zero hextet is left uncompressed. On ties the leftmost run wins.\n *\n * @param {string[]} hextets\n * @returns {string}\n */\nfunction compressIPv6ZeroRun (hextets) {\n let bestStart = -1\n let bestLength = 0\n let runStart = -1\n let runLength = 0\n for (let i = 0; i < hextets.length; i++) {\n if (hextets[i] === '0') {\n if (runStart === -1) runStart = i\n runLength++\n if (runLength > bestLength) {\n bestLength = runLength\n bestStart = runStart\n }\n } else {\n runStart = -1\n runLength = 0\n }\n }\n\n if (bestLength < 2) return hextets.join(':')\n\n const head = hextets.slice(0, bestStart).join(':')\n const tail = hextets.slice(bestStart + bestLength).join(':')\n return head + '::' + tail\n}\n\n/**\n * Validates an IPv6 address against the alternatives in RFC 3986 section\n * 3.2.2 and returns the same address with leading hextet zeroes removed.\n * An embedded IPv4 address counts as two hextets and is only valid at the end.\n *\n * @param {string} input\n * @returns {string|undefined}\n */\nfunction normalizeIPv6Address (input) {\n const compression = input.indexOf('::')\n if (compression !== -1 && input.indexOf('::', compression + 1) !== -1) return undefined\n\n const left = compression === -1 ? input.split(':') : input.slice(0, compression).split(':')\n const right = compression === -1 ? [] : input.slice(compression + 2).split(':')\n if (compression !== -1) {\n if (left.length === 1 && left[0] === '') left.length = 0\n if (right.length === 1 && right[0] === '') right.length = 0\n }\n\n const parts = left.concat(right)\n let hextetCount = 0\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part === '') return undefined\n\n if (part.indexOf('.') !== -1) {\n if (i !== parts.length - 1 || (compression !== -1 && right.length === 0) || !isIPv4(part)) return undefined\n hextetCount += 2\n continue\n }\n\n if (!isHextet(part)) return undefined\n parts[i] = parseInt(part, 16).toString(16)\n hextetCount++\n }\n\n if (compression === -1) {\n if (hextetCount !== 8) return undefined\n return compressIPv6ZeroRun(parts)\n }\n if (hextetCount >= 8) return undefined\n\n // expand \"::\" then re-compress the longest run for a canonical result\n const expanded = parts.slice(0, left.length)\n for (let i = hextetCount; i < 8; i++) expanded.push('0')\n for (let i = left.length; i < parts.length; i++) expanded.push(parts[i])\n return compressIPv6ZeroRun(expanded)\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n * @property {boolean} [isIPVFuture] - Indicates if the host is an IPvFuture literal.\n * @property {boolean} [error] - Indicates if a bracketed IP literal is malformed.\n */\n\n/**\n * Validates and normalizes a bracketed IP literal. Raw zone separators remain\n * accepted for backwards compatibility, while encoded separators and zone\n * contents follow RFC 6874.\n *\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n const bracketed = host[0] === '[' && host[host.length - 1] === ']'\n const hasBracket = host[0] === '[' || host[host.length - 1] === ']'\n if (hasBracket && !bracketed) return { host, isIPV6: false, error: true }\n\n let input = bracketed ? host.slice(1, -1) : host\n if (bracketed && isIPvFuture(input)) {\n input = input.toLowerCase()\n return { host: `[${input}]`, escapedHost: input, isIPV6: false, isIPVFuture: true }\n }\n\n if (findToken(input, ':') < 2) {\n return { host, isIPV6: false, error: bracketed }\n }\n\n let zoneIdentifier = ''\n const zoneSeparator = input.indexOf('%')\n if (zoneSeparator !== -1) {\n const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === '%25' ? 3 : 1\n zoneIdentifier = input.slice(zoneSeparator + separatorLength)\n if (!isZoneIdentifier(zoneIdentifier)) return { host, isIPV6: false, error: true }\n input = input.slice(0, zoneSeparator)\n }\n\n const address = normalizeIPv6Address(input)\n if (address === undefined) return { host, isIPV6: false, error: true }\n\n return {\n host: address + (zoneIdentifier ? '%' + zoneIdentifier : ''),\n escapedHost: address + (zoneIdentifier ? '%25' + zoneIdentifier : ''),\n isIPV6: true\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * Re-escape RFC 3986 gen-delims that must not appear literally in the host.\n * After the URI regex parses, these characters cannot be literal in the host\n * field, so any that appear after decoding came from percent-encoding and\n * must be restored to prevent authority structure changes.\n *\n * @param {string} host\n * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)\n * @returns {string}\n */\nconst HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' }\nconst HOST_DELIM_RE = /[@/?#:]/g\nconst HOST_DELIM_NO_COLON_RE = /[@/?#]/g\n\nfunction reescapeHostDelimiters (host, isIP) {\n const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE\n re.lastIndex = 0\n return host.replace(re, (ch) => HOST_DELIMS[ch])\n}\n\n/**\n * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.\n * Reserved delimiters such as `%2F` stay escaped; `%2E` is unreserved.\n *\n * @param {string} input\n * @param {boolean} [decodeUnreserved=false]\n * @returns {string}\n */\nfunction normalizePercentEncoding (input, decodeUnreserved = false) {\n if (input.indexOf('%') === -1) {\n return input\n }\n\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decodeUnreserved && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n output += input[i]\n }\n\n return output\n}\n\n/** Pre-built `%XX` strings for every byte. Avoids per-call hex math/concat. */\nconst BYTE_HEX = new Array(256)\n{\n const HEX_DIGITS = '0123456789ABCDEF'\n for (let i = 0; i < 256; i++) {\n BYTE_HEX[i] = '%' + HEX_DIGITS[i >> 4] + HEX_DIGITS[i & 0xF]\n }\n}\n\n/**\n * Mirrors the pass-through set of the deprecated `escape()` global:\n * `A-Z a-z 0-9 * + - . / @ _`. Keeps drop-in semantics for ASCII input.\n *\n * @param {number} cp\n * @returns {boolean}\n */\nfunction isEscapeSafe (cp) {\n return (\n (cp >= 0x30 && cp <= 0x39) ||\n (cp >= 0x41 && cp <= 0x5A) ||\n (cp >= 0x61 && cp <= 0x7A) ||\n cp === 0x2A || cp === 0x2B || cp === 0x2D || cp === 0x2E ||\n cp === 0x2F || cp === 0x40 || cp === 0x5F\n )\n}\n\n/**\n * RFC 3986 percent-encode a non-ASCII Unicode code point as UTF-8 bytes.\n * Caller handles the ASCII branch inline for speed.\n *\n * @param {number} cp - Unicode code point (>= 0x80, <= 0x10FFFF)\n * @returns {string}\n */\nfunction percentEncodeNonAscii (cp) {\n if (cp < 0x800) {\n return BYTE_HEX[0xC0 | (cp >> 6)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n if (cp < 0x10000) {\n return BYTE_HEX[0xE0 | (cp >> 12)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n return BYTE_HEX[0xF0 | (cp >> 18)] +\n BYTE_HEX[0x80 | ((cp >> 12) & 0x3F)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n}\n\n/**\n * Normalizes path data without turning reserved escapes into live path syntax.\n * Valid escapes are uppercased, raw unsafe characters are escaped, and only\n * unreserved bytes that are not `.` are decoded.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizePathEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decoded !== '.' && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isPathCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Serializes a path without rewriting reserved data. Raw RFC 3986 path\n * characters remain literal, valid escapes are preserved and uppercased, and\n * everything else is UTF-8 percent-encoded. In a path-noscheme, a colon in the\n * first segment must be escaped so the result cannot be parsed as a scheme.\n *\n * @param {string} input\n * @param {boolean} [pathNoScheme=false]\n * @returns {string}\n */\nfunction serializePathEncoding (input, pathNoScheme = false) {\n let output = ''\n let firstSegment = pathNoScheme && input[0] !== '/'\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (ch === '/') {\n firstSegment = false\n }\n\n if (isPathCharacter(ch) && (ch !== ':' || !firstSegment)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Normalizes the percent-encoding of a query or fragment component.\n *\n * Like `normalizePathEncoding`, but uses the query/fragment character set\n * (which additionally allows `?`) and decodes `.` since it has no dot-segment\n * meaning outside of a path.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeQueryFragmentEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isQueryFragmentCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Percent-encodes a URI component using its RFC 3986 literal character set.\n * Existing valid escapes are preserved and normalized to uppercase hex.\n *\n * @param {string} input\n * @param {(value: string) => boolean} isAllowed\n * @returns {string}\n */\nfunction encodeComponent (input, isAllowed) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (isAllowed(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Encodes userinfo while preserving its RFC 3986 §3.2.1 literal characters.\n * In particular, authority delimiters such as `@`, `/`, `?`, and `#` are data.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeUserinfo (input) {\n return encodeComponent(input, isUserinfoCharacter)\n}\n\n/**\n * Encodes query data using the RFC 3986 §3.4 grammar. A literal `#` must be\n * escaped because it would otherwise begin the fragment component.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeQuery (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\n/**\n * Encodes fragment data using the RFC 3986 §3.5 grammar.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeFragment (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\n/**\n * Escapes a component while preserving existing valid percent escapes.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction escapePreservingEscapes (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n\n return output\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(encodeUserinfo(component.userinfo))\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = component.host\n if (!isIPv4(host)) {\n let ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {\n // Decode only unreserved bytes, once. In particular, keep %25 encoded\n // so it cannot introduce a second escape during recomposition.\n host = normalizePercentEncoding(host, true)\n ipV6res = normalizeIPv6(host)\n }\n if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = reescapeHostDelimiters(host, false)\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n const port = String(component.port)\n if (!isPort(port)) {\n throw new TypeError('URI port is malformed.')\n }\n uriTokens.push(':')\n uriTokens.push(port)\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n BYTE_HEX,\n percentEncodeNonAscii,\n nonSimpleDomain,\n nonSimpleMailtoDomain,\n recomposeAuthority,\n reescapeHostDelimiters,\n normalizePercentEncoding,\n normalizePathEncoding,\n serializePathEncoding,\n normalizeQueryFragmentEncoding,\n encodeUserinfo,\n encodeQuery,\n encodeFragment,\n escapePreservingEscapes,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID, BYTE_HEX, percentEncodeNonAscii, nonSimpleMailtoDomain } = require('./utils')\nconst URN_REG = /^([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-./:;=@]|%[\\da-f]{2})+)$/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid', 'mailto'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const queryIndex = wsComponent.resourceName.indexOf('?')\n const path = queryIndex === -1\n ? wsComponent.resourceName\n : wsComponent.resourceName.slice(0, queryIndex)\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = queryIndex === -1\n ? undefined\n : wsComponent.resourceName.slice(queryIndex + 1)\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches && matches[0] === urnComponent.path) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\n/**\n * Allow-sets for `encodeWithAllow`, each a `{ all, table, allowNonAscii }`\n * descriptor built by `allowSet`:\n *\n * - `LOCAL_PART` is the intersection of upstream uri-js's VCHAR and\n * NOT_PATH_NOSCHEME, minus \",\": the serializer joins recipients with \",\" and\n * `mailtoParse` splits the path on it, so a comma left literal inside a local\n * part would silently become a recipient delimiter.\n * - `HFNAME` is the qchar allow-set used for header names/values.\n * - `DTEXT` is RFC 6068 dtext-no-obs restricted to characters that are also\n * safe in a URI path; `DTEXT_IRI` additionally permits non-ASCII for\n * `unicodeSupport`.\n */\nconst LOCAL_PART_ALLOWED = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+=\"\nconst HFNAME_ALLOWED = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+,;:@\"\nconst DTEXT_ALLOWED = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+;:\"\n\n/**\n * @typedef {Object} AllowSet\n * @property {RegExp} all - matches a whole string needing no encoding at all.\n * @property {Uint8Array} table - per-ASCII-code allow lookup for the slow path.\n * @property {boolean} allowNonAscii - pass non-ASCII code points through (IRI).\n */\n\n/**\n * `all` deliberately excludes \"%\" and (for the IRI variant) surrogates, so any\n * input needing escape normalization or surrogate repair falls to the slow path.\n *\n * @param {string} chars\n * @param {boolean} [allowNonAscii=false]\n * @returns {AllowSet}\n */\nfunction allowSet (chars, allowNonAscii = false) {\n const table = new Uint8Array(128)\n for (let i = 0; i < chars.length; i++) {\n table[chars.charCodeAt(i)] = 1\n }\n const escaped = chars.replace(/[\\\\\\]^-]/gu, '\\\\$&')\n const cls = allowNonAscii ? `[${escaped}]|[^\\\\0-\\\\x7F\\\\uD800-\\\\uDFFF]` : `[${escaped}]`\n return { all: new RegExp(`^(?:${cls})*$`, 'u'), table, allowNonAscii }\n}\n\nconst LOCAL_PART = allowSet(LOCAL_PART_ALLOWED)\nconst HFNAME = allowSet(HFNAME_ALLOWED)\nconst DTEXT = allowSet(DTEXT_ALLOWED)\nconst DTEXT_IRI = allowSet(DTEXT_ALLOWED, true)\n\nconst HEX_PAIR = /^[\\da-f]{2}$/iu\nconst MAILTO_DOMAIN_LITERAL = /^\\[[\\x21-\\x5A\\x5E-\\x7E]*\\]$/u\nconst MAILTO_DOMAIN_ERROR = 'URI mailto has an invalid recipient domain.'\nconst HAS_SURROGATE = /[\\uD800-\\uDFFF]/u\n\n/**\n * @param {string} str\n * @returns {string}\n */\nfunction decodeHex (str) {\n if (typeof str !== 'string' || str.indexOf('%') === -1) {\n return str\n }\n try {\n return decodeURIComponent(str)\n } catch {\n return str\n }\n}\n\n/**\n * Replaces lone surrogates with U+FFFD, leaving valid pairs intact. Only called\n * when `HAS_SURROGATE` matched, so the scan cost is not on the common path.\n * (`String.prototype.toWellFormed` would do this natively but is Node 20+.)\n *\n * @param {string} input\n * @returns {string}\n */\nfunction replaceLoneSurrogates (input) {\n let result = ''\n for (let i = 0; i < input.length; i++) {\n const code = input.charCodeAt(i)\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n result += input[i] + input[i + 1]\n i++\n continue\n }\n }\n result += (code >= 0xD800 && code <= 0xDFFF) ? '\\uFFFD' : input[i]\n }\n return result\n}\n\n/**\n * Percent-encodes everything outside `set`, preserving existing valid escapes\n * (uppercased) and repairing lone surrogates.\n *\n * ASCII uses `BYTE_HEX` rather than `encodeURIComponent`. That is equivalent\n * only because every character `encodeURIComponent` leaves unescaped\n * (`A-Za-z0-9-_.!~*'()`) is present in all of the allow-sets above, so no such\n * character ever reaches the encode branch. Re-check if a set is narrowed.\n *\n * @param {string} input\n * @param {AllowSet} set\n * @returns {string}\n */\nfunction encodeWithAllow (input, set) {\n if (set.all.test(input)) {\n return input\n }\n\n const table = set.table\n let result = ''\n for (let i = 0; i < input.length; i++) {\n const code = input.charCodeAt(i)\n\n if (code < 0x80) {\n if (table[code] === 1) {\n result += input[i]\n } else if (code === 0x25 && i + 2 < input.length && HEX_PAIR.test(input.slice(i + 1, i + 3))) {\n result += '%' + input.slice(i + 1, i + 3).toUpperCase()\n i += 2\n } else {\n result += BYTE_HEX[code]\n }\n continue\n }\n\n if (code < 0xD800 || code > 0xDFFF) {\n result += set.allowNonAscii ? input[i] : percentEncodeNonAscii(code)\n continue\n }\n\n if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n result += set.allowNonAscii\n ? input[i] + input[i + 1]\n : percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n continue\n }\n }\n\n result += set.allowNonAscii ? '\\uFFFD' : percentEncodeNonAscii(0xFFFD)\n }\n return result\n}\n\n/**\n * @param {string} domain\n * @param {import('../types/index').Options} [options]\n * @param {{error?:string}} [component]\n * @returns {string}\n */\nfunction mailtoNormalizeDomain (domain, options, component) {\n const normalizedDomain = String(domain).toLowerCase()\n\n if (MAILTO_DOMAIN_LITERAL.test(normalizedDomain)) {\n return normalizedDomain\n }\n\n // `hostname` is the identity for these, so skip constructing a WHATWG URL.\n if (normalizedDomain !== '' && !nonSimpleMailtoDomain(normalizedDomain)) {\n return normalizedDomain\n }\n\n try {\n const parsedDomain = new URL('http://' + normalizedDomain)\n if (\n parsedDomain.username ||\n parsedDomain.password ||\n parsedDomain.port ||\n parsedDomain.pathname !== '/' ||\n parsedDomain.search ||\n parsedDomain.hash ||\n !parsedDomain.hostname\n ) {\n throw new Error(MAILTO_DOMAIN_ERROR)\n }\n\n return options && options.unicodeSupport\n ? normalizedDomain\n : parsedDomain.hostname\n } catch {\n if (component) {\n component.error = component.error || MAILTO_DOMAIN_ERROR\n }\n return normalizedDomain\n }\n}\n\n/**\n * Percent-encodes everything in a recipient domain that is not `dtext-no-obs`\n * (RFC 6068). Serialize-only: `mailtoNormalizeDomain` returns the domain\n * verbatim when validation fails, and `MAILTO_DOMAIN_LITERAL` accepts the full\n * RFC 5321 dcontent range (which includes \"?\", \"#\", \"&\" and \"/\"), so without\n * this an attacker-supplied recipient could inject header fields or a fragment\n * into the serialized URI. `mailtoParse` deliberately reports the raw domain\n * instead, so it must not use this.\n * @param {string} domain\n * @param {import('../types/index').Options} [options]\n * @returns {string}\n */\nfunction mailtoEncodeDomain (domain, options) {\n const set = options && options.unicodeSupport ? DTEXT_IRI : DTEXT\n\n // Keep the delimiters of a domain literal, encode its contents.\n if (domain.length > 1 && domain[0] === '[' && domain[domain.length - 1] === ']') {\n return '[' + encodeWithAllow(domain.slice(1, -1), set) + ']'\n }\n\n return encodeWithAllow(domain, set)\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\nfunction mailtoParse (component, options) {\n const mailtoComponent = component\n\n // The handler sets `skipNormalize`, so path and query arrive raw. Everything\n // here goes through `decodeHex`, which subsumes the generic normalizers --\n // except that they also fold lone surrogates to U+FFFD, so do that here.\n let rawPath = mailtoComponent.path\n let rawQuery = mailtoComponent.query\n if (rawPath && HAS_SURROGATE.test(rawPath)) rawPath = replaceLoneSurrogates(rawPath)\n if (rawQuery && HAS_SURROGATE.test(rawQuery)) rawQuery = replaceLoneSurrogates(rawQuery)\n\n const to = rawPath\n ? (rawPath.indexOf(',') === -1 ? [rawPath] : rawPath.split(','))\n : []\n mailtoComponent.path = undefined\n\n if (rawQuery) {\n // Null prototype: header names come from untrusted input, so `headers[name]`\n // must not resolve to inherited members (\"constructor\", \"toString\", ...),\n // and \"__proto__\" has to land as a plain own property instead of hitting\n // Object.prototype's setter and being silently dropped. Allocated lazily so\n // the common subject/body-only URI does not pay for it.\n /** @type {Record|null} */\n let headers = null\n let start = 0\n while (start <= rawQuery.length) {\n let end = rawQuery.indexOf('&', start)\n if (end === -1) end = rawQuery.length\n const token = rawQuery.slice(start, end)\n start = end + 1\n\n const eqIdx = token.indexOf('=')\n if (eqIdx !== token.lastIndexOf('=')) {\n mailtoComponent.error = mailtoComponent.error || 'URI mailto has malformed header fields.'\n continue\n }\n const name = eqIdx === -1 ? token : token.slice(0, eqIdx)\n const value = eqIdx === -1 ? '' : token.slice(eqIdx + 1)\n if (name === 'to') {\n const addrs = value.split(',')\n for (let j = 0; j < addrs.length; j++) to.push(addrs[j])\n continue\n }\n if (name === 'subject') {\n mailtoComponent.subject = decodeHex(value)\n continue\n }\n if (name === 'body') {\n mailtoComponent.body = decodeHex(value)\n continue\n }\n if (headers === null) headers = /** @type {Record} */ (Object.create(null))\n headers[decodeHex(name)] = decodeHex(value)\n }\n if (headers !== null) mailtoComponent.headers = headers\n }\n\n mailtoComponent.query = undefined\n\n for (let i = 0; i < to.length; i++) {\n const rawAddr = to[i]\n const atIdx = rawAddr.lastIndexOf('@')\n if (atIdx < 0) {\n mailtoComponent.error = mailtoComponent.error || MAILTO_DOMAIN_ERROR\n to[i] = decodeHex(rawAddr)\n continue\n }\n const local = decodeHex(rawAddr.slice(0, atIdx))\n const domain = mailtoNormalizeDomain(decodeHex(rawAddr.slice(atIdx + 1)), options, mailtoComponent)\n to[i] = local + '@' + domain\n }\n\n if (to.length) mailtoComponent.to = to\n\n return mailtoComponent\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\nfunction mailtoSerialize (component, options) {\n const mailtoComponent = component\n const to = Array.isArray(mailtoComponent.to) ? mailtoComponent.to.slice() : []\n if (to.length) {\n for (let i = 0; i < to.length; i++) {\n const addr = String(to[i])\n const atIdx = addr.lastIndexOf('@')\n const rawLocal = atIdx >= 0 ? addr.slice(0, atIdx) : addr\n const rawDomain = atIdx >= 0 ? addr.slice(atIdx + 1) : ''\n const local = encodeWithAllow(rawLocal, LOCAL_PART)\n const decodedDomain = decodeHex(rawDomain)\n // `component` is intentionally not passed: index.js's `serialize` writes\n // the error onto a private copy and returns only a string, so an error\n // recorded here would be unreachable. Safety comes from encoding instead.\n const normalizedDomain = mailtoNormalizeDomain(decodedDomain, options)\n to[i] = local + '@' + mailtoEncodeDomain(normalizedDomain, options)\n }\n // Every recipient is now fully encoded and only the joining commas are\n // literal, so bypass index.js's generic encoder, whose allow-set is\n // narrower than upstream's and would over-encode.\n mailtoComponent.path = to.join(',')\n options.skipEscape = true\n } else {\n // No recipients: drop any caller-supplied path, matching upstream uri-js.\n // `to` is the only recipient source, and `mailtoParse` always moves the\n // path into it, so a mailto component never legitimately carries one.\n mailtoComponent.path = undefined\n }\n\n const headers = mailtoComponent.headers && typeof mailtoComponent.headers === 'object'\n ? Object.assign(Object.create(null), mailtoComponent.headers)\n : Object.create(null)\n\n if (mailtoComponent.subject) headers.subject = mailtoComponent.subject\n if (mailtoComponent.body) headers.body = mailtoComponent.body\n mailtoComponent.headers = headers\n\n // `headers` has a null prototype and was filled via Object.assign, so every\n // enumerable key is an own property and no hasOwnProperty guard is needed.\n let query = ''\n let count = 0\n for (const name in headers) {\n if (count++ !== 0) query += '&'\n query += encodeWithAllow(name, HFNAME) + '=' + encodeWithAllow(String(headers[name]), HFNAME)\n }\n\n if (count !== 0) {\n mailtoComponent.query = query\n } else {\n mailtoComponent.headers = undefined\n }\n\n return mailtoComponent\n}\n\nconst mailto = /** @type {SchemeHandler} */ ({\n scheme: 'mailto',\n parse: mailtoParse,\n serialize: mailtoSerialize,\n domainHost: false,\n unicodeSupport: true,\n // `mailtoParse` re-derives every component from the raw path/query via\n // `decodeHex`, which subsumes the generic normalizers, so running them first\n // is wasted work (~28% of parsing a URI with header fields).\n skipNormalize: true,\n // A recipient list has no dot segments to remove, and `removeDotSegments`\n // would rewrite a \"./\"-prefixed local part.\n absolutePath: true\n})\n\nconst SCHEMES = /** @type {Record} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid,\n mailto\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\nconst VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u\nconst MALFORMED_SCHEME_ERROR = 'URI scheme is malformed.'\n\n/**\n * @param {string} scheme\n * @returns {string}\n */\nfunction decodeValidScheme (scheme) {\n const decodedScheme = unescape(String(scheme))\n if (!VALID_SCHEME.test(decodedScheme)) {\n throw new TypeError(MALFORMED_SCHEME_ERROR)\n }\n return decodedScheme\n}\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (normalizeString(uri, options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const {\n parsed: baseParsed,\n malformedAuthorityOrPort: baseMalformed,\n malformedPercentEncoding: baseMalformedPercentEncoding,\n malformedSchemeSpecific: baseMalformedSchemeSpecific,\n malformedHost: baseMalformedHost,\n malformedScheme: baseMalformedScheme\n } = parseWithStatus(baseURI, schemelessOptions)\n const {\n parsed: relativeParsed,\n malformedAuthorityOrPort: relativeMalformed,\n malformedPercentEncoding: relativeMalformedPercentEncoding,\n malformedSchemeSpecific: relativeMalformedSchemeSpecific,\n malformedHost: relativeMalformedHost,\n malformedScheme: relativeMalformedScheme\n } = parseWithStatus(relativeURI, schemelessOptions)\n if (\n baseMalformed ||\n relativeMalformed ||\n baseMalformedPercentEncoding ||\n relativeMalformedPercentEncoding ||\n baseMalformedSchemeSpecific ||\n relativeMalformedSchemeSpecific ||\n baseMalformedHost ||\n relativeMalformedHost ||\n baseMalformedScheme ||\n relativeMalformedScheme\n ) {\n throw new Error(baseParsed.error || relativeParsed.error || 'URI is malformed.')\n }\n const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true)\n const resolvedSchemeHandler = getSchemeHandler((options && options.scheme) || resolved.scheme)\n const resolvedHost = resolved.host\n const resolvedHostIsIP = resolvedHost !== undefined && resolvedHost !== '' &&\n (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6)\n canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP)\n // Percent escapes in an ASCII reg-name are encoded data. The WHATWG hostname\n // parser can reject them even though fast-uri preserves them safely as RFC\n // 3986 data. A raw non-ASCII host must still fail closed if conversion fails.\n const encodedASCIIHost = resolvedHost && resolvedHost.indexOf('%') !== -1 &&\n !/\\P{ASCII}/u.test(resolvedHost)\n if (resolved.error && !encodedASCIIHost) {\n throw new Error(resolved.error)\n }\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n const normalizedA = normalizeComparableURI(uriA, options)\n const normalizedB = normalizeComparableURI(uriB, options)\n\n return normalizedA !== undefined && normalizedB !== undefined && normalizedA === normalizedB\n}\n\n/**\n * @param {Readonly} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n to: cmpts.to,\n subject: cmpts.subject,\n body: cmpts.body,\n headers: cmpts.headers,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n if (component.scheme) {\n component.scheme = decodeValidScheme(component.scheme)\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n const hasAuthority = component.userinfo !== undefined || component.host !== undefined || component.port !== undefined\n const pathNoScheme = !options.skipEscape && component.scheme === undefined && !hasAuthority\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = serializePathEncoding(component.path, pathNoScheme)\n } else {\n component.path = normalizePercentEncoding(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n // Scheme handlers may replace the scheme during serialization.\n component.scheme = decodeValidScheme(component.scheme)\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n // Dot-segment removal can expose a colon that was not originally in the\n // first segment (for example, \"./a:b\"). Reapply path-noscheme encoding so\n // the serialized relative reference cannot be reparsed as a URI scheme.\n if (pathNoScheme) {\n s = serializePathEncoding(s, true)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', encodeQuery(component.query))\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', encodeFragment(component.fragment))\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n// Captures the authority component (between \"//\" and the next \"/\", \"?\" or \"#\"),\n// with or without a scheme prefix, for the literal-backslash rejection below.\nconst AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\\/\\/([^/?#]*)/\n\n// Captures the leading authority-introducer region after an optional scheme: a\n// run of forward slashes, backslashes, and the characters the WHATWG URL parser\n// removes before parsing (TAB U+0009, LF U+000A, CR U+000D). A valid introducer\n// is exactly \"//\". Node treats \"\\\" as \"/\" on special schemes and strips those\n// characters first, so forms like \"\\\\\", \"/\\\", \"\\/\", \"//\", or a leading\n// \"//\" reach an authority in Node while fast-uri's URI_PARSE folds them into\n// the path group (host confusion / SSRF / redirect bypass).\nconst AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\\\\t\\n\\r]*)/\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {RegExpMatchArray} matches\n * @returns {string|undefined}\n */\nfunction getParseError (parsed, matches) {\n if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {\n return 'URI path must start with \"/\" when authority is present.'\n }\n\n if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {\n return 'URI port is malformed.'\n }\n\n return undefined\n}\n\n/**\n * Checks percent syntax without decoding the represented octets. RFC 3986\n * percent-encoding is byte-oriented, so sequences such as `%FF` are valid even\n * though they are not independently valid UTF-8.\n *\n * @param {string|undefined} component\n * @returns {boolean}\n */\nfunction hasMalformedPercentEncoding (component) {\n if (component === undefined) return false\n\n let percent = component.indexOf('%')\n while (percent !== -1) {\n if (percent + 2 >= component.length || !/^[\\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) {\n return true\n }\n percent = component.indexOf('%', percent + 3)\n }\n\n return false\n}\n\n/**\n * Whether the host is a bracketed IP literal (RFC 3986 `IP-literal`).\n * An unterminated `[` is not a literal, so it must still be validated as a\n * reg-name instead of being waved through as an IP.\n *\n * @param {string} host\n * @returns {boolean}\n */\nfunction isIPLiteral (host) {\n return host[0] === '[' && host[host.length - 1] === ']'\n}\n\n/**\n * @param {RegExpMatchArray} matches\n * @returns {boolean}\n */\nfunction hasMalformedComponentPercentEncoding (matches) {\n // Bracketed IP literals use a raw \"%\" as the zone separator for historical\n // compatibility. Their parsing is intentionally left to normalizeIPv6.\n const host = matches[4]\n return hasMalformedPercentEncoding(matches[3]) ||\n (host !== undefined && !isIPLiteral(host) && hasMalformedPercentEncoding(host)) ||\n hasMalformedPercentEncoding(matches[6]) ||\n hasMalformedPercentEncoding(matches[7]) ||\n hasMalformedPercentEncoding(matches[8])\n}\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {import('./types/index').Options} options\n * @param {{ domainHost?: boolean, unicodeSupport?: boolean }|undefined} schemeHandler\n * @param {boolean} isIP\n * @returns {boolean} whether host conversion failed\n */\nfunction canonicalizeHost (parsed, options, schemeHandler, isIP) {\n const bracketedIPLiteral =\n parsed.host &&\n parsed.host[0] === '[' &&\n parsed.host[parsed.host.length - 1] === ']'\n\n if (\n !options.unicodeSupport &&\n (!schemeHandler || !schemeHandler.unicodeSupport) &&\n parsed.host &&\n !isIPLiteral(parsed.host) &&\n (options.domainHost || (schemeHandler && schemeHandler.domainHost)) &&\n isIP === false &&\n !bracketedIPLiteral &&\n nonSimpleDomain(parsed.host)\n ) {\n try {\n parsed.host = new URL('http://' + parsed.host).hostname\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n return true\n }\n }\n\n return false\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction parseWithStatus (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let malformedAuthorityOrPort = false\n let malformedPercentEncoding = false\n let malformedSchemeSpecific = false\n let malformedHost = false\n let malformedIPLiteral = false\n let malformedScheme = false\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n // A literal backslash (U+005C) is not a valid RFC 3986 URI character and is\n // not an authority delimiter. Reject it in the authority rather than\n // rewriting it: normalizing \"\\\" -> \"/\" (WHATWG error recovery) could silently\n // change the resource identified by an otherwise-invalid input, and lets \"\\\"\n // act as a host delimiter here while Node's native URL parses a different\n // host (SSRF / redirect / origin-allowlist bypass). Percent-encoded %5C is\n // untouched and remains valid encoded data.\n const authorityMatch = uri.match(AUTHORITY_PREFIX)\n if (authorityMatch !== null && authorityMatch[1].indexOf('\\\\') !== -1) {\n parsed.error = 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n }\n\n // Reject a malformed or whitespace-smuggled authority introducer. fast-uri\n // only recognizes a literal \"//\"; anything else in the leading separator run\n // (a backslash, or a \"//\" that appears only after removing the TAB/LF/CR that\n // Node strips) means the authority fast-uri parses differs from the one Node's\n // URL resolves. Reject rather than rewrite, mirroring the literal-backslash\n // guard above. Percent-encoded forms (%5C, %09) are untouched, valid data.\n const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION)\n if (introducerMatch !== null) {\n const region = introducerMatch[1]\n const normalizedRegion = region.replace(/[\\t\\n\\r]/g, '')\n // Two or more leading separators introduce an authority.\n if (normalizedRegion.length >= 2) {\n if (normalizedRegion.slice(0, 2) !== '//') {\n parsed.error = parsed.error || 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n } else if (region.length !== normalizedRegion.length) {\n parsed.error = parsed.error || 'URI authority introducer must not contain whitespace.'\n malformedAuthorityOrPort = true\n }\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n if (parsed.scheme !== undefined) {\n const decodedScheme = unescape(parsed.scheme)\n if (VALID_SCHEME.test(decodedScheme)) {\n parsed.scheme = decodedScheme.toLowerCase()\n } else {\n parsed.error = parsed.error || MALFORMED_SCHEME_ERROR\n malformedScheme = true\n }\n }\n\n malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches)\n if (malformedPercentEncoding) {\n parsed.error = parsed.error || 'URI contains malformed percent-encoding.'\n }\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n\n const parseError = getParseError(parsed, matches)\n if (parseError !== undefined) {\n parsed.error = parsed.error || parseError\n malformedAuthorityOrPort = true\n }\n\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const bracketedIPLiteral = isIPLiteral(parsed.host)\n const hasIPLiteralBracket = parsed.host.indexOf('[') !== -1 || parsed.host.indexOf(']') !== -1\n const ipv6result = normalizeIPv6(parsed.host)\n isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true\n malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true)\n parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase()\n\n if (malformedIPLiteral) {\n parsed.error = parsed.error || 'URI host is malformed.'\n malformedAuthorityOrPort = true\n }\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // convert Unicode IDN -> ASCII IDN when the effective scheme uses domain hosts\n if (!malformedIPLiteral) {\n malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP)\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (uri.indexOf('%') !== -1) {\n if (parsed.host !== undefined && !malformedIPLiteral) {\n const host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true)\n parsed.host = reescapeHostDelimiters(host, isIP)\n }\n }\n if (parsed.path) {\n parsed.path = normalizePathEncoding(parsed.path)\n }\n if (parsed.query) {\n parsed.query = normalizeQueryFragmentEncoding(parsed.query)\n }\n if (parsed.fragment) {\n parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment)\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n if (schemeHandler === SCHEMES.urn && parsed.nid === undefined) {\n malformedSchemeSpecific = true\n }\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme }\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n return parseWithStatus(uri, opts).parsed\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction normalizeString (uri, opts) {\n return normalizeStringWithStatus(uri, opts).normalized\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ normalized: string, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction normalizeStringWithStatus (uri, opts) {\n const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts)\n return {\n normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize(parsed, opts),\n malformedAuthorityOrPort,\n malformedPercentEncoding,\n malformedSchemeSpecific,\n malformedHost,\n malformedScheme\n }\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string|undefined}\n */\nfunction normalizeComparableURI (uri, opts) {\n if (typeof uri !== 'string' && typeof uri !== 'object') {\n return undefined\n }\n\n let value\n try {\n value = typeof uri === 'string' ? uri : serialize(uri, opts)\n } catch {\n return undefined\n }\n const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts)\n return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? undefined : normalized\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","var hasExcape = /~/\nvar escapeMatcher = /~[01]/g\nfunction escapeReplacer (m) {\n switch (m) {\n case '~1': return '/'\n case '~0': return '~'\n }\n throw new Error('Invalid tilde escape: ' + m)\n}\n\nfunction untilde (str) {\n if (!hasExcape.test(str)) return str\n return str.replace(escapeMatcher, escapeReplacer)\n}\n\nfunction setter (obj, pointer, value) {\n var part\n var hasNextPart\n\n for (var p = 1, len = pointer.length; p < len;) {\n if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj\n\n part = untilde(pointer[p++])\n hasNextPart = len > p\n\n if (typeof obj[part] === 'undefined') {\n // support setting of /-\n if (Array.isArray(obj) && part === '-') {\n part = obj.length\n }\n\n // support nested objects/array when setting values\n if (hasNextPart) {\n if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = []\n else obj[part] = {}\n }\n }\n\n if (!hasNextPart) break\n obj = obj[part]\n }\n\n var oldValue = obj[part]\n if (value === undefined) delete obj[part]\n else obj[part] = value\n return oldValue\n}\n\nfunction compilePointer (pointer) {\n if (typeof pointer === 'string') {\n pointer = pointer.split('/')\n if (pointer[0] === '') return pointer\n throw new Error('Invalid JSON pointer.')\n } else if (Array.isArray(pointer)) {\n for (const part of pointer) {\n if (typeof part !== 'string' && typeof part !== 'number') {\n throw new Error('Invalid JSON pointer. Must be of type string or number.')\n }\n }\n return pointer\n }\n\n throw new Error('Invalid JSON pointer.')\n}\n\nfunction get (obj, pointer) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n var len = pointer.length\n if (len === 1) return obj\n\n for (var p = 1; p < len;) {\n obj = obj[untilde(pointer[p++])]\n if (len === p) return obj\n if (typeof obj !== 'object' || obj === null) return undefined\n }\n}\n\nfunction set (obj, pointer, value) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.')\n return setter(obj, pointer, value)\n}\n\nfunction compile (pointer) {\n var compiled = compilePointer(pointer)\n return {\n get: function (object) {\n return get(object, compiled)\n },\n set: function (object, value) {\n return set(object, compiled, value)\n }\n }\n}\n\nexports.get = get\nexports.set = set\nexports.compile = compile\n","import UriResolver from 'fast-uri';\nimport jsonpointer from 'jsonpointer';\nimport { ALL_OF_KEY, ID_KEY, JSON_SCHEMA_DRAFT_2019_09, JSON_SCHEMA_DRAFT_2020_12, REF_KEY, SCHEMA_KEY, } from \"./constants.js\";\nimport isObject from \"./isObject.js\";\n/** Looks for the `$id` pointed by `ref` in the schema definitions embedded in\n * a JSON Schema bundle\n *\n * @param schema - The schema wherein `ref` should be searched\n * @param ref - The `$id` of the reference to search for\n * @returns - The schema matching the reference, or `undefined` if no match is found\n */\nfunction findEmbeddedSchemaRecursive(schema, ref) {\n if (ID_KEY in schema && UriResolver.equal(schema[ID_KEY], ref)) {\n return schema;\n }\n for (const subSchema of Object.values(schema)) {\n if (Array.isArray(subSchema)) {\n for (const item of subSchema) {\n if (isObject(item)) {\n const result = findEmbeddedSchemaRecursive(item, ref);\n if (result !== undefined) {\n return result;\n }\n }\n }\n }\n else if (isObject(subSchema)) {\n const result = findEmbeddedSchemaRecursive(subSchema, ref);\n if (result !== undefined) {\n return result;\n }\n }\n }\n return undefined;\n}\n/** Parses a JSONSchema and makes all references absolute with respect to\n * the `baseURI` argument\n * @param schema - The schema to be processed\n * @param baseURI - The base URI to be used for resolving relative references\n */\nexport function makeAllReferencesAbsolute(schema, baseURI) {\n const currentURI = schema[ID_KEY] ?? baseURI;\n let result = schema;\n // Make all other references absolute\n if (REF_KEY in result) {\n result = { ...result, [REF_KEY]: UriResolver.resolve(currentURI, result[REF_KEY]) };\n }\n // Look for references in nested subschemas\n for (const [key, subSchema] of Object.entries(result)) {\n if (Array.isArray(subSchema)) {\n result = {\n ...result,\n [key]: subSchema.map((item) => (isObject(item) ? makeAllReferencesAbsolute(item, currentURI) : item)),\n };\n }\n else if (isObject(subSchema)) {\n result = { ...result, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };\n }\n }\n return result;\n}\n/** Splits out the value at the `key` in `object` from the `object`, returning an array that contains in the first\n * location, the `object` minus the `key: value` and in the second location the `value`.\n *\n * @param key - The key from the object to extract\n * @param object - The object from which to extract the element\n * @returns - An array with the first value being the object minus the `key` element and the second element being the\n * value from `object[key]`\n */\nexport function splitKeyElementFromObject(key, object) {\n const { [key]: value, ...remaining } = object;\n return [remaining, value];\n}\n/** Given the name of a `$ref` from within a schema, using the `rootSchema`, recursively look up and return the\n * sub-schema using the path provided by that reference. If `#` is not the first character of the reference, the path\n * does not exist in the schema, or the reference resolves circularly back to itself, then throw an Error.\n * Otherwise return the sub-schema. Also deals with nested `$ref`s in the sub-schema.\n *\n * @param $ref - The ref string for which the schema definition is desired\n * @param [rootSchema={}] - The root schema in which to search for the definition\n * @param recurseList - List of $refs already resolved to prevent recursion\n * @param [baseURI=rootSchema['$id']] - The base URI to be used for resolving relative references\n * @returns - The sub-schema within the `rootSchema` which matches the `$ref` if it exists\n * @throws - Error indicating that no schema for that reference could be resolved\n */\nexport function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = rootSchema[ID_KEY]) {\n const ref = $ref || '';\n let current = undefined;\n let currentBaseURI = baseURI;\n if (ref.startsWith('#')) {\n // Decode URI fragment representation.\n const decodedRef = decodeURIComponent(ref.substring(1));\n if (currentBaseURI === undefined || (ID_KEY in rootSchema && rootSchema[ID_KEY] === currentBaseURI)) {\n current = jsonpointer.get(rootSchema, decodedRef);\n }\n else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n current = findEmbeddedSchemaRecursive(rootSchema, currentBaseURI.replace(/\\/$/, ''));\n if (current !== undefined) {\n current = jsonpointer.get(current, decodedRef);\n }\n }\n }\n else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n const resolvedRef = currentBaseURI ? UriResolver.resolve(currentBaseURI, ref) : ref;\n const [refId, ...refAnchor] = resolvedRef.replace(/#\\/?$/, '').split('#');\n current = findEmbeddedSchemaRecursive(rootSchema, refId.replace(/\\/$/, ''));\n if (current !== undefined) {\n currentBaseURI = current[ID_KEY];\n if (refAnchor.length > 0) {\n current = jsonpointer.get(current, decodeURIComponent(refAnchor.join('#')));\n }\n }\n }\n if (current === undefined) {\n throw new Error(`Could not find a definition for ${$ref}.`);\n }\n const nextRef = current[REF_KEY];\n if (nextRef) {\n // Check for circular references.\n if (recurseList.includes(nextRef)) {\n if (recurseList.length === 1) {\n throw new Error(`Definition for ${$ref} is a circular reference`);\n }\n const [firstRef, ...restRefs] = recurseList;\n const circularPath = [...restRefs, ref, firstRef].join(' -> ');\n throw new Error(`Definition for ${firstRef} contains a circular reference through ${circularPath}`);\n }\n const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);\n const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], currentBaseURI);\n if (Object.keys(remaining).length > 0) {\n if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 ||\n rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n return { [ALL_OF_KEY]: [remaining, subSchema] };\n }\n return { ...remaining, ...subSchema };\n }\n return subSchema;\n }\n return current;\n}\n/** Given the name of a `$ref` from within a schema, using the `rootSchema`, look up and return the sub-schema using the\n * path provided by that reference. If `#` is not the first character of the reference, the path does not exist in\n * the schema, or the reference resolves circularly back to itself, then throw an Error. Otherwise return the\n * sub-schema. Also deals with nested `$ref`s in the sub-schema.\n *\n * @param $ref - The ref string for which the schema definition is desired\n * @param [rootSchema={}] - The root schema in which to search for the definition\n * @param [baseURI=rootSchema['$id']] - The base URI to be used for resolving relative references\n * @returns - The sub-schema within the `rootSchema` which matches the `$ref` if it exists\n * @throws - Error indicating that no schema for that reference could be resolved\n */\nexport default function findSchemaDefinition($ref, rootSchema = {}, baseURI = rootSchema[ID_KEY]) {\n const recurseList = [];\n return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);\n}\n//# sourceMappingURL=findSchemaDefinition.js.map","/** Matches unsigned integer strings that represent valid array indexes */\nconst reIsIndex = /^(?:0|[1-9]\\d*)$/;\n/** Converts a dotted path string, such as produced for validation error properties, into its list of\n * path segments. Array indexes may be written bracketed (`'a[0].b'`) or dotted (`'a.0.b'`), and empty\n * segments — from a leading `.`, a trailing `.` or a `..` run — are dropped.\n *\n * Only the grammar RJSF itself produces is supported: dots and brackets are always separators, so\n * quoted keys are not recognized and keys containing dots must be addressed with a segment list\n * instead of a string.\n *\n * @param path - The string path to convert, such as `'.level1.level2[2].level3'`\n * @returns - The list of path segments, such as `['level1', 'level2', '2', 'level3']`\n */\nexport function toPath(path) {\n return path.split(/[.[\\]]+/).filter(Boolean);\n}\n/** Normalizes an `ObjectPath` into a list of path segments, wrapping a single key into a one-element list */\nfunction normalizePath(path) {\n return Array.isArray(path) ? path : [path];\n}\n/** Determines whether a path segment could mutate the prototype chain. Only `__proto__` can: assigning to it\n * invokes the prototype setter rather than creating an own property. `constructor` and `prototype` are safe\n * here — and are legal JSON Schema property names — because both reads and writes below are own-property-only,\n * so `['constructor', 'prototype', 'polluted']` shadows `constructor` with a fresh object instead of walking\n * into `Object.prototype`. Only writes need this check; reads are already own-property-only\n */\nfunction isUnsafeSegment(segment) {\n return segment === '__proto__';\n}\n/** Determines whether a path segment represents a valid array index */\nfunction isIndex(segment) {\n return typeof segment === 'number' ? Number.isInteger(segment) && segment >= 0 : reIsIndex.test(segment);\n}\n/** Determines whether `value` can hold properties, i.e. is an object (arrays included) or a function */\nfunction isSettable(value) {\n return value != null && (typeof value === 'object' || typeof value === 'function');\n}\n/** Gets the value at `path` of `obj`, returning `defaultValue` when the resolved value is `undefined`\n *\n * Every segment must be an OWN property, matching {@link hasByPath}, so the two can be used as a\n * guard/read pair. Inherited members are never resolved: `getByPath({}, 'toString')` returns\n * `defaultValue`, not `Function.prototype.toString`. For the plain form data and schemas RJSF navigates,\n * an inherited member is never data, and the own-property rule also makes prototype internals such as\n * `__proto__` unreachable unless they are genuine own data keys\n *\n * An empty segment list resolves to nothing, so `defaultValue` is returned. This matches {@link hasByPath},\n * which is `false` for an empty path, and keeps a computed-but-empty path (`toPath('')` for a root-level\n * validation error, say) from resolving to the whole object\n *\n * The value at a runtime-computed path cannot be known statically, so `R` is the CALLER'S declaration of\n * the expected type (like `Map.get()`); it defaults to `unknown`, which forces narrowing when no type is given\n *\n * @param obj - The object to query\n * @param path - The single key or list of path segments at which to get the value\n * @param [defaultValue] - The value returned when the resolved value is `undefined`\n * @returns - The resolved value, otherwise `defaultValue`\n */\nexport function getByPath(obj, path, defaultValue) {\n let current;\n if (!Array.isArray(path)) {\n // Fast path for the most common call shape, a single constant key, avoiding the segment-list allocation\n current = isSettable(obj) && Object.hasOwn(obj, path) ? obj[path] : undefined;\n }\n else if (path.length === 0) {\n // An empty path resolves to nothing, mirroring `hasByPath()`\n current = undefined;\n }\n else {\n current = obj;\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n // Only own data keys resolve, so inherited members and prototype internals are never read\n if (!isSettable(current) || !Object.hasOwn(current, segment)) {\n current = undefined;\n break;\n }\n current = current[segment];\n }\n }\n // The single deliberate cast in these utilities: the resolved value is trusted to be the `R` the caller declared\n return (current === undefined ? defaultValue : current);\n}\n/** Sets `value` at `path` of `obj`, mutating and returning `obj`. Missing intermediate containers are\n * created: arrays when the next segment is a valid array index, plain objects otherwise (or always plain\n * objects when `createIntermediateObjects` is true)\n *\n * A `__proto__` segment is refused in any position — assigning to it would mutate the prototype chain rather\n * than create an own property — and the write is silently skipped. Every other key, `constructor` and\n * `prototype` included, is written as an own property\n *\n * @param obj - The object to modify\n * @param path - The single key or list of path segments at which to set the value\n * @param value - The value to set\n * @param [createIntermediateObjects] - When true, always create plain objects for missing intermediate\n * containers, even for numeric path segments\n * @returns - The mutated `obj`\n */\nexport function setByPath(obj, path, value, createIntermediateObjects = false) {\n if (!isSettable(obj)) {\n return obj;\n }\n // Fast path for a single constant key, avoiding the segment-list allocation\n if (!Array.isArray(path)) {\n // Refuse a segment that could mutate the prototype chain (prototype pollution)\n if (!isUnsafeSegment(path)) {\n const target = obj;\n target[path] = value;\n }\n return obj;\n }\n const segments = path;\n // Refuse paths that could mutate the prototype chain (prototype pollution)\n if (segments.some(isUnsafeSegment)) {\n return obj;\n }\n let current = obj;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (i === segments.length - 1) {\n current[segment] = value;\n }\n else {\n // Own properties only, so an inherited member is never traversed into\n const existing = Object.hasOwn(current, segment) ? current[segment] : undefined;\n if (isSettable(existing)) {\n current = existing;\n }\n else {\n const next = createIntermediateObjects || !isIndex(segments[i + 1]) ? {} : [];\n current[segment] = next;\n /* v8 ignore next -- a fresh {} or [] is always settable; the guard exists only to narrow the type */\n if (isSettable(next)) {\n current = next;\n }\n }\n }\n }\n return obj;\n}\n/** Determines whether `obj` has an own property at `path`\n *\n * Every segment is checked with `Object.hasOwn()`, so inherited properties report `false` —\n * `hasByPath({}, 'toString')` is `false`. {@link getByPath} applies the same own-property rule, so the\n * two can be used as a guard/read pair\n *\n * @param obj - The object to query\n * @param path - The single key or list of path segments to check for\n * @returns - True if the own property exists at `path`, otherwise false\n */\nexport function hasByPath(obj, path) {\n // Fast path for a single constant key, avoiding the segment-list allocation\n if (!Array.isArray(path)) {\n return isSettable(obj) && Object.hasOwn(obj, path);\n }\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (!isSettable(current) || !Object.hasOwn(current, path[i])) {\n return false;\n }\n current = current[path[i]];\n }\n return path.length > 0;\n}\n/** Removes the own property at `path` of `obj`, mutating `obj`\n *\n * Both the parent lookup and the delete are own-property-only, so no segment can reach the prototype chain and\n * no `UNSAFE_SEGMENTS`-style guard is needed: deleting a `__proto__` that is not an own property is a no-op\n *\n * @param obj - The object to modify\n * @param path - The single key or list of path segments at which to remove the property\n * @returns - True if the property was removed or did not exist, otherwise false\n */\nexport function unsetByPath(obj, path) {\n const segments = normalizePath(path);\n // An empty path names no property, so there is nothing to remove\n if (segments.length === 0) {\n return true;\n }\n const parent = segments.length > 1 ? getByPath(obj, segments.slice(0, -1)) : obj;\n if (parent == null) {\n return true;\n }\n try {\n // Returns false for a non-configurable property instead of throwing like `delete` in strict mode\n return Reflect.deleteProperty(parent, segments[segments.length - 1]);\n }\n catch {\n // Reflect.deleteProperty throws when the target is a primitive\n return false;\n }\n}\n//# sourceMappingURL=pathUtils.js.map","import { DISCRIMINATOR_PATH } from \"./constants.js\";\nimport { getByPath } from \"./pathUtils.js\";\n/** Returns the `discriminator.propertyName` when defined in the `schema` if it is a string. A warning is generated when\n * it is not a string. Returns `undefined` when a valid discriminator is not present.\n *\n * @param schema - The schema from which the discriminator is potentially obtained\n * @returns - The `discriminator.propertyName` if it exists in the schema, otherwise `undefined`\n */\nexport default function getDiscriminatorFieldFromSchema(schema) {\n let discriminator;\n const maybeString = getByPath(schema, DISCRIMINATOR_PATH);\n if (typeof maybeString === 'string') {\n discriminator = maybeString;\n }\n else if (maybeString !== undefined) {\n // oxlint-disable-next-line no-console\n console.warn(`Expecting discriminator to be a string, got \"${typeof maybeString}\" instead`);\n }\n return discriminator;\n}\n//# sourceMappingURL=getDiscriminatorFieldFromSchema.js.map","/** Given a specific `value` attempts to guess the type of a schema element. In the case where we have to implicitly\n * create a schema, it is useful to know what type to use based on the data we are defining.\n *\n * @param value - The value from which to guess the type\n * @returns - The best guess for the object type\n */\nexport default function guessType(value) {\n if (Array.isArray(value)) {\n return 'array';\n }\n if (typeof value === 'string') {\n return 'string';\n }\n if (value == null) {\n return 'null';\n }\n if (typeof value === 'boolean') {\n return 'boolean';\n }\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return 'number';\n }\n if (typeof value === 'object') {\n return 'object';\n }\n // Default to string if we can't figure it out\n return 'string';\n}\n//# sourceMappingURL=guessType.js.map","import guessType from \"./guessType.js\";\n/** Gets the type of a given `schema`. If the type is not explicitly defined, then an attempt is made to infer it from\n * other elements of the schema as follows:\n * - schema.const: Returns the `guessType()` of that value\n * - schema.enum: Returns `string`\n * - schema.properties: Returns `object`\n * - schema.additionalProperties: Returns `object`\n * - schema.patternProperties: Returns `object`\n * - type is an array with a length of 2 and one type is 'null': Returns the other type\n *\n * @param schema - The schema for which to get the type\n * @returns - The type of the schema\n */\nexport default function getSchemaType(schema) {\n let { type } = schema;\n if (!type && schema.const) {\n return guessType(schema.const);\n }\n if (!type && schema.enum) {\n return 'string';\n }\n if (!type && (schema.properties || schema.additionalProperties || schema.patternProperties)) {\n return 'object';\n }\n if (Array.isArray(type)) {\n if (type.length === 2 && type.includes('null')) {\n type = type.find((t) => t !== 'null');\n }\n else {\n // oxlint-disable-next-line prefer-destructuring\n type = type[0];\n }\n }\n return type;\n}\n//# sourceMappingURL=getSchemaType.js.map","import { REQUIRED_KEY } from \"./constants.js\";\nimport getSchemaType from \"./getSchemaType.js\";\nimport isObject from \"./isObject.js\";\n/** Recursively merge deeply nested schemas. The difference between `mergeSchemas` and `mergeObjects` is that\n * `mergeSchemas` only concats arrays for values under the 'required' keyword, and when it does, it doesn't include\n * duplicate values.\n *\n * @param obj1 - The first schema object to merge\n * @param obj2 - The second schema object to merge\n * @returns - The merged schema object\n */\nexport default function mergeSchemas(obj1, obj2) {\n const acc = { ...obj1 }; // Prevent mutation of source object.\n const result = Object.keys(obj2).reduce((accumulator, key) => {\n const left = obj1 ? obj1[key] : {}, right = obj2[key];\n if (obj1 && key in obj1 && isObject(right)) {\n accumulator[key] = mergeSchemas(left, right);\n }\n else if (obj1 &&\n obj2 &&\n (getSchemaType(obj1) === 'object' || getSchemaType(obj2) === 'object') &&\n key === REQUIRED_KEY &&\n Array.isArray(left) &&\n Array.isArray(right)) {\n // Don't include duplicate values when merging 'required' fields.\n accumulator[key] = [...new Set([...left, ...right])];\n }\n else {\n accumulator[key] = right;\n }\n return accumulator;\n }, acc);\n // Copy own Symbol-keyed properties from obj2 (Object.keys skips them).\n for (const sym of Object.getOwnPropertySymbols(obj2)) {\n // To avoid issues with symbols, we cast them to GenericSymbolObjectType. If we make the mergeSchema function take\n // in GenericSymbolObjectType rather than GenericObjectType, it causes a bunch of type errors downstream\n result[sym] = obj2[sym];\n }\n return result;\n}\n//# sourceMappingURL=mergeSchemas.js.map","import { PROPERTIES_KEY } from \"./constants.js\";\n/** Returns the sub-schema declared for `property` in the `properties` of `schema`, falling back to an empty schema\n * when the schema has no such property. Callers treat the properties of a schema as schemas of the same type `S`,\n * which the `JSONSchema7` typing of `properties` cannot express, so this function owns that single assertion rather\n * than repeating it at every lookup.\n *\n * @param schema - The schema, if any, from which to read the property sub-schema\n * @param property - The name of the property whose sub-schema is desired\n * @returns - The sub-schema for `property`, or an empty schema when it is not declared\n */\nexport default function getPropertySchema(schema, property) {\n return (schema?.[PROPERTIES_KEY]?.[property] ?? {});\n}\n//# sourceMappingURL=getPropertySchema.js.map","import getPropertySchema from \"./getPropertySchema.js\";\nimport { getByPath } from \"./pathUtils.js\";\n/** Compares the value of `discriminatorField` within `formData` against the value of `discriminatorField` within schema for each `option`.\n * Returns index of first `option` whose discriminator matches formData. Returns `undefined` if there is no match.\n * This function does not work with discriminators of `\"type\": \"object\"` and `\"type\": \"array\"`\n *\n * @param formData - The current formData, if any, used to figure out a match\n * @param options - The list of options to find a matching options from\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The index of the matched option or undefined if there is no match\n */\nexport default function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField) {\n if (formData && discriminatorField) {\n const value = getByPath(formData, discriminatorField);\n if (value === undefined) {\n return undefined;\n }\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n const discriminator = getPropertySchema(option, discriminatorField);\n if (discriminator.type !== 'object' && discriminator.type !== 'array') {\n if (discriminator.const === value) {\n return i;\n }\n const enumValues = discriminator.enum;\n if (enumValues?.includes(value)) {\n return i;\n }\n }\n }\n }\n return undefined;\n}\n//# sourceMappingURL=getOptionMatchingSimpleDiscriminator.js.map","import { PROPERTIES_KEY } from \"../constants.js\";\nimport getOptionMatchingSimpleDiscriminator from \"../getOptionMatchingSimpleDiscriminator.js\";\nimport { getByPath } from \"../pathUtils.js\";\n/** Given the `formData` and list of `options`, attempts to find the index of the first option that matches the data.\n * Always returns the first option if there is nothing that matches.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param formData - The current formData, if any, used to figure out a match\n * @param options - The list of options to find a matching options from\n * @param rootSchema - The root schema, used to primarily to look up `$ref`s\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The index of the first matched option or 0 if none is available\n */\nexport default function getFirstMatchingOption(validator, formData, options, rootSchema, discriminatorField) {\n // For performance, skip validating subschemas if formData is undefined. We just\n // want to get the first option in that case.\n if (formData === undefined) {\n return 0;\n }\n const simpleDiscriminatorMatch = getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField);\n if (typeof simpleDiscriminatorMatch === 'number') {\n return simpleDiscriminatorMatch;\n }\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n // If we have a discriminator field, then we will use this to make the determination\n const discriminator = discriminatorField\n ? option[PROPERTIES_KEY]?.[discriminatorField]\n : undefined;\n if (discriminatorField && discriminator !== undefined) {\n const value = getByPath(formData, discriminatorField);\n if (validator.isValid(discriminator, value, rootSchema)) {\n return i;\n }\n }\n else if (option[PROPERTIES_KEY]) {\n // If the schema describes an object then we need to add slightly more\n // strict matching to the schema, because unless the schema uses the\n // \"requires\" keyword, an object will match the schema as long as it\n // doesn't have matching keys with a conflicting type. To do this we use an\n // \"anyOf\" with an array of requires. This augmentation expresses that the\n // schema should match if any of the keys in the schema are present on the\n // object and pass validation.\n //\n // Create an \"anyOf\" schema that requires at least one of the keys in the\n // \"properties\" object\n const requiresAnyOf = {\n anyOf: Object.keys(option[PROPERTIES_KEY]).map((key) => ({\n required: [key],\n })),\n };\n let augmentedSchema;\n // If the \"anyOf\" keyword already exists, wrap the augmentation in an \"allOf\"\n if (option.anyOf) {\n // Create a shallow clone of the option\n const { ...shallowClone } = option;\n if (!shallowClone.allOf) {\n shallowClone.allOf = [];\n }\n else {\n // If \"allOf\" already exists, shallow clone the array\n shallowClone.allOf = shallowClone.allOf.slice();\n }\n shallowClone.allOf.push(requiresAnyOf);\n augmentedSchema = shallowClone;\n }\n else {\n augmentedSchema = { ...option, ...requiresAnyOf };\n }\n // Remove the \"required\" field as it's likely that not all fields have\n // been filled in yet, which will mean that the schema is not valid\n delete augmentedSchema.required;\n if (validator.isValid(augmentedSchema, formData, rootSchema)) {\n return i;\n }\n }\n else if (validator.isValid(option, formData, rootSchema)) {\n return i;\n }\n }\n return 0;\n}\n//# sourceMappingURL=getFirstMatchingOption.js.map","export function isObject(value) {\n return value !== null && typeof value === \"object\";\n}\nconst objProto = Object.prototype;\nexport function isRecordEmpty(rec) {\n for (const key in rec) {\n if (objProto.hasOwnProperty.call(rec, key)) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=object.js.map","import { isRecordEmpty } from \"../object.js\";\nexport const JSON_SCHEMA_TYPE_NAMES = [\n \"array\",\n \"boolean\",\n \"integer\",\n \"null\",\n \"number\",\n \"object\",\n \"string\",\n];\nexport const SET_OF_JSON_SCHEMA_TYPE_NAMES = new Set(JSON_SCHEMA_TYPE_NAMES);\nexport function isJsonSchemaType(type) {\n return SET_OF_JSON_SCHEMA_TYPE_NAMES.has(type);\n}\n// WARN: Order is important\nexport const RECORDS_OF_SUB_SCHEMAS = [\n \"$defs\",\n \"definitions\",\n \"properties\",\n \"patternProperties\",\n \"dependencies\",\n];\nexport const SET_OF_RECORDS_OF_SUB_SCHEMAS = new Set(RECORDS_OF_SUB_SCHEMAS);\n// WARN: Order is important\nexport const ARRAYS_OF_SUB_SCHEMAS = [\n \"items\",\n \"allOf\",\n \"oneOf\",\n \"anyOf\",\n];\nexport const SET_OF_ARRAYS_OF_SUB_SCHEMAS = new Set(ARRAYS_OF_SUB_SCHEMAS);\n// WARN: Order is important\nexport const SUB_SCHEMAS = [\n \"items\",\n \"additionalItems\",\n \"additionalProperties\",\n \"propertyNames\",\n \"contains\",\n \"if\",\n \"then\",\n \"else\",\n \"not\",\n];\nexport const SET_OF_SUB_SCHEMAS = new Set(SUB_SCHEMAS);\n// WARN: Order is important\nexport const ALL_SUB_SCHEMA_KEYS = [\n ...RECORDS_OF_SUB_SCHEMAS,\n ...ARRAYS_OF_SUB_SCHEMAS,\n ...SUB_SCHEMAS,\n];\nexport function isSchemaObject(schemaDef) {\n return typeof schemaDef === \"object\";\n}\nexport function isAllowAnySchema(def) {\n return isSchemaObject(def) ? isRecordEmpty(def) : def === true;\n}\n//# sourceMappingURL=json-schema.js.map","export function ascComparator(a, b) {\n if (a < b)\n return -1;\n if (a > b)\n return 1;\n return 0;\n}\n//# sourceMappingURL=ord.js.map","export function union(larger, smaller) {\n const ll = larger.length;\n if (ll === 0) {\n return smaller;\n }\n let sl = smaller.length;\n if (sl === 0) {\n return larger;\n }\n if (ll < sl) {\n const tmp = larger;\n larger = smaller;\n smaller = tmp;\n sl = ll;\n }\n const data = new Set(larger);\n for (let i = 0; i < sl; i++) {\n data.add(smaller[i]);\n }\n return Array.from(data);\n}\nexport function intersection(a, b) {\n const result = [];\n if (a.length === 0 || b.length === 0) {\n return result;\n }\n if (a.length > b.length) {\n const tmp = a;\n a = b;\n b = tmp;\n }\n const setB = new Set(b);\n for (let i = 0; i < a.length && setB.size > 0; i++) {\n const val = a[i];\n if (setB.delete(val)) {\n result.push(val);\n }\n }\n return result;\n}\nexport function isArrayEmpty(arr) {\n return arr.length === 0;\n}\nexport function createArrayComparator(compare) {\n return (a, b) => {\n const d = a.length - b.length;\n if (d !== 0) {\n return d;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n const d = compare(a[i], b[i]);\n if (d !== 0) {\n return d;\n }\n }\n }\n return 0;\n };\n}\nexport function createDeduplicator(compare, { threshold = 12 } = {}) {\n return (arr) => {\n const al = arr.length;\n if (al === 0) {\n return arr;\n }\n if (al <= threshold) {\n const result = [];\n let rl = 0;\n outer: for (let i = 0; i < al; i++) {\n const item = arr[i];\n for (let j = 0; j < rl; j++) {\n if (compare(item, result[j]) === 0) {\n continue outer;\n }\n }\n rl = result.push(item);\n }\n return result;\n }\n const sorted = arr.slice().sort(compare);\n let wIndex = 0;\n for (let rIndex = 1; rIndex < al; rIndex++) {\n if (compare(sorted[wIndex], sorted[rIndex]) !== 0) {\n if (++wIndex !== rIndex) {\n sorted[wIndex] = sorted[rIndex];\n }\n }\n }\n sorted.length = wIndex + 1;\n return sorted;\n };\n}\nexport function createIntersector(compare) {\n return (a, b) => {\n const result = [];\n let al = a.length;\n let bl = b.length;\n if (al === 0 || bl === 0) {\n return result;\n }\n if (al > bl) {\n const tmpArr = a;\n a = b;\n b = tmpArr;\n const tmpL = al;\n al = bl;\n bl = tmpL;\n }\n const aSorted = [...a].sort(compare);\n const bSorted = [...b].sort(compare);\n let i = 0, j = 0;\n while (i < al && j < bl) {\n const cmp = compare(aSorted[i], bSorted[j]);\n if (cmp === 0) {\n // Only push if result is empty OR last pushed value is different\n if (result.length === 0 ||\n compare(result[result.length - 1], aSorted[i]) !== 0) {\n result.push(aSorted[i]);\n }\n i++;\n j++;\n }\n else if (cmp < 0) {\n i++;\n }\n else {\n j++;\n }\n }\n return result;\n };\n}\n//# sourceMappingURL=array.js.map","export function memoize(cache, func) {\n return (arg) => {\n if (cache.has(arg)) {\n return cache.get(arg);\n }\n const ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n}\nexport const weakMemoize = memoize;\n//# sourceMappingURL=memoize.js.map","import { ascComparator } from \"../../ord.js\";\nimport { createArrayComparator, createDeduplicator, isArrayEmpty, } from \"../../array.js\";\nimport { isRecordEmpty } from \"../../object.js\";\nimport { weakMemoize } from \"../../memoize.js\";\nimport { isAllowAnySchema, isSchemaObject } from \"../json-schema.js\";\nconst zero = () => 0;\nconst isUndefined = (v) => v === undefined;\nconst isSchemaPrimitiveExceptNull = (value) => typeof value !== \"object\";\nconst PRIMITIVE_TYPE_ORDER = {\n boolean: 0,\n number: 1,\n string: 2,\n};\nfunction compareSchemaPrimitive(a, b) {\n const ta = typeof a;\n const tb = typeof b;\n return ta === tb\n ? ascComparator(a, b)\n : PRIMITIVE_TYPE_ORDER[ta] - PRIMITIVE_TYPE_ORDER[tb];\n}\nfunction insertUniqueValues(mutableTarget, mutableSource) {\n const tl = mutableTarget.length;\n if (tl === 0)\n return mutableSource;\n const sl = mutableSource.length;\n if (sl === 0)\n return mutableTarget;\n if (sl > tl) {\n const t = mutableTarget;\n mutableTarget = mutableSource;\n mutableSource = t;\n }\n const seen = new Set(mutableTarget);\n const l = mutableSource.length;\n for (let i = 0; i < l; i++) {\n const key = mutableSource[i];\n if (!seen.has(key)) {\n mutableTarget.push(key);\n }\n }\n return mutableTarget;\n}\nfunction createCmpMatcher(isEmpty, compare, compareEmpty = zero) {\n return (a, b) => {\n if (isEmpty(a)) {\n if (isEmpty(b)) {\n return compareEmpty(a, b);\n }\n return -1;\n }\n if (isEmpty(b)) {\n return 1;\n }\n return compare(a, b);\n };\n}\nfunction createOptionalComparator(compare) {\n return createCmpMatcher(isUndefined, compare);\n}\nfunction createNarrowingOptionalComparator(isEmpty, compare) {\n return createCmpMatcher((v) => v === undefined || isEmpty(v), compare);\n}\nfunction createArrayOrItemComparator(compare, compareArray) {\n return createCmpMatcher(Array.isArray, compare, compareArray);\n}\nconst compareOptionalSameTypeSchemaPrimitives = createOptionalComparator(ascComparator);\nconst compareNumbersWithZeroDefault = createNarrowingOptionalComparator((v) => v === 0, (a, b) => a - b);\nexport function createComparator({ deduplicationCache = new WeakMap(), sortedKeysCache = new WeakMap(), } = {}) {\n const getSortedKeys = weakMemoize(sortedKeysCache, (obj) => Object.keys(obj).sort());\n function createRecordsComparator(compare) {\n return (a, b) => {\n const aKeys = getSortedKeys(a);\n const bKeys = getSortedKeys(b);\n const l = Math.min(aKeys.length, bKeys.length);\n for (let i = 0; i < l; i++) {\n const cmp = ascComparator(aKeys[i], bKeys[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n if (aKeys.length !== bKeys.length) {\n return aKeys.length - bKeys.length;\n }\n for (let i = 0; i < l; i++) {\n const key = aKeys[i];\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const cmp = compare(a[key], b[key]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n };\n }\n function createArrayComparatorWithDeduplication(compare) {\n const cmp = createArrayComparator(compare);\n const deduplicate = weakMemoize(deduplicationCache, \n // NOTE: Always sort output\n createDeduplicator(compare, { threshold: 0 }));\n return (a, b) => cmp(deduplicate(a), deduplicate(b));\n }\n const compareArrayOfSameTypePrimitivesWithDeduplication = createArrayComparatorWithDeduplication(ascComparator);\n function compareSchemaDefinitions(a, b) {\n if (isSchemaObject(a)) {\n if (isSchemaObject(b)) {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n const allKeys = insertUniqueValues(aKeys, bKeys);\n const l = allKeys.length;\n for (let i = 0; i < l; i++) {\n const key = allKeys[i];\n if (a[key] === b[key]) {\n continue;\n }\n const cmp = COMPARATORS[key] ?? compareOptionalSchemaValues;\n const d = cmp(a[key], b[key]);\n if (d !== 0) {\n return d;\n }\n }\n return 0;\n }\n return b === true && isRecordEmpty(a) ? 0 : 1;\n }\n if (isSchemaObject(b)) {\n return a === true && isRecordEmpty(b) ? 0 : -1;\n }\n return ascComparator(a, b);\n }\n const compareOptionalSchemaValues = createOptionalComparator(compareSchemaValues);\n const compareNonNullSchemaValue = createCmpMatcher(isSchemaPrimitiveExceptNull, createArrayOrItemComparator(createRecordsComparator(compareOptionalSchemaValues), createArrayComparator(compareSchemaValues)), compareSchemaPrimitive);\n function compareSchemaValues(a, b) {\n if (a === null) {\n return -1;\n }\n if (b === null) {\n return 1;\n }\n return compareNonNullSchemaValue(a, b);\n }\n const compareOptionalSchemaDefinitions = createOptionalComparator(compareSchemaDefinitions);\n const compareRecordOfOptionalSchemasWithEmptyRecordDefault = createNarrowingOptionalComparator(isRecordEmpty, createRecordsComparator(compareOptionalSchemaDefinitions));\n const compareOptionalArrayOfSchemasWithDeduplication = createOptionalComparator(createArrayComparatorWithDeduplication(compareSchemaDefinitions));\n const compareSchemaDefinitionsWithEmptyDefinitionDefault = createNarrowingOptionalComparator(isAllowAnySchema, compareSchemaDefinitions);\n const COMPARATORS = {\n $id: compareOptionalSameTypeSchemaPrimitives,\n $comment: compareOptionalSameTypeSchemaPrimitives,\n $defs: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n $ref: compareOptionalSameTypeSchemaPrimitives,\n $schema: compareOptionalSameTypeSchemaPrimitives,\n const: compareOptionalSchemaValues,\n contains: compareOptionalSchemaDefinitions,\n contentEncoding: compareOptionalSameTypeSchemaPrimitives,\n contentMediaType: compareOptionalSameTypeSchemaPrimitives,\n default: compareOptionalSchemaValues,\n definitions: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n description: compareOptionalSameTypeSchemaPrimitives,\n else: compareOptionalSchemaDefinitions,\n examples: compareOptionalSchemaValues,\n exclusiveMaximum: compareOptionalSameTypeSchemaPrimitives,\n exclusiveMinimum: compareOptionalSameTypeSchemaPrimitives,\n format: compareOptionalSameTypeSchemaPrimitives,\n if: compareOptionalSchemaDefinitions,\n maximum: compareOptionalSameTypeSchemaPrimitives,\n maxItems: compareOptionalSameTypeSchemaPrimitives,\n maxLength: compareOptionalSameTypeSchemaPrimitives,\n maxProperties: compareOptionalSameTypeSchemaPrimitives,\n minimum: compareOptionalSameTypeSchemaPrimitives,\n multipleOf: compareOptionalSameTypeSchemaPrimitives,\n not: compareOptionalSchemaDefinitions,\n pattern: compareOptionalSameTypeSchemaPrimitives,\n propertyNames: compareOptionalSchemaDefinitions,\n readOnly: compareOptionalSameTypeSchemaPrimitives,\n then: compareOptionalSchemaDefinitions,\n title: compareOptionalSameTypeSchemaPrimitives,\n writeOnly: compareOptionalSameTypeSchemaPrimitives,\n uniqueItems: createNarrowingOptionalComparator((v) => v === false, zero),\n minLength: compareNumbersWithZeroDefault,\n minItems: compareNumbersWithZeroDefault,\n minProperties: compareNumbersWithZeroDefault,\n required: createNarrowingOptionalComparator(isArrayEmpty, compareArrayOfSameTypePrimitivesWithDeduplication),\n enum: createNarrowingOptionalComparator(isArrayEmpty, createArrayComparatorWithDeduplication(compareSchemaValues)),\n type: createOptionalComparator((a, b) => {\n const isAArr = Array.isArray(a);\n const isBArr = Array.isArray(b);\n if (!isAArr && !isBArr) {\n return ascComparator(a, b);\n }\n return compareArrayOfSameTypePrimitivesWithDeduplication(isAArr ? a : [a], isBArr ? b : [b]);\n }),\n items: createNarrowingOptionalComparator((v) => !Array.isArray(v) && isAllowAnySchema(v), createArrayOrItemComparator(compareSchemaDefinitions, createArrayComparator(compareSchemaDefinitions))),\n anyOf: compareOptionalArrayOfSchemasWithDeduplication,\n allOf: compareOptionalArrayOfSchemasWithDeduplication,\n oneOf: compareOptionalArrayOfSchemasWithDeduplication,\n properties: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n patternProperties: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n additionalProperties: compareSchemaDefinitionsWithEmptyDefinitionDefault,\n additionalItems: compareSchemaDefinitionsWithEmptyDefinitionDefault,\n dependencies: createNarrowingOptionalComparator(isRecordEmpty, createRecordsComparator(createOptionalComparator(createArrayOrItemComparator(compareSchemaDefinitions, compareArrayOfSameTypePrimitivesWithDeduplication)))),\n };\n return {\n compareSchemaValues,\n compareSchemaDefinitions,\n };\n}\n//# sourceMappingURL=compare.js.map","export function identity(v) {\n return v;\n}\n//# sourceMappingURL=function.js.map","export const gcd = (a, b) => (a ? gcd(b % a, a) : b);\nexport const lcm = (a, b) => Math.abs(a * b) / gcd(a, b);\n//# sourceMappingURL=math.js.map","export function legacyPatternsMerger(a, b) {\n return a === b ? a : `(?=${a})(?=${b})`;\n}\nexport function simplePatternsMerger(a, b) {\n return a === b ? a : `(?=.*(?:${a}))(?=.*(?:${b}))`;\n}\n//# sourceMappingURL=patterns.js.map","import { intersection, union, } from \"../../array.js\";\nimport { identity } from \"../../function.js\";\nimport { lcm } from \"../../math.js\";\nimport { isAllowAnySchema } from \"../json-schema.js\";\nimport { simplePatternsMerger } from \"./patterns.js\";\nfunction createPairCombinations(l, r, action) {\n const ll = l.length;\n const rl = r.length;\n if (ll > 0 && rl > 0) {\n for (let i = 0; i < ll; i++) {\n const lv = l[i];\n for (let j = 0; j < rl; j++) {\n action(lv, r[j]);\n }\n }\n }\n}\nfunction mergeBooleans(l, r) {\n return l || r;\n}\nfunction createRecordsMerge(merge) {\n return (left, right) => {\n const target = { ...left };\n const keys = Object.keys(right);\n const l = keys.length;\n for (let i = 0; i < l; i++) {\n const key = keys[i];\n target[key] =\n left[key] === undefined ? right[key] : merge(left[key], right[key]);\n }\n return target;\n };\n}\nfunction createMap(items) {\n const map = new Map();\n for (const pair of items) {\n for (const key of pair[0]) {\n map.set(key, pair[1]);\n }\n }\n return map;\n}\nfunction assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, key, value) {\n if (value === undefined || isAllowAnySchema(value)) {\n delete target[key];\n }\n else {\n target[key] = value;\n }\n}\nconst PROPERTIES_ASSIGNER_KEYS = [\n \"properties\",\n \"patternProperties\",\n \"additionalProperties\",\n];\nfunction compilePatterns(patterns) {\n const keys = Object.keys(patterns);\n const l = keys.length;\n const result = [];\n for (let i = 0; i < l; i++) {\n const source = keys[i];\n result.push({\n regExp: new RegExp(source),\n schema: patterns[source],\n });\n }\n return [result, keys];\n}\nconst EMPTY_PATTERNS_AND_KEYS = [[], []];\n/**\n * @returns `true` when `false` schema occurred\n */\nfunction appendKeyConstraints(target, key, patterns) {\n const l = patterns.length;\n for (let i = 0; i < l; i++) {\n const p = patterns[i];\n if (!p.regExp.test(key)) {\n continue;\n }\n const s = p.schema;\n if (s === false) {\n return true;\n }\n target.push(s);\n }\n return false;\n}\nconst ITEMS_ASSIGNER_KEYS = [\n \"items\",\n \"additionalItems\",\n];\nconst CONDITION_ASSIGNER_KEYS = [\n \"if\",\n \"then\",\n \"else\",\n];\nfunction assignCondition(target, source) {\n if (source.if !== undefined) {\n target.if = source.if;\n }\n if (source.then !== undefined) {\n target.then = source.then;\n }\n if (source.else !== undefined) {\n target.else = source.else;\n }\n return target;\n}\nfunction intersectSchemaTypes(a, b) {\n if (a === b) {\n return a;\n }\n switch (a) {\n case \"number\": {\n if (b === \"integer\") {\n return \"integer\";\n }\n }\n // eslint-disable-next-line no-fallthrough\n case \"integer\": {\n if (b === \"number\") {\n return \"integer\";\n }\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return undefined;\n }\n}\nexport function check(a, b, check) {\n return [a, b, check];\n}\nfunction createChecksMap(checks) {\n const map = new Map();\n for (const [a, b, check] of checks) {\n const fn = (target) => {\n if (!check(target)) {\n throw new Error(`Schema keys '${a}' and '${b}' are conflicting (${a}: ${JSON.stringify(target[a])}, ${b}: ${JSON.stringify(target[b])})`);\n }\n };\n for (const k of [\n [a, b],\n [b, a],\n ]) {\n let arr = map.get(k[0]);\n if (arr === undefined) {\n arr = [];\n map.set(k[0], arr);\n }\n arr.push({ oppositeKey: k[1], check: fn });\n }\n }\n return map;\n}\nexport const DEFAULT_CHECKS = [\n check(\"minimum\", \"maximum\", (t) => t.maximum >= t.minimum),\n check(\"exclusiveMinimum\", \"maximum\", (t) => t.maximum > t.exclusiveMinimum),\n check(\"minimum\", \"exclusiveMaximum\", (t) => t.exclusiveMaximum > t.minimum),\n check(\"exclusiveMinimum\", \"exclusiveMaximum\", (t) => t.exclusiveMaximum > t.exclusiveMinimum),\n check(\"minLength\", \"maxLength\", (t) => t.maxLength >= t.minLength),\n check(\"minItems\", \"maxItems\", (t) => t.maxItems >= t.minItems),\n check(\"minProperties\", \"maxProperties\", (t) => t.maxProperties >= t.minProperties),\n];\nexport function createMerger({ mergePatterns = simplePatternsMerger, isSubRegExp = Object.is, intersectJson = intersection, deduplicateJsonSchemaDef = identity, defaultMerger = identity, assigners = [], checks = DEFAULT_CHECKS, mergers, } = {}) {\n function mergeArrayOfSchemaDefinitions(schemas) {\n const l = schemas.length;\n let result = schemas[0];\n for (let i = 1; i < l; i++) {\n const r = mergeSchemaDefinitions(result, schemas[i]);\n if (r === false) {\n return false;\n }\n if (isAllowAnySchema(r)) {\n continue;\n }\n result = r;\n }\n return result;\n }\n function createProperty(constraints, key, value, patterns, oppositeValue, oppositePatterns, oppositeAdditional) {\n constraints.length = 0;\n if (value === false) {\n return false;\n }\n constraints.push(value);\n const isOppositeValueDefined = oppositeValue !== undefined;\n if (isOppositeValueDefined) {\n if (oppositeValue === false) {\n return false;\n }\n constraints.push(oppositeValue);\n }\n if (appendKeyConstraints(constraints, key, oppositePatterns)) {\n return false;\n }\n const isNotYetAllowed = constraints.length < 2;\n if (oppositeAdditional === false) {\n // There are no allowing constraints from opposite side -> drop property\n if (isNotYetAllowed) {\n return undefined;\n }\n // Applying patterns of current schema cause they may disappear\n if (appendKeyConstraints(constraints, key, patterns)) {\n return false;\n }\n }\n else if (isNotYetAllowed && oppositeAdditional !== undefined) {\n constraints.push(oppositeAdditional);\n }\n const l = constraints.length;\n if (l === 1) {\n return constraints[0];\n }\n return mergeArrayOfSchemaDefinitions(constraints);\n }\n function assignPatternPropertiesAndAdditionalPropertiesMerge(target, patterns, patternKeys, matchedPatterns, oppositeAdditional, isOppositeTruthy) {\n const l = patternKeys.length;\n if (l > 0 && oppositeAdditional !== false) {\n if (isOppositeTruthy) {\n // TODO: in some cases we can just assign new value instead of copying\n Object.assign(target, patterns);\n }\n else {\n for (let i = 0; i < l; i++) {\n const pattern = patternKeys[i];\n if (matchedPatterns.has(pattern)) {\n continue;\n }\n target[pattern] = mergeSchemaDefinitions(patterns[pattern], oppositeAdditional);\n }\n }\n }\n return target;\n }\n const propertiesAssigner = (target, { properties: lProps = {}, patternProperties: lPatterns, additionalProperties: lAdditional = true, }, { properties: rProps = {}, patternProperties: rPatterns, additionalProperties: rAdditional = true, }) => {\n // Special case\n const isLAddTruthy = isAllowAnySchema(lAdditional);\n const isRAddTruthy = isAllowAnySchema(rAdditional);\n if (isLAddTruthy && isRAddTruthy) {\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"properties\", mergeRecordsOfSchemaDefinitions(lProps, rProps));\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"patternProperties\", lPatterns && rPatterns\n ? mergeRecordsOfSchemaDefinitions(lPatterns, rPatterns)\n : (lPatterns ?? rPatterns));\n delete target.additionalProperties;\n return target;\n }\n // Additional Properties\n const additionalProperties = mergeSchemaDefinitions(lAdditional, rAdditional);\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"additionalProperties\", additionalProperties);\n // Properties\n const properties = {};\n const lKeys = Object.keys(lProps);\n const lKeysLen = lKeys.length;\n const [lCompiledPatterns, lPatternKeys] = lPatterns\n ? compilePatterns(lPatterns)\n : EMPTY_PATTERNS_AND_KEYS;\n const [rCompiledPatterns, rPatternKeys] = rPatterns\n ? compilePatterns(rPatterns)\n : EMPTY_PATTERNS_AND_KEYS;\n const constraints = [];\n const lKeysSet = new Set();\n const mappedRAdditional = isRAddTruthy ? undefined : rAdditional;\n for (let i = 0; i < lKeysLen; i++) {\n const key = lKeys[i];\n lKeysSet.add(key);\n const prop = createProperty(constraints, key, lProps[key], lCompiledPatterns, rProps[key], rCompiledPatterns, mappedRAdditional);\n if (prop !== undefined) {\n properties[key] = prop;\n }\n }\n const rKeys = Object.keys(rProps);\n const rKeysLen = rKeys.length;\n const mappedLAdditional = isLAddTruthy ? undefined : lAdditional;\n for (let i = 0; i < rKeysLen; i++) {\n const key = rKeys[i];\n if (lKeysSet.has(key)) {\n continue;\n }\n const prop = createProperty(constraints, key, rProps[key], rCompiledPatterns, undefined, lCompiledPatterns, mappedLAdditional);\n if (prop !== undefined) {\n properties[key] = prop;\n }\n }\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"properties\", properties);\n // Pattern Properties\n // (lPatterns and rPatterns) or (lPatterns and rAdditional) or (rPatterns and lAdditional)\n let patterns = {};\n const matchedPatterns = new Set();\n if (lPatternKeys.length > 0 && rPatternKeys.length > 0) {\n createPairCombinations(lPatternKeys, rPatternKeys, (lKey, rKey) => {\n if (isSubRegExp(lKey, rKey)) {\n matchedPatterns.add(lKey);\n }\n if (isSubRegExp(rKey, lKey)) {\n matchedPatterns.add(rKey);\n }\n patterns[mergePatterns(lKey, rKey)] = mergeSchemaDefinitions(lPatterns[lKey], rPatterns[rKey]);\n });\n }\n patterns = assignPatternPropertiesAndAdditionalPropertiesMerge(patterns, lPatterns, lPatternKeys, matchedPatterns, rAdditional, isRAddTruthy);\n patterns = assignPatternPropertiesAndAdditionalPropertiesMerge(patterns, rPatterns, rPatternKeys, matchedPatterns, lAdditional, isLAddTruthy);\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"patternProperties\", patterns);\n return target;\n };\n const itemsAssigner = (target, \n // NOTE: Schema that has `additionalItems` without an `items` keyword is invalid\n // so the assigner should be triggered only be colliding `items` properties\n // so default values are used only for type narrowing\n { items: lItems = [], additionalItems: lAdditional }, { items: rItems = [], additionalItems: rAdditional }) => {\n const isLArr = Array.isArray(lItems);\n const isRArr = Array.isArray(rItems);\n const itemsArray = [];\n target.items = itemsArray;\n if (isLArr && isRArr) {\n const [l, additional, tail] = lItems.length < rItems.length\n ? [lItems.length, lAdditional, rItems]\n : [rItems.length, rAdditional, lItems];\n let i = 0;\n for (; i < l; i++) {\n itemsArray.push(mergeSchemaDefinitions(lItems[i], rItems[i]));\n }\n if (additional === false) {\n target.additionalItems = false;\n }\n else {\n const isAdditionalTruthy = additional === undefined || isAllowAnySchema(additional);\n for (; i < tail.length; i++) {\n itemsArray.push(isAdditionalTruthy\n ? tail[i]\n : mergeSchemaDefinitions(tail[i], additional));\n }\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"additionalItems\", lAdditional !== undefined && rAdditional !== undefined\n ? mergeSchemaDefinitions(lAdditional, rAdditional)\n : (lAdditional ?? rAdditional));\n }\n }\n else if (isLArr || isRArr) {\n const [arr, item, additional] = (isLArr ? [lItems, rItems, lAdditional] : [rItems, lItems, rAdditional]);\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"additionalItems\", additional && mergeSchemaDefinitions(additional, item));\n for (let i = 0; i < arr.length; i++) {\n itemsArray.push(mergeSchemaDefinitions(arr[i], item));\n }\n }\n else {\n delete target.additionalItems;\n target.items = mergeSchemaDefinitions(lItems, rItems);\n }\n return target;\n };\n const conditionAssigner = (target, l, r) => {\n assignCondition(target, l);\n const cond = assignCondition({}, r);\n if (target.allOf === undefined) {\n target.allOf = [cond];\n }\n else {\n target.allOf = target.allOf.concat(cond);\n }\n return target;\n };\n function mergeArraysOfSchemaDefinition(l, r) {\n const definitions = [];\n createPairCombinations(l, r, (a, b) => {\n try {\n definitions.push(mergeSchemaDefinitions(a, b));\n }\n catch { }\n });\n if (definitions.length === 0) {\n throw new Error(`No valid schema combinations could be produced for \"${JSON.stringify(l)}\" and \"${JSON.stringify(r)}\"; the merged result is empty`);\n }\n return deduplicateJsonSchemaDef(definitions);\n }\n const ASSIGNERS_MAP = createMap([\n [PROPERTIES_ASSIGNER_KEYS, propertiesAssigner],\n [ITEMS_ASSIGNER_KEYS, itemsAssigner],\n [CONDITION_ASSIGNER_KEYS, conditionAssigner],\n ...assigners,\n ]);\n const CHECKS_MAP = createChecksMap(checks);\n function mergeSchemaDefinitions(left, right) {\n if (left === false || right === false) {\n return false;\n }\n if (isAllowAnySchema(left)) {\n if (isAllowAnySchema(right)) {\n return true;\n }\n return right;\n }\n if (isAllowAnySchema(right)) {\n return left;\n }\n let target = { ...left };\n const assigners = new Set();\n const checks = new Set();\n const rKeys = Reflect.ownKeys(right);\n const l = rKeys.length;\n for (let i = 0; i < l; i++) {\n const rKey = rKeys[i];\n const rv = right[rKey];\n if (rv === undefined) {\n continue;\n }\n const checkData = CHECKS_MAP.get(rKey);\n if (checkData !== undefined) {\n const l = checkData.length;\n for (let j = 0; j < l; j++) {\n const item = checkData[j];\n if (left[item.oppositeKey] !== undefined) {\n checks.add(item.check);\n }\n }\n }\n const lv = left[rKey];\n if (lv === undefined) {\n // @ts-expect-error too complex\n target[rKey] = rv;\n continue;\n }\n const assign = ASSIGNERS_MAP.get(rKey);\n if (assign) {\n assigners.add(assign);\n continue;\n }\n const merge = MERGERS[rKey] ?? defaultMerger;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n target[rKey] = merge(lv, rv);\n }\n for (const assign of assigners) {\n target = assign(target, left, right);\n }\n for (const check of checks) {\n check(target);\n }\n return target;\n }\n const mergeRecordsOfSchemaDefinitions = createRecordsMerge(mergeSchemaDefinitions);\n const MERGERS = {\n $id: defaultMerger,\n $ref: defaultMerger,\n $schema: defaultMerger,\n $comment: defaultMerger,\n $defs: mergeRecordsOfSchemaDefinitions,\n definitions: mergeRecordsOfSchemaDefinitions,\n type: (a, b) => {\n if (a === b) {\n return a;\n }\n const isAArr = Array.isArray(a);\n const isBArr = Array.isArray(b);\n if (!isAArr && !isBArr) {\n const intersection = intersectSchemaTypes(a, b);\n if (intersection !== undefined) {\n return intersection;\n }\n }\n else if (isAArr || isBArr) {\n const r = new Set();\n if (isAArr && isBArr) {\n createPairCombinations(a, b, (x, y) => {\n const type = intersectSchemaTypes(x, y);\n if (type !== undefined) {\n r.add(type);\n }\n });\n }\n else {\n const arr = (isAArr ? a : b);\n const el = (isAArr ? b : a);\n const l = arr.length;\n for (let i = 0; i < l; i++) {\n const intersection = intersectSchemaTypes(el, arr[i]);\n if (intersection !== undefined) {\n r.add(intersection);\n }\n }\n }\n const s = r.size;\n if (s === 1) {\n return r.values().next().value;\n }\n if (s > 1) {\n return Array.from(r);\n }\n }\n throw new Error(`It is not possible to create an intersection of the following incompatible types: ${a.toString()}, ${b.toString()}`);\n },\n default: defaultMerger,\n description: defaultMerger,\n title: defaultMerger,\n const: defaultMerger,\n format: defaultMerger,\n contentEncoding: defaultMerger,\n contentMediaType: defaultMerger,\n not: (a, b) => {\n const items = deduplicateJsonSchemaDef([a, b]);\n return items.length === 1 ? items[0] : { anyOf: items };\n },\n pattern: mergePatterns,\n readOnly: mergeBooleans,\n writeOnly: mergeBooleans,\n enum: (a, b) => {\n const data = intersectJson(a, b);\n if (data.length === 0) {\n throw new Error(`Intersection of the following enums is empty: \"${JSON.stringify(a)}\", \"${JSON.stringify(b)}\"`);\n }\n return data;\n },\n anyOf: mergeArraysOfSchemaDefinition,\n oneOf: mergeArraysOfSchemaDefinition,\n allOf: (l, r) => deduplicateJsonSchemaDef(l.concat(r)),\n propertyNames: mergeSchemaDefinitions,\n contains: mergeSchemaDefinitions,\n dependencies: createRecordsMerge((a, b) => {\n if (Array.isArray(a)) {\n if (Array.isArray(b)) {\n return union(a, b);\n }\n return mergeSchemaDefinitions(b, { required: a });\n }\n if (Array.isArray(b)) {\n return mergeSchemaDefinitions(a, { required: b });\n }\n return mergeSchemaDefinitions(a, b);\n }),\n examples: (l, r) => {\n // https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-validation-01#section-10.4\n if (!Array.isArray(l) || !Array.isArray(r)) {\n throw new Error(`Value of the 'examples' field should be an array, but got \"${JSON.stringify(l)}\" and \"${JSON.stringify(r)}\"`);\n }\n // TODO: Proper deduplication\n return union(l, r);\n },\n multipleOf: (a, b) => {\n let factor = 1;\n while (!Number.isInteger(a) || !Number.isInteger(b)) {\n factor *= 10;\n a *= 10;\n b *= 10;\n }\n return lcm(a, b) / factor;\n },\n exclusiveMaximum: Math.min,\n maximum: Math.min,\n maxItems: Math.min,\n maxLength: Math.min,\n maxProperties: Math.min,\n exclusiveMinimum: Math.max,\n minimum: Math.max,\n minItems: Math.max,\n minLength: Math.max,\n minProperties: Math.max,\n uniqueItems: mergeBooleans,\n required: union,\n ...mergers,\n };\n return {\n mergeSchemaDefinitions,\n mergeArrayOfSchemaDefinitions,\n };\n}\n//# sourceMappingURL=merge.js.map","import { transformSchemaDefinition } from \"../transform.js\";\nfunction getAllOfSchemas(schema) {\n const result = [];\n const stack = [schema];\n while (stack.length > 0) {\n const current = stack.pop();\n if (typeof current === \"boolean\" || current.allOf === undefined) {\n result.push(current);\n continue;\n }\n const { allOf, ...rest } = current;\n result.push(rest);\n for (let i = allOf.length - 1; i >= 0; i--) {\n stack.push(allOf[i]);\n }\n }\n return result;\n}\nexport function createShallowAllOfMerge(mergeArrayOfSchemaDefinitions) {\n return (schema) => mergeArrayOfSchemaDefinitions(getAllOfSchemas(schema));\n}\nexport function createDeepAllOfMerge(shallowMerge) {\n return (schemaDef) => transformSchemaDefinition(schemaDef, (def) => {\n if (typeof def === \"boolean\" || def.allOf === undefined) {\n return def;\n }\n return shallowMerge(def);\n });\n}\n//# sourceMappingURL=all-of-merge.js.map","import { createComparator, createMerger, createShallowAllOfMerge } from '@x0k/json-schema-merge';\nimport { createDeduplicator, createIntersector } from '@x0k/json-schema-merge/lib/array';\nconst { compareSchemaDefinitions, compareSchemaValues } = createComparator();\nconst { mergeArrayOfSchemaDefinitions } = createMerger({\n intersectJson: createIntersector(compareSchemaValues),\n deduplicateJsonSchemaDef: createDeduplicator(compareSchemaDefinitions),\n});\n/** Shared `@x0k/json-schema-merge` shallow-allOf merge function used by `retrieveSchema` and\n * `omitExtraData`. Constructed once from a single comparator/merger/intersector/deduplicator\n * pipeline so both consumers share the same configuration without duplicating setup code.\n *\n * Usage: pass a schema that contains an `allOf` keyword and receive the merged result.\n *\n * @example\n * const merged = shallowAllOfMerge(schema); // schema.allOf is merged into the parent schema\n */\nexport default createShallowAllOfMerge(mergeArrayOfSchemaDefinitions);\n//# sourceMappingURL=shallowAllOfMerge.js.map","import { ADDITIONAL_PROPERTIES_KEY, ADDITIONAL_PROPERTY_FLAG, ALL_OF_KEY, ANY_OF_KEY, DEPENDENCIES_KEY, ID_KEY, IF_KEY, ITEMS_KEY, ONE_OF_KEY, PATTERN_PROPERTIES_KEY, PROPERTIES_KEY, REF_KEY, RJSF_REF_CYCLE_KEY, RJSF_REF_KEY, } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport findSchemaDefinition, { splitKeyElementFromObject } from \"../findSchemaDefinition.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport guessType from \"../guessType.js\";\nimport isObject from \"../isObject.js\";\nimport mergeSchemas from \"../mergeSchemas.js\";\nimport { getByPath } from \"../pathUtils.js\";\nimport getFirstMatchingOption from \"./getFirstMatchingOption.js\";\nimport shallowAllOfMerge from \"./shallowAllOfMerge.js\";\n/** Retrieves an expanded schema that has had all of its conditions, additional properties, references and dependencies\n * resolved and merged into the `schema` given a `validator`, `rootSchema` and `rawFormData` that is used to do the\n * potentially recursive resolution.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which retrieving a schema is desired\n * @param [rootSchema={}] - The root schema that will be forwarded to all the APIs\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs = false] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @returns - The schema having its conditions, additional properties, references and dependencies resolved\n */\nexport default function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs = false) {\n return retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, undefined, undefined, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs)[0];\n}\n/** Converts boolean schemas to equivalent object schemas for APIs that operate on `StrictRJSFSchema` objects.\n *\n * @param schema - The schema or boolean schema to normalize\n * @returns - The original schema or an equivalent object schema\n */\nfunction normalizeBooleanSchema(schema) {\n if (typeof schema !== 'boolean') {\n return schema;\n }\n return (schema ? {} : { not: {} });\n}\n/** Resolves a conditional block (if/else/then) by removing the condition and merging the appropriate conditional branch\n * with the rest of the schema. If `expandAllBranches` is true, then the `retrieveSchemaInteral()` results for both\n * conditions will be returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that is used to detect valid schema conditions\n * @param schema - The schema for which resolving a condition is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and\n * dependencies as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - A list of schemas with the appropriate conditions resolved, possibly with all branches expanded\n */\nexport function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n const { if: expression, then, else: otherwise, ...resolvedSchemaLessConditional } = schema;\n const conditionValue = validator.isValid(expression, formData || {}, rootSchema);\n let resolvedSchemas = [resolvedSchemaLessConditional];\n let schemas = [];\n if (expandAllBranches) {\n if (then && typeof then !== 'boolean') {\n const thenSchema = then;\n schemas = schemas.concat(retrieveSchemaInternal(validator, thenSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf));\n }\n if (otherwise && typeof otherwise !== 'boolean') {\n const otherwiseSchema = otherwise;\n schemas = schemas.concat(retrieveSchemaInternal(validator, otherwiseSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf));\n }\n }\n else {\n const conditionalBranch = (conditionValue ? then : otherwise);\n if (conditionalBranch !== undefined) {\n const conditionalSchema = normalizeBooleanSchema(conditionalBranch);\n schemas = schemas.concat(retrieveSchemaInternal(validator, conditionalSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf));\n }\n }\n if (schemas.length) {\n resolvedSchemas = schemas.map((s) => mergeSchemas(resolvedSchemaLessConditional, s));\n }\n return resolvedSchemas.flatMap((s) => retrieveSchemaInternal(validator, s, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf));\n}\n/** Given a list of lists of allOf, anyOf or oneOf values, create a list of lists of all permutations of the values. The\n * `listOfLists` is expected to be all resolved values of the 1st...nth schemas within an `allOf`, `anyOf` or `oneOf`.\n * From those lists, build a matrix for each `xxxOf` where there is more than one schema for a row in the list of lists.\n *\n * For example:\n * - If there are three xxxOf rows (A, B, C) and they have been resolved such that there is only one A, two B and three\n * C schemas then:\n * - The permutation for the first row is `[[A]]`\n * - The permutations for the second row are `[[A,B1], [A,B2]]`\n * - The permutations for the third row are `[[A,B1,C1], [A,B1,C2], [A,B1,C3], [A,B2,C1], [A,B2,C2], [A,B2,C3]]`\n *\n * @param listOfLists - The list of lists of elements that represent the allOf, anyOf or oneOf resolved values in order\n * @returns - The list of all permutations of schemas for a set of `xxxOf`s\n */\nexport function getAllPermutationsOfXxxOf(listOfLists) {\n const allPermutations = listOfLists.reduce((permutations, list) => {\n // When there are more than one set of schemas for a row, duplicate the set of permutations and add in the values\n if (list.length > 1) {\n return list.flatMap((element) => permutations.map((permutation) => [...permutation, element]));\n }\n // Otherwise just push in the single value into the current set of permutations\n permutations.forEach((permutation) => permutation.push(list[0]));\n return permutations;\n }, [[]]);\n return allPermutations;\n}\n/** Returns the subset of 'patternProperties' specifications that match the given 'key'\n *\n * @param schema - The schema whose 'patternProperties' are to be filtered\n * @param key - The key to match against the 'patternProperties' specifications\n * @returns - The subset of 'patternProperties' specifications that match the given 'key'\n */\nexport function getMatchingPatternProperties(schema, key) {\n const patternProperties = schema.patternProperties ?? {};\n return Object.fromEntries(Object.entries(patternProperties).filter(([pattern]) => RegExp(pattern).test(key)));\n}\n/** Resolves references and dependencies within a schema and its 'allOf' children. Passes the `expandAllBranches` flag\n * down to the `retrieveSchemaInternal()`, `resolveReference()` and `resolveDependencies()` helper calls. If\n * `expandAllBranches` is true, then all possible dependencies and/or allOf branches are returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @returns - The list of schemas having its references, dependencies and allOf schemas resolved\n */\nexport function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {\n const updatedSchemas = resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs);\n if (updatedSchemas.length > 1 || updatedSchemas[0] !== schema) {\n // return the updatedSchemas array if it has either multiple schemas within it\n // OR the first schema is not the same as the original schema\n return updatedSchemas;\n }\n if (DEPENDENCIES_KEY in schema) {\n const resolvedSchemas = resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf);\n return resolvedSchemas.flatMap((s) => retrieveSchemaInternal(validator, s, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf));\n }\n if (ALL_OF_KEY in schema && Array.isArray(schema[ALL_OF_KEY])) {\n const allOfSchemaElements = schema.allOf.map((allOfSubschema) => retrieveSchemaInternal(validator, allOfSubschema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf));\n const allPermutations = getAllPermutationsOfXxxOf(allOfSchemaElements);\n return allPermutations.map((permutation) => ({\n ...schema,\n allOf: permutation,\n }));\n }\n // No $ref or dependencies or allOf attribute was found, returning the original schema.\n return [schema];\n}\n/** Resolves all references within a schema and then returns the `retrieveSchemaInternal()` if the resolved schema is\n * actually different than the original. Passes the `expandAllBranches` flag down to the `retrieveSchemaInternal()`\n * helper call.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a reference is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @returns - The list schemas retrieved after having all references resolved\n */\nexport function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {\n const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList, undefined, resolveAnyOfOrOneOfRefs);\n if (updatedSchema !== schema) {\n // Only call this if the schema was actually changed by the `resolveAllReferences()` function\n return retrieveSchemaInternal(validator, updatedSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs);\n }\n return [schema];\n}\n/** Resolves all references within the schema itself as well as any of its properties and array items.\n *\n * @param schema - The schema for which resolving all references is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param recurseList - List of $refs already resolved to prevent recursion\n * @param [baseURI] - The base URI to be used for resolving relative references\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @param [markCycleOnDetection=false] - When true and a recursive $ref is detected, the returned schema is tagged\n * with `__rjsf_ref_cycle: true` so that `SchemaField` can render a cycle indicator instead of recursing.\n * Should only be `true` when called from an **object-property** context, because object properties are always\n * rendered (creating an infinite loop), whereas array items and anyOf/oneOf branches are data-driven.\n * @returns - given schema will all references resolved or the original schema if no internal `$refs` were resolved\n */\nexport function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs, markCycleOnDetection = false) {\n if (!isObject(schema)) {\n return schema;\n }\n let resolvedSchema = schema;\n let currentBaseURI = baseURI;\n // resolve top level ref\n if (REF_KEY in resolvedSchema) {\n const { $ref, ...localSchema } = resolvedSchema;\n // Check for a recursive reference and stop the loop\n if (recurseList.includes($ref)) {\n return markCycleOnDetection ? { ...resolvedSchema, [RJSF_REF_CYCLE_KEY]: true } : resolvedSchema;\n }\n recurseList.push($ref);\n // Retrieve the referenced schema definition.\n const refSchema = findSchemaDefinition($ref, rootSchema, currentBaseURI);\n resolvedSchema = { ...refSchema, ...localSchema, [RJSF_REF_KEY]: $ref };\n if (ID_KEY in resolvedSchema) {\n currentBaseURI = resolvedSchema[ID_KEY];\n }\n }\n if (PROPERTIES_KEY in resolvedSchema) {\n const childrenLists = [];\n const updatedProps = {};\n for (const [key, value] of Object.entries(resolvedSchema[PROPERTIES_KEY] ?? {})) {\n const childList = [...recurseList];\n // Mark cycles only when NOT in resolveAnyOfOrOneOfRefs mode. When resolveAnyOfOrOneOfRefs=true\n // (e.g. from ObjectField), options are resolved against a shared recurseList that accumulates\n // refs across branches, causing false positives. In simple (non-anyOf) resolution, a $ref cycle\n // in an object property always causes an infinite render loop and must be caught.\n updatedProps[key] = resolveAllReferences(value, rootSchema, childList, currentBaseURI, resolveAnyOfOrOneOfRefs, !resolveAnyOfOrOneOfRefs);\n childrenLists.push(childList);\n }\n for (const ref of new Set(childrenLists.flat())) {\n if (!recurseList.includes(ref)) {\n recurseList.push(ref);\n }\n }\n resolvedSchema = { ...resolvedSchema, [PROPERTIES_KEY]: updatedProps };\n }\n if (ITEMS_KEY in resolvedSchema &&\n !Array.isArray(resolvedSchema.items) &&\n typeof resolvedSchema.items !== 'boolean') {\n resolvedSchema = {\n ...resolvedSchema,\n // Array items are only rendered when data exists, so a $ref cycle here does NOT cause an infinite render.\n items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, currentBaseURI, resolveAnyOfOrOneOfRefs),\n };\n }\n if (resolveAnyOfOrOneOfRefs) {\n let key;\n let schemas;\n if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {\n key = ANY_OF_KEY;\n schemas = resolvedSchema[ANY_OF_KEY];\n }\n else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {\n key = ONE_OF_KEY;\n schemas = resolvedSchema[ONE_OF_KEY];\n }\n if (key && schemas) {\n resolvedSchema = {\n ...resolvedSchema,\n [key]: schemas.map((s) => resolveAllReferences(s, rootSchema, recurseList, currentBaseURI, resolveAnyOfOrOneOfRefs)),\n };\n }\n }\n return deepEquals(schema, resolvedSchema) ? schema : resolvedSchema;\n}\n/** Creates new 'properties' items for each key in the `formData`\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param theSchema - The schema for which the existing additional properties is desired\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s * @param validator\n * @param [aFormData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The updated schema with additional properties stubbed\n */\nexport function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFormData, experimental_customMergeAllOf) {\n // Clone the schema so that we don't ruin the consumer's original\n const schema = {\n ...theSchema,\n properties: { ...theSchema.properties },\n };\n // make sure formData is an object\n const formData = aFormData && isObject(aFormData) ? aFormData : {};\n Object.keys(formData).forEach((key) => {\n if (key in schema.properties) {\n // No need to stub, our schema already has the property\n return;\n }\n if (PATTERN_PROPERTIES_KEY in schema) {\n const matchingProperties = getMatchingPatternProperties(schema, key);\n if (Object.keys(matchingProperties).length > 0) {\n schema.properties[key] = retrieveSchema(validator, { [ALL_OF_KEY]: Object.values(matchingProperties) }, rootSchema, formData[key], experimental_customMergeAllOf);\n schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;\n return;\n }\n }\n if (ADDITIONAL_PROPERTIES_KEY in schema && schema.additionalProperties !== false) {\n let additionalProperties;\n if (typeof schema.additionalProperties !== 'boolean') {\n if (REF_KEY in schema.additionalProperties) {\n additionalProperties = retrieveSchema(validator, { [REF_KEY]: schema.additionalProperties[REF_KEY] }, rootSchema, formData[key], experimental_customMergeAllOf);\n }\n else if ('type' in schema.additionalProperties) {\n additionalProperties = { ...schema.additionalProperties };\n }\n else if (ANY_OF_KEY in schema.additionalProperties || ONE_OF_KEY in schema.additionalProperties) {\n additionalProperties = {\n type: 'object',\n ...schema.additionalProperties,\n };\n }\n else {\n additionalProperties = { type: guessType(formData[key]) };\n }\n }\n else {\n additionalProperties = { type: guessType(formData[key]) };\n }\n // The type of our new key should match the additionalProperties value;\n schema.properties[key] = additionalProperties;\n // Set our additional property flag so we know it was dynamically added\n schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;\n }\n else {\n // Invalid property\n schema.properties[key] = { type: 'null' };\n // Set our additional property flag so we know it was dynamically added\n schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;\n }\n });\n return schema;\n}\n/**\n * Internal helper that merges allOf schemas using @x0k/json-schema-merge's shallow allOf merge\n * @param schema - The schema containing an `allOf` keyword\n * @returns The schema with allOf schemas merged\n */\nfunction mergeAllOf(schema) {\n return shallowAllOfMerge(schema);\n}\n/** Internal handler that retrieves an expanded schema that has had all of its conditions, additional properties,\n * references and dependencies resolved and merged into the `schema` given a `validator`, `rootSchema` and `rawFormData`\n * that is used to do the potentially recursive resolution. If `expandAllBranches` is true, then all possible branches\n * of the schema and its references, conditions and dependencies are returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which retrieving a schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema\n * @param [expandAllBranches=false] - Flag, if true, will return all possible branches of conditions, any/oneOf and\n * dependencies as a list of schemas\n * @param [recurseList=[]] - The optional, list of recursive references already processed\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @returns - The schema(s) resulting from having its conditions, additional properties, references and dependencies\n * resolved. Multiple schemas may be returned if `expandAllBranches` is true.\n */\nexport function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {\n if (!isObject(schema)) {\n return [{}];\n }\n const resolvedSchemas = resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs);\n return resolvedSchemas.flatMap((s) => {\n let resolvedSchema = s;\n if (IF_KEY in resolvedSchema) {\n return resolveCondition(validator, resolvedSchema, rootSchema, expandAllBranches, recurseList, rawFormData, experimental_customMergeAllOf);\n }\n if (ALL_OF_KEY in resolvedSchema) {\n // resolve allOf schemas\n if (expandAllBranches) {\n const { allOf, ...restOfSchema } = resolvedSchema;\n return [...allOf, restOfSchema];\n }\n try {\n const withContainsSchemas = [];\n const withoutContainsSchemas = [];\n // Collect Symbol-keyed properties from allOf subschemas before merging; shallowAllOfMerge\n // (external library) only operates on string keys and will drop them.\n const allOfSymbols = {};\n resolvedSchema.allOf?.forEach((allOfItem) => {\n if (typeof allOfItem === 'object' && allOfItem.contains) {\n withContainsSchemas.push(allOfItem);\n }\n else {\n withoutContainsSchemas.push(allOfItem);\n for (const sym of Object.getOwnPropertySymbols(allOfItem)) {\n if (!(sym in allOfSymbols)) {\n allOfSymbols[sym] = allOfItem[sym];\n }\n }\n }\n });\n if (withContainsSchemas.length) {\n resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };\n }\n resolvedSchema = experimental_customMergeAllOf\n ? experimental_customMergeAllOf(resolvedSchema)\n : mergeAllOf(resolvedSchema);\n // Re-apply collected Symbol properties that the merge dropped.\n for (const sym of Object.getOwnPropertySymbols(allOfSymbols)) {\n resolvedSchema[sym] = allOfSymbols[sym];\n }\n if (withContainsSchemas.length) {\n resolvedSchema.allOf = withContainsSchemas;\n }\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.warn('could not merge subschemas in allOf:\\n', e);\n const { allOf, ...resolvedSchemaWithoutAllOf } = resolvedSchema;\n return resolvedSchemaWithoutAllOf;\n }\n }\n if (PROPERTIES_KEY in resolvedSchema && PATTERN_PROPERTIES_KEY in resolvedSchema) {\n resolvedSchema = Object.keys(resolvedSchema.properties).reduce((acc, key) => {\n const matchingProperties = getMatchingPatternProperties(acc, key);\n if (Object.keys(matchingProperties).length > 0) {\n acc.properties[key] = retrieveSchema(validator, { allOf: [acc.properties[key], ...Object.values(matchingProperties)] }, rootSchema, getByPath(rawFormData, key), experimental_customMergeAllOf);\n }\n return acc;\n }, {\n ...resolvedSchema,\n properties: { ...resolvedSchema.properties },\n });\n }\n const hasAdditionalProperties = PATTERN_PROPERTIES_KEY in resolvedSchema ||\n (ADDITIONAL_PROPERTIES_KEY in resolvedSchema && resolvedSchema.additionalProperties !== false);\n if (hasAdditionalProperties) {\n return stubExistingAdditionalProperties(validator, resolvedSchema, rootSchema, rawFormData, experimental_customMergeAllOf);\n }\n return resolvedSchema;\n });\n}\n/** Resolves an `anyOf` or `oneOf` within a schema (if present) to the list of schemas returned from\n * `retrieveSchemaInternal()` for the best matching option. If `expandAllBranches` is true, then a list of schemas for ALL\n * options are retrieved and returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which retrieving a schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema, defaults to an empty object\n * @returns - Either an array containing the best matching option or all options if `expandAllBranches` is true\n */\nexport function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranches, rawFormData) {\n let anyOrOneOf;\n const { oneOf, anyOf, ...remaining } = schema;\n if (Array.isArray(oneOf)) {\n anyOrOneOf = oneOf;\n }\n else if (Array.isArray(anyOf)) {\n anyOrOneOf = anyOf;\n }\n if (anyOrOneOf) {\n // Ensure that during expand all branches we pass an object rather than undefined so that all options are interrogated\n const formData = rawFormData === undefined && expandAllBranches ? {} : rawFormData;\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n anyOrOneOf = anyOrOneOf.map((s) => resolveAllReferences(s, rootSchema, []));\n // Call this to trigger the set of isValid() calls that the schema parser will need\n const option = getFirstMatchingOption(validator, formData, anyOrOneOf, rootSchema, discriminator);\n if (expandAllBranches) {\n // Also trigger isValid() for the relaxed variants so that precompiled validators capture their hashes.\n // omitExtraData's handleOneOf relaxes additionalProperties:false → true before scoring; those mutated\n // schemas must be present in a precompiled validator's compiled set or isValid() will throw at runtime.\n // Using getFirstMatchingOption (rather than calling isValid directly) ensures that the augmented forms\n // of each option (as constructed internally by getFirstMatchingOption for options with properties) are\n // also captured. The return value is discarded — the call is purely for ParserValidator's side effect.\n const relaxed = relaxOptionsForScoring(anyOrOneOf, false, rootSchema);\n getFirstMatchingOption(validator, formData, relaxed, rootSchema, discriminator);\n return anyOrOneOf.map((item) => mergeSchemas(remaining, item));\n }\n return [mergeSchemas(remaining, anyOrOneOf[option])];\n }\n return [schema];\n}\n/** Normalises a list of `oneOf`/`anyOf` options for use in option-scoring only (not for filtering).\n * Boolean schemas are converted to their object equivalents (`true` → `{}`, `false` → `{not:{}}`).\n * When `resolveRefs` is `true`, each object option is first passed through `resolveAllReferences`\n * so that `$ref`-based options expose their `additionalProperties` constraint before relaxation.\n * Any option whose `additionalProperties` is `false` is widened to `true` so that\n * `getClosestMatchingOption` / `validator.isValid()` does not produce false negatives when the\n * form data contains keys not listed in `properties`.\n *\n * @param options - The raw `oneOf`/`anyOf` array, which may contain boolean schemas\n * @param [resolveRefs=false] - When `true`, resolve `$ref`s in each option before relaxing; pass\n * `rootSchema` as well. Set `false` (default) when refs are already resolved at the call site.\n * @param [rootSchema] - Required when `resolveRefs` is `true`; the root schema used to look up `$ref`s\n * @returns - A new array of plain schema objects with `additionalProperties` relaxed where needed\n */\nexport function relaxOptionsForScoring(options, resolveRefs = false, rootSchema) {\n return options.map((d) => {\n if (!isObject(d)) {\n return normalizeBooleanSchema(d);\n }\n const schema = resolveRefs && rootSchema ? resolveAllReferences(d, rootSchema, []) : d;\n return schema.additionalProperties === false ? { ...schema, additionalProperties: true } : schema;\n });\n}\n/** Resolves dependencies within a schema and its 'anyOf/oneOf' children. Passes the `expandAllBranches` flag down to\n * the `resolveAnyOrOneOfSchema()` and `processDependencies()` helper calls.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a dependency is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The list of schemas with their dependencies resolved\n */\nexport function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n // Drop the dependencies from the source schema.\n const { dependencies, ...remainingSchema } = schema;\n const resolvedSchemas = resolveAnyOrOneOfSchemas(validator, remainingSchema, rootSchema, expandAllBranches, formData);\n return resolvedSchemas.flatMap((resolvedSchema) => processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf));\n}\n/** Processes all the `dependencies` recursively into the list of `resolvedSchema`s as needed. Passes the\n * `expandAllBranches` flag down to the `withDependentSchema()` and the recursive `processDependencies()` helper calls.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param dependencies - The set of dependencies that needs to be processed\n * @param resolvedSchema - The schema for which processing dependencies is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The schema with the `dependencies` resolved into it\n */\nexport function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n let schemas = [resolvedSchema];\n // Process dependencies updating the local schema properties as appropriate.\n for (const dependencyKey in dependencies) {\n if ((expandAllBranches || getByPath(formData, dependencyKey) !== undefined) &&\n (!resolvedSchema.properties || dependencyKey in resolvedSchema.properties)) {\n const [remainingDependencies, dependencyValue] = splitKeyElementFromObject(dependencyKey, dependencies);\n if (Array.isArray(dependencyValue)) {\n schemas[0] = withDependentProperties(resolvedSchema, dependencyValue);\n }\n else if (isObject(dependencyValue)) {\n schemas = withDependentSchema(validator, resolvedSchema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf);\n }\n return schemas.flatMap((schema) => processDependencies(validator, remainingDependencies, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf));\n }\n }\n return schemas;\n}\n/** Updates a schema with additionally required properties added\n *\n * @param schema - The schema for which resolving a dependent properties is desired\n * @param [additionallyRequired] - An optional array of additionally required names\n * @returns - The schema with the additional required values merged in\n */\nexport function withDependentProperties(schema, additionallyRequired) {\n if (!additionallyRequired) {\n return schema;\n }\n const required = Array.isArray(schema.required)\n ? Array.from(new Set([...schema.required, ...additionallyRequired]))\n : additionallyRequired;\n return { ...schema, required };\n}\n/** Merges a dependent schema into the `schema` dealing with oneOfs and references. Passes the `expandAllBranches` flag\n * down to the `retrieveSchemaInternal()`, `resolveReference()` and `withExactlyOneSubschema()` helper calls.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a dependent schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param dependencyKey - The key name of the dependency\n * @param dependencyValue - The potentially dependent schema\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData]- The current formData to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The list of schemas with the dependent schema resolved into them\n */\nexport function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n const dependentSchemas = retrieveSchemaInternal(validator, dependencyValue, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf);\n return dependentSchemas.flatMap((dependent) => {\n const { oneOf, ...dependentSchema } = dependent;\n const mergedSchema = mergeSchemas(schema, dependentSchema);\n // Since it does not contain oneOf, we return the original schema.\n if (oneOf === undefined) {\n return mergedSchema;\n }\n // Resolve $refs inside oneOf.\n const resolvedOneOfs = oneOf.map((subschema) => {\n if (typeof subschema === 'boolean' || !(REF_KEY in subschema)) {\n return [subschema];\n }\n return resolveReference(validator, subschema, rootSchema, expandAllBranches, recurseList, formData);\n });\n const allPermutations = getAllPermutationsOfXxxOf(resolvedOneOfs);\n return allPermutations.flatMap((resolvedOneOf) => withExactlyOneSubschema(validator, mergedSchema, rootSchema, dependencyKey, resolvedOneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf));\n });\n}\n/** Returns a list of `schema`s with the best choice from the `oneOf` options merged into it. If `expandAllBranches` is\n * true, then a list of schemas for ALL options are retrieved and returned. Passes the `expandAllBranches` flag down to\n * the `retrieveSchemaInternal()` helper call.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used to validate oneOf options\n * @param schema - The schema for which resolving a oneOf subschema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param dependencyKey - The key name of the oneOf dependency\n * @param oneOf - The list of schemas representing the oneOf options\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - Either an array containing the best matching option or all options if `expandAllBranches` is true\n */\nexport function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n const validSubschemas = oneOf.filter((subschema) => {\n if (typeof subschema === 'boolean' || !subschema?.properties) {\n return false;\n }\n const { [dependencyKey]: conditionPropertySchema } = subschema.properties;\n if (conditionPropertySchema) {\n const conditionSchema = {\n type: 'object',\n properties: {\n [dependencyKey]: conditionPropertySchema,\n },\n };\n return validator.isValid(conditionSchema, formData, rootSchema) || expandAllBranches;\n }\n return false;\n });\n if (!expandAllBranches && validSubschemas.length !== 1) {\n // oxlint-disable-next-line no-console\n console.warn(\"ignoring oneOf in dependencies because there isn't exactly one subschema that is valid\");\n return [schema];\n }\n return validSubschemas.flatMap((s) => {\n const subschema = s;\n const [dependentSubschema] = splitKeyElementFromObject(dependencyKey, subschema.properties);\n const dependentSchema = { ...subschema, properties: dependentSubschema };\n const schemas = retrieveSchemaInternal(validator, dependentSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf);\n return schemas.map((resolvedSubschema) => mergeSchemas(schema, resolvedSubschema));\n });\n}\n//# sourceMappingURL=retrieveSchema.js.map","import { CONST_KEY, DEFAULT_KEY, PROPERTIES_KEY } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport { getByPath } from \"../pathUtils.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Finds the option inside the `schema['any/oneOf']` list which has the `properties[selectorField].default` or\n * `properties[selectorField].const` that matches the `formData[selectorField]` value. For the purposes of this\n * function, `selectorField` is either `schema.discriminator.propertyName` or `fallbackField`. The `LayoutGridField`\n * works directly with schemas in a recursive manner, making this faster than `getFirstMatchingOption()`.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param schema - The schema element in which to search for the selected anyOf/oneOf option\n * @param fallbackField - The field to use as a backup selector field if the schema does not have a required field\n * @param xxx - Either `anyOf` or `oneOf`, defines which value is being sought\n * @param [formData={}] - The form data that is used to determine which anyOf/oneOf option to descend\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The anyOf/oneOf option that matches the selector field in the schema or undefined if nothing is selected\n */\nexport default function findSelectedOptionInXxxOf(validator, rootSchema, schema, fallbackField, xxx, formData = {}, experimental_customMergeAllOf) {\n if (Array.isArray(schema[xxx])) {\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const selectorField = discriminator || fallbackField;\n const xxxOfs = schema[xxx].map((xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf));\n const data = getByPath(formData, selectorField);\n if (data !== undefined) {\n return xxxOfs.find((xxxOfOption) => deepEquals(getByPath(xxxOfOption, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], getByPath(xxxOfOption, [PROPERTIES_KEY, selectorField, CONST_KEY])), data));\n }\n }\n return undefined;\n}\n//# sourceMappingURL=findSelectedOptionInXxxOf.js.map","import { REF_KEY } from \"../constants.js\";\nimport { getByPath, hasByPath, toPath } from \"../pathUtils.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Internal helper function that acts like `getByPath` but additionally retrieves `$ref`s as needed to get the path\n * for schemas containing potentially nested `$ref`s.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param schema - The current node within the JSON schema recursion\n * @param path - The remaining keys in the path to the desired property\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The internal schema from the `schema` for the given `path` or undefined if not found\n */\nfunction getFromSchemaInternal(validator, rootSchema, schema, path, experimental_customMergeAllOf) {\n let fieldSchema = schema;\n // hasByPath instead of `in` because `schema` can be undefined at runtime when drilling past a non-matching xxxOf\n if (hasByPath(schema, REF_KEY)) {\n fieldSchema = retrieveSchema(validator, schema, rootSchema, undefined, experimental_customMergeAllOf);\n }\n if (path.length === 0) {\n return fieldSchema;\n }\n const pathList = Array.isArray(path) ? [...path] : toPath(path);\n const [part, ...nestedPath] = pathList;\n if (part !== undefined && part !== '' && hasByPath(fieldSchema, part)) {\n fieldSchema = getByPath(fieldSchema, part);\n return getFromSchemaInternal(validator, rootSchema, fieldSchema, nestedPath, experimental_customMergeAllOf);\n }\n return undefined;\n}\nexport default function getFromSchema(validator, rootSchema, schema, path, defaultValue, experimental_customMergeAllOf) {\n const result = getFromSchemaInternal(validator, rootSchema, schema, path, experimental_customMergeAllOf);\n if (result === undefined) {\n return defaultValue;\n }\n return result;\n}\n//# sourceMappingURL=getFromSchema.js.map","import { ANY_OF_KEY, ONE_OF_KEY, PROPERTIES_KEY, REQUIRED_KEY } from \"../constants.js\";\nimport { getByPath, hasByPath } from \"../pathUtils.js\";\nimport findSelectedOptionInXxxOf from \"./findSelectedOptionInXxxOf.js\";\nimport getFromSchema from \"./getFromSchema.js\";\n/** Unique schema that represents no schema was found, exported for testing purposes */\nexport const NOT_FOUND_SCHEMA = { title: '!@#$_UNKNOWN_$#@!' };\n/** Finds the field specified by the `path` within the root or recursed `schema`. If there is no field for the specified\n * `path`, then the default `{ field: undefined, isRequired: undefined }` is returned. It determines whether a leaf\n * field is in the `required` list for its parent and if so, it is marked as required on return.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param schema - The node within the JSON schema in which to search\n * @param path - The keys in the path to the desired field\n * @param [formData={}] - The form data that is used to determine which anyOf/oneOf option to descend\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - An object that contains the field and its required state. If no field can be found then\n * `{ field: undefined, isRequired: undefined }` is returned.\n */\nexport default function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, experimental_customMergeAllOf) {\n const pathList = Array.isArray(path) ? [...path] : path.split('.');\n let parentField = schema;\n // store the desired field into a variable and removing it from the `pathList`\n const fieldName = pathList.pop();\n const fieldNameKey = String(fieldName);\n if (pathList.length) {\n // drilling into the schema for each sub-path and taking into account of the any/oneOfs\n pathList.forEach((subPath) => {\n parentField = getFromSchema(validator, rootSchema, parentField, [PROPERTIES_KEY, subPath], {}, experimental_customMergeAllOf);\n if (hasByPath(parentField, ONE_OF_KEY)) {\n // if this sub-path has a `oneOf` then use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ONE_OF_KEY, getByPath(formData, subPath), experimental_customMergeAllOf);\n }\n else if (hasByPath(parentField, ANY_OF_KEY)) {\n // if this sub-path has a `anyOf` then use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ANY_OF_KEY, getByPath(formData, subPath), experimental_customMergeAllOf);\n }\n });\n }\n if (hasByPath(parentField, ONE_OF_KEY)) {\n // When oneOf is in the root schema, use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ONE_OF_KEY, formData, experimental_customMergeAllOf);\n }\n else if (hasByPath(parentField, ANY_OF_KEY)) {\n // When anyOf is in the root schema, use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ANY_OF_KEY, formData, experimental_customMergeAllOf);\n }\n // taking the most updated `parentField`, get our desired field\n let field = getFromSchema(validator, rootSchema, parentField, [PROPERTIES_KEY, fieldName], NOT_FOUND_SCHEMA, experimental_customMergeAllOf);\n if (field === NOT_FOUND_SCHEMA) {\n field = undefined;\n }\n // check to see if our desired field is in the `required` list for its parent\n const requiredArray = getFromSchema(validator, rootSchema, parentField, REQUIRED_KEY, [], experimental_customMergeAllOf);\n let isRequired;\n if (field && Array.isArray(requiredArray)) {\n isRequired = requiredArray.includes(fieldNameKey);\n }\n return { field, isRequired };\n}\n//# sourceMappingURL=findFieldInSchema.js.map","import { ONE_OF_KEY, REF_KEY, JUNK_OPTION_ID, ANY_OF_KEY } from \"../constants.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getOptionMatchingSimpleDiscriminator from \"../getOptionMatchingSimpleDiscriminator.js\";\nimport guessType from \"../guessType.js\";\nimport isObject from \"../isObject.js\";\nimport { getByPath, hasByPath } from \"../pathUtils.js\";\nimport getFirstMatchingOption from \"./getFirstMatchingOption.js\";\nimport retrieveSchema, { resolveAllReferences } from \"./retrieveSchema.js\";\n/** A junk option used to determine when the getFirstMatchingOption call really matches an option rather than returning\n * the first item\n */\nexport const JUNK_OPTION = {\n type: 'object',\n $id: JUNK_OPTION_ID,\n properties: {\n __not_really_there__: {\n type: 'number',\n },\n },\n};\n/** Recursive function that calculates the score of a `formData` against the given `schema`. The computation is fairly\n * simple. Initially the total score is 0. When `schema.properties` object exists, then all the `key/value` pairs within\n * the object are processed as follows after obtaining the formValue from `formData` using the `key`:\n * - If the `value` contains a `$ref`, `calculateIndexScore()` is called recursively with the formValue and the new\n * schema that is the result of the ref in the schema being resolved and that sub-schema's resulting score is added to\n * the total.\n * - If the `value` contains a `oneOf` and there is a formValue, then score based on the index returned from calling\n * `getClosestMatchingOption()` of that oneOf.\n * - If the type of the `value` is 'object', `calculateIndexScore()` is called recursively with the formValue and the\n * `value` itself as the sub-schema, and the score is added to the total.\n * - If the type of the `value` matches the guessed-type of the `formValue`, the score is incremented by 1, UNLESS the\n * value has a `default` or `const`. In those case, if the `default` or `const` and the `formValue` match, the score\n * is incremented by another 1 otherwise it is decremented by 1.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param rootSchema - The root JSON schema of the entire form\n * @param schema - The schema for which the score is being calculated\n * @param formData - The form data associated with the schema, used to calculate the score\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The score a schema against the formData\n */\nexport function calculateIndexScore(validator, rootSchema, schema, formData, experimental_customMergeAllOf) {\n let totalScore = 0;\n if (schema) {\n if (isObject(schema.properties)) {\n totalScore += Object.entries(schema.properties).reduce((score, [key, value]) => {\n const formValue = formData?.[key];\n if (typeof value === 'boolean') {\n return score;\n }\n if (hasByPath(value, REF_KEY)) {\n const newSchema = retrieveSchema(validator, value, rootSchema, formValue, experimental_customMergeAllOf);\n return (score +\n calculateIndexScore(validator, rootSchema, newSchema, formValue || {}, experimental_customMergeAllOf));\n }\n if ((hasByPath(value, ONE_OF_KEY) || hasByPath(value, ANY_OF_KEY)) && formValue) {\n const xxxOfKey = hasByPath(value, ONE_OF_KEY) ? ONE_OF_KEY : ANY_OF_KEY;\n const discriminator = getDiscriminatorFieldFromSchema(value);\n return (score +\n getClosestMatchingOption(validator, rootSchema, formValue, getByPath(value, xxxOfKey), -1, discriminator, experimental_customMergeAllOf));\n }\n if (value.type === 'object') {\n // If the structure is matching then give it a little boost in score\n const structureBoost = typeof formValue === 'object' && formValue !== null ? 1 : 0;\n return (score +\n structureBoost +\n calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf));\n }\n if (value.type === guessType(formValue)) {\n // If the types match, then we bump the score by one\n let newScore = score + 1;\n if (value.default) {\n // If the schema contains a readonly default value score the value that matches the default higher and\n // any non-matching value lower\n newScore += formValue === value.default ? 1 : -1;\n }\n else if (value.const) {\n // If the schema contains a const value score the value that matches the default higher and\n // any non-matching value lower\n newScore += formValue === value.const ? 1 : -1;\n }\n // TODO eventually, deal with enums/arrays\n return newScore;\n }\n return score;\n }, 0);\n }\n else if (typeof schema.type === 'string' && schema.type === guessType(formData)) {\n totalScore += 1;\n }\n }\n return totalScore;\n}\n/** Determines which of the given `options` provided most closely matches the `formData`. Using\n * `getFirstMatchingOption()` to match two schemas that differ only by the readOnly, default or const value of a field\n * based on the `formData` and returns 0 when there is no match. Rather than passing in all the `options` at once to\n * this utility, instead an array of valid option indexes is created by iterating over the list of options, call\n * `getFirstMatchingOptions` with a list of one junk option and one good option, seeing if the good option is considered\n * matched.\n *\n * Once the list of valid indexes is created, if there is only one valid index, just return it. Otherwise, if there are\n * no valid indexes, then fill the valid indexes array with the indexes of all the options. Next, the index of the\n * option with the highest score is determined by iterating over the list of valid options, calling\n * `calculateIndexScore()` on each, comparing it against the current best score, and returning the index of the one that\n * eventually has the best score.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param rootSchema - The root JSON schema of the entire form\n * @param formData - The form data associated with the schema\n * @param options - The list of options that can be selected from\n * @param [selectedOption=-1] - The index of the currently selected option, defaulted to -1 if not specified\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The index of the option that is the closest match to the `formData` or the `selectedOption` if no match\n */\nexport default function getClosestMatchingOption(validator, rootSchema, formData, options, selectedOption = -1, discriminatorField, experimental_customMergeAllOf) {\n // First resolve any refs in the options\n const resolvedOptions = options.map((option) => resolveAllReferences(option, rootSchema, []));\n const simpleDiscriminatorMatch = getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField);\n if (typeof simpleDiscriminatorMatch === 'number') {\n return simpleDiscriminatorMatch;\n }\n // Reduce the array of options down to a list of the indexes that are considered matching options\n const allValidIndexes = resolvedOptions.reduce((validList, option, index) => {\n const testOptions = [JUNK_OPTION, option];\n const match = getFirstMatchingOption(validator, formData, testOptions, rootSchema, discriminatorField);\n // The match is the real option, so add its index to list of valid indexes\n if (match === 1) {\n validList.push(index);\n }\n return validList;\n }, []);\n // There is only one valid index, so return it!\n if (allValidIndexes.length === 1) {\n return allValidIndexes[0];\n }\n if (!allValidIndexes.length) {\n // No indexes were valid, so we'll score all the options, add all the indexes\n allValidIndexes.push(...resolvedOptions.keys());\n }\n const scoreCount = new Set();\n // Score all the options in the list of valid indexes and return the index with the best score\n const { bestIndex } = allValidIndexes.reduce((scoreData, index) => {\n const { bestScore } = scoreData;\n const option = resolvedOptions[index];\n const score = calculateIndexScore(validator, rootSchema, option, formData, experimental_customMergeAllOf);\n scoreCount.add(score);\n if (score > bestScore) {\n return { bestIndex: index, bestScore: score };\n }\n return scoreData;\n }, { bestIndex: selectedOption, bestScore: 0 });\n // if all scores are the same go with selectedOption\n if (scoreCount.size === 1 && selectedOption >= 0) {\n return selectedOption;\n }\n return bestIndex;\n}\n//# sourceMappingURL=getClosestMatchingOption.js.map","import { CONST_KEY, getSchemaType, isObject } from \"./index.js\";\n/**\n * Checks if the schema const property value is an AJV $data reference\n * and the current schema is not an object or array\n *\n * @param schema - The schema to check if the const is an AJV $data reference\n * @returns - true if the schema const property value is an AJV $data reference otherwise false.\n */\nexport default function constIsAjvDataReference(schema) {\n const schemaConst = schema[CONST_KEY];\n const schemaType = getSchemaType(schema);\n return (isObject(schemaConst) && typeof schemaConst?.$data === 'string' && schemaType !== 'object' && schemaType !== 'array');\n}\n//# sourceMappingURL=constIsAjvDataReference.js.map","import { CONST_KEY } from \"./constants.js\";\n/** This function checks if the given `schema` matches a single constant value. This happens when either the schema has\n * an `enum` array with a single value or there is a `const` defined.\n *\n * @param schema - The schema for a field\n * @returns - True if the `schema` has a single constant value, false otherwise\n */\nexport default function isConstant(schema) {\n return (Array.isArray(schema.enum) && schema.enum.length === 1) || CONST_KEY in schema;\n}\n//# sourceMappingURL=isConstant.js.map","import isObject from \"./isObject.js\";\n/** Detects whether the given `schema` contains fixed items. This is the case when `schema.items` is an array that only\n * contains objects.\n *\n * @param schema - The schema in which to check for fixed items\n * @returns - True if there are fixed items in the schema, false otherwise\n */\nexport default function isFixedItems(schema) {\n return Array.isArray(schema.items) && schema.items.every((item) => isObject(item));\n}\n//# sourceMappingURL=isFixedItems.js.map","import isObject from \"./isObject.js\";\n/** Merges the `defaults` object of type `T` into the `formData` of type `T`\n *\n * When merging defaults and form data, we want to merge in this specific way:\n * - objects are deeply merged\n * - arrays are merged in such a way that:\n * - when the array is set in form data, only array entries set in form data\n * are deeply merged; additional entries from the defaults are ignored unless `mergeExtraArrayDefaults` is true, in\n * which case the extras are appended onto the end of the form data\n * - when the array is not set in form data, the default is copied over\n * - scalars are overwritten/set by form data unless undefined and there is a default AND `defaultSupercedesUndefined`\n * is true\n *\n * @param [defaults] - The defaults to merge\n * @param [formData] - The form data into which the defaults will be merged\n * @param [mergeExtraArrayDefaults=false] - If true, any additional default array entries are appended onto the formData\n * @param [defaultSupercedesUndefined=false] - If true, an explicit undefined value will be overwritten by the default value\n * @param [overrideFormDataWithDefaults=false] - If true, the default value will overwrite the form data value. If the value\n * doesn't exist in the default, we take it from formData and in the case where the value is set to undefined in formData.\n * This is useful when we have already merged formData with defaults and want to add an additional field from formData\n * that does not exist in defaults.\n * @returns - The resulting merged form data with defaults\n */\nexport default function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false, overrideFormDataWithDefaults = false) {\n if (Array.isArray(formData)) {\n const defaultsArray = Array.isArray(defaults) ? defaults : [];\n // If overrideFormDataWithDefaults is true, we want to override the formData with the defaults\n const overrideArray = overrideFormDataWithDefaults ? defaultsArray : formData;\n const overrideOppositeArray = overrideFormDataWithDefaults ? formData : defaultsArray;\n const mapped = overrideArray.map((value, idx) => {\n // We want to explicitly make sure that the value is NOT undefined since null, 0 and empty space are valid values\n if (overrideOppositeArray[idx] !== undefined) {\n return mergeDefaultsWithFormData(defaultsArray[idx], formData[idx], mergeExtraArrayDefaults, defaultSupercedesUndefined, overrideFormDataWithDefaults);\n }\n return value;\n });\n // Merge any extra defaults when mergeExtraArrayDefaults is true\n // Or when overrideFormDataWithDefaults is true and the default array is shorter than the formData array\n if ((mergeExtraArrayDefaults || overrideFormDataWithDefaults) && mapped.length < overrideOppositeArray.length) {\n mapped.push(...overrideOppositeArray.slice(mapped.length));\n }\n return mapped;\n }\n if (isObject(formData)) {\n // oxlint-disable-next-line prefer-object-spread -- spread loses T type, Object.assign preserves it\n const acc = Object.assign({}, defaults); // Prevent mutation of source object.\n const formDataObj = formData;\n const defaultsObj = isObject(defaults) ? defaults : undefined;\n return Object.keys(formDataObj).reduce((accumulator, key) => {\n const keyValue = formDataObj[key];\n const keyExistsInDefaults = defaultsObj !== undefined && key in defaultsObj;\n const keyExistsInFormData = key in formDataObj;\n const keyDefault = defaultsObj?.[key] ?? {};\n // If any direct child of this key's default is itself an object or array,\n // the shallow spread below would bypass its merge rules. Route those cases\n // to the recursive path; the recursive call repeats this check one level deeper.\n const defaultValueNeedsDeepMerge = keyExistsInDefaults &&\n isObject(keyDefault) &&\n Object.values(keyDefault).some((v) => isObject(v) || Array.isArray(v));\n const keyDefaultIsObject = keyExistsInDefaults && isObject(defaultsObj?.[key]);\n const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);\n if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueNeedsDeepMerge) {\n accumulator[key] = {\n ...defaultsObj?.[key],\n ...keyValue,\n };\n return accumulator;\n }\n accumulator[key] = mergeDefaultsWithFormData(defaultsObj?.[key], keyValue, mergeExtraArrayDefaults, defaultSupercedesUndefined, \n // overrideFormDataWithDefaults can be true only when the key value exists in defaults\n // Or if the key value doesn't exist in formData\n overrideFormDataWithDefaults && (keyExistsInDefaults || !keyExistsInFormData));\n return acc;\n }, acc);\n }\n /**\n * If the defaultSupercedesUndefined flag is true\n * And formData is set to undefined or null and defaults are defined\n * Or if formData is a number and is NaN return defaults\n * Or if overrideFormDataWithDefaults flag is true and formData is set to not undefined/null return defaults\n */\n if ((defaultSupercedesUndefined &&\n ((!(defaults === undefined) && formData == null) || (typeof formData === 'number' && Number.isNaN(formData)))) ||\n (overrideFormDataWithDefaults && formData != null)) {\n return defaults;\n }\n return formData;\n}\n//# sourceMappingURL=mergeDefaultsWithFormData.js.map","import isObject from \"./isObject.js\";\n/** Recursively merge deeply nested objects.\n *\n * @param obj1 - The first object to merge\n * @param obj2 - The second object to merge\n * @param [concatArrays=false] - Optional flag that, when true, will cause arrays to be concatenated. Use\n * \"preventDuplicates\" to merge arrays in a manner that prevents any duplicate entries from being merged.\n * NOTE: Uses shallow comparison for the duplicate checking.\n * @returns - A new object that is the merge of the two given objects\n */\nexport default function mergeObjects(obj1, obj2, concatArrays = false) {\n return Object.keys(obj2).reduce((acc, key) => {\n const left = obj1 ? obj1[key] : {}, right = obj2[key];\n if (obj1 && key in obj1 && isObject(right)) {\n acc[key] = mergeObjects(left, right, concatArrays);\n }\n else if (concatArrays && Array.isArray(left) && Array.isArray(right)) {\n let toMerge = right;\n if (concatArrays === 'preventDuplicates') {\n toMerge = right.reduce((result, value) => {\n if (!left.includes(value)) {\n result.push(value);\n }\n return result;\n }, []);\n }\n acc[key] = left.concat(toMerge);\n }\n else {\n acc[key] = right;\n }\n return acc;\n }, { ...obj1 }); // Prevent mutation of source object.\n}\n//# sourceMappingURL=mergeObjects.js.map","import { CONST_KEY, ENUM_KEY } from \"./constants.js\";\n/** Returns the constant value from the schema when it is either a single value enum or has a const key. Otherwise\n * throws an error.\n *\n * @param schema - The schema from which to obtain the constant value\n * @returns - The constant value for the schema\n * @throws - Error when the schema does not have a constant value\n */\nexport default function toConstant(schema) {\n if (ENUM_KEY in schema && Array.isArray(schema.enum) && schema.enum.length === 1) {\n return schema.enum[0];\n }\n if (CONST_KEY in schema) {\n return schema.const;\n }\n throw new Error('schema cannot be inferred as a constant');\n}\n//# sourceMappingURL=toConstant.js.map","import { CONST_KEY, DEFAULT_KEY } from \"./constants.js\";\nimport getDiscriminatorFieldFromSchema from \"./getDiscriminatorFieldFromSchema.js\";\nimport getPropertySchema from \"./getPropertySchema.js\";\nimport getUiOptions from \"./getUiOptions.js\";\nimport { getByPath } from \"./pathUtils.js\";\nimport toConstant from \"./toConstant.js\";\n/** Reorders `options` according to `order`, which may contain a `'*'` wildcard representing all\n * remaining options in their original order. Options not listed in `order` (and not covered by\n * a wildcard) are dropped.\n */\nfunction applyEnumOrder(options, order) {\n const optionsByValue = new Map(options.map((opt) => [String(opt.value), opt]));\n const orderedKeys = new Set(order.filter((v) => v !== '*').map(String));\n const rest = options.filter((opt) => !orderedKeys.has(String(opt.value)));\n return order.flatMap((entry) => {\n if (entry === '*') {\n return rest;\n }\n const opt = optionsByValue.get(String(entry));\n return opt ? [opt] : [];\n });\n}\n/** Gets the list of options from the `schema`. If the schema has an enum list, then those enum values are returned. The\n * label will be the same as the `value`.\n *\n * If the schema has a `oneOf` or `anyOf`, then the value is the list of either:\n * - The `const` values from the schema if present\n * - If the schema has a discriminator and the label using either the `schema.title` or the value. If a `uiSchema` is\n * provided, and it has the `ui:enumNames` matched with `enum` or it has an associated `oneOf` or `anyOf` with a list of\n * objects containing `ui:title` then the UI schema values will replace the values from the schema.\n *\n * @param schema - The schema from which to extract the options list\n * @param [uiSchema] - The optional uiSchema from which to get alternate labels for the options\n * @returns - The list of options from the schema\n */\nexport default function optionsList(schema, uiSchema) {\n if (schema.enum) {\n let enumNames;\n let enumOrder;\n if (uiSchema) {\n const { enumNames: uiEnumNames, enumOrder: uiEnumOrder } = getUiOptions(uiSchema);\n enumNames = uiEnumNames;\n enumOrder = uiEnumOrder;\n }\n let options = schema.enum.map((value, i) => {\n const label = Array.isArray(enumNames)\n ? enumNames[i] || String(value)\n : enumNames?.[String(value)] || String(value);\n return { label, value };\n });\n if (enumOrder) {\n options = applyEnumOrder(options, enumOrder);\n }\n return options;\n }\n let altSchemas = undefined;\n let altUiSchemas = undefined;\n if (schema.anyOf) {\n altSchemas = schema.anyOf;\n altUiSchemas = uiSchema?.anyOf;\n }\n else if (schema.oneOf) {\n altSchemas = schema.oneOf;\n altUiSchemas = uiSchema?.oneOf;\n }\n // See if there is a discriminator path specified in the schema, and if so, use it as the selectorField, otherwise\n // pull one from the uiSchema\n let selectorField = getDiscriminatorFieldFromSchema(schema);\n if (uiSchema) {\n const { optionsSchemaSelector = selectorField } = getUiOptions(uiSchema);\n selectorField = optionsSchemaSelector;\n }\n return altSchemas?.map((aSchemaDef, index) => {\n const { title } = getUiOptions(altUiSchemas?.[index]);\n const aSchema = aSchemaDef;\n let value;\n let label = title;\n if (selectorField) {\n const innerSchema = getPropertySchema(aSchema, selectorField);\n value = getByPath(innerSchema, DEFAULT_KEY, getByPath(innerSchema, CONST_KEY));\n // Use nullish coalescing so that an explicitly empty string title is preserved\n label = label ?? innerSchema?.title ?? aSchema.title ?? String(value);\n }\n else {\n value = toConstant(aSchema);\n label = label ?? aSchema.title ?? String(value);\n }\n return {\n schema: aSchema,\n label,\n value,\n };\n });\n}\n//# sourceMappingURL=optionsList.js.map","import isConstant from \"../isConstant.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Checks to see if the `schema` combination represents a select\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param theSchema - The schema for which check for a select flag is desired\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if schema contains a select, otherwise false\n */\nexport default function isSelect(validator, theSchema, rootSchema = {}, experimental_customMergeAllOf) {\n const schema = retrieveSchema(validator, theSchema, rootSchema, undefined, experimental_customMergeAllOf);\n const altSchemas = schema.oneOf || schema.anyOf;\n if (Array.isArray(schema.enum)) {\n return true;\n }\n if (Array.isArray(altSchemas)) {\n return altSchemas.every((altSchema) => typeof altSchema !== 'boolean' && isConstant(altSchema));\n }\n return false;\n}\n//# sourceMappingURL=isSelect.js.map","import isSelect from \"./isSelect.js\";\n/** Checks to see if the `schema` combination represents a multi-select\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which check for a multi-select flag is desired\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if schema contains a multi-select, otherwise false\n */\nexport default function isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) {\n if (!schema.uniqueItems || !schema.items || typeof schema.items === 'boolean') {\n return false;\n }\n return isSelect(validator, schema.items, rootSchema, experimental_customMergeAllOf);\n}\n//# sourceMappingURL=isMultiSelect.js.map","import { ALL_OF_KEY, ANY_OF_KEY, CONST_KEY, DEFAULT_KEY, DEPENDENCIES_KEY, IF_KEY, ONE_OF_KEY, REF_KEY, } from \"../constants.js\";\nimport constIsAjvDataReference from \"../constIsAjvDataReference.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport findSchemaDefinition from \"../findSchemaDefinition.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getPropertySchema from \"../getPropertySchema.js\";\nimport getSchemaType from \"../getSchemaType.js\";\nimport isConstant from \"../isConstant.js\";\nimport isFixedItems from \"../isFixedItems.js\";\nimport isObject from \"../isObject.js\";\nimport mergeDefaultsWithFormData from \"../mergeDefaultsWithFormData.js\";\nimport mergeObjects from \"../mergeObjects.js\";\nimport mergeSchemas from \"../mergeSchemas.js\";\nimport optionsList from \"../optionsList.js\";\nimport { getByPath } from \"../pathUtils.js\";\nimport getClosestMatchingOption from \"./getClosestMatchingOption.js\";\nimport isMultiSelect from \"./isMultiSelect.js\";\nimport isSelect from \"./isSelect.js\";\nimport retrieveSchema, { resolveDependencies } from \"./retrieveSchema.js\";\nconst PRIMITIVE_TYPES = ['string', 'number', 'integer', 'boolean', 'null'];\n/** Enum that indicates how `schema.additionalItems` should be handled by the `getInnerSchemaForArrayItem()` function.\n */\nexport var AdditionalItemsHandling;\n(function (AdditionalItemsHandling) {\n AdditionalItemsHandling[AdditionalItemsHandling[\"Ignore\"] = 0] = \"Ignore\";\n AdditionalItemsHandling[AdditionalItemsHandling[\"Invert\"] = 1] = \"Invert\";\n AdditionalItemsHandling[AdditionalItemsHandling[\"Fallback\"] = 2] = \"Fallback\";\n})(AdditionalItemsHandling || (AdditionalItemsHandling = {}));\n/** Given a `schema` will return an inner schema that for an array item. This is computed differently based on the\n * `additionalItems` enum and the value of `idx`. There are four possible returns:\n * 1. If `idx` is >= 0, then if `schema.items` is an array the `idx`th element of the array is returned if it is a valid\n * index and not a boolean, otherwise it falls through to 3.\n * 2. If `schema.items` is not an array AND truthy and not a boolean, then `schema.items` is returned since it actually\n * is a schema, otherwise it falls through to 3.\n * 3. If `additionalItems` is not `AdditionalItemsHandling.Ignore` and `schema.additionalItems` is an object, then\n * `schema.additionalItems` is returned since it actually is a schema, otherwise it falls through to 4.\n * 4. {} is returned representing an empty schema\n *\n * @param schema - The schema from which to get the particular item\n * @param [additionalItems=AdditionalItemsHandling.Ignore] - How do we want to handle additional items?\n * @param [idx=-1] - Index, if non-negative, will be used to return the idx-th element in a `schema.items` array\n * @returns - The best fit schema object from the `schema` given the `additionalItems` and `idx` modifiers\n */\nexport function getInnerSchemaForArrayItem(schema, additionalItems = AdditionalItemsHandling.Ignore, idx = -1) {\n if (idx >= 0) {\n if (Array.isArray(schema.items) && idx < schema.items.length) {\n const item = schema.items[idx];\n if (typeof item !== 'boolean') {\n return item;\n }\n }\n }\n else if (schema.items && !Array.isArray(schema.items) && typeof schema.items !== 'boolean') {\n return schema.items;\n }\n if (additionalItems !== AdditionalItemsHandling.Ignore && isObject(schema.additionalItems)) {\n return schema.additionalItems;\n }\n return {};\n}\n/** Determines whether `value` holds anything: a non-empty string or array, or an object with at least one own key.\n * Everything else — including numbers, booleans, `null` and `undefined` — has no content.\n *\n * @param value - The value to inspect\n * @returns - True if the value holds content, otherwise false\n */\nfunction hasContent(value) {\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return false;\n}\n/** Checks if the given `schema` contains the `null` type along with another type AND if the `default` contained within\n * the schema is `null` AND the `computedDefault` is empty. If all of those conditions are true, then the `schema`'s\n * default should be `null` rather than `computedDefault`.\n *\n * @param schema - The schema to inspect\n * @param computedDefault - The computed default for the schema\n * @returns - Flag indicating whether a null should be returned instead of the computedDefault\n */\nexport function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {\n const { default: schemaDefault, type } = schema;\n const shouldReturnNullAsDefault = Array.isArray(type) && type.includes('null') && !hasContent(computedDefault) && schemaDefault === null;\n return shouldReturnNullAsDefault ? null : computedDefault;\n}\n/** Either add `computedDefault` at `key` into `obj` or not add it based on its value, the value of\n * `includeUndefinedValues`, the value of `emptyObjectFields` and if its parent field is required. Generally undefined\n * `computedDefault` values are added only when `includeUndefinedValues` is either true/\"excludeObjectChildren\". If `\n * includeUndefinedValues` is false and `emptyObjectFields` is not \"skipDefaults\", then non-undefined and non-empty-object\n * values will be added based on certain conditions.\n *\n * @param acc - The object into which the computed default may be added\n * @param key - The key into the object at which the computed default may be added\n * @param computedDefault - The computed default value that maybe should be added to the obj\n * @param includeUndefinedValues - Optional flag, if true, cause undefined values to be added as defaults.\n * If \"excludeObjectChildren\", cause undefined values for this object and pass `includeUndefinedValues` as\n * false when computing defaults for any nested object properties. If \"allowEmptyObject\", prevents undefined\n * values in this object while allow the object itself to be empty and passing `includeUndefinedValues` as\n * false when computing defaults for any nested object properties.\n * @param isParentRequired - The optional boolean that indicates whether the parent field is required\n * @param requiredFields - The list of fields that are required\n * @param experimental_defaultFormStateBehavior - Optional configuration object, if provided, allows users to override\n * default form state behavior\n * @param isConst - Optional flag, if true, indicates that the schema has a const property defined, thus we should always return the computedDefault since it's coming from the const.\n * @param isNullType - The type of the schema is null\n */\nfunction maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false, isNullType = false) {\n const { emptyObjectFields = 'populateAllDefaults' } = experimental_defaultFormStateBehavior;\n if (includeUndefinedValues === true || isConst) {\n // If includeUndefinedValues is explicitly true\n // Or if the schema has a const property defined, then we should always return the computedDefault since it's coming from the const.\n acc[key] = computedDefault;\n }\n else if (includeUndefinedValues === 'excludeObjectChildren') {\n // Fix for Issue #4709: When in 'excludeObjectChildren' mode, don't set primitive fields to empty objects\n // Only add the computed default if it's not an empty object placeholder for a primitive field\n if ((isNullType && computedDefault !== undefined) ||\n !isObject(computedDefault) ||\n Object.keys(computedDefault).length > 0) {\n acc[key] = computedDefault;\n }\n // If computedDefault is an empty object {}, don't add it - let the field stay undefined\n }\n else if (emptyObjectFields !== 'skipDefaults') {\n // If isParentRequired is undefined, then we are at the root level of the schema so defer to the requiredness of\n // the field key itself in the `requiredField` list\n const isSelfOrParentRequired = isParentRequired === undefined ? requiredFields.includes(key) : isParentRequired;\n if (isObject(computedDefault)) {\n // If emptyObjectFields 'skipEmptyDefaults' store computedDefault if it's a non-empty object(e.g. not {})\n if (emptyObjectFields === 'skipEmptyDefaults') {\n if (Object.keys(computedDefault).length > 0) {\n acc[key] = computedDefault;\n }\n } // Else store computedDefault if it's a non-empty object(e.g. not {}) and satisfies certain conditions\n // Condition 1: If computedDefault is not empty or if the key is a required field\n // Condition 2: If the parent object is required or emptyObjectFields is not 'populateRequiredDefaults'\n else if ((Object.keys(computedDefault).length > 0 || requiredFields.includes(key)) &&\n (isSelfOrParentRequired || emptyObjectFields !== 'populateRequiredDefaults')) {\n acc[key] = computedDefault;\n }\n }\n else if (\n // Store computedDefault if it's a defined primitive (e.g., true) and satisfies certain conditions\n // Condition 1: computedDefault is not undefined\n // Condition 2: If emptyObjectFields is 'populateAllDefaults' or 'skipEmptyDefaults)\n // Or if isSelfOrParentRequired is 'true' and the key is a required field\n computedDefault !== undefined &&\n (emptyObjectFields === 'populateAllDefaults' ||\n emptyObjectFields === 'skipEmptyDefaults' ||\n (isSelfOrParentRequired && requiredFields.includes(key)))) {\n acc[key] = computedDefault;\n }\n }\n}\n/** Computes the defaults for the current `schema` given the `rawFormData` and `parentDefaults` if any. This drills into\n * each level of the schema, recursively, to fill out every level of defaults provided by the schema.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @returns - The resulting `formData` with all the defaults provided\n */\nexport function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {\n const { parentDefaults, rawFormData, rootSchema = {}, includeUndefinedValues = false, _recurseList = [], experimental_defaultFormStateBehavior, experimental_customMergeAllOf, required, shouldMergeDefaultsIntoFormData = false, initialDefaultsGenerated, } = computeDefaultsProps;\n let formData = (isObject(rawFormData) ? rawFormData : {});\n const schema = isObject(rawSchema) ? rawSchema : {};\n // Compute the defaults recursively: give highest priority to deepest nodes unless nestedDefaultsPrecedence is ancestorWins.\n let defaults = parentDefaults;\n const preferParentDefaults = defaults && experimental_defaultFormStateBehavior?.nestedDefaultsPrecedence === 'ancestorWins';\n // If we get a new schema, then we need to recompute defaults again for the new schema found.\n let schemaToCompute = null;\n let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;\n let updatedRecurseList = _recurseList;\n if (schema[CONST_KEY] !== undefined &&\n experimental_defaultFormStateBehavior?.constAsDefaults !== 'never' &&\n !constIsAjvDataReference(schema)) {\n defaults = schema[CONST_KEY];\n }\n else if (isObject(defaults) &&\n isObject(schema.default) &&\n !schema[ANY_OF_KEY] &&\n !schema[ONE_OF_KEY] &&\n !schema[REF_KEY]) {\n // For object defaults, merge defaults by precedence setting.\n // Skip this for anyOf/oneOf/$ref schemas - they need special handling.\n if (preferParentDefaults) {\n // Use schema.default as the base and only override values that are defined in parent defaults.\n defaults = mergeObjects(schema.default, defaults);\n }\n else {\n // Only override parent defaults that are defined in schema.default.\n defaults = mergeObjects(defaults, schema.default);\n }\n }\n else if (DEFAULT_KEY in schema &&\n !preferParentDefaults &&\n !schema[ANY_OF_KEY] &&\n !schema[ONE_OF_KEY] &&\n !schema[REF_KEY]) {\n // If the schema has a default value and parentDefaults does not have precedence\n // And if the schema does not have anyOf or oneOf (since we need to merge the defaults with the formData)\n // Then we should use it as the default.\n defaults = schema.default;\n }\n else if (REF_KEY in schema) {\n const refName = schema[REF_KEY];\n // Use referenced schema defaults for this node.\n if (!_recurseList.includes(refName)) {\n updatedRecurseList = _recurseList.concat(refName);\n schemaToCompute = findSchemaDefinition(refName, rootSchema);\n }\n // If the referenced schema exists and parentDefaults is not set\n // Then set the defaults from the current schema for the referenced schema.\n // Only do this if rawFormData has no meaningful data - we don't want to override user's existing values.\n // Check for undefined OR empty object - rawFormData may be coerced to {} when not an object.\n const hasNoExistingData = rawFormData === undefined || (isObject(rawFormData) && Object.keys(rawFormData).length === 0);\n if (schemaToCompute && !defaults && hasNoExistingData) {\n defaults = schema.default;\n }\n // If shouldMergeDefaultsIntoFormData is true\n // And the schemaToCompute is set and the rawFormData is not an object\n // Then set the formData to the rawFormData\n if (shouldMergeDefaultsIntoFormData && schemaToCompute && !isObject(rawFormData)) {\n formData = rawFormData;\n }\n }\n else if (DEPENDENCIES_KEY in schema) {\n // Get the default if set from properties to ensure the dependencies conditions are resolved based on it\n const defaultFormData = {\n ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults),\n ...formData,\n };\n const resolvedSchema = resolveDependencies(validator, schema, rootSchema, false, [], defaultFormData, experimental_customMergeAllOf);\n [schemaToCompute] = resolvedSchema; // pick the first element from resolve dependencies\n }\n else if (isFixedItems(schema) && !preferParentDefaults) {\n // If the schema contains fixed items and parentDefaults does not have precedence\n // Then construct defaults from defaults of array items.\n defaults = schema.items.map((itemSchema, idx) => computeDefaults(validator, itemSchema, {\n rootSchema,\n includeUndefinedValues,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n parentDefaults: Array.isArray(parentDefaults) ? parentDefaults[idx] : undefined,\n rawFormData: formData,\n required,\n shouldMergeDefaultsIntoFormData,\n }));\n }\n else if (ONE_OF_KEY in schema) {\n const { oneOf, ...remaining } = schema;\n if (oneOf.length === 0) {\n return undefined;\n }\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const { type = 'null' } = remaining;\n if (!Array.isArray(type) &&\n PRIMITIVE_TYPES.includes(type) &&\n experimental_dfsb_to_compute?.constAsDefaults === 'skipOneOf') {\n // If we are in a oneOf of a primitive type, then we want to pass constAsDefaults as 'never' for the recursion\n experimental_dfsb_to_compute = {\n ...experimental_dfsb_to_compute,\n constAsDefaults: 'never',\n };\n }\n schemaToCompute = oneOf[getClosestMatchingOption(validator, rootSchema, rawFormData ?? schema.default, oneOf, 0, discriminator, experimental_customMergeAllOf)];\n schemaToCompute = mergeSchemas(remaining, schemaToCompute);\n }\n else if (ANY_OF_KEY in schema) {\n const { anyOf, ...remaining } = schema;\n if (anyOf.length === 0) {\n return undefined;\n }\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n schemaToCompute = anyOf[getClosestMatchingOption(validator, rootSchema, rawFormData ?? schema.default, anyOf, 0, discriminator, experimental_customMergeAllOf)];\n schemaToCompute = mergeSchemas(remaining, schemaToCompute);\n }\n if (schemaToCompute) {\n return computeDefaults(validator, schemaToCompute, {\n rootSchema,\n includeUndefinedValues,\n _recurseList: updatedRecurseList,\n experimental_defaultFormStateBehavior: experimental_dfsb_to_compute,\n experimental_customMergeAllOf,\n parentDefaults: defaults,\n rawFormData: rawFormData ?? formData,\n required,\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n }\n // No defaults defined for this node, fallback to generic typed ones.\n if (defaults === undefined) {\n defaults = schema.default;\n }\n const defaultBasedOnSchemaType = getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults);\n let defaultsWithFormData = defaultBasedOnSchemaType ?? defaults;\n // if shouldMergeDefaultsIntoFormData is true, then merge the defaults into the formData.\n if (shouldMergeDefaultsIntoFormData) {\n const { arrayMinItems = {} } = experimental_defaultFormStateBehavior || {};\n const { mergeExtraDefaults } = arrayMinItems;\n const matchingFormData = ensureFormDataMatchingSchema(validator, schema, rootSchema, rawFormData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n if (!isObject(rawFormData) || ALL_OF_KEY in schema) {\n // If the formData is not an object which means it's a primitive field, then we need to merge the defaults into the formData.\n // Or if the schema has allOf, we need to merge the defaults into the formData because we don't compute the defaults for allOf.\n defaultsWithFormData = mergeDefaultsWithFormData(defaultsWithFormData, matchingFormData, mergeExtraDefaults, true);\n }\n }\n return defaultsWithFormData;\n}\n/**\n * Ensure that the formData matches the given schema. If it's not matching in the case of a selectField, we change it to match the schema.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the formData state is desired\n * @param rootSchema - The root schema, used to primarily to look up `$ref`s\n * @param formData - The current formData\n * @param [experimental_defaultFormStateBehavior] - Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - valid formData that matches schema\n */\nexport function ensureFormDataMatchingSchema(validator, schema, rootSchema, formData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {\n const shouldRetrieveAllOf = experimental_defaultFormStateBehavior?.allOf === 'populateDefaults' && ALL_OF_KEY in schema;\n const schemaToMatch = shouldRetrieveAllOf\n ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf)\n : schema;\n const isSelectField = !isConstant(schemaToMatch) &&\n isSelect(validator, schemaToMatch, rootSchema, experimental_customMergeAllOf);\n let validFormData = formData;\n if (isSelectField) {\n const getOptionsList = optionsList(schemaToMatch);\n const isValid = getOptionsList?.some((option) => deepEquals(option.value, formData));\n validFormData = isValid ? formData : undefined;\n }\n // Override the formData with the const if the constAsDefaults is set to always\n const constTakesPrecedence = schemaToMatch[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults === 'always';\n if (constTakesPrecedence) {\n validFormData = schemaToMatch.const;\n }\n else if (isObject(validFormData) && isObject(schemaToMatch.properties)) {\n validFormData = Object.keys(schemaToMatch.properties).reduce((acc, key) => {\n const propertySchema = getPropertySchema(schemaToMatch, key);\n if (key in acc && (shouldRetrieveAllOf || (isObject(propertySchema) && ALL_OF_KEY in propertySchema))) {\n acc[key] = ensureFormDataMatchingSchema(validator, propertySchema, rootSchema, acc[key], experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n }\n return acc;\n }, { ...validFormData });\n }\n return validFormData;\n}\n/** Computes the default value for objects.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @param defaults - Optional props for this function\n * @returns - The default value based on the schema type if they are defined for object or array schemas.\n */\nexport function getObjectDefaults(validator, rawSchema, { rawFormData, rootSchema = {}, includeUndefinedValues = false, _recurseList = [], experimental_defaultFormStateBehavior, experimental_customMergeAllOf, required, shouldMergeDefaultsIntoFormData, initialDefaultsGenerated, } = {}, defaults) {\n {\n const formData = (isObject(rawFormData) ? rawFormData : {});\n const schema = rawSchema;\n // Retrieve the schema:\n // - If schema contains `allOf` AND `experimental_defaultFormStateBehavior.allOf` is set to `populateDefaults`\n // - OR if schema contains an 'if' AND `emptyObjectFields` is not set to `skipEmptyDefaults`\n // This ensures we compute defaults correctly for schemas with these keywords.\n const shouldRetrieveSchema = (experimental_defaultFormStateBehavior?.allOf === 'populateDefaults' && ALL_OF_KEY in schema) ||\n (experimental_defaultFormStateBehavior?.emptyObjectFields !== 'skipEmptyDefaults' && IF_KEY in schema);\n const retrievedSchema = shouldRetrieveSchema\n ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf)\n : schema;\n const parentConst = retrievedSchema[CONST_KEY];\n const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce((acc, key) => {\n const propertySchema = getPropertySchema(retrievedSchema, key);\n // Check if the parent schema has a const property defined AND we are supporting const as defaults, then we\n // should always return the computedDefault since it's coming from the const.\n const hasParentConst = isObject(parentConst) && parentConst[key] !== undefined;\n const hasConst = ((isObject(propertySchema) && CONST_KEY in propertySchema) || hasParentConst) &&\n experimental_defaultFormStateBehavior?.constAsDefaults !== 'never' &&\n !constIsAjvDataReference(propertySchema);\n // Compute the defaults for this node, with the parent defaults we might\n // have from a previous run: defaults[key].\n const computedDefault = computeDefaults(validator, propertySchema, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n includeUndefinedValues: includeUndefinedValues === true,\n parentDefaults: getByPath(defaults, key),\n rawFormData: getByPath(formData, key),\n required: retrievedSchema.required?.includes(key),\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, required, retrievedSchema.required, experimental_defaultFormStateBehavior, hasConst, propertySchema?.type === 'null');\n return acc;\n }, {});\n if (retrievedSchema.additionalProperties && !initialDefaultsGenerated) {\n // as per spec additionalProperties may be either schema or boolean\n const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties)\n ? retrievedSchema.additionalProperties\n : {};\n const keys = new Set();\n const formDataRequired = [];\n Object.keys(formData)\n .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key])\n .forEach((key) => {\n keys.add(key);\n formDataRequired.push(key);\n });\n // Only seed keys from schema defaults when formData has no additionalProperties of its own.\n // If the user already has data (e.g. after a key rename), injecting default keys would\n // re-add stale entries that no longer exist in formData.\n if (isObject(defaults) && formDataRequired.length === 0) {\n Object.keys(defaults)\n .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key])\n .forEach((key) => keys.add(key));\n }\n keys.forEach((key) => {\n const computedDefault = computeDefaults(validator, additionalPropertiesSchema, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n includeUndefinedValues: includeUndefinedValues === true,\n parentDefaults: getByPath(defaults, key),\n rawFormData: getByPath(formData, key),\n required: retrievedSchema.required?.includes(key),\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n // Since these are additional properties we don't need to add the `experimental_defaultFormStateBehavior` prop\n maybeAddDefaultToObject(objectDefaults, key, computedDefault, includeUndefinedValues, required, formDataRequired);\n });\n }\n return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, objectDefaults);\n }\n}\n/** Computes the default value for arrays.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @param initialDefaults - Optional props for this function\n * @returns - The default value based on the schema type if they are defined for object or array schemas.\n */\nexport function getArrayDefaults(validator, rawSchema, { rawFormData, rootSchema = {}, _recurseList = [], experimental_defaultFormStateBehavior, experimental_customMergeAllOf, required, requiredAsRoot = false, shouldMergeDefaultsIntoFormData, initialDefaultsGenerated, } = {}, initialDefaults) {\n let defaults = initialDefaults;\n const schema = rawSchema;\n const arrayMinItemsStateBehavior = experimental_defaultFormStateBehavior?.arrayMinItems ?? {};\n const { populate: arrayMinItemsPopulate, mergeExtraDefaults: arrayMergeExtraDefaults } = arrayMinItemsStateBehavior;\n const neverPopulate = arrayMinItemsPopulate === 'never';\n const ignoreMinItemsFlagSet = arrayMinItemsPopulate === 'requiredOnly';\n const isPopulateAll = arrayMinItemsPopulate === 'all' || (!neverPopulate && !ignoreMinItemsFlagSet);\n const computeSkipPopulate = arrayMinItemsStateBehavior?.computeSkipPopulate ?? (() => false);\n const isSkipEmptyDefaults = experimental_defaultFormStateBehavior?.emptyObjectFields === 'skipEmptyDefaults';\n const emptyDefault = isSkipEmptyDefaults ? undefined : [];\n // Inject defaults into existing array defaults\n if (Array.isArray(defaults)) {\n defaults = defaults.map((item, idx) => {\n const schemaItem = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Fallback, idx);\n const itemFormData = Array.isArray(rawFormData) ? rawFormData[idx] : undefined;\n return computeDefaults(validator, schemaItem, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n parentDefaults: item,\n rawFormData: itemFormData,\n required,\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n });\n }\n // Deeply inject defaults into already existing form data\n if (Array.isArray(rawFormData)) {\n const schemaItem = getInnerSchemaForArrayItem(schema);\n if (neverPopulate) {\n defaults = rawFormData;\n }\n else {\n const itemDefaults = rawFormData.map((item, idx) => computeDefaults(validator, schemaItem, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n rawFormData: item,\n parentDefaults: getByPath(defaults, idx),\n required,\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n }));\n // If the populate 'requiredOnly' flag is set then we only merge and include extra defaults if they are required.\n // Or if populate 'all' is set we merge and include extra defaults.\n const mergeExtraDefaults = ((ignoreMinItemsFlagSet && required) || isPopulateAll) && arrayMergeExtraDefaults;\n defaults = mergeDefaultsWithFormData(defaults, itemDefaults, mergeExtraDefaults);\n }\n }\n const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;\n if (neverPopulate) {\n if (shouldMergeDefaultsIntoFormData && !required) {\n // Optional arrays with no existing data should be omitted entirely rather than defaulted to `[]`.\n // Required arrays still fall through to `defaults ?? emptyDefault` below so that `[]` is surfaced,\n // letting the validator report `minItems` violations instead of a missing-required-property error.\n return defaults;\n }\n return defaults ?? emptyDefault;\n }\n if (ignoreMinItemsFlagSet && !required) {\n // If no form data exists or defaults are set leave the field empty/non-existent, otherwise\n // return form data/defaults\n return defaults || undefined;\n }\n let arrayDefault;\n if (!schema.minItems ||\n isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) ||\n computeSkipPopulate(validator, schema, rootSchema) ||\n schema.minItems <= defaultsLength) {\n // we don't want undefined defaults unless it is both not required or not required as root\n arrayDefault = defaults || (!required && !requiredAsRoot) ? defaults : emptyDefault;\n }\n else {\n const defaultEntries = defaults || [];\n const fillerSchema = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Invert);\n const fillerDefault = fillerSchema.default;\n // Calculate filler entries for remaining items (minItems - existing raw data/defaults)\n const fillerEntries = Array.from({ length: schema.minItems - defaultsLength }, () => computeDefaults(validator, fillerSchema, {\n parentDefaults: fillerDefault,\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n required,\n shouldMergeDefaultsIntoFormData,\n }));\n // then fill up the rest with either the item default or empty, up to minItems\n arrayDefault = defaultEntries.concat(fillerEntries);\n }\n return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, arrayDefault);\n}\n/** Computes the default value based on the schema type.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @param defaults - Optional props for this function\n * @returns - The default value based on the schema type if they are defined for object or array schemas.\n */\nexport function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {\n switch (getSchemaType(rawSchema)) {\n // We need to recurse for object schema inner default values.\n case 'object': {\n return getObjectDefaults(validator, rawSchema, computeDefaultsProps, defaults);\n }\n case 'array': {\n return getArrayDefaults(validator, rawSchema, computeDefaultsProps, defaults);\n }\n case 'boolean': {\n // A required boolean with no explicit default gets false — it must be\n // present in the submitted data, and false is the natural zero-value.\n if (computeDefaultsProps.required && defaults === undefined) {\n return false;\n }\n return undefined;\n }\n default:\n return undefined;\n }\n}\n/** Returns the superset of `formData` that includes the given set updated to include any missing fields that have\n * computed to have defaults provided in the `schema`.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param theSchema - The schema for which the default state is desired\n * @param [formData] - The current formData, if any, onto which to provide any missing defaults\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults.\n * If \"excludeObjectChildren\", cause undefined values for this object and pass `includeUndefinedValues` as\n * false when computing defaults for any nested object properties.\n * @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param initialDefaultsGenerated - Optional flag, indicates whether or not initial defaults have been generated\n * @returns - The resulting `formData` with all the defaults provided\n */\nexport default function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, initialDefaultsGenerated) {\n if (!isObject(theSchema)) {\n throw new Error(`Invalid schema: ${theSchema}`);\n }\n const schema = retrieveSchema(validator, theSchema, rootSchema, formData, experimental_customMergeAllOf);\n // Get the computed defaults with 'shouldMergeDefaultsIntoFormData' set to true to merge defaults into formData.\n // This is done when for example the value from formData does not exist in the schema 'enum' property, in such\n // cases we take the value from the defaults because the value from the formData is not valid.\n const defaults = computeDefaults(validator, schema, {\n rootSchema,\n includeUndefinedValues,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n rawFormData: formData,\n shouldMergeDefaultsIntoFormData: true,\n initialDefaultsGenerated,\n requiredAsRoot: true,\n });\n if (schema.type !== 'object' && isObject(schema.default)) {\n return {\n ...defaults,\n ...formData,\n };\n }\n // If the formData is an object or an array, add additional properties from formData and override formData with\n // defaults since the defaults are already merged with formData.\n if (isObject(formData) || Array.isArray(formData)) {\n const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};\n const defaultSupercedesUndefined = mergeDefaultsIntoFormData === 'useDefaultIfFormDataUndefined';\n const matchingFormData = ensureFormDataMatchingSchema(validator, schema, rootSchema ?? schema, formData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n const result = mergeDefaultsWithFormData(defaults, matchingFormData, true, // set to true to add any additional default array entries.\n defaultSupercedesUndefined, true);\n return result;\n }\n return defaults;\n}\n//# sourceMappingURL=getDefaultFormState.js.map","import getUiOptions from \"./getUiOptions.js\";\n/** Checks to see if the `uiSchema` contains the `widget` field and that the widget is not `hidden`\n *\n * @param uiSchema - The UI Schema from which to detect if it is customized\n * @returns - True if the `uiSchema` describes a custom widget, false otherwise\n */\nexport default function isCustomWidget(uiSchema = {}) {\n return (\n // TODO: Remove the `&& uiSchema['ui:widget'] !== 'hidden'` once we support hidden widgets for arrays.\n // https://rjsf-team.github.io/react-jsonschema-form/docs/usage/widgets/#hidden-widgets\n 'widget' in getUiOptions(uiSchema) && getUiOptions(uiSchema).widget !== 'hidden');\n}\n//# sourceMappingURL=isCustomWidget.js.map","import { UI_WIDGET_KEY } from \"../constants.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Checks to see if the `schema` and `uiSchema` combination represents an array of files\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which check for array of files flag is desired\n * @param [uiSchema={}] - The UI schema from which to check the widget\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if schema/uiSchema contains an array of files, otherwise false\n */\nexport default function isFilesArray(validator, schema, uiSchema = {}, rootSchema, experimental_customMergeAllOf) {\n if (uiSchema[UI_WIDGET_KEY] === 'files') {\n return true;\n }\n if (schema.items) {\n const itemsSchema = retrieveSchema(validator, schema.items, rootSchema, undefined, experimental_customMergeAllOf);\n return itemsSchema.type === 'string' && itemsSchema.format === 'data-url';\n }\n return false;\n}\n//# sourceMappingURL=isFilesArray.js.map","import { ADDITIONAL_PROPERTY_FLAG, UI_FIELD_KEY, UI_WIDGET_KEY } from \"../constants.js\";\nimport getSchemaType from \"../getSchemaType.js\";\nimport getUiOptions from \"../getUiOptions.js\";\nimport isCustomWidget from \"../isCustomWidget.js\";\nimport isFilesArray from \"./isFilesArray.js\";\nimport isMultiSelect from \"./isMultiSelect.js\";\n/** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`\n * should be displayed in a UI.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the display label flag is desired\n * @param [uiSchema={}] - The UI schema from which to derive potentially displayable information\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [globalOptions={}] - The optional Global UI Schema from which to get any fallback `xxx` options\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if the label should be displayed or false if it should not\n */\nexport default function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOptions, experimental_customMergeAllOf) {\n const uiOptions = getUiOptions(uiSchema, globalOptions);\n const { label = true } = uiOptions;\n let displayLabel = Boolean(label);\n if (displayLabel) {\n const schemaType = getSchemaType(schema);\n const addedByAdditionalProperty = Boolean(schema[ADDITIONAL_PROPERTY_FLAG]);\n if (schemaType === 'array') {\n displayLabel =\n addedByAdditionalProperty ||\n isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) ||\n isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) ||\n isCustomWidget(uiSchema);\n }\n if (schemaType === 'object') {\n displayLabel = addedByAdditionalProperty;\n }\n if (schemaType === 'boolean' && uiSchema && !uiSchema[UI_WIDGET_KEY]) {\n displayLabel = false;\n }\n if (uiSchema?.[UI_FIELD_KEY]) {\n displayLabel = false;\n }\n }\n return displayLabel;\n}\n//# sourceMappingURL=getDisplayLabel.js.map","import { NAME_KEY, RJSF_ADDITIONAL_PROPERTIES_FLAG } from \"../constants.js\";\nimport findSchemaDefinition from \"../findSchemaDefinition.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getSchemaType from \"../getSchemaType.js\";\nimport isObject from \"../isObject.js\";\nimport { getByPath, hasByPath, setByPath, toPath } from \"../pathUtils.js\";\nimport getClosestMatchingOption from \"./getClosestMatchingOption.js\";\nimport isSelect from \"./isSelect.js\";\nimport { relaxOptionsForScoring, resolveAllReferences } from \"./retrieveSchema.js\";\nimport shallowAllOfMerge from \"./shallowAllOfMerge.js\";\n/** Returns the `formData` with only the elements specified in the `fields` list\n *\n * @param formData - The data for the `Form`\n * @param fields - The fields to keep while filtering\n * @deprecated - To be removed as an exported `@rjsf/utils` function in a future release\n */\nexport function getUsedFormData(formData, fields) {\n // For the case of a single input form\n if (fields.length === 0 && typeof formData !== 'object') {\n return formData;\n }\n // Keep only the values at the given field paths; `fields` contains either dotted strings or the\n // deep path lists produced by `getFieldNames()`\n const data = {};\n fields.forEach((field) => {\n const path = Array.isArray(field) ? field : toPath(field);\n if (hasByPath(formData, path)) {\n setByPath(data, path, getByPath(formData, path));\n }\n });\n if (Array.isArray(formData)) {\n return Object.keys(data).map((key) => data[key]);\n }\n return data;\n}\n/** Returns the list of field names from inspecting the `pathSchema` as well as using the `formData`\n *\n * @param pathSchema - The `PathSchema` object for the form\n * @param [formData] - The form data to use while checking for empty objects/arrays\n * @deprecated - To be removed as an exported `@rjsf/utils` function in a future release\n */\n// oxlint-disable-next-line typescript/no-deprecated\nexport function getFieldNames(pathSchema, formData) {\n const formValueHasData = (value, isLeaf) => {\n if (typeof value !== 'object' || value === null) {\n return true;\n }\n const isEmptyValue = Array.isArray(value) ? value.length === 0 : Object.keys(value).length === 0;\n return isEmptyValue || isLeaf;\n };\n const getAllPaths = (_obj, acc = [], paths = [[]]) => {\n const objKeys = Object.keys(_obj);\n objKeys.forEach((key) => {\n const data = _obj[key];\n if (typeof data === 'object') {\n const newPaths = paths.map((path) => [...path, key]);\n // If an object is marked with additionalProperties, all its keys are valid\n if (data[RJSF_ADDITIONAL_PROPERTIES_FLAG] && data[NAME_KEY] !== '') {\n acc.push(data[NAME_KEY]);\n }\n else {\n getAllPaths(data, acc, newPaths);\n }\n }\n else if (key === NAME_KEY && data !== '') {\n paths.forEach((path) => {\n const formValue = getByPath(formData, path);\n const isLeaf = objKeys.length === 1;\n // adds path to fieldNames if it points to a value or an empty object/array which is not a leaf\n if (formValueHasData(formValue, isLeaf) ||\n (Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf)))) {\n acc.push(path);\n }\n });\n }\n });\n return acc;\n };\n return getAllPaths(pathSchema);\n}\n/** Returns true when a form value is considered empty: null/undefined/'', an empty array, or a plain\n * object whose every own value is itself empty (recursive). Scalars like `0` and `false` are not empty.\n *\n * @param value - The value to check\n * @returns - True if the value is considered empty, false otherwise\n */\nexport function isValueEmpty(value) {\n if (value == null || value === '') {\n return true;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (isObject(value)) {\n return Object.values(value).every(isValueEmpty);\n }\n return false;\n}\n/** Merges an `allOf` schema into a single flat schema, delegating to `experimental_customMergeAllOf`\n * when provided or falling back to the module-level `shallowAllOfMerge` otherwise.\n *\n * @param schema - A schema containing an `allOf` array to be merged\n * @param [experimental_customMergeAllOf] - Optional custom merge function; see `Form` documentation\n * @returns - The merged schema with `allOf` resolved into a single schema object\n */\nfunction doMergeAllOf(schema, experimental_customMergeAllOf) {\n return experimental_customMergeAllOf ? experimental_customMergeAllOf(schema) : shallowAllOfMerge(schema);\n}\n/** A recursive, schema-driven filter that walks `schema` and `formData` in lockstep, keeping only\n * values that are described by the schema. Handles `$ref`, `allOf`, `anyOf`, `oneOf`, `if/then/else`,\n * `patternProperties`, `additionalProperties`, `propertyNames`, and `dependencies`. Optional object\n * properties whose schema-filtered content is entirely empty (per `isValueEmpty`) are pruned; required\n * properties and scalar values are always kept when schema-defined.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which to filter the formData\n * @param [rootSchema] - The root schema, used primarily to look up `$ref`s\n * @param [formData] - The data for the `Form`\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The `formData` after omitting extra data, or `undefined` when `formData` is undefined\n */\nexport default function omitExtraData(validator, schema, rootSchema = {}, formData, experimental_customMergeAllOf) {\n /** Type predicate that narrows `value` to `GenericObjectType` — true when `value` is a plain,\n * non-array object (i.e. a JSON object). Used to distinguish JSON objects from arrays and primitives.\n *\n * @param value - The value to check\n * @returns - True if `value` is a plain non-array object\n */\n function isObjectValue(value) {\n return isObject(value);\n }\n /** Type predicate that narrows a `S | boolean` schema definition to `S` — true when `schemaDef` is\n * a schema object rather than a JSON Schema boolean shorthand (`true` meaning allow-all, `false`\n * meaning deny-all).\n *\n * @param schemaDef - The schema definition to check\n * @returns - True if `schemaDef` is a schema object\n */\n function isSchemaObj(schemaDef) {\n return isObject(schemaDef);\n }\n /** Copies schema-defined properties from `source` into `target`, applying `omit` recursively for\n * each value. Handles `properties`, `patternProperties`, and `additionalProperties`.\n * Optional object-valued properties are pruned when every key in the filtered result is both\n * optional (per the inner schema's `required`) and empty (per `isValueEmpty`). This preserves\n * optional objects whose required children have empty values, while still dropping objects whose\n * schema-filtered content is entirely optional-and-empty. Required properties and scalar values\n * are always written when defined. Always returns `target` — pruning of the object itself is\n * the caller's responsibility.\n *\n * @param childSchema - The object schema describing which properties are allowed\n * @param source - The source form data object to read values from\n * @param target - The accumulator object to write filtered values into\n * @returns - `target` after all schema-defined properties have been processed\n */\n function handleObject(childSchema, source, target) {\n const { properties, additionalProperties, patternProperties } = childSchema;\n const requiredSet = new Set(childSchema.required ?? []);\n /** Recursively omits extra data from `value` via `omit`, then conditionally writes the result to\n * `target[key]`. Optional object-valued properties are dropped when every key in the filtered\n * result is both optional (within the inner schema's `required` list) and has an empty value per\n * `isValueEmpty`. This per-key approach prevents required-but-empty child properties — kept by\n * inner `setProperty` calls — from inadvertently causing the parent optional object to be dropped,\n * while still pruning optional objects whose schema-filtered content is entirely empty. Vacuously\n * true for `{}`, so empty results are always dropped. Scalar and array values are not pruned here.\n *\n * @param key - The property key to write on `target`\n * @param schemaDef - The schema (or boolean shorthand) that governs the value at `key`\n * @param value - The raw source value to filter\n * @param [required=false] - When true the property is never pruned regardless of its filtered value\n */\n function setProperty(key, schemaDef, value, required = false) {\n const v = omit(schemaDef, value, target[key]);\n if (!required && isObject(v)) {\n // Resolve $ref so we can inspect the effective required list for the inner schema.\n let sd = isSchemaObj(schemaDef) ? schemaDef : {};\n if (sd.$ref !== undefined) {\n sd = findSchemaDefinition(sd.$ref, rootSchema);\n }\n const innerRequired = new Set(sd.required ?? []);\n // Drop this optional object when every key in v is both optional in the inner schema\n // and has an empty value. Vacuously true for {} so empty objects are always dropped.\n const shouldDrop = Object.entries(v).every(([k, val]) => !innerRequired.has(k) && isValueEmpty(val));\n if (shouldDrop) {\n return;\n }\n }\n if (v !== undefined) {\n // oxlint-disable-next-line no-param-reassign\n target[key] = v;\n }\n }\n if (properties !== undefined) {\n for (const [key, schemaDef] of Object.entries(properties)) {\n setProperty(key, schemaDef, source[key], requiredSet.has(key));\n }\n }\n // Track keys not handled by properties/patterns so additionalProperties can pick them up.\n let patternPropertiesRest;\n if (patternProperties !== undefined) {\n patternPropertiesRest = [];\n const patterns = Object.entries(patternProperties).map(([pattern, schemaDef]) => [\n new RegExp(pattern),\n schemaDef,\n ]);\n const knownProperties = new Set(Object.keys(properties ?? {}));\n for (const [key, value] of Object.entries(source)) {\n if (!knownProperties.has(key)) {\n const matched = patterns.find(([re]) => re.test(key));\n if (matched === undefined) {\n patternPropertiesRest.push(key);\n }\n else {\n setProperty(key, matched[1], value);\n }\n }\n }\n }\n // JSON Schema spec: absent additionalProperties defaults to true (allow all extra keys). Here\n // we treat it as false so omitExtraData never inadvertently passes through undescribed keys.\n if (additionalProperties !== undefined && additionalProperties !== false) {\n const addlSchema = additionalProperties;\n if (patternPropertiesRest !== undefined) {\n for (const key of patternPropertiesRest) {\n setProperty(key, addlSchema, source[key]);\n }\n }\n else {\n const knownProperties = new Set(Object.keys(properties ?? {}));\n for (const [key, value] of Object.entries(source)) {\n if (!knownProperties.has(key)) {\n setProperty(key, addlSchema, value);\n }\n }\n }\n }\n return target;\n }\n /** Filters array elements from `source` into `target` according to `schema.items` and\n * `schema.additionalItems`. Only called when `items` is defined (guarded in `omit`). Uses index\n * assignment (not push) so a pre-populated `target` from a prior branch is overwritten rather than\n * appended to, preventing item duplication. For tuple schemas (`items` is an array) elements up to\n * `min(items.length, source.length)` are filtered by their per-index schema; elements beyond the\n * tuple are covered by `additionalItems` when present, or the target is truncated when absent.\n * For list schemas (`items` is a single schema) every source element is filtered and `target.length`\n * is set to `source.length`.\n *\n * @param childSchema - The array schema describing `items` and optionally `additionalItems`\n * @param source - The source array to read elements from\n * @param target - The accumulator array to write filtered elements into\n * @returns - `target` after all applicable source elements have been written\n */\n function handleArray(childSchema, source, target) {\n const { items, additionalItems } = childSchema;\n if (Array.isArray(items)) {\n const tupleLength = Math.min(items.length, source.length);\n let i = 0;\n for (; i < tupleLength; i += 1) {\n // oxlint-disable-next-line no-param-reassign\n target[i] = omit(items[i], source[i]);\n }\n // Without additionalItems, truncate at the tuple boundary to drop any pre-existing items.\n if (!additionalItems) {\n // oxlint-disable-next-line no-param-reassign\n target.length = tupleLength;\n return target;\n }\n for (; i < source.length; i += 1) {\n // oxlint-disable-next-line no-param-reassign\n target[i] = omit(additionalItems, source[i]);\n }\n }\n else {\n for (let i = 0; i < source.length; i += 1) {\n // oxlint-disable-next-line no-param-reassign\n target[i] = omit(items, source[i]);\n }\n }\n // Truncate any pre-existing items beyond the source length.\n // oxlint-disable-next-line no-param-reassign\n target.length = source.length;\n return target;\n }\n /** Applies the `if/then/else` conditional keywords from `schema` to `target`. When `schema.if` is\n * absent the original `target` is returned unchanged. Otherwise the condition is evaluated — using\n * `validator.isValid` for schema conditions or the boolean value directly — and the matching branch\n * (`then` or `else`) is applied via `omit`. When the selected branch is absent, `target` is returned\n * unchanged.\n *\n * @param childSchema - The schema potentially containing `if`, `then`, and `else` keywords\n * @param source - The current form data value, passed to `validator.isValid` and the branch `omit`\n * @param target - The already-filtered value to merge the branch result into\n * @returns - The result of applying the matched branch, or `target` when no branch applies\n */\n function handleConditions(childSchema, source, target) {\n const { if: condition, then, else: otherwise } = childSchema;\n if (condition === undefined) {\n return target;\n }\n // validator.isValid signature: (schema, formData, rootSchema)\n const isThenBranch = isSchemaObj(condition)\n ? validator.isValid(condition, source, rootSchema)\n : condition;\n const branch = isThenBranch ? then : otherwise;\n return branch === undefined ? target : omit(branch, source, target, false);\n }\n /** Applies the best-matching `oneOf` option to `source`, merging the result into `target`. When\n * `oneOf` is not an array or the schema represents a select widget (enum-driven), `target` is\n * returned unchanged. `additionalProperties: false` is relaxed on each option before scoring so that\n * `getClosestMatchingOption` can validate freely, but the original option schema is used for the\n * actual `omit` call.\n *\n * @param oneOf - The `oneOf` array from the schema, or `undefined`\n * @param childSchema - The parent schema containing the `oneOf` keyword\n * @param source - The current form data value used to score each option\n * @param target - The already-filtered value to merge the winning option's result into\n * @returns - The result of applying the best-matching option, or `target` when no matching applies\n */\n function handleOneOf(oneOf, childSchema, source, target) {\n if (!Array.isArray(oneOf) || isSelect(validator, childSchema, rootSchema, experimental_customMergeAllOf)) {\n return target;\n }\n // Resolve $refs and relax additionalProperties:false → true in one pass for scoring only.\n // The unrelaxed resolved schema is re-derived for the winning option so that omit() still\n // respects additionalProperties:false during filtering.\n const scoringOptions = relaxOptionsForScoring(oneOf, true, rootSchema);\n const bestIndex = getClosestMatchingOption(validator, rootSchema, source, scoringOptions, 0, getDiscriminatorFieldFromSchema(childSchema), experimental_customMergeAllOf);\n const winning = oneOf[bestIndex];\n // For object options, re-resolve without relaxation so additionalProperties:false is respected.\n // For boolean options, scoringOptions already holds the converted schema (true→{}, false→{not:{}}).\n const resolved = isObject(winning)\n ? resolveAllReferences(winning, rootSchema, [])\n : scoringOptions[bestIndex];\n return omit(resolved, source, target, false);\n }\n /** Applies `anyOf` branches from `schema` to `source`, merging results into `target`. When `anyOf`\n * is absent or not an array, `target` is returned unchanged. For undefined or empty sources (so that\n * defaults can flow through all branches) every branch is applied in sequence. For non-empty sources\n * the best-matching branch is selected via `handleOneOf`.\n *\n * @param childSchema - The schema potentially containing an `anyOf` keyword\n * @param source - The current form data value; empty or undefined triggers all-branch application\n * @param target - The already-filtered value to merge branch results into\n * @returns - The result after applying the relevant `anyOf` branch(es), or `target` when inapplicable\n */\n function handleAnyOf(childSchema, source, target) {\n const { anyOf } = childSchema;\n if (!Array.isArray(anyOf)) {\n return target;\n }\n // For undefined or empty collections, apply every branch so defaults flow through.\n if (source === undefined ||\n (Array.isArray(source) && source.length === 0) ||\n (isObject(source) && Object.keys(source).length === 0)) {\n let result = target;\n for (const branch of anyOf) {\n result = omit(branch, source, result, false);\n }\n return result;\n }\n return handleOneOf(anyOf, childSchema, source, target);\n }\n /** Applies schema-based `dependencies` from `schema` to `source`, merging each active dependency's\n * schema into `target` via `omit`. Property dependencies (plain string arrays) are skipped — only\n * schema dependencies are processed. A dependency is considered active when its trigger key is\n * present on `source`.\n *\n * @param childSchema - The schema potentially containing a `dependencies` keyword\n * @param source - The current form data value; must be a plain object for dependencies to apply\n * @param target - The already-filtered value to merge dependency results into\n * @returns - The result after applying all active schema dependencies, or `target` when inapplicable\n */\n function handleDependencies(childSchema, source, target) {\n const { dependencies } = childSchema;\n if (dependencies === undefined || !isObjectValue(source)) {\n return target;\n }\n let result = target;\n for (const [key, deps] of Object.entries(dependencies)) {\n // Skip property dependencies (string arrays); only process schema dependencies.\n if (key in source && !Array.isArray(deps)) {\n result = omit(deps, source, result, false);\n }\n }\n return result;\n }\n /** Core recursive filter. Resolves `$ref`s, merges `allOf`, then delegates to the type-specific\n * handlers (`handleObject`, `handleArray`) and keyword handlers (`handleAnyOf`, `handleOneOf`,\n * `handleConditions`, `handleDependencies`). Returns `undefined` when `source` is undefined or\n * `schemaDef` is `false`; when `schemaDef` is `true` or empty returns `target ?? source` (when\n * `useSourceAsFallback` is true) or `target` (when false) to avoid aliasing `source` as the\n * accumulator across multiple compositional branches.\n *\n * @param schemaDef - The schema (or boolean shorthand) to filter `source` against\n * @param source - The raw form data value to filter\n * @param [target] - An optional accumulator carrying results from prior oneOf/anyOf processing\n * @param [useSourceAsFallback=true] - When false a permissive schema (`true`/`{}`) returns `target`\n * rather than `source`, preventing compositional branches from aliasing the accumulator to `source`\n * @returns - The filtered value, or `undefined` when the schema rejects the value\n */\n function omit(schemaDef, source, target, useSourceAsFallback = true) {\n if (source === undefined || schemaDef === false) {\n return undefined;\n }\n if (schemaDef === true || !schemaDef || Object.keys(schemaDef).length === 0) {\n return target ?? (useSourceAsFallback ? source : undefined);\n }\n let localSchema = schemaDef;\n const { $ref: ref, allOf } = localSchema;\n if (ref !== undefined) {\n return omit(findSchemaDefinition(ref, rootSchema), source, target, useSourceAsFallback);\n }\n if (allOf) {\n localSchema = doMergeAllOf(localSchema, experimental_customMergeAllOf);\n // Schemas whose allOf entries contain if/then/else keywords may not fully merge: the merger\n // can only hoist one if/then/else triple to the parent level, so additional entries stay in\n // allOf. Process any that remain so their conditional properties are not silently dropped.\n // See: https://github.com/rjsf-team/react-jsonschema-form/issues/5142\n const remainingAllOf = localSchema.allOf;\n if (remainingAllOf) {\n for (let i = 0; i < remainingAllOf.length; i++) {\n // oxlint-disable-next-line no-param-reassign\n target = omit(remainingAllOf[i], source, target, false);\n }\n }\n }\n let filtered = handleAnyOf(localSchema, source, handleOneOf(localSchema.oneOf, localSchema, source, target));\n const type = getSchemaType(localSchema);\n if (type === 'object') {\n if (!isObjectValue(source)) {\n return undefined;\n }\n filtered = handleObject(localSchema, source, isObjectValue(filtered) ? filtered : {});\n }\n else if (type === 'array') {\n if (!Array.isArray(source)) {\n return undefined;\n }\n if (localSchema.items !== undefined) {\n filtered = handleArray(localSchema, source, Array.isArray(filtered) ? filtered : []);\n }\n }\n // Post-prune after conditions (oneOf/anyOf/if-then) but BEFORE dependencies: keys added by\n // dependency sub-schemas are legitimate extensions of the allowed property set and must not be\n // pruned. Keys added only by winning conditional branches are still removed here so the result\n // honours additionalProperties:false.\n const afterConditions = handleConditions(localSchema, source, filtered);\n if (localSchema.additionalProperties === false && isObjectValue(afterConditions)) {\n const knownKeys = new Set(Object.keys(localSchema.properties ?? {}));\n const patterns = localSchema.patternProperties\n ? Object.keys(localSchema.patternProperties).map((p) => new RegExp(p))\n : [];\n for (const key of Object.keys(afterConditions)) {\n if (!knownKeys.has(key) && !patterns.some((re) => re.test(key))) {\n // oxlint-disable-next-line no-param-reassign\n delete afterConditions[key];\n }\n }\n }\n const result = handleDependencies(localSchema, source, afterConditions);\n return result ?? (useSourceAsFallback ? source : undefined);\n }\n return omit(schema, formData);\n}\n//# sourceMappingURL=omitExtraData.js.map","import { CONST_KEY, DEFAULT_KEY, PROPERTIES_KEY, REF_KEY } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport getPropertySchema from \"../getPropertySchema.js\";\nimport { getByPath, hasByPath } from \"../pathUtils.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\nconst NO_VALUE = Symbol('no Value');\nfunction enumValuesForSchema(schema) {\n if (Array.isArray(schema.enum)) {\n return schema.enum;\n }\n const options = (schema.oneOf || schema.anyOf);\n if (!Array.isArray(options)) {\n return undefined;\n }\n const values = options\n .map((option) => {\n if (CONST_KEY in option) {\n return option[CONST_KEY];\n }\n return Array.isArray(option.enum) && option.enum.length === 1 ? option.enum[0] : NO_VALUE;\n })\n .filter((value) => value !== NO_VALUE);\n return values.length > 0 ? values : undefined;\n}\nfunction replacementForInvalidEnumValue(schema, formValue) {\n const enumValues = enumValuesForSchema(schema);\n if (!enumValues || enumValues.some((value) => deepEquals(value, formValue))) {\n return NO_VALUE;\n }\n const defaultValue = getByPath(schema, DEFAULT_KEY, NO_VALUE);\n if (defaultValue !== NO_VALUE && enumValues.some((value) => deepEquals(value, defaultValue))) {\n return defaultValue;\n }\n return enumValues.length === 1 ? enumValues[0] : undefined;\n}\n/** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the new\n * schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the nature\n * of schemas, this sanitization happens recursively for nested objects of data. Also, any properties in the old schema\n * that are non-existent in the new schema are set to `undefined`. The data sanitization process has the following flow:\n *\n * - If the new schema is an object that contains a `properties` object then:\n * - Create a `removeOldSchemaData` object, setting each key in the `oldSchema.properties` having `data` to undefined\n * - Create an empty `nestedData` object for use in the key filtering below:\n * - Iterate over each key in the `newSchema.properties` as follows:\n * - Get the `formValue` of the key from the `data`\n * - Get the `oldKeySchema` and `newKeyedSchema` for the key, defaulting to `{}` when it doesn't exist\n * - Retrieve the schema for any refs within each `oldKeySchema` and/or `newKeySchema`\n * - Get the types of the old and new keyed schemas and if the old doesn't exist or the old & new are the same then:\n * - If `removeOldSchemaData` has an entry for the key, delete it since the new schema has the same property\n * - If type of the key in the new schema is `object`:\n * - Store the value from the recursive `sanitizeDataForNewSchema` call in `nestedData[key]`\n * - Otherwise, check for default or const values:\n * - Get the old and new `default` values from the schema and check:\n * - If the new `default` value does not match the form value:\n * - If the key is new and its form value is undefined, or the old `default` matches the form value, then:\n * - Replace `removeOldSchemaData[key]` with the new `default`\n * - Otherwise, if the new schema is `readOnly` then replace `removeOldSchemaData[key]` with undefined\n * - Get the old and new `const` values from the schema and check:\n * - If the new `const` value does not match the form value:\n * - If the old `const` value DOES match the form value, then:\n * - Replace `removeOldSchemaData[key]` with the new `const`\n * - Otherwise, replace `removeOldSchemaData[key]` with undefined\n * - Once all keys have been processed, return an object built as follows:\n * - `{ ...data, ...removeOldSchemaData, ...nestedData }`\n * - If the new and old schema types are array and the `data` is an array then:\n * - If the type of the old and new schema `items` are a non-array objects:\n * - Retrieve the schema for any refs within each `oldKeySchema.items` and/or `newKeySchema.items`\n * - If the `type`s of both items are the same (or the old does not have a type):\n * - If the type is \"object\", then:\n * - For each element in the `data` recursively sanitize the data, stopping at `maxItems` if specified\n * - Otherwise, just return the `data` removing any values after `maxItems` if it is set\n * - If the type of the old and new schema `items` are booleans of the same value, return `data` as is\n * - Otherwise return `undefined`\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param rootSchema - The root JSON schema of the entire form\n * @param [newSchema] - The new schema for which the data is being sanitized\n * @param [oldSchema] - The old schema from which the data originated\n * @param [data={}] - The form data associated with the schema, defaulting to an empty object when undefined\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The new form data, with all the fields uniquely associated with the old schema set\n * to `undefined`. Will return `undefined` if the new schema is not an object containing properties.\n */\nexport default function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {\n // By default, we will clear the form data\n let newFormData;\n const newProperties = newSchema?.[PROPERTIES_KEY];\n // If the new schema is of type object and that object contains a list of properties\n if (newProperties) {\n // Create an object containing root-level keys in the old schema, setting each key to undefined to remove the data\n const removeOldSchemaData = {};\n const oldProperties = oldSchema?.[PROPERTIES_KEY];\n if (oldProperties) {\n Object.keys(oldProperties).forEach((key) => {\n if (hasByPath(data, key)) {\n removeOldSchemaData[key] = undefined;\n }\n });\n }\n const keys = Object.keys(newProperties);\n // Create a place to store nested data that will be a side-effect of the filter\n const nestedData = {};\n keys.forEach((key) => {\n const formValue = data?.[key];\n const isNewProperty = !hasByPath(oldSchema, [PROPERTIES_KEY, key]);\n let oldKeyedSchema = getPropertySchema(oldSchema, key);\n let newKeyedSchema = getPropertySchema(newSchema, key);\n // Resolve the refs if they exist\n if (hasByPath(oldKeyedSchema, REF_KEY)) {\n oldKeyedSchema = retrieveSchema(validator, oldKeyedSchema, rootSchema, formValue, experimental_customMergeAllOf);\n }\n if (hasByPath(newKeyedSchema, REF_KEY)) {\n newKeyedSchema = retrieveSchema(validator, newKeyedSchema, rootSchema, formValue, experimental_customMergeAllOf);\n }\n // Now get types and see if they are the same\n const oldSchemaTypeForKey = oldKeyedSchema.type;\n const newSchemaTypeForKey = newKeyedSchema.type;\n // Check if the old option has the same key with the same type\n if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {\n if (key in removeOldSchemaData) {\n // SIDE-EFFECT: remove the undefined value for a key that has the same type between the old and new schemas\n delete removeOldSchemaData[key];\n }\n // If it is an object, we'll recurse and store the resulting sanitized data for the key\n if (newSchemaTypeForKey === 'object' || (newSchemaTypeForKey === 'array' && Array.isArray(formValue))) {\n // SIDE-EFFECT: process the new schema type of object recursively to save iterations\n const itemData = sanitizeDataForNewSchema(validator, rootSchema, newKeyedSchema, isNewProperty && newSchemaTypeForKey === 'array' ? newKeyedSchema : oldKeyedSchema, formValue, experimental_customMergeAllOf);\n if (itemData !== undefined || newSchemaTypeForKey === 'array') {\n // only put undefined values for the array type and not the object type\n nestedData[key] = itemData;\n }\n }\n else {\n // Ok, the non-object types match, let's make sure that a default or a const of a different value is replaced\n // with the new default or const. This allows the case where two schemas differ that only by the default/const\n // value to be properly selected\n const newOptionDefault = getByPath(newKeyedSchema, DEFAULT_KEY, NO_VALUE);\n const oldOptionDefault = getByPath(oldKeyedSchema, DEFAULT_KEY, NO_VALUE);\n if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {\n if ((isNewProperty && formValue === undefined) || oldOptionDefault === formValue) {\n // Initialize a newly entered property or replace an old default with the new default.\n removeOldSchemaData[key] = newOptionDefault;\n }\n else if (newKeyedSchema.readOnly === true) {\n // If the new schema has the default set to read-only, treat it like a const and remove the value\n removeOldSchemaData[key] = undefined;\n }\n }\n const newOptionConst = getByPath(newKeyedSchema, CONST_KEY, NO_VALUE);\n const oldOptionConst = getByPath(oldKeyedSchema, CONST_KEY, NO_VALUE);\n if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {\n // Since this is a const, if the old value matches, replace the value with the new const otherwise clear it\n removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : undefined;\n }\n if (hasByPath(data, key)) {\n const enumReplacement = replacementForInvalidEnumValue(newKeyedSchema, formValue);\n if (enumReplacement !== NO_VALUE) {\n removeOldSchemaData[key] = enumReplacement;\n }\n }\n }\n }\n });\n newFormData = {\n ...(typeof data === 'string' || Array.isArray(data) ? undefined : data),\n ...removeOldSchemaData,\n ...nestedData,\n };\n // First apply removing the old schema data, then apply the nested data, then apply the old data keys to keep\n }\n else if (oldSchema?.type === 'array' && newSchema?.type === 'array' && Array.isArray(data)) {\n let oldSchemaItems = oldSchema.items;\n let newSchemaItems = newSchema.items;\n // If any of the array types `items` are arrays (remember arrays are objects) then we'll just drop the data\n // Eventually, we may want to deal with when either of the `items` are arrays since those tuple validations\n if (typeof oldSchemaItems === 'object' &&\n typeof newSchemaItems === 'object' &&\n !Array.isArray(oldSchemaItems) &&\n !Array.isArray(newSchemaItems)) {\n if (hasByPath(oldSchemaItems, REF_KEY)) {\n oldSchemaItems = retrieveSchema(validator, oldSchemaItems, rootSchema, data, experimental_customMergeAllOf);\n }\n if (hasByPath(newSchemaItems, REF_KEY)) {\n newSchemaItems = retrieveSchema(validator, newSchemaItems, rootSchema, data, experimental_customMergeAllOf);\n }\n // Now get types and see if they are the same\n const oldSchemaType = getByPath(oldSchemaItems, 'type');\n const newSchemaType = getByPath(newSchemaItems, 'type');\n // Check if the old option has the same key with the same type\n if (!oldSchemaType || oldSchemaType === newSchemaType) {\n const maxItems = newSchema.maxItems ?? -1;\n if (newSchemaType === 'object') {\n newFormData = data.reduce((newValue, aValue) => {\n const itemValue = sanitizeDataForNewSchema(validator, rootSchema, newSchemaItems, oldSchemaItems, aValue, experimental_customMergeAllOf);\n if (itemValue !== undefined && (maxItems < 0 || newValue.length < maxItems)) {\n newValue.push(itemValue);\n }\n return newValue;\n }, []);\n }\n else {\n // Filter out items that are no longer valid in the new items schema (e.g., enum values that changed)\n const newItemEnumValues = enumValuesForSchema(newSchemaItems);\n const filteredData = newItemEnumValues\n ? data.filter((item) => newItemEnumValues.some((v) => deepEquals(v, item)))\n : data;\n newFormData = maxItems > 0 && filteredData.length > maxItems ? filteredData.slice(0, maxItems) : filteredData;\n }\n }\n }\n else if (typeof oldSchemaItems === 'boolean' &&\n typeof newSchemaItems === 'boolean' &&\n oldSchemaItems === newSchemaItems) {\n // If they are both booleans and have the same value just return the data as is otherwise fall-thru to undefined\n newFormData = data;\n }\n // Also probably want to deal with `prefixItems` as tuples with the latest 2020 draft\n }\n return newFormData;\n}\n//# sourceMappingURL=sanitizeDataForNewSchema.js.map","// oxlint-disable typescript/no-deprecated\nimport { ADDITIONAL_PROPERTIES_KEY, ALL_OF_KEY, ANY_OF_KEY, DEPENDENCIES_KEY, IF_KEY, ITEMS_KEY, NAME_KEY, ONE_OF_KEY, PROPERTIES_KEY, REF_KEY, RJSF_ADDITIONAL_PROPERTIES_FLAG, } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getPropertySchema from \"../getPropertySchema.js\";\nimport isObject from \"../isObject.js\";\nimport { getByPath, setByPath } from \"../pathUtils.js\";\nimport getClosestMatchingOption from \"./getClosestMatchingOption.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** An internal helper that generates an `PathSchema` object for the `schema`, recursively with protection against\n * infinite recursion\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the `PathSchema` is desired\n * @param [name=''] - The base name for the schema\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [_recurseList=[]] - The list of retrieved schemas currently being recursed, used to prevent infinite recursion\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The `PathSchema` object for the `schema`\n */\nfunction toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {\n if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {\n const innerSchema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);\n const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, innerSchema));\n if (sameSchemaIndex === -1) {\n return toPathSchemaInternal(validator, innerSchema, name, rootSchema, formData, _recurseList.concat(innerSchema), experimental_customMergeAllOf);\n }\n }\n let pathSchema = {\n [NAME_KEY]: name.replace(/^\\./, ''),\n };\n if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {\n const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const index = getClosestMatchingOption(validator, rootSchema, formData, xxxOf, 0, discriminator, experimental_customMergeAllOf);\n const innerSchema = xxxOf[index];\n pathSchema = {\n ...pathSchema,\n ...toPathSchemaInternal(validator, innerSchema, name, rootSchema, formData, _recurseList, experimental_customMergeAllOf),\n };\n }\n if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {\n setByPath(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);\n const additionalSchema = (isObject(schema[ADDITIONAL_PROPERTIES_KEY]) ? schema[ADDITIONAL_PROPERTIES_KEY] : {});\n const definedProperties = schema[PROPERTIES_KEY] ?? {};\n for (const key of Object.keys((formData ?? {}))) {\n if (!(key in definedProperties)) {\n pathSchema[key] = toPathSchemaInternal(validator, additionalSchema, `${name}.${key}`, rootSchema, getByPath(formData, key), _recurseList, experimental_customMergeAllOf);\n }\n }\n }\n if (ITEMS_KEY in schema && Array.isArray(formData)) {\n const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;\n if (Array.isArray(schemaItems)) {\n formData.forEach((element, i) => {\n if (schemaItems[i]) {\n pathSchema[i] = toPathSchemaInternal(validator, schemaItems[i], `${name}.${i}`, rootSchema, element, _recurseList, experimental_customMergeAllOf);\n }\n else if (schemaAdditionalItems) {\n pathSchema[i] = toPathSchemaInternal(validator, schemaAdditionalItems, `${name}.${i}`, rootSchema, element, _recurseList, experimental_customMergeAllOf);\n }\n else {\n // oxlint-disable-next-line no-console\n console.warn(`Unable to generate path schema for \"${name}.${i}\". No schema defined for it`);\n }\n });\n }\n else {\n formData.forEach((element, i) => {\n pathSchema[i] = toPathSchemaInternal(validator, schemaItems, `${name}.${i}`, rootSchema, element, _recurseList, experimental_customMergeAllOf);\n });\n }\n }\n else if (PROPERTIES_KEY in schema) {\n // This is a deprecated function that is no longer used by RJSF\n // oxlint-disable-next-line guard-for-in\n for (const property in schema.properties) {\n const field = getPropertySchema(schema, property);\n pathSchema[property] = toPathSchemaInternal(validator, field, `${name}.${property}`, rootSchema, \n // It's possible that formData is not an object -- this can happen if an\n // array item has just been added, but not populated with data yet\n getByPath(formData, property), _recurseList, experimental_customMergeAllOf);\n }\n }\n return pathSchema;\n}\n/** Generates an `PathSchema` object for the `schema`, recursively\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the `PathSchema` is desired\n * @param [name=''] - The base name for the schema\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The `PathSchema` object for the `schema`\n * @deprecated - To be removed as an exported `@rjsf/utils` function in a future release\n */\nexport default function toPathSchema(validator, schema, name = '', rootSchema, formData, experimental_customMergeAllOf) {\n return toPathSchemaInternal(validator, schema, name, rootSchema, formData, undefined, experimental_customMergeAllOf);\n}\n//# sourceMappingURL=toPathSchema.js.map","import { ID_KEY, JSON_SCHEMA_DRAFT_2020_12, SCHEMA_KEY } from \"./constants.js\";\nimport deepEquals from \"./deepEquals.js\";\nimport { makeAllReferencesAbsolute } from \"./findSchemaDefinition.js\";\nimport { findFieldInSchema, findSelectedOptionInXxxOf, getDefaultFormState, getDisplayLabel, getClosestMatchingOption, getFirstMatchingOption, getFromSchema, isFilesArray, isMultiSelect, isSelect, omitExtraData, retrieveSchema, sanitizeDataForNewSchema, toPathSchema, } from \"./schema/index.js\";\n/** The `SchemaUtils` class provides a wrapper around the publicly exported APIs in the `utils/schema` directory such\n * that one does not have to explicitly pass the `validator`, `rootSchema`, `experimental_defaultFormStateBehavior` or\n * `experimental_customMergeAllOf` to each method. Since these generally do not change across a `Form`, this allows for\n * providing a simplified set of APIs to the `@rjsf/core` components and the various themes as well. This class\n * implements the `SchemaUtilsType` interface.\n */\nclass SchemaUtils {\n rootSchema;\n validator;\n experimental_defaultFormStateBehavior;\n experimental_customMergeAllOf;\n /** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param experimental_defaultFormStateBehavior - Configuration flags to allow users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n */\n constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {\n if (rootSchema?.[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n this.rootSchema = makeAllReferencesAbsolute(rootSchema, rootSchema[ID_KEY] ?? '#');\n }\n else {\n this.rootSchema = rootSchema;\n }\n this.validator = validator;\n this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;\n this.experimental_customMergeAllOf = experimental_customMergeAllOf;\n }\n /** Returns the `rootSchema` in the `SchemaUtilsType`\n *\n * @returns - The `rootSchema`\n */\n getRootSchema() {\n return this.rootSchema;\n }\n /** Returns the `ValidatorType` in the `SchemaUtilsType`\n *\n * @returns - The `ValidatorType`\n */\n getValidator() {\n return this.validator;\n }\n /** Determines whether either the `validator` and `rootSchema` differ from the ones associated with this instance of\n * the `SchemaUtilsType`. If either `validator` or `rootSchema` are falsy, then return false to prevent the creation\n * of a new `SchemaUtilsType` with incomplete properties.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be compared against the current one\n * @param rootSchema - The root schema that will be compared against the current one\n * @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if the `SchemaUtilsType` differs from the given `validator` or `rootSchema`\n */\n doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {\n // If either validator or rootSchema are falsy, return false to prevent the creation\n // of a new SchemaUtilsType with incomplete properties.\n if (!validator || !rootSchema) {\n return false;\n }\n return (this.validator !== validator ||\n !deepEquals(this.rootSchema, rootSchema) ||\n !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior) ||\n this.experimental_customMergeAllOf !== experimental_customMergeAllOf);\n }\n /** Finds the field specified by the `path` within the root or recursed `schema`. If there is no field for the specified\n * `path`, then the default `{ field: undefined, isRequired: undefined }` is returned. It determines whether a leaf\n * field is in the `required` list for its parent and if so, it is marked as required on return.\n *\n * @param schema - The current node within the JSON schema\n * @param path - The remaining keys in the path to the desired field\n * @param [formData] - The form data that is used to determine which oneOf option\n * @returns - An object that contains the field and its required state. If no field can be found then\n * `{ field: undefined, isRequired: undefined }` is returned.\n */\n findFieldInSchema(schema, path, formData) {\n return findFieldInSchema(this.validator, this.rootSchema, schema, path, formData, this.experimental_customMergeAllOf);\n }\n /** Finds the oneOf option inside the `schema['any/oneOf']` list which has the `properties[selectorField].default` that\n * matches the `formData[selectorField]` value. For the purposes of this function, `selectorField` is either\n * `schema.discriminator.propertyName` or `fallbackField`.\n *\n * @param schema - The schema element in which to search for the selected oneOf option\n * @param fallbackField - The field to use as a backup selector field if the schema does not have a required field\n * @param xxx - Either `oneOf` or `anyOf`, defines which value is being sought\n * @param [formData={}] - The form data that is used to determine which oneOf option\n * @returns - The anyOf/oneOf option that matches the selector field in the schema or undefined if nothing is selected\n */\n findSelectedOptionInXxxOf(schema, fallbackField, xxx, formData) {\n return findSelectedOptionInXxxOf(this.validator, this.rootSchema, schema, fallbackField, xxx, formData, this.experimental_customMergeAllOf);\n }\n /** Returns the superset of `formData` that includes the given set updated to include any missing fields that have\n * computed to have defaults provided in the `schema`.\n *\n * @param schema - The schema for which the default state is desired\n * @param [formData] - The current formData, if any, onto which to provide any missing defaults\n * @param [includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults.\n * If \"excludeObjectChildren\", pass `includeUndefinedValues` as false when computing defaults for any nested\n * object properties.\n * @param initialDefaultsGenerated - Indicates whether or not initial defaults have been generated\n * @returns - The resulting `formData` with all the defaults provided\n */\n getDefaultFormState(schema, formData, includeUndefinedValues = false, initialDefaultsGenerated) {\n return getDefaultFormState(this.validator, schema, formData, this.rootSchema, includeUndefinedValues, this.experimental_defaultFormStateBehavior, this.experimental_customMergeAllOf, initialDefaultsGenerated);\n }\n /** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`\n * should be displayed in a UI.\n *\n * @param schema - The schema for which the display label flag is desired\n * @param [uiSchema] - The UI schema from which to derive potentially displayable information\n * @param [globalOptions={}] - The optional Global UI Schema from which to get any fallback `xxx` options\n * @returns - True if the label should be displayed or false if it should not\n */\n getDisplayLabel(schema, uiSchema, globalOptions) {\n return getDisplayLabel(this.validator, schema, uiSchema, this.rootSchema, globalOptions, this.experimental_customMergeAllOf);\n }\n /** Determines which of the given `options` provided most closely matches the `formData`.\n * Returns the index of the option that is valid and is the closest match, or 0 if there is no match.\n *\n * The closest match is determined using the number of matching properties, and more heavily favors options with\n * matching readOnly, default, or const values.\n *\n * @param formData - The form data associated with the schema\n * @param options - The list of options that can be selected from\n * @param [selectedOption] - The index of the currently selected option, defaulted to -1 if not specified\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The index of the option that is the closest match to the `formData` or the `selectedOption` if no match\n */\n getClosestMatchingOption(formData, options, selectedOption, discriminatorField) {\n return getClosestMatchingOption(this.validator, this.rootSchema, formData, options, selectedOption, discriminatorField, this.experimental_customMergeAllOf);\n }\n /** Given the `formData` and list of `options`, attempts to find the index of the first option that matches the data.\n * Always returns the first option if there is nothing that matches.\n *\n * @param formData - The current formData, if any, used to figure out a match\n * @param options - The list of options to find a matching options from\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The firstindex of the matched option or 0 if none is available\n */\n getFirstMatchingOption(formData, options, discriminatorField) {\n return getFirstMatchingOption(this.validator, formData, options, this.rootSchema, discriminatorField);\n }\n getFromSchema(schema, path, defaultValue) {\n return getFromSchema(this.validator, this.rootSchema, schema, path, \n // @ts-expect-error TS2769: No overload matches this call\n defaultValue, this.experimental_customMergeAllOf);\n }\n /** Checks to see if the `schema` and `uiSchema` combination represents an array of files\n *\n * @param schema - The schema for which check for array of files flag is desired\n * @param [uiSchema] - The UI schema from which to check the widget\n * @returns - True if schema/uiSchema contains an array of files, otherwise false\n */\n isFilesArray(schema, uiSchema) {\n return isFilesArray(this.validator, schema, uiSchema, this.rootSchema, this.experimental_customMergeAllOf);\n }\n /** Checks to see if the `schema` combination represents a multi-select\n *\n * @param schema - The schema for which check for a multi-select flag is desired\n * @returns - True if schema contains a multi-select, otherwise false\n */\n isMultiSelect(schema) {\n return isMultiSelect(this.validator, schema, this.rootSchema, this.experimental_customMergeAllOf);\n }\n /** Checks to see if the `schema` combination represents a select\n *\n * @param schema - The schema for which check for a select flag is desired\n * @returns - True if schema contains a select, otherwise false\n */\n isSelect(schema) {\n return isSelect(this.validator, schema, this.rootSchema, this.experimental_customMergeAllOf);\n }\n /**\n * The function takes a `schema` and `formData` and returns a copy of the formData with any fields not defined in the schema removed.\n * This is useful for ensuring that only data that is relevant to the schema is preserved. Objects with `additionalProperties`\n * keyword set to `true` will not have their extra fields removed.\n *\n * @param schema - The schema to use for filtering the `formData`\n * @param [formData] - The formData to filter\n * @returns The new form data, with any fields not defined in the schema removed\n */\n omitExtraData(schema, formData) {\n return omitExtraData(this.validator, schema, this.rootSchema, formData);\n }\n /** Retrieves an expanded schema that has had all of its conditions, additional properties, references and\n * dependencies resolved and merged into the `schema` given a `rawFormData` that is used to do the potentially\n * recursive resolution.\n *\n * @param schema - The schema for which retrieving a schema is desired\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @returns - The schema having its conditions, additional properties, references and dependencies resolved\n */\n retrieveSchema(schema, rawFormData, resolveAnyOfOrOneOfRefs) {\n return retrieveSchema(this.validator, schema, this.rootSchema, rawFormData, this.experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs);\n }\n /** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the\n * new schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the\n * nature of schemas, this sanitization happens recursively for nested objects of data. Also, any properties in the\n * old schemas that are non-existent in the new schema are set to `undefined`.\n *\n * @param [newSchema] - The new schema for which the data is being sanitized\n * @param [oldSchema] - The old schema from which the data originated\n * @param [data={}] - The form data associated with the schema, defaulting to an empty object when undefined\n * @returns - The new form data, with all the fields uniquely associated with the old schema set\n * to `undefined`. Will return `undefined` if the new schema is not an object containing properties.\n */\n sanitizeDataForNewSchema(newSchema, oldSchema, data) {\n return sanitizeDataForNewSchema(this.validator, this.rootSchema, newSchema, oldSchema, data, this.experimental_customMergeAllOf);\n }\n /** Generates an `PathSchema` object for the `schema`, recursively\n *\n * @param schema - The schema for which the display label flag is desired\n * @param [name] - The base name for the schema\n * @param [formData] - The current formData, if any, onto which to provide any missing defaults\n * @returns - The `PathSchema` object for the `schema`\n */\n // oxlint-disable-next-line typescript/no-deprecated\n toPathSchema(schema, name, formData) {\n // oxlint-disable-next-line typescript/no-deprecated\n return toPathSchema(this.validator, schema, name, this.rootSchema, formData, this.experimental_customMergeAllOf);\n }\n}\n/** Creates a `SchemaUtilsType` interface that is based around the given `validator` and `rootSchema` parameters. The\n * resulting interface implementation will forward the `validator` and `rootSchema` to all the wrapped APIs.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - An implementation of a `SchemaUtilsType` interface\n */\nexport default function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {\n return new SchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n}\n//# sourceMappingURL=createSchemaUtils.js.map","/** Given the `FileReader.readAsDataURL()` based `dataURI` extracts that data into an actual Blob along with the name\n * of that Blob if provided in the URL. If no name is provided, then the name falls back to `unknown`.\n *\n * @param dataURI - The `DataUrl` potentially containing name and raw data to be converted to a Blob\n * @returns - an object containing a Blob and its name, extracted from the URI\n */\nexport default function dataURItoBlob(dataURILike) {\n // check if is dataURI\n if (!dataURILike.includes('data:')) {\n throw new Error('File is invalid: URI must be a dataURI');\n }\n const dataURI = dataURILike.slice(5);\n // split the dataURI into media and base64, with the base64 signature\n const splitted = dataURI.split(';base64,');\n // if the base64 signature is not present, the latter part will become empty\n if (splitted.length !== 2) {\n throw new Error('File is invalid: dataURI must be base64');\n }\n // extract the mime type, media parameters including the name, and the base64 string\n const [media, base64] = splitted;\n const [mime, ...mediaparams] = media.split(';');\n const type = mime || '';\n // extract the name from the parameters\n const name = decodeURI(\n // parse the parameters into key-value pairs, find a key, and extract a value\n // if no key is found, then the name is unknown\n mediaparams.map((param) => param.split('=')).find(([key]) => key === 'name')?.[1] || 'unknown');\n // Built the Uint8Array Blob parameter from the base64 string.\n try {\n const binary = atob(base64);\n const array = new Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n array[i] = binary.charCodeAt(i);\n }\n // Create the blob object\n const blob = new window.Blob([new Uint8Array(array)], { type });\n return { blob, name };\n }\n catch (error) {\n throw new Error(`File is invalid: ${error.message}`);\n }\n}\n//# sourceMappingURL=dataURItoBlob.js.map","/** Returns a string representation of the `num` that is padded with leading \"0\"s if necessary\n *\n * @param num - The number to pad\n * @param width - The width of the string at which no lead padding is necessary\n * @returns - The number converted to a string with leading zero padding if the number of digits is less than `width`\n */\nexport default function pad(num, width) {\n let s = String(num);\n while (s.length < width) {\n s = `0${s}`;\n }\n return s;\n}\n//# sourceMappingURL=pad.js.map","import pad from \"./pad.js\";\n/** Returns a list of options for a date range between `start` and `stop`. If the start date is greater than the end\n * date, then the date range is reversed. If `start` and `stop` are negative numbers (or zero), then they will be\n * treated as relative to the current year.\n *\n * @param start - The starting point of the date range\n * @param stop - The ending point of the date range\n * @returns - The list of EnumOptionsType for the date range between `start` and `stop`\n * @throws - Error when `start` and `stop` aren't both <= 0 or > 0\n */\nexport default function dateRangeOptions(start, stop) {\n const bothRelative = start <= 0 && stop <= 0;\n const eitherNegative = start < 0 || stop < 0;\n if (!bothRelative && eitherNegative) {\n throw new Error(`Both start (${start}) and stop (${stop}) must both be <= 0 or > 0, got one of each`);\n }\n const currentYear = new Date().getFullYear();\n const resolvedStart = bothRelative ? currentYear + start : start;\n const resolvedStop = bothRelative ? currentYear + stop : stop;\n if (resolvedStart > resolvedStop) {\n return dateRangeOptions(stop, start).reverse();\n }\n const options = [];\n for (let i = resolvedStart; i <= resolvedStop; i += 1) {\n options.push({ value: i, label: pad(i, 2) });\n }\n return options;\n}\n//# sourceMappingURL=dateRangeOptions.js.map","/** Potentially substitutes all replaceable parameters with the associated value(s) from the `params` if available. When\n * a `params` array is provided, each value in the array is used to replace any of the replaceable parameters in the\n * `inputString` using the `%1`, `%2`, etc. replacement specifiers.\n *\n * @param inputString - The string which will be potentially updated with replacement parameters\n * @param params - The optional list of replaceable parameter values to substitute into the english string\n * @returns - The updated string with any replacement specifiers replaced\n */\nexport default function replaceStringParameters(inputString, params) {\n let output = inputString;\n if (Array.isArray(params)) {\n const parts = output.split(/(%\\d)/);\n params.forEach((param, index) => {\n const partIndex = parts.findIndex((part) => part === `%${index + 1}`);\n if (partIndex >= 0) {\n parts[partIndex] = param;\n }\n });\n output = parts.join('');\n }\n return output;\n}\n//# sourceMappingURL=replaceStringParameters.js.map","import replaceStringParameters from \"./replaceStringParameters.js\";\n/** Translates a `TranslatableString` value `stringToTranslate` into english. When a `params` array is provided, each\n * value in the array is used to replace any of the replaceable parameters in the `stringToTranslate` using the `%1`,\n * `%2`, etc. replacement specifiers.\n *\n * @param stringToTranslate - The `TranslatableString` value to convert to english\n * @param params - The optional list of replaceable parameter values to substitute into the english string\n * @returns - The `stringToTranslate` itself with any replaceable parameter values substituted\n */\nexport default function englishStringTranslator(stringToTranslate, params) {\n return replaceStringParameters(stringToTranslate, params);\n}\n//# sourceMappingURL=englishStringTranslator.js.map","/** Returns the value(s) from `allEnumOptions` at the index(es) provided by `valueIndex`. If `valueIndex` is not an\n * array AND the index is not valid for `allEnumOptions`, `emptyValue` is returned. If `valueIndex` is an array, AND it\n * contains an invalid index, the returned array will have the resulting undefined values filtered out, leaving only\n * valid values or in the worst case, an empty array.\n *\n * @param valueIndex - The index(es) of the value(s) that should be returned\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @param [emptyValue] - The value to return when the non-array `valueIndex` does not refer to a real option\n * @returns - The single or list of values specified by the single or list of indexes if they are valid. Otherwise,\n * `emptyValue` or an empty list.\n */\nexport default function enumOptionsValueForIndex(valueIndex, allEnumOptions = [], emptyValue) {\n if (Array.isArray(valueIndex)) {\n return (valueIndex\n .map((index) => enumOptionsValueForIndex(index, allEnumOptions))\n // The recursive call returns undefined for a bad option, filter those out\n .filter((val) => val !== undefined));\n }\n // So Number(null) and Number('') both return 0, so use emptyValue for those two values\n const index = valueIndex === '' || valueIndex === null ? -1 : Number(valueIndex);\n const option = allEnumOptions[index];\n return option ? option.value : emptyValue;\n}\n//# sourceMappingURL=enumOptionsValueForIndex.js.map","import deepEquals from \"./deepEquals.js\";\nimport enumOptionsValueForIndex from \"./enumOptionsValueForIndex.js\";\n/** Removes the enum option value at the `valueIndex` from the currently `selected` (list of) value(s). If `selected` is\n * a list, then that list is updated to remove the enum option value with the `valueIndex` in `allEnumOptions`. If it is\n * a single value, then if the enum option value with the `valueIndex` in `allEnumOptions` matches `selected`, undefined\n * is returned, otherwise the `selected` value is returned.\n *\n * @param valueIndex - The index of the value to be removed from the selected list or single value\n * @param selected - The current (list of) selected value(s)\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @returns - The updated `selected` with the enum option value at `valueIndex` in `allEnumOptions` removed from it,\n * unless `selected` is a single value. In that case, if the `valueIndex` value matches `selected`, returns\n * undefined, otherwise `selected`.\n */\nexport default function enumOptionsDeselectValue(valueIndex, selected, allEnumOptions = []) {\n const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);\n if (Array.isArray(selected)) {\n return selected.filter((v) => !deepEquals(v, value));\n }\n return deepEquals(value, selected) ? undefined : selected;\n}\n//# sourceMappingURL=enumOptionsDeselectValue.js.map","import deepEquals from \"./deepEquals.js\";\n/** Determines whether the given `value` is (one of) the `selected` value(s).\n *\n * @param value - The value being checked to see if it is selected\n * @param selected - The current selected value or list of values\n * @returns - true if the `value` is one of the `selected` ones, false otherwise\n */\nexport default function enumOptionsIsSelected(value, selected) {\n if (Array.isArray(selected)) {\n return selected.some((sel) => deepEquals(sel, value));\n }\n return deepEquals(selected, value);\n}\n//# sourceMappingURL=enumOptionsIsSelected.js.map","import enumOptionsIsSelected from \"./enumOptionsIsSelected.js\";\n/** Returns the index(es) of the options in `allEnumOptions` whose value(s) match the ones in `value`. All the\n * `enumOptions` are filtered based on whether they are a \"selected\" `value` and the index of each selected one is then\n * stored in an array. If `multiple` is true, that array is returned, otherwise the first element in the array is\n * returned.\n *\n * @param value - The single value or list of values for which indexes are desired\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @param [multiple=false] - Optional flag, if true will return a list of index, otherwise a single one\n * @returns - A single string index for the first `value` in `allEnumOptions`, if not `multiple`. Otherwise, the list\n * of indexes for (each of) the value(s) in `value`.\n */\nexport default function enumOptionsIndexForValue(value, allEnumOptions = [], multiple = false) {\n const selectedIndexes = allEnumOptions\n .map((opt, index) => (enumOptionsIsSelected(opt.value, value) ? String(index) : undefined))\n .filter((opt) => typeof opt !== 'undefined');\n if (!multiple) {\n return selectedIndexes[0];\n }\n return selectedIndexes;\n}\n//# sourceMappingURL=enumOptionsIndexForValue.js.map","import enumOptionsIndexForValue from \"./enumOptionsIndexForValue.js\";\n/** Computes the value to pass to a select element's `value` attribute.\n *\n * When `format` is `'realValue'`, converts form data values to strings.\n * When `format` is `'indexed'` (the default), resolves to index-based values via\n * `enumOptionsIndexForValue`. Returns `emptyValue` when the current value is empty.\n *\n * @param value - The current form data value\n * @param enumOptions - The available enum options\n * @param multiple - Whether the select allows multiple selections\n * @param [format='indexed'] - How option values are encoded on the DOM\n * @param emptyValue - The value to return when the selection is empty\n * @returns The value to use for the select element's `value` attribute\n */\nexport default function enumOptionSelectedValue(value, enumOptions, multiple, format = 'indexed', emptyValue) {\n const isEmpty = typeof value === 'undefined' ||\n (multiple && Array.isArray(value) && value.length < 1) ||\n (!multiple && value === emptyValue);\n if (isEmpty) {\n return emptyValue;\n }\n if (format === 'realValue') {\n return multiple ? value.map(String) : String(value);\n }\n const indexes = enumOptionsIndexForValue(value, enumOptions, multiple);\n return typeof indexes === 'undefined' ? emptyValue : indexes;\n}\n//# sourceMappingURL=enumOptionSelectedValue.js.map","import enumOptionsValueForIndex from \"./enumOptionsValueForIndex.js\";\n/** Add the enum option value at the `valueIndex` to the list of `selected` values in the proper order as defined by\n * `allEnumOptions`\n *\n * @param valueIndex - The index of the value that should be selected\n * @param selected - The current list of selected values\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @returns - The updated list of selected enum values with enum value at the `valueIndex` added to it\n */\nexport default function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {\n const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);\n if (value != null) {\n const index = allEnumOptions.findIndex((opt) => value === opt.value);\n const all = allEnumOptions.map(({ value: val }) => val);\n const updated = selected.slice(0, index).concat(value, selected.slice(index));\n // As inserting values at predefined index positions doesn't work with empty\n // arrays, we need to reorder the updated selection to match the initial order\n return updated.sort((a, b) => Number(all.indexOf(a) > all.indexOf(b)));\n }\n return selected;\n}\n//# sourceMappingURL=enumOptionsSelectValue.js.map","import enumOptionsValueForIndex from \"./enumOptionsValueForIndex.js\";\n/** Resolves a single DOM value string back to its typed enum value in `'realValue'` mode.\n *\n * First attempts a reverse lookup by matching `String(opt.value)` against the input.\n * If no option matches and the input parses as a valid index, falls back to the\n * option at that index — this is how object/array enum values round-trip, since\n * they are encoded as indices by the encoder.\n *\n * @param value - A single string value from a DOM attribute\n * @param enumOptions - The available enum options\n * @param emptyValue - The value to return when the input is empty, options are missing, or no match is found\n * @returns The original typed enum value, or `emptyValue`\n */\nfunction decodeSingle(value, enumOptions, emptyValue) {\n if (value === '' || !Array.isArray(enumOptions)) {\n return emptyValue;\n }\n const match = enumOptions.find((opt) => String(opt.value) === value);\n if (match) {\n return match.value;\n }\n // Fallback: value might be an index (for object/array enum values)\n const index = Number(value);\n if (!Number.isNaN(index) && index >= 0 && index < enumOptions.length) {\n return enumOptions[index].value;\n }\n return emptyValue;\n}\n/** Decodes a string from a DOM value attribute back to a typed enum value.\n *\n * When `format` is `'realValue'`, does a reverse lookup: finds the enum option\n * whose `String(value)` matches the input string and returns the original typed value.\n * For object/array values that were encoded as indices, falls back to index resolution.\n *\n * When `format` is `'indexed'` (the default), uses index-based resolution via\n * `enumOptionsValueForIndex`.\n *\n * @param value - The string value(s) from the DOM\n * @param enumOptions - The available enum options\n * @param [format='indexed'] - How the values were encoded on the DOM\n * @param emptyValue - The value to return for empty/missing selections\n * @returns The original typed enum value(s)\n */\nexport default function enumOptionValueDecoder(value, enumOptions, format = 'indexed', emptyValue) {\n if (format !== 'realValue') {\n return enumOptionsValueForIndex(value, enumOptions, emptyValue);\n }\n if (Array.isArray(value)) {\n return value.map((v) => decodeSingle(v, enumOptions, emptyValue));\n }\n return decodeSingle(value, enumOptions, emptyValue);\n}\n//# sourceMappingURL=enumOptionValueDecoder.js.map","/** Encodes an enum option value into a string for a DOM value attribute.\n *\n * When `format` is `'realValue'`, primitive values are converted via `String()`.\n * Non-primitive values (objects, arrays) fall back to the index since\n * `String()` would produce `\"[object Object]\"`.\n *\n * When `format` is `'indexed'` (the default), returns the index as a string.\n *\n * @param value - The typed enum value\n * @param index - The option's position in the enumOptions array\n * @param [format='indexed'] - How to encode the value for the DOM attribute\n * @returns The string to use as the DOM value attribute\n */\nexport default function enumOptionValueEncoder(value, index, format = 'indexed') {\n if (format !== 'realValue') {\n return String(index);\n }\n if (value == null) {\n return '';\n }\n if (typeof value === 'object') {\n return String(index);\n }\n return String(value);\n}\n//# sourceMappingURL=enumOptionValueEncoder.js.map","import { ERRORS_KEY } from \"./constants.js\";\nimport { getByPath, setByPath, toPath } from \"./pathUtils.js\";\n/** The `ErrorSchemaBuilder` is used to build an `ErrorSchema` since the definition of the `ErrorSchema` type is\n * designed for reading information rather than writing it. Use this class to add, replace or clear errors in an error\n * schema by using either dotted path or an array of path names. Once you are done building the `ErrorSchema`, you can\n * get the result and/or reset all the errors back to an initial set and start again.\n */\nexport default class ErrorSchemaBuilder {\n /** The error schema being built\n *\n * @private\n */\n errorSchema = {};\n /** Construct an `ErrorSchemaBuilder` with an optional initial set of errors in an `ErrorSchema`.\n *\n * @param [initialSchema] - The optional set of initial errors, that will be cloned into the class\n */\n constructor(initialSchema) {\n this.resetAllErrors(initialSchema);\n }\n /** Returns the `ErrorSchema` that has been updated by the methods of the `ErrorSchemaBuilder`\n */\n get ErrorSchema() {\n return this.errorSchema;\n }\n /** Will get an existing `ErrorSchema` at the specified `pathOfError` or create and return one.\n *\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to add the error(s)\n * @returns - The error block for the given `pathOfError` or the root if not provided\n * @private\n */\n getOrCreateErrorBlock(pathOfError) {\n // A string path is dotted-path notation, so parse it into its segments\n const path = typeof pathOfError === 'string' ? toPath(pathOfError) : (pathOfError ?? []);\n if (path.length === 0) {\n return this.errorSchema;\n }\n // An `ErrorSchema` only ever nests `ErrorSchema` blocks, so create any missing block along the path,\n // always as a plain object since an `ErrorSchema` is never an array\n let errorBlock = getByPath(this.errorSchema, path);\n if (!errorBlock) {\n errorBlock = {};\n setByPath(this.errorSchema, path, errorBlock, true);\n }\n return errorBlock;\n }\n /** Resets all errors in the `ErrorSchemaBuilder` back to the `initialSchema` if provided, otherwise an empty set.\n *\n * @param [initialSchema] - The optional set of initial errors, that will be cloned into the class\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n resetAllErrors(initialSchema) {\n this.errorSchema = initialSchema ? structuredClone(initialSchema) : {};\n return this;\n }\n /** Adds the `errorOrList` to the list of errors in the `ErrorSchema` at either the root level or the location within\n * the schema described by the `pathOfError`. The path is either a dotted string (with optional bracketed array\n * indexes, e.g. `'a.b[0]'`) or a list of path segments; keys containing dots require the list form.\n *\n * @param errorOrList - The error or list of errors to add into the `ErrorSchema`\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to add the error(s)\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n addErrors(errorOrList, pathOfError) {\n const errorBlock = this.getOrCreateErrorBlock(pathOfError);\n let errorsList = errorBlock[ERRORS_KEY];\n if (!Array.isArray(errorsList)) {\n errorsList = [];\n errorBlock[ERRORS_KEY] = errorsList;\n }\n if (Array.isArray(errorOrList)) {\n errorBlock[ERRORS_KEY] = [...new Set([...errorsList, ...errorOrList])];\n }\n else {\n errorBlock[ERRORS_KEY] = [...new Set([...errorsList, errorOrList])];\n }\n return this;\n }\n /** Sets/replaces the `errorOrList` as the error(s) in the `ErrorSchema` at either the root level or the location\n * within the schema described by the `pathOfError`. The path is either a dotted string (with optional bracketed array\n * indexes, e.g. `'a.b[0]'`) or a list of path segments; keys containing dots require the list form.\n *\n * @param errorOrList - The error or list of errors to set into the `ErrorSchema`\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to set the error(s)\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n setErrors(errorOrList, pathOfError) {\n const errorBlock = this.getOrCreateErrorBlock(pathOfError);\n // Effectively clone the array being given to prevent accidental outside manipulation of the given list\n const listToAdd = Array.isArray(errorOrList) ? [...new Set([...errorOrList])] : [errorOrList];\n errorBlock[ERRORS_KEY] = listToAdd;\n return this;\n }\n /** Clears the error(s) in the `ErrorSchema` at either the root level or the location within the schema described by\n * the `pathOfError`. The path is either a dotted string (with optional bracketed array\n * indexes, e.g. `'a.b[0]'`) or a list of path segments; keys containing dots require the list form.\n *\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to clear the error(s)\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n clearErrors(pathOfError) {\n const errorBlock = this.getOrCreateErrorBlock(pathOfError);\n errorBlock[ERRORS_KEY] = [];\n return this;\n }\n}\n//# sourceMappingURL=ErrorSchemaBuilder.js.map","import deepEquals from \"./deepEquals.js\";\nimport isPlainObject from \"./isPlainObject.js\";\nimport { getByPath } from \"./pathUtils.js\";\n/** Returns the paths of the changed descendants of `a` relative to `b`, relative to the node itself. An empty list\n * means the difference could not be narrowed any further, so the caller should report its own key instead.\n *\n * @param a - The first value, representing the original data to compare\n * @param b - The second value, representing the updated data to compare\n * @returns - An array of dotted paths, relative to `a`\n */\nfunction getChangedDescendants(a, b) {\n if (isPlainObject(a) && isPlainObject(b)) {\n return getChangedFields(a, b, true);\n }\n // Arrays of a different length shift their items around, so nothing below them can be matched up by index.\n if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {\n return a.flatMap((value, index) => {\n if (deepEquals(value, b[index])) {\n return [];\n }\n const descendants = getChangedDescendants(value, b[index]);\n return descendants.length ? descendants.map((path) => `${index}.${path}`) : [String(index)];\n });\n }\n return [];\n}\n/**\n * Compares two objects and returns the names of the fields that have changed.\n * This function iterates over each field of object `a`, using `deepEquals` to compare the field value\n * with the corresponding field value in object `b`. If the values are different, the field name will\n * be included in the returned array.\n *\n * @param a - The first object, representing the original data to compare.\n * @param b - The second object, representing the updated data to compare.\n * @param [deep=false] - Optional flag that, when true, descends into nested objects and same-length arrays and returns\n * the dotted path of the deepest field that changed rather than the name of the top-level field holding it.\n * @returns - An array of field names that have changed.\n *\n * @example\n * const a = { name: 'John', age: 30 };\n * const b = { name: 'John', age: 31 };\n * const changedFields = getChangedFields(a, b);\n * console.log(changedFields); // Output: ['age']\n *\n * @example\n * const a = { items: [{ qux: '', corge: '' }] };\n * const b = { items: [{ qux: 'a', corge: '' }] };\n * console.log(getChangedFields(a, b)); // Output: ['items']\n * console.log(getChangedFields(a, b, true)); // Output: ['items.0.qux']\n */\nexport default function getChangedFields(a, b, deep = false) {\n if (a === b) {\n return [];\n }\n // If only one of them is a plainObject all of its fields changed; if neither is, nothing did\n if (!isPlainObject(a)) {\n return isPlainObject(b) ? Object.keys(b) : [];\n }\n if (!isPlainObject(b)) {\n return Object.keys(a);\n }\n const aKeys = Object.keys(a);\n const aKeySet = new Set(aKeys);\n const unequalFields = aKeys\n .filter((key) => !deepEquals(a[key], getByPath(b, key)))\n .flatMap((key) => {\n if (!deep) {\n return [key];\n }\n // A key holding a `.` or a `[` is descended into like any other. The path it produces cannot be told apart from\n // a path through nested keys, but neither can the entry an `ErrorSchema` keeps for it, since `toErrorSchema()`\n // spells such a name out as a path in the same way, so the two agree on where the field lives.\n const descendants = getChangedDescendants(a[key], getByPath(b, key));\n return descendants.length ? descendants.map((path) => `${key}.${path}`) : [key];\n });\n const diffFields = Object.keys(b).filter((key) => !aKeySet.has(key));\n return [...unequalFields, ...diffFields];\n}\n//# sourceMappingURL=getChangedFields.js.map","/** Given date & time information with optional yearRange & format, returns props for DateElement\n *\n * @param date - Object containing date with optional time information\n * @param time - Determines whether to include time or not\n * @param [yearRange=[1900, new Date().getFullYear() + 2]] - Controls the list of years to be displayed\n * @param [format='YMD'] - Controls the order in which day, month and year input element will be displayed\n * @returns Array of props for DateElement\n */\nexport default function getDateElementProps(date, time, yearRange = [1900, new Date().getFullYear() + 2], format = 'YMD') {\n const { day, month, year, hour, minute, second } = date;\n const dayObj = { type: 'day', range: [1, 31], value: day };\n const monthObj = { type: 'month', range: [1, 12], value: month };\n const yearObj = { type: 'year', range: yearRange, value: year };\n const dateElementProp = [];\n switch (format) {\n case 'MDY':\n dateElementProp.push(monthObj, dayObj, yearObj);\n break;\n case 'DMY':\n dateElementProp.push(dayObj, monthObj, yearObj);\n break;\n case 'YMD':\n default:\n dateElementProp.push(yearObj, monthObj, dayObj);\n }\n if (time) {\n dateElementProp.push({ type: 'hour', range: [0, 23], value: hour }, { type: 'minute', range: [0, 59], value: minute }, { type: 'second', range: [0, 59], value: second });\n }\n return dateElementProp;\n}\n//# sourceMappingURL=getDateElementProps.js.map","/** Extracts the range spec information `{ step?: number, min?: number, max?: number }` that can be spread onto an HTML\n * input from the range analog in the schema `{ multipleOf?: number, minimum?: number, maximum?: number }`.\n *\n * @param schema - The schema from which to extract the range spec\n * @returns - A range specification from the schema\n */\nexport default function rangeSpec(schema) {\n const spec = {};\n if (schema.multipleOf) {\n spec.step = schema.multipleOf;\n }\n if (schema.minimum || schema.minimum === 0) {\n spec.min = schema.minimum;\n }\n if (schema.maximum || schema.maximum === 0) {\n spec.max = schema.maximum;\n }\n return spec;\n}\n//# sourceMappingURL=rangeSpec.js.map","import rangeSpec from \"./rangeSpec.js\";\n/** Using the `schema`, `defaultType` and `options`, extract out the props for the element that make sense.\n *\n * @param schema - The schema for the field provided by the widget\n * @param [defaultType] - The default type, if any, for the field provided by the widget\n * @param [options={}] - The UI Options for the field provided by the widget\n * @param [autoDefaultStepAny=true] - Determines whether to auto-default step=any when the type is number and no step\n * @returns - The extracted `InputPropsType` object\n */\nexport default function getInputProps(schema, defaultType, options = {}, autoDefaultStepAny = true) {\n const inputProps = {\n type: defaultType || 'text',\n ...rangeSpec(schema),\n };\n // If options.inputType is set use that as the input type\n if (options.inputType) {\n inputProps.type = options.inputType;\n }\n else if (!defaultType) {\n // If the schema is of type number or integer, set the input type to number\n if (schema.type === 'number') {\n inputProps.type = 'number';\n // Only add step if one isn't already defined and we are auto-defaulting the \"any\" step\n if (autoDefaultStepAny && inputProps.step === undefined) {\n // Setting step to 'any' fixes a bug in Safari where decimals are not\n // allowed in number inputs\n inputProps.step = 'any';\n }\n }\n else if (schema.type === 'integer') {\n inputProps.type = 'number';\n // Only add step if one isn't already defined\n if (inputProps.step === undefined) {\n // Since this is integer, you always want to step up or down in multiples of 1\n inputProps.step = 1;\n }\n }\n }\n // For date/time input types, propagate formatMinimum/formatMaximum to min/max\n if (['date', 'datetime-local', 'time', 'week', 'month'].includes(inputProps.type)) {\n if (schema.formatMinimum !== undefined) {\n inputProps.min = schema.formatMinimum;\n }\n if (schema.formatMaximum !== undefined) {\n inputProps.max = schema.formatMaximum;\n }\n }\n if (options.autocomplete) {\n inputProps.autoComplete = options.autocomplete;\n }\n if (options.autocapitalize) {\n inputProps.autoCapitalize = options.autocapitalize;\n }\n if (options.accept) {\n inputProps.accept = options.accept;\n }\n return inputProps;\n}\n//# sourceMappingURL=getInputProps.js.map","/** Resolves the effective `optionValueFormat` for enum-backed widgets.\n *\n * Provides a single source of truth for the default DOM encoding format\n * (`'indexed'`) used by `SelectWidget`, `RadioWidget`, and `CheckboxesWidget`.\n * Widgets should call this helper once and pass the result to\n * `enumOptionValueEncoder`, `enumOptionValueDecoder`, and `enumOptionSelectedValue`\n * rather than reading `options.optionValueFormat` directly.\n *\n * @param options - The widget options (typically from the `options` prop, already\n * resolved from `ui:options` and `ui:globalOptions`)\n * @returns The resolved `OptionValueFormat`, defaulting to `'indexed'` when not set\n */\nexport default function getOptionValueFormat(options) {\n return options?.optionValueFormat ?? 'indexed';\n}\n//# sourceMappingURL=getOptionValueFormat.js.map","import { SUBMIT_BTN_OPTIONS_KEY } from \"./constants.js\";\nimport getUiOptions from \"./getUiOptions.js\";\n/** The default submit button options, exported for testing purposes\n */\nexport const DEFAULT_OPTIONS = {\n props: {\n disabled: false,\n },\n submitText: 'Submit',\n norender: false,\n};\n/** Extracts any `ui:submitButtonOptions` from the `uiSchema` and merges them onto the `DEFAULT_OPTIONS`\n *\n * @param [uiSchema={}] - the UI Schema from which to extract submit button props\n * @returns - The merging of the `DEFAULT_OPTIONS` with any custom ones\n */\nexport default function getSubmitButtonOptions(uiSchema = {}) {\n const uiOptions = getUiOptions(uiSchema);\n if (uiOptions?.[SUBMIT_BTN_OPTIONS_KEY]) {\n const options = uiOptions[SUBMIT_BTN_OPTIONS_KEY];\n return { ...DEFAULT_OPTIONS, ...options };\n }\n return DEFAULT_OPTIONS;\n}\n//# sourceMappingURL=getSubmitButtonOptions.js.map","/** Returns the template with the given `name` from either the `uiSchema` if it is defined or from the `registry`\n * otherwise. NOTE, since `ButtonTemplates` are not overridden in `uiSchema` only those in the `registry` are returned.\n *\n * @param name - The name of the template to fetch, restricted to the keys of `TemplatesType`\n * @param registry - The `Registry` from which to read the template\n * @param [uiOptions={}] - The `UIOptionsType` from which to read an alternate template\n * @returns - The template from either the `uiSchema` or `registry` for the `name`\n */\nexport default function getTemplate(name, registry, uiOptions = {}) {\n const { templates } = registry;\n if (name === 'ButtonTemplates') {\n return templates[name];\n }\n // Allow templates to be customized per-field by using string keys from the registry\n if (Object.hasOwn(uiOptions, name) &&\n typeof uiOptions[name] === 'string' &&\n Object.hasOwn(templates, uiOptions[name])) {\n const key = uiOptions[name];\n // Evaluating templates[key] results in TS2590: Expression produces a union type that is too complex to represent\n // To avoid that, we cast templates to `any` before accessing the key field\n return templates[key];\n }\n return (\n // Evaluating uiOptions[name] results in TS2590: Expression produces a union type that is too complex to represent\n // To avoid that, we cast uiOptions to `any` before accessing the name field\n uiOptions[name] || templates[name]);\n}\n//# sourceMappingURL=getTemplate.js.map","import { getByPath } from \"./pathUtils.js\";\nlet testIdCounter = 0;\n/** Returns an object of test IDs that can only be used in test mode. If the function is called in a test environment\n * (`NODE_ENV === 'test'`, this is set by vitest) then a Proxy object will be returned. If a key within the returned\n * object is accessed, if the value already exists the object will return that value, otherwise it will create that key\n * with a generated `uuid` value and return the generated ID. If it is called outside of a test environment, the\n * function will return an empty object, therefore returning `undefined` for any property within the object and\n * excluding the prop from the rendered output of the component in which it is used.\n * This implementation was adapted from the following blog post: https://www.matthewsessions.com/blog/react-test-id/\n * To use this helper, you will want to generate a separate object for each component to avoid potential overlapping of\n * ID names. You will also want to export the object for use in tests, because the keys will be generated in the\n * component file, and used in the test file. Within the component file, add:\n * `export const TEST_IDS = getTestIds();`\n * Then pass `TEST_IDS.examplePropertyName` as the value of the test ID attribute of the intended component. This will\n * allow you to use `TEST_IDS.examplePropertyName` within your tests, while keeping the test IDs out of your rendered\n * output.\n */\nexport default function getTestIds() {\n // For some reason, even though process.env contains the value of `test` for NODE_ENV, accessing it directly returns\n // 'development'. Using `getByPath()` does, in fact, return test so sticking with it.\n // Use globalThis to access process without requiring @types/node (TS6 compatibility).\n if (getByPath(globalThis, ['process', 'env', 'NODE_ENV']) !== 'test') {\n return {};\n }\n const ids = new Map();\n return new Proxy({}, {\n get(_obj, prop) {\n if (!ids.has(prop)) {\n testIdCounter += 1;\n ids.set(prop, `test-id-${testIdCounter}`);\n }\n return ids.get(prop);\n },\n });\n}\n//# sourceMappingURL=getTestIds.js.map","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement } from 'react';\nimport ReactIs from 'react-is';\nimport getSchemaType from \"./getSchemaType.js\";\n/** The map of schema types to widget type to widget name\n */\nconst widgetMap = {\n boolean: {\n checkbox: 'CheckboxWidget',\n radio: 'RadioWidget',\n select: 'SelectWidget',\n hidden: 'HiddenWidget',\n },\n string: {\n text: 'TextWidget',\n password: 'PasswordWidget',\n email: 'EmailWidget',\n hostname: 'TextWidget',\n ipv4: 'TextWidget',\n ipv6: 'TextWidget',\n uri: 'URLWidget',\n 'data-url': 'FileWidget',\n radio: 'RadioWidget',\n select: 'SelectWidget',\n textarea: 'TextareaWidget',\n hidden: 'HiddenWidget',\n date: 'DateWidget',\n datetime: 'DateTimeWidget',\n 'date-time': 'DateTimeWidget',\n 'alt-date': 'AltDateWidget',\n 'alt-datetime': 'AltDateTimeWidget',\n time: 'TimeWidget',\n color: 'ColorWidget',\n file: 'FileWidget',\n },\n number: {\n text: 'TextWidget',\n select: 'SelectWidget',\n updown: 'UpDownWidget',\n range: 'RangeWidget',\n radio: 'RadioWidget',\n hidden: 'HiddenWidget',\n },\n integer: {\n text: 'TextWidget',\n select: 'SelectWidget',\n updown: 'UpDownWidget',\n range: 'RangeWidget',\n radio: 'RadioWidget',\n hidden: 'HiddenWidget',\n },\n array: {\n select: 'SelectWidget',\n checkboxes: 'CheckboxesWidget',\n files: 'FileWidget',\n hidden: 'HiddenWidget',\n },\n};\n/** Wraps the given widget with stateless functional component that will merge any `defaultProps.options` with the\n * `options` that are provided in the props. It will add the wrapper component as a `MergedWidget` property onto the\n * `Widget` so that future attempts to wrap `AWidget` will return the already existing wrapper.\n *\n * @param AWidget - A widget that will be wrapped or one that is already wrapped\n * @returns - The wrapper widget\n */\nfunction mergeWidgetOptions(AWidget) {\n let { MergedWidget } = AWidget;\n // cache return value as property of widget for proper react reconciliation\n if (!MergedWidget) {\n // oxlint-disable-next-line typescript/no-deprecated\n const defaultOptions = AWidget.defaultProps?.options || {};\n MergedWidget = ({ options, ...props }) => _jsx(AWidget, { options: { ...defaultOptions, ...options }, ...props });\n // The mutation is deliberate: the wrapper is cached on the widget itself for React reconciliation\n // oxlint-disable-next-line no-param-reassign\n AWidget.MergedWidget = MergedWidget;\n }\n return MergedWidget;\n}\n/** Given a schema representing a field to render and either the name or actual `Widget` implementation, returns the\n * React component that is used to render the widget. If the `widget` is already a React component, then it is wrapped\n * with a `MergedWidget`. Otherwise an attempt is made to look up the widget inside of the `registeredWidgets` map based\n * on the schema type and `widget` name. If no widget component can be found an `Error` is thrown.\n *\n * @param schema - The schema for the field\n * @param [widget] - Either the name of the widget OR a `Widget` implementation to use\n * @param [registeredWidgets={}] - A registry of widget name to `Widget` implementation\n * @returns - The `Widget` component to use\n * @throws - An error if there is no `Widget` component that can be returned\n */\nexport default function getWidget(schema, widget, registeredWidgets = {}) {\n const type = getSchemaType(schema);\n if (typeof widget === 'function' ||\n (widget && ReactIs.isForwardRef(createElement(widget))) ||\n ReactIs.isMemo(widget)) {\n return mergeWidgetOptions(widget);\n }\n if (typeof widget !== 'string') {\n throw new Error(`Unsupported widget definition: ${typeof widget} in schema: ${JSON.stringify(schema)}`);\n }\n if (widget in registeredWidgets) {\n const registeredWidget = registeredWidgets[widget];\n return getWidget(schema, registeredWidget, registeredWidgets);\n }\n if (typeof type === 'string') {\n if (!(type in widgetMap)) {\n throw new Error(`No widget for type '${type}' in schema: ${JSON.stringify(schema)}`);\n }\n if (widget in widgetMap[type]) {\n const registeredWidget = registeredWidgets[widgetMap[type][widget]];\n return getWidget(schema, registeredWidget, registeredWidgets);\n }\n }\n throw new Error(`No widget '${widget}' for type '${type}' in schema: ${JSON.stringify(schema)}`);\n}\n//# sourceMappingURL=getWidget.js.map","/** Hashes a string using the algorithm based on Java's hashing function.\n * JS has no built-in hashing function, so rolling our own\n * based on Java's hashing fn:\n * http://www.java2s.com/example/nodejs-utility-method/string-hash/hashcode-4dc2b.html\n *\n * @param string - The string for which to get the hash\n * @returns - The resulting hash of the string in hex format\n */\nexport function hashString(string) {\n let hash = 0;\n for (let i = 0; i < string.length; i++) {\n const chr = string.charCodeAt(i);\n // oxlint-disable-next-line no-bitwise\n hash = (hash << 5) - hash + chr;\n // oxlint-disable-next-line no-bitwise\n hash &= hash; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n/** Recursively serializes a value to JSON with object keys sorted alphabetically to produce\n * a stable string representation.\n *\n * @param object - The object for which the sorted stringify is desired\n * @returns - The stringified object with keys sorted in a consistent order\n */\nexport function sortedJSONStringify(object) {\n function shouldIncludeValue(value) {\n return value !== undefined && typeof value !== 'function' && typeof value !== 'symbol';\n }\n if (Array.isArray(object)) {\n return `[${object.map((x) => (x === undefined ? 'undefined' : sortedJSONStringify(x))).join(',')}]`;\n }\n if (object === null || typeof object !== 'object') {\n return JSON.stringify(typeof object === 'function' ? null : object); // Normalise functions\n }\n const record = object;\n const sortedValues = Object.keys(record)\n .sort()\n .filter((key) => shouldIncludeValue(record[key]))\n .map((key) => `${JSON.stringify(key)}:${sortedJSONStringify(record[key])}`);\n return `{${sortedValues.join(',')}}`;\n}\n/** Stringifies an `object` and returns the hash of the resulting string. Sorts object fields\n * in consistent order before stringify to prevent different hash ids for the same object.\n *\n * @param object - The object for which the hash is desired\n * @returns - The string obtained from the hash of the stringified object\n */\nexport function hashObject(object) {\n return hashString(sortedJSONStringify(object));\n}\n/** Stringifies the schema and returns the hash of the resulting string. Sorts schema fields\n * in consistent order before stringify to prevent different hash ids for the same schema.\n * Symbol-keyed properties (RJSF_REF_KEY, RJSF_REF_CYCLE_KEY, ADDITIONAL_PROPERTY_FLAG) are\n * automatically excluded by JSON.stringify, so no special filtering is needed.\n *\n * @param schema - The schema for which the hash is desired\n * @returns - The string obtained from the hash of the stringified schema\n */\nexport default function hashForSchema(schema) {\n return hashString(sortedJSONStringify(schema));\n}\n//# sourceMappingURL=hashForSchema.js.map","import getWidget from \"./getWidget.js\";\n/** Detects whether the `widget` exists for the `schema` with the associated `registryWidgets` and returns true if it\n * does, or false if it doesn't.\n *\n * @param schema - The schema for the field\n * @param widget - Either the name of the widget OR a `Widget` implementation to use\n * @param [registeredWidgets={}] - A registry of widget name to `Widget` implementation\n * @returns - True if the widget exists, false otherwise\n */\nexport default function hasWidget(schema, widget, registeredWidgets = {}) {\n try {\n getWidget(schema, widget, registeredWidgets);\n return true;\n }\n catch (e) {\n const err = e;\n if (err.message && (err.message.startsWith('No widget') || err.message.startsWith('Unsupported widget'))) {\n return false;\n }\n throw e;\n }\n}\n//# sourceMappingURL=hasWidget.js.map","import { ID_KEY } from \"./constants.js\";\n/** Generates a consistent `id` pattern for a given `id` and a `suffix`\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @param suffix - The suffix to append to the id\n */\nfunction idGenerator(id, suffix) {\n const theId = typeof id === 'string' ? id : id[ID_KEY];\n return `${theId}__${suffix}`;\n}\n/** Return a consistent `id` for the field description element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field description element from the given `id`\n */\nexport function descriptionId(id) {\n return idGenerator(id, 'description');\n}\n/** Return a consistent `id` for the field error element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field error element from the given `id`\n */\nexport function errorId(id) {\n return idGenerator(id, 'error');\n}\n/** Return a consistent `id` for the field examples element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field examples element from the given `id`\n */\nexport function examplesId(id) {\n return idGenerator(id, 'examples');\n}\n/** Return a consistent `id` for the field help element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field help element from the given `id`\n */\nexport function helpId(id) {\n return idGenerator(id, 'help');\n}\n/** Return a consistent `id` for the field title element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field title element from the given `id`\n */\nexport function titleId(id) {\n return idGenerator(id, 'title');\n}\n/** Return a list of element ids that contain additional information about the field that can be used to as the aria\n * description of the field. This is correctly omitting `titleId` which would be \"labeling\" rather than \"describing\" the\n * element.\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @param [includeExamples=false] - Optional flag, if true, will add the `examplesId` into the list\n * @returns - The string containing the list of ids for use in an `aria-describedBy` attribute\n */\nexport function ariaDescribedByIds(id, includeExamples = false) {\n const examples = includeExamples ? ` ${examplesId(id)}` : '';\n return `${errorId(id)} ${descriptionId(id)} ${helpId(id)}${examples}`;\n}\n/** Return a consistent `id` for the `optionIndex`s of a `Radio` or `Checkboxes` widget\n *\n * @param id - The id of the parent component for the option\n * @param optionIndex - The index of the option for which the id is desired\n * @returns - An id for the option index based on the parent `id`\n */\nexport function optionId(id, optionIndex) {\n return `${id}-${optionIndex}`;\n}\n/** Return a consistent `id` for the `btn` button element\n *\n * @param id - The id of the parent component for the option\n * @param btn - The button type for which to generate the id\n * @returns - The consistent id for the button from the given `id` and `btn` type\n */\nexport function buttonId(id, btn) {\n return idGenerator(id, btn);\n}\n/** Return a consistent `id` for the optional data controls `element`\n *\n * @param id - The id of the parent component for the option\n * @param element - The element type for which to generate the id\n * @returns - The consistent id for the optional data controls element from the given `id` and `element` type\n */\nexport function optionalControlsId(id, element) {\n return idGenerator(id, `optional${element}`);\n}\n//# sourceMappingURL=idGenerators.js.map","/** Determines whether the given `formData` represents valid form data, such as a primitive type, an array, or a\n * non-empty object.\n *\n * @param formData - The data to check\n * @returns - True if `formData` is not undefined, null, a primitive type or an array or an empty object\n */\nexport default function isFormDataAvailable(formData) {\n if (formData === undefined || formData === null) {\n return false;\n }\n if (typeof formData !== 'object' || Array.isArray(formData)) {\n return true;\n }\n return Object.keys(formData).length > 0;\n}\n//# sourceMappingURL=isFormDataAvailable.js.map","import { REF_KEY } from \"./constants.js\";\nimport deepEquals from \"./deepEquals.js\";\n/** Helper to check whether a JSON schema object is the root schema. The schema is a root schema with root `properties`\n * key or a root `$ref` key. If the `schemaToCompare` has a root `oneOf` property, the function will\n * return false. Else if `schemaToCompare` and `rootSchema` are the same object or equal, the function will return\n * `true`. Else if the `rootSchema` has a $ref, it will be resolved using `schemaUtils.resolveSchema` utility. If the\n * resolved schema matches the `schemaToCompare` the function will return `true`. Otherwise, it will return false.\n *\n * @param registry - The `Registry` used to get the `rootSchema` and `schemaUtils`\n * @param schemaToCompare - The JSON schema object to check. If `schemaToCompare` is an root schema, the\n * function will return true.\n * @returns - Flag indicating whether the `schemaToCompare` is the root schema\n */\nexport default function isRootSchema(registry, schemaToCompare) {\n const { rootSchema, schemaUtils } = registry;\n if (deepEquals(schemaToCompare, rootSchema)) {\n return true;\n }\n if (REF_KEY in rootSchema) {\n const resolvedSchema = schemaUtils.retrieveSchema(rootSchema);\n return deepEquals(schemaToCompare, resolvedSchema);\n }\n return false;\n}\n//# sourceMappingURL=isRootSchema.js.map","export default function labelValue(label, hideLabel, fallback) {\n return hideLabel ? fallback : label;\n}\n//# sourceMappingURL=labelValue.js.map","/** Converts a local Date string into a UTC date string\n *\n * @param dateString - The string representation of a date as accepted by the `Date()` constructor\n * @returns - A UTC date string if `dateString` is truthy, otherwise undefined\n */\nexport default function localToUTC(dateString) {\n return dateString ? new Date(dateString).toJSON() : undefined;\n}\n//# sourceMappingURL=localToUTC.js.map","import enumOptionsIndexForValue from \"./enumOptionsIndexForValue.js\";\n/** Logs a warning when a single-select enum widget has a schema default that is not one of its enum options.\n *\n * @param id - The field id used in the warning message\n * @param schema - The schema whose default value is checked\n * @param enumOptions - The enum options available to the widget\n * @param multiple - Whether the widget allows multiple selections\n */\nexport default function logUnsupportedDefaultForEnum(id, schema, enumOptions, multiple = false) {\n if (!multiple &&\n Array.isArray(enumOptions) &&\n schema.default !== undefined &&\n enumOptionsIndexForValue(schema.default, enumOptions, multiple) === undefined) {\n // oxlint-disable-next-line no-console\n console.error(`The schema default value \"${schema.default}\" is not one of the values in the enum options for \"${id}\"`);\n }\n}\n//# sourceMappingURL=logUnsupportedDefaultForEnum.js.map","import { FORM_CONTEXT_NAME, LOOKUP_MAP_NAME } from \"./constants.js\";\nimport { getByPath, hasByPath } from \"./pathUtils.js\";\n/** Given a React JSON Schema Form registry or formContext object, return the value associated with `toLookup`. This\n * might be contained within the lookup map in the formContext. If no such value exists, return the `fallback`\n * value.\n *\n * @param regOrFc - The @rjsf registry or form context in which the lookup will occur\n * @param toLookup - The name of the field in the lookup map in the form context to get the value for\n * @param [fallback] - The fallback value to use if the form context does not contain a value for `toLookup`\n * @returns - The value associated with `toLookup` in the form context or `fallback`\n */\nexport default function lookupFromFormContext(regOrFc, toLookup, fallback) {\n const lookupPath = [LOOKUP_MAP_NAME];\n if (hasByPath(regOrFc, FORM_CONTEXT_NAME)) {\n lookupPath.unshift(FORM_CONTEXT_NAME);\n }\n return getByPath(regOrFc, [...lookupPath, toLookup], fallback);\n}\n//# sourceMappingURL=lookupFromFormContext.js.map","/** A function that does nothing and returns `undefined`, useful as a placeholder for an optional callback or as the\n * implementation of a mocked function.\n */\nexport default function noop() { }\n//# sourceMappingURL=noop.js.map","/** Given a list of `properties` and an `order` list, returns a list that contains the `properties` ordered correctly.\n * If `order` is not an array, then the untouched `properties` list is returned. Otherwise `properties` is ordered per\n * the `order` list. If `order` contains a '*' then any `properties` that are not mentioned explicity in `order` will be\n * places in the location of the `*`.\n *\n * @param properties - The list of property keys to be ordered\n * @param order - An array of property keys to be ordered first, with an optional '*' property\n * @returns - A list with the `properties` ordered\n * @throws - Error when the properties cannot be ordered correctly\n */\nexport default function orderProperties(properties, order) {\n if (!Array.isArray(order)) {\n return properties;\n }\n const arrayToHash = (arr) => arr.reduce((acc, curr) => {\n acc[curr] = true;\n return acc;\n }, {});\n const errorPropList = (arr) => arr.length > 1 ? `properties '${arr.join(\"', '\")}'` : `property '${arr[0]}'`;\n const propertyHash = arrayToHash(properties);\n const orderFiltered = order.filter((prop) => prop === '*' || propertyHash[prop]);\n const orderHash = arrayToHash(orderFiltered);\n const rest = properties.filter((prop) => !orderHash[prop]);\n const restIndex = orderFiltered.indexOf('*');\n if (restIndex === -1) {\n if (rest.length) {\n throw new Error(`uiSchema order list does not contain ${errorPropList(rest)}`);\n }\n return orderFiltered;\n }\n if (restIndex !== orderFiltered.lastIndexOf('*')) {\n throw new Error('uiSchema order list contains more than one wildcard item');\n }\n const complete = [...orderFiltered];\n complete.splice(restIndex, 1, ...rest);\n return complete;\n}\n//# sourceMappingURL=orderProperties.js.map","/** Parses the `dateString` into a `DateObject`, including the time information when `includeTime` is true\n *\n * @param dateString - The date string to parse into a DateObject\n * @param [includeTime=true] - Optional flag, if false, will not include the time data into the object\n * @returns - The date string converted to a `DateObject`\n * @throws - Error when the date cannot be parsed from the string\n */\nexport default function parseDateString(dateString, includeTime = true) {\n if (!dateString) {\n return {\n year: -1,\n month: -1,\n day: -1,\n hour: includeTime ? -1 : 0,\n minute: includeTime ? -1 : 0,\n second: includeTime ? -1 : 0,\n };\n }\n const date = new Date(dateString);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Unable to parse date ${dateString}`);\n }\n return {\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1, // oh you, javascript.\n day: date.getUTCDate(),\n hour: includeTime ? date.getUTCHours() : 0,\n minute: includeTime ? date.getUTCMinutes() : 0,\n second: includeTime ? date.getUTCSeconds() : 0,\n };\n}\n//# sourceMappingURL=parseDateString.js.map","import { ANY_OF_KEY, ONE_OF_KEY, REF_KEY, RJSF_REF_KEY } from \"./constants.js\";\nimport findSchemaDefinition from \"./findSchemaDefinition.js\";\nimport mergeObjects from \"./mergeObjects.js\";\n/** Resolves the uiSchema for a given schema, considering `ui:definitions` stored in the registry.\n *\n * Called at runtime for each field. When the schema contains a `$ref`, looks up the corresponding\n * uiSchema definition from `registry.uiSchemaDefinitions` and merges it with local overrides.\n * For schemas with `oneOf`/`anyOf` branches, also populates `uiSchema[keyword][i]` for branches\n * whose `$ref` matches a definition, so `MultiSchemaField` can read dropdown option titles.\n *\n * Resolution order (later sources override earlier):\n * 1. `ui:definitions[$ref]` - base definition from registry\n * 2. `localUiSchema` - local overrides at current path\n *\n * @param schema - The JSON schema (may contain `$ref` or `RJSF_REF_KEY`)\n * @param localUiSchema - The uiSchema at the current path (local overrides)\n * @param registry - The registry containing `uiSchemaDefinitions`\n * @returns - The resolved uiSchema with definitions merged in\n */\nexport default function resolveUiSchema(schema, localUiSchema, registry) {\n const ref = (schema[RJSF_REF_KEY] ?? schema[REF_KEY]);\n const definitions = registry.uiSchemaDefinitions;\n const definitionUiSchema = ref && definitions ? definitions[ref] : undefined;\n let result;\n if (!definitionUiSchema) {\n result = localUiSchema || {};\n }\n else if (!localUiSchema || Object.keys(localUiSchema).length === 0) {\n result = { ...definitionUiSchema };\n }\n else {\n result = mergeObjects(definitionUiSchema, localUiSchema);\n }\n // Walk oneOf/anyOf branches to populate uiSchema[keyword][i] so MultiSchemaField\n // can read dropdown option titles at the parent level.\n if (definitions) {\n let resolvedSchema = schema;\n if (ref && schema[REF_KEY] && !schema[RJSF_REF_KEY]) {\n try {\n resolvedSchema = findSchemaDefinition(ref, registry.rootSchema);\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.warn('could not resolve $ref in resolveUiSchema:\\n', e);\n return result;\n }\n }\n for (const keyword of [ONE_OF_KEY, ANY_OF_KEY]) {\n const schemaOptions = resolvedSchema[keyword];\n if (Array.isArray(schemaOptions) && schemaOptions.length > 0) {\n const currentUiSchemaArray = result[keyword];\n const uiSchemaArray = Array.isArray(currentUiSchemaArray) ? [...currentUiSchemaArray] : [];\n let hasExpanded = false;\n for (let i = 0; i < schemaOptions.length; i++) {\n const option = schemaOptions[i];\n const optionRef = (option?.[RJSF_REF_KEY] ?? option?.[REF_KEY]);\n if (optionRef && optionRef in definitions) {\n const optionUiSchema = (uiSchemaArray[i] || {});\n uiSchemaArray[i] = mergeObjects(definitions[optionRef], optionUiSchema);\n hasExpanded = true;\n }\n }\n if (hasExpanded) {\n result[keyword] = uiSchemaArray;\n }\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=resolveUiSchema.js.map","/** Check to see if a `schema` specifies that a value must be true. This happens when:\n * - `schema.const` is truthy\n * - `schema.enum` == `[true]`\n * - `schema.anyOf` or `schema.oneOf` has a single value which recursively returns true\n * - `schema.allOf` has at least one value which recursively returns true\n *\n * @param schema - The schema to check\n * @returns - True if the schema specifies a value that must be true, false otherwise\n */\nexport default function schemaRequiresTrueValue(schema) {\n // Check if const is a truthy value\n if (schema.const) {\n return true;\n }\n // Check if an enum has a single value of true\n if (schema.enum?.length === 1 && schema.enum[0] === true) {\n return true;\n }\n // If anyOf has a single value, evaluate the subschema\n if (schema.anyOf?.length === 1) {\n return schemaRequiresTrueValue(schema.anyOf[0]);\n }\n // If oneOf has a single value, evaluate the subschema\n if (schema.oneOf?.length === 1) {\n return schemaRequiresTrueValue(schema.oneOf[0]);\n }\n // Evaluate each subschema in allOf, to see if one of them requires a true value\n if (schema.allOf) {\n const schemaSome = (subSchema) => schemaRequiresTrueValue(subSchema);\n return schema.allOf.some(schemaSome);\n }\n return false;\n}\n//# sourceMappingURL=schemaRequiresTrueValue.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport enumOptionsIsSelected from \"./enumOptionsIsSelected.js\";\nimport getTemplate from \"./getTemplate.js\";\nimport getUiOptions from \"./getUiOptions.js\";\nimport { descriptionId } from \"./idGenerators.js\";\n/** Renders the description associated with the selected oneOf or anyOf option in a single-select widget. */\nexport default function SelectedOptionDescription({ hideLabel, id, multiple, options, registry, uiSchema, value }) {\n if (multiple || hideLabel) {\n return null;\n }\n const { label = true } = getUiOptions(uiSchema, registry.globalUiOptions);\n if (!label) {\n return null;\n }\n const option = options.enumOptions?.find(({ value: enumValue }) => enumOptionsIsSelected(enumValue, value));\n const description = option?.schema?.description;\n if (!description) {\n return null;\n }\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, options);\n return (_jsx(DescriptionFieldTemplate, { id: descriptionId(id), description: description, schema: option.schema, uiSchema: uiSchema, registry: registry }));\n}\n//# sourceMappingURL=SelectedOptionDescription.js.map","/** Implements a shallow equals comparison that uses Object.is() for comparing values.\n * This function compares objects by checking if all keys and their values are equal using Object.is().\n *\n * @param a - The first element to compare\n * @param b - The second element to compare\n * @returns - True if the `a` and `b` are shallow equal, false otherwise\n */\nexport default function shallowEquals(a, b) {\n // If they're the same reference, they're equal\n if (Object.is(a, b)) {\n return true;\n }\n // If either is null or undefined, they're not equal (since we know they're not the same reference)\n if (a == null || b == null) {\n return false;\n }\n // If they're not objects, they're not equal (since Object.is already checked)\n if (typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n // Different number of keys means not equal\n if (keysA.length !== keysB.length) {\n return false;\n }\n // Check if all keys and values are equal\n for (let i = 0; i < keysA.length; i += 1) {\n const key = keysA[i];\n if (!Object.hasOwn(b, key) || !Object.is(a[key], b[key])) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=shallowEquals.js.map","import deepEquals from \"./deepEquals.js\";\nimport shallowEquals from \"./shallowEquals.js\";\n/** Determines whether the given `component` should be rerendered by comparing its current set of props and state\n * against the next set. The comparison strategy can be controlled via the `updateStrategy` parameter.\n *\n * @param component - A React component being checked\n * @param nextProps - The next set of props against which to check\n * @param nextState - The next set of state against which to check\n * @param updateStrategy - The strategy to use for comparison:\n * - 'customDeep': Uses RJSF's custom deep equality checks (default)\n * - 'shallow': Uses shallow comparison of props and state\n * - 'always': Always returns true (React's default behavior)\n * @returns - True if the component should be re-rendered, false otherwise\n */\nexport default function shouldRender(component, nextProps, nextState, updateStrategy = 'customDeep') {\n if (updateStrategy === 'always') {\n // Use React's default behavior: always update if state or props change (no shouldComponentUpdate optimization)\n return true;\n }\n if (updateStrategy === 'shallow') {\n // Use shallow comparison for props and state\n const { props, state } = component;\n return !shallowEquals(props, nextProps) || !shallowEquals(state, nextState);\n }\n // Use custom deep equality checks (default 'customDeep' strategy)\n const { props, state } = component;\n return !deepEquals(props, nextProps) || !deepEquals(state, nextState);\n}\n//# sourceMappingURL=shouldRender.js.map","import { ANY_OF_KEY, ONE_OF_KEY } from \"./constants.js\";\nimport getSchemaType from \"./getSchemaType.js\";\nimport getUiOptions from \"./getUiOptions.js\";\nimport isObject from \"./isObject.js\";\nimport isRootSchema from \"./isRootSchema.js\";\n/** Returns the unique list of schema types for all of the options in a anyOf/oneOf\n *\n * @param schemas - The list of schemas representing the XxxOf options\n * @returns - All of the unique types contained within the oneOf list\n */\nexport function getSchemaTypesForXxxOf(schemas) {\n const allTypes = [\n ...new Set(schemas\n .map((s) => (isObject(s) ? getSchemaType(s) : undefined))\n .flat()\n .filter((t) => t !== undefined)),\n ];\n return allTypes.length === 1 ? allTypes[0] : allTypes;\n}\n/** Determines whether the field information from the combination of `schema` and `required` along with the\n * `enableOptionalDataFieldForType` settings from the global UI options in the `registry` all indicate that this field\n * should be rendered with the Optional Data Controls UI.\n *\n * @param registry - The `registry` object\n * @param schema - The schema for the field\n * @param required - Flag indicating whether the field is required\n * @param [uiSchema] - The uiSchema for the field\n * @return - True if the field should be rendered with the optional field UI, otherwise false\n */\nexport default function shouldRenderOptionalField(registry, schema, required, uiSchema) {\n const { enableOptionalDataFieldForType = [] } = getUiOptions(uiSchema, registry.globalUiOptions);\n let schemaType;\n if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {\n schemaType = getSchemaTypesForXxxOf(schema[ANY_OF_KEY]);\n }\n else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {\n schemaType = getSchemaTypesForXxxOf(schema[ONE_OF_KEY]);\n }\n else {\n schemaType = getSchemaType(schema);\n }\n return (!isRootSchema(registry, schema) &&\n !required &&\n !!schemaType &&\n !Array.isArray(schemaType) &&\n !!enableOptionalDataFieldForType.find((val) => val === schemaType));\n}\n//# sourceMappingURL=shouldRenderOptionalField.js.map","/** Returns a UTC date string for the given `dateObject`. If `time` is false, then the time portion of the string is\n * removed.\n *\n * @param dateObject - The `DateObject` to convert to a date string\n * @param [time=true] - Optional flag used to remove the time portion of the date string if false\n * @returns - The UTC date string\n */\nexport default function toDateString(dateObject, time = true) {\n const { year, month, day, hour = 0, minute = 0, second = 0 } = dateObject;\n const utcTime = Date.UTC(year, month - 1, day, hour, minute, second);\n const datetime = new Date(utcTime).toJSON();\n return time ? datetime : datetime.slice(0, 10);\n}\n//# sourceMappingURL=toDateString.js.map","import { ERRORS_KEY } from \"./constants.js\";\nimport isPlainObject from \"./isPlainObject.js\";\n/** Converts an `errorSchema` into a list of `RJSFValidationErrors`\n *\n * @param errorSchema - The `ErrorSchema` instance to convert\n * @param [fieldPath=[]] - The current field path, defaults to [] if not specified\n * @returns - The list of `RJSFValidationErrors` extracted from the `errorSchema`\n */\nexport default function toErrorList(errorSchema, fieldPath = []) {\n return errorSchema ? errorsFrom(errorSchema, fieldPath) : [];\n}\n/** Does the actual conversion, working on the plain-object shape of an `ErrorSchema` so that the recursive call for a\n * nested error schema does not need an assertion back to `ErrorSchema`.\n *\n * @param errorSchema - The error schema, viewed as the plain object it is at runtime\n * @param fieldPath - The current field path\n * @returns - The list of `RJSFValidationErrors` extracted from the `errorSchema`\n */\nfunction errorsFrom(errorSchema, fieldPath) {\n const errors = errorSchema[ERRORS_KEY];\n const property = `.${fieldPath.join('.')}`;\n const errorList = Array.isArray(errors)\n ? errors.map((message) => ({ property, message, stack: `${property} ${message}` }))\n : [];\n return Object.keys(errorSchema).reduce((currentList, key) => {\n const childSchema = errorSchema[key];\n if (key !== ERRORS_KEY && isPlainObject(childSchema)) {\n return currentList.concat(errorsFrom(childSchema, [...fieldPath, key]));\n }\n return currentList;\n }, errorList);\n}\n//# sourceMappingURL=toErrorList.js.map","import ErrorSchemaBuilder from \"./ErrorSchemaBuilder.js\";\nimport { toPath } from \"./pathUtils.js\";\n/** Transforms a rjsf validation errors list:\n * [\n * {property: '.level1.level2[2].level3', message: 'err a'},\n * {property: '.level1.level2[2].level3', message: 'err b'},\n * {property: '.level1.level2[4].level3', message: 'err b'},\n * ]\n * Into an error tree:\n * {\n * level1: {\n * level2: {\n * 2: {level3: {errors: ['err a', 'err b']}},\n * 4: {level3: {errors: ['err b']}},\n * }\n * }\n * };\n *\n * @param errors - The list of RJSFValidationError objects\n * @returns - The `ErrorSchema` built from the list of `RJSFValidationErrors`\n */\nexport default function toErrorSchema(errors) {\n const builder = new ErrorSchemaBuilder();\n if (errors.length) {\n errors.forEach((error) => {\n const { property, message } = error;\n // When the property is missing or the root element ('.'), toPath produces an empty path\n const path = property ? toPath(property) : [];\n if (message) {\n builder.addErrors(message, path);\n }\n });\n }\n return builder.ErrorSchema;\n}\n//# sourceMappingURL=toErrorSchema.js.map","import { ID_KEY } from \"./constants.js\";\n/** Constructs the `FieldPathId` for `fieldPath`. If `parentPathId` is provided, the `fieldPath` is appended to the end\n * of the parent path. Then the `ID_KEY` of the resulting `FieldPathId` is constructed from the `idPrefix` and\n * `idSeparator` contained within the `globalFormOptions`. If `fieldPath` is passed as an empty string, it will simply\n * generate the path from the `parentPath` (if provided) and the `idPrefix` and `idSeparator`. If a `nameGenerator`\n * is provided in `globalFormOptions`, it will also generate the HTML `name` attribute.\n *\n * @param fieldPath - The property name or array index of the current field element\n * @param globalFormOptions - The `GlobalFormOptions` used to get the `idPrefix` and `idSeparator`\n * @param [parentPath] - The optional `FieldPathId` or `FieldPathList` of the parent element for this field element\n * @param [isMultiValue] - Optional flag indicating this field accepts multiple values\n * @returns - The `FieldPathId` for the given `fieldPath` and the optional `parentPathId`\n */\nexport default function toFieldPathId(fieldPath, globalFormOptions, parentPath, isMultiValue) {\n const basePath = Array.isArray(parentPath) ? parentPath : parentPath?.path;\n const childPath = fieldPath === '' ? [] : [fieldPath];\n const path = basePath ? basePath.concat(...childPath) : childPath;\n const id = [globalFormOptions.idPrefix, ...path].join(globalFormOptions.idSeparator);\n // Generate name attribute if nameGenerator is provided\n let name;\n if (globalFormOptions.nameGenerator && path.length > 0) {\n name = globalFormOptions.nameGenerator(path, globalFormOptions.idPrefix, isMultiValue);\n }\n return { path, [ID_KEY]: id, ...(name !== undefined && { name }) };\n}\n//# sourceMappingURL=toFieldPathId.js.map","import isPlainObject from \"./isPlainObject.js\";\n/** Unwraps the `errorHandler` structure into the associated `ErrorSchema`, stripping the `addError()` functions from it\n *\n * @param errorHandler - The `FormValidation` error handling structure\n * @returns - The `ErrorSchema` resulting from the stripping of the `addError()` function\n */\nexport default function unwrapErrorHandler(errorHandler) {\n return unwrapErrors(errorHandler);\n}\n/** Does the actual unwrapping, working on the plain-object shape of a `FormValidation` so that the recursive call for\n * a nested error handler does not need an assertion back to `FormValidation`.\n *\n * @param errors - The error handling structure, viewed as the plain object it is at runtime\n * @returns - The `ErrorSchema` resulting from the stripping of the `addError()` function\n */\nfunction unwrapErrors(errors) {\n return Object.keys(errors).reduce((acc, key) => {\n if (key === 'addError') {\n return acc;\n }\n const childSchema = errors[key];\n if (isPlainObject(childSchema)) {\n return {\n ...acc,\n [key]: unwrapErrors(childSchema),\n };\n }\n return { ...acc, [key]: childSchema };\n }, {});\n}\n//# sourceMappingURL=unwrapErrorHandler.js.map","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport dateRangeOptions from \"./dateRangeOptions.js\";\nimport getDateElementProps from \"./getDateElementProps.js\";\nimport { ariaDescribedByIds } from \"./idGenerators.js\";\nimport parseDateString from \"./parseDateString.js\";\nimport toDateString from \"./toDateString.js\";\n/** Function that checks to see if a `DateObject` is ready for the onChange callback to be triggered\n *\n * @param state - The current `DateObject`\n * @returns - True if the `state` is ready to trigger an onChange\n */\nfunction readyForChange(state) {\n return Object.values(state).every((value) => value !== -1);\n}\n/** The `DateElement` component renders one of the 6 date element selectors for an `AltDateWidget`, using the `select`\n * widget from the registry.\n *\n * @param props - The `DateElementProps` for the date element\n */\nexport function DateElement(props) {\n const { className = 'form-control', type, range, value, select, rootId, name, disabled, readonly, autofocus, registry, onBlur, onFocus, } = props;\n const id = `${rootId}_${type}`;\n const { SelectWidget } = registry.widgets;\n const onChange = useCallback((newValue) => select(type, newValue), [select, type]);\n return (_jsx(SelectWidget, { schema: { type: 'integer' }, id: id, name: name, className: className, options: { enumOptions: dateRangeOptions(range[0], range[1]) }, placeholder: type, value: value, disabled: disabled, readonly: readonly, autofocus: autofocus, onChange: onChange, onBlur: onBlur, onFocus: onFocus, registry: registry, label: '', \"aria-describedby\": ariaDescribedByIds(rootId) }));\n}\n/** Hook which encapsulates the logic needed to render an `AltDateWidget` with optional `time` elements. It contains\n * the `state` of the current date(/time) selections in the widget. It returns a `UseAltDateWidgetResult` object\n * that contains the `elements: DateElementProp[]` and three callbacks needed to change one of the rendered `elements`,\n * and to handle the clicking of the `clear` and `setNow` buttons.\n *\n * @param props - The `WidgetProps` for the `AltDateWidget`\n */\nexport default function useAltDateWidgetProps(props) {\n const { time = false, disabled = false, readonly = false, options, onChange, value } = props;\n const [state, setState] = useState(parseDateString(value, time));\n useEffect(() => {\n setState(parseDateString(value, time));\n }, [time, value]);\n const handleChange = useCallback((property, newValue) => {\n const nextState = {\n ...state,\n [property]: typeof newValue === 'undefined' ? -1 : newValue,\n };\n if (readyForChange(nextState)) {\n onChange(toDateString(nextState, time));\n }\n else {\n setState(nextState);\n }\n }, [state, onChange, time]);\n const handleClear = useCallback((event) => {\n event.preventDefault();\n if (disabled || readonly) {\n return;\n }\n onChange(undefined);\n }, [disabled, readonly, onChange]);\n const handleSetNow = useCallback((event) => {\n event.preventDefault();\n if (disabled || readonly) {\n return;\n }\n const nextState = parseDateString(new Date().toJSON(), time);\n onChange(toDateString(nextState, time));\n }, [disabled, readonly, time, onChange]);\n const elements = useMemo(() => getDateElementProps(state, time, options.yearsRange, options.format), [state, time, options.yearsRange, options.format]);\n return { elements, handleChange, handleClear, handleSetNow };\n}\n//# sourceMappingURL=useAltDateWidgetProps.js.map","'use client';\nimport { useRef } from 'react';\nimport deepEquals from \"./deepEquals.js\";\n/** Hook that stores and returns a `T` value. If `newValue` is the same as the stored one, then the stored one is\n * returned to avoid having a component rerender due it being a different object. Otherwise, the `newValue` is stored\n * and returned.\n *\n * @param newValue - The potential new `T` value\n * @returns - The latest stored `T` value\n */\nexport default function useDeepCompareMemo(newValue) {\n const valueRef = useRef(newValue);\n if (!deepEquals(newValue, valueRef.current)) {\n valueRef.current = newValue;\n }\n return valueRef.current;\n}\n//# sourceMappingURL=useDeepCompareMemo.js.map","'use client';\nimport { useCallback, useMemo } from 'react';\nimport dataURItoBlob from \"./dataURItoBlob.js\";\n/** Updated the given `dataUrl` to add the `name` to it\n *\n * @param dataURL - The url description string\n * @param name - The name of the file to add to the dataUrl\n * @returns - The `dataUrl` updated to include the name\n */\nfunction addNameToDataURL(dataURL, name) {\n return dataURL.replace(';base64', `;name=${encodeURIComponent(name)};base64`);\n}\n/** Returns a promise that will read the file from the browser and return it as the result of the promise.\n *\n * @param file - The `File` information to read\n * @returns - A promise that resolves to the read file.\n */\nasync function processFile(file) {\n const { name, size, type } = file;\n return new Promise((resolve, reject) => {\n const reader = new window.FileReader();\n reader.onerror = reject;\n reader.onload = (event) => {\n if (typeof event.target?.result === 'string') {\n resolve({\n dataURL: addNameToDataURL(event.target.result, name),\n name,\n size,\n type,\n });\n }\n else {\n resolve({\n dataURL: null,\n name,\n size,\n type,\n });\n }\n };\n reader.readAsDataURL(file);\n });\n}\n/** Reads a list of files from the browser, returning the results of the promises of each individual file read.\n *\n * @param files - The list of files to read\n * @returns - The list of read files\n */\nasync function processFiles(files) {\n return Promise.all(Array.from(files).map(processFile));\n}\n/** Extracts the file information from the data URLs\n *\n * @param dataURLs - The information about the files\n * @returns - The list of `FileInfoType` objects extracted from the data urls\n */\nfunction extractFileInfo(dataURLs) {\n return dataURLs.reduce((acc, dataURL) => {\n if (!dataURL) {\n return acc;\n }\n try {\n const { blob, name } = dataURItoBlob(dataURL);\n return [\n ...acc,\n {\n dataURL,\n name,\n size: blob.size,\n type: blob.type,\n },\n ];\n }\n catch {\n // Invalid dataURI, so just ignore it.\n return acc;\n }\n }, []);\n}\n/** Hook which encapsulates the logic needed to read and convert a `value` of `File` or `File[]` into the\n * `filesInfo: FileInfoType[]` and the two callback implementations needed to change the list or to remove a\n * `File` from the list. To be used by theme specific `FileWidget` implementations.\n *\n * @param value - The current value of the `FileWidget`\n * @param onChange - The onChange handler for the `FileWidget`\n * @param [multiple=false] - Flag indicating whether the control supports multiple selections\n * @returns - The `UseFileWidgetPropsResult` to be used within a `FileWidget` implementation\n */\nexport default function useFileWidgetProps(value, onChange, multiple = false) {\n const values = useMemo(() => {\n if (multiple && value) {\n return Array.isArray(value) ? value : [value];\n }\n return [];\n }, [value, multiple]);\n const filesInfo = useMemo(() => (Array.isArray(value) ? extractFileInfo(value) : extractFileInfo([value || ''])), [value]);\n const handleChange = useCallback(async (files) => {\n const filesInfoEvent = await processFiles(files);\n const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL || null);\n if (multiple) {\n onChange(values.concat(...newValue));\n }\n else {\n onChange(newValue[0]);\n }\n }, [values, multiple, onChange]);\n const handleRemove = useCallback((index) => {\n if (multiple) {\n const newValue = values.filter((_, i) => i !== index);\n onChange(newValue);\n }\n else {\n onChange(undefined);\n }\n }, [values, multiple, onChange]);\n return { filesInfo, handleChange, handleRemove };\n}\n//# sourceMappingURL=useFileWidgetProps.js.map","import pad from \"./pad.js\";\n/** Converts a UTC date string into a local Date format\n *\n * @param jsonDate - A UTC date string\n * @returns - An empty string when `jsonDate` is falsey, otherwise a date string in local format\n */\nexport default function utcToLocal(jsonDate) {\n if (!jsonDate) {\n return '';\n }\n // required format of `'yyyy-MM-ddThh:mm' followed by optional ':ss' or ':ss.SSS'\n // https://html.spec.whatwg.org/multipage/input.html#local-date-and-time-state-(type%3Ddatetime-local)\n // > should be a _valid local date and time string_ (not GMT)\n // Note - date constructor passed local ISO-8601 does not correctly\n // change time to UTC in node pre-8\n const date = new Date(jsonDate);\n const yyyy = pad(date.getFullYear(), 4);\n const MM = pad(date.getMonth() + 1, 2);\n const dd = pad(date.getDate(), 2);\n const hh = pad(date.getHours(), 2);\n const mm = pad(date.getMinutes(), 2);\n const ss = pad(date.getSeconds(), 2);\n const SSS = pad(date.getMilliseconds(), 3);\n return `${yyyy}-${MM}-${dd}T${hh}:${mm}:${ss}.${SSS}`;\n}\n//# sourceMappingURL=utcToLocal.js.map","import mergeObjects from \"./mergeObjects.js\";\nimport toErrorList from \"./toErrorList.js\";\n/** Merges the errors in `additionalErrorSchema` into the existing `validationData` by combining the hierarchies in the\n * two `ErrorSchema`s and then appending the error list from the `additionalErrorSchema` obtained by calling\n * `toErrorList()` on the `errors` in the `validationData`. If no `additionalErrorSchema` is passed, then\n * `validationData` is returned.\n *\n * @param validationData - The current `ValidationData` into which to merge the additional errors\n * @param [additionalErrorSchema] - The optional additional set of errors in an `ErrorSchema`\n * @param [preventDuplicates=false] - Optional flag, if true, will call `mergeObjects()` with `preventDuplicates`\n * @returns - The `validationData` with the additional errors from `additionalErrorSchema` merged into it, if provided.\n */\nexport default function validationDataMerge(validationData, additionalErrorSchema, preventDuplicates = false) {\n if (!additionalErrorSchema) {\n return validationData;\n }\n const { errors: oldErrors, errorSchema: oldErrorSchema } = validationData;\n let errors = toErrorList(additionalErrorSchema);\n let errorSchema = additionalErrorSchema;\n if (oldErrorSchema && Object.keys(oldErrorSchema).length > 0) {\n errorSchema = mergeObjects(oldErrorSchema, additionalErrorSchema, preventDuplicates ? 'preventDuplicates' : true);\n errors = [...oldErrors].concat(errors);\n }\n return { errorSchema, errors };\n}\n//# sourceMappingURL=validationDataMerge.js.map","import { REF_KEY, ROOT_SCHEMA_PREFIX } from \"./constants.js\";\nimport isObject from \"./isObject.js\";\n/** Takes a `node` object and transforms any contained `$ref` node variables with a prefix, recursively calling\n * `withIdRefPrefix` for any other elements.\n *\n * @param node - The object node to which a ROOT_SCHEMA_PREFIX is added when a REF_KEY is part of it\n */\nfunction withIdRefPrefixObject(node) {\n const realObj = node;\n for (const key in realObj) {\n /* v8 ignore next -- spread in caller guarantees only own properties reach this loop */\n if (Object.hasOwn(realObj, key)) {\n const value = realObj[key];\n if (key === REF_KEY && typeof value === 'string' && value.startsWith('#')) {\n realObj[key] = ROOT_SCHEMA_PREFIX + value;\n }\n else {\n realObj[key] = withIdRefPrefix(value);\n }\n }\n }\n return node;\n}\n/** Takes a `node` object list and transforms any contained `$ref` node variables with a prefix, recursively calling\n * `withIdRefPrefix` for any other elements.\n *\n * @param node - The list of object nodes to which a ROOT_SCHEMA_PREFIX is added when a REF_KEY is part of it\n */\nfunction withIdRefPrefixArray(node) {\n return node.map((item) => withIdRefPrefix(item));\n}\n/** Recursively prefixes all `$ref`s in a schema with the value of the `ROOT_SCHEMA_PREFIX` constant.\n * This is used in isValid to make references to the rootSchema\n *\n * @param schemaNode - The object node to which a ROOT_SCHEMA_PREFIX is added when a REF_KEY is part of it\n * @returns - A copy of the `schemaNode` with updated `$ref`s\n */\nexport default function withIdRefPrefix(schemaNode) {\n if (Array.isArray(schemaNode)) {\n return withIdRefPrefixArray([...schemaNode]);\n }\n if (isObject(schemaNode)) {\n return withIdRefPrefixObject({ ...schemaNode });\n }\n return schemaNode;\n}\n//# sourceMappingURL=withIdRefPrefix.js.map","/** An enumeration of all the translatable strings used by `@rjsf/core` and its themes. The value of each of the\n * enumeration keys is expected to be the actual english string. Some strings contain replaceable parameter values\n * as indicated by `%1`, `%2`, etc. The number after the `%` indicates the order of the parameter. The ordering of\n * parameters is important because some languages may choose to put the second parameter before the first in its\n * translation. Also, some strings are rendered using `markdown-to-jsx` and thus support markdown and inline html.\n */\nexport var TranslatableString;\n(function (TranslatableString) {\n /** Fallback title of an array item, used by ArrayField */\n TranslatableString[\"ArrayItemTitle\"] = \"Item\";\n /** Missing items reason, used by ArrayField */\n TranslatableString[\"MissingItems\"] = \"Missing items definition\";\n /** Empty array message, used by ArrayField */\n TranslatableString[\"EmptyArray\"] = \"No items yet. Use the button below to add some.\";\n /** Yes label, used by BooleanField */\n TranslatableString[\"YesLabel\"] = \"Yes\";\n /** No label, used by BooleanField */\n TranslatableString[\"NoLabel\"] = \"No\";\n /** Close label, used by ErrorList */\n TranslatableString[\"CloseLabel\"] = \"Close\";\n /** Errors label, used by ErrorList */\n TranslatableString[\"ErrorsLabel\"] = \"Errors\";\n /** New additionalProperties string default value, used by ObjectField */\n TranslatableString[\"NewStringDefault\"] = \"New Value\";\n /** Add button title, used by AddButton */\n TranslatableString[\"AddButton\"] = \"Add\";\n /** Add button title, used by AddButton */\n TranslatableString[\"AddItemButton\"] = \"Add Item\";\n /** Copy button title, used by IconButton */\n TranslatableString[\"CopyButton\"] = \"Copy\";\n /** Expand cycle button title */\n TranslatableString[\"ExpandButton\"] = \"Expand Cycle\";\n /** Move down button title, used by IconButton */\n TranslatableString[\"MoveDownButton\"] = \"Move down\";\n /** Move up button title, used by IconButton */\n TranslatableString[\"MoveUpButton\"] = \"Move up\";\n /** Remove button title, used by IconButton */\n TranslatableString[\"RemoveButton\"] = \"Remove\";\n /** Now label, used by AltDateWidget */\n TranslatableString[\"NowLabel\"] = \"Now\";\n /** Clear label, used by AltDateWidget */\n TranslatableString[\"ClearLabel\"] = \"Clear\";\n /** Aria date label, used by DateWidget */\n TranslatableString[\"AriaDateLabel\"] = \"Select a date\";\n /** File preview label, used by FileWidget */\n TranslatableString[\"PreviewLabel\"] = \"Preview\";\n /** Decrement button aria label, used by UpDownWidget */\n TranslatableString[\"DecrementAriaLabel\"] = \"Decrease value by 1\";\n /** Increment button aria label, used by UpDownWidget */\n TranslatableString[\"IncrementAriaLabel\"] = \"Increase value by 1\";\n /** The label for the Add button in for an optional object field */\n TranslatableString[\"OptionalObjectAdd\"] = \"Add data for optional field\";\n /** The label for the Remove button in for an optional object field */\n TranslatableString[\"OptionalObjectRemove\"] = \"Remove data for optional field\";\n /** The label for when displaying a non-editable form with missing optional field data */\n TranslatableString[\"OptionalObjectEmptyMsg\"] = \"No data for optional field\";\n /** Label for the schema type selector, used by FallbackField */\n TranslatableString[\"Type\"] = \"Type\";\n /** Label for the 'value' field, used by FallbackField */\n TranslatableString[\"Value\"] = \"Value\";\n /** Clear button title, used by IconButton */\n TranslatableString[\"ClearButton\"] = \"clear input\";\n // Strings with replaceable parameters\n /** Unknown field type reason, where %1 will be replaced with the type as provided by SchemaField */\n TranslatableString[\"UnknownFieldType\"] = \"Unknown field type %1\";\n /** Option prefix, where %1 will be replaced with the option index as provided by MultiSchemaField */\n TranslatableString[\"OptionPrefix\"] = \"Option %1\";\n /** Option prefix, where %1 and %2 will be replaced by the schema title and option index, respectively as provided by\n * MultiSchemaField\n */\n TranslatableString[\"TitleOptionPrefix\"] = \"%1 option %2\";\n /** Key label, where %1 will be replaced by the label as provided by WrapIfAdditionalTemplate */\n TranslatableString[\"KeyLabel\"] = \"%1 Key\";\n /** Deprecated label, where %1 will be replaced by the label as provided by SchemaField */\n TranslatableString[\"DeprecatedLabel\"] = \"%1 (deprecated)\";\n /** Cyclic schema message */\n TranslatableString[\"CycleDetected\"] = \"Circular reference ($ref cycle) detected for field \\\"%1\\\". You may choose to expand to the next cycle break\";\n // Strings with replaceable parameters AND/OR that support markdown and html\n /** Invalid object field configuration as provided by the ObjectField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"InvalidObjectField\"] = \"Invalid \\\"%1\\\" object field configuration: _%2_.\";\n /** Unsupported field schema, used by UnsupportedField */\n TranslatableString[\"UnsupportedField\"] = \"Unsupported field schema.\";\n /** Unsupported field schema, where %1 will be replaced by the FieldPathId.$id as provided by UnsupportedField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"UnsupportedFieldWithId\"] = \"Unsupported field schema for field `%1`.\";\n /** Unsupported field schema, where %1 will be replaced by the reason string as provided by UnsupportedField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"UnsupportedFieldWithReason\"] = \"Unsupported field schema: _%1_.\";\n /** Unsupported field schema, where %1 and %2 will be replaced by the FieldPathId.$id and reason strings,\n * respectively, as provided by UnsupportedField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"UnsupportedFieldWithIdAndReason\"] = \"Unsupported field schema for field `%1`: _%2_.\";\n /** File name, type and size info, where %1, %2 and %3 will be replaced by the file name, file type and file size as\n * provided by FileWidget\n */\n TranslatableString[\"FilesInfo\"] = \"**%1** (%2, %3 bytes)\";\n})(TranslatableString || (TranslatableString = {}));\n//# sourceMappingURL=enums.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { memo, useCallback, useMemo, useRef, useState } from 'react';\nimport { setByPath, allowAdditionalItems, getTemplate, getUiOptions, getWidget, hashObject, isCustomWidget, isFixedItems, isFormDataAvailable, isObject, optionsList, shouldRenderOptionalField, toFieldPathId, useDeepCompareMemo, ITEMS_KEY, ID_KEY, TranslatableString, } from '@rjsf/utils';\n/** Used to generate a unique ID for an element in a row */\nlet rowIdCounter = 0;\nfunction generateRowId() {\n rowIdCounter += 1;\n return `rjsf-array-item-${rowIdCounter}`;\n}\n/** Converts the `formData` into `KeyedFormDataType` data, using the `generateRowId()` function to create the key\n *\n * @param formData - The data for the form\n * @returns - The `formData` converted into a `KeyedFormDataType` element\n */\nfunction generateKeyedFormData(formData) {\n return !Array.isArray(formData)\n ? []\n : formData.map((item) => ({\n key: generateRowId(),\n item,\n }));\n}\n/** Converts `KeyedFormDataType` data into the inner `formData`\n *\n * @param keyedFormData - The `KeyedFormDataType` to be converted\n * @returns - The inner `formData` item(s) in the `keyedFormData`\n */\nfunction keyedToPlainFormData(keyedFormData) {\n if (Array.isArray(keyedFormData)) {\n return keyedFormData.map((keyedItem) => keyedItem.item);\n }\n return [];\n}\n/** Determines whether the item described in the schema is always required, which is determined by whether any item\n * may be null.\n *\n * @param itemSchema - The schema for the item\n * @return - True if the item schema type does not contain the \"null\" type\n */\nfunction isItemRequired(itemSchema) {\n if (Array.isArray(itemSchema.type)) {\n // While we don't yet support composite/nullable jsonschema types, it's\n // future-proof to check for requirement against these.\n return !itemSchema.type.includes('null');\n }\n // All non-null array item types are inherently required by design\n return itemSchema.type !== 'null';\n}\n/** Determines whether more items can be added to the array. If the uiSchema indicates the array doesn't allow adding\n * then false is returned. Otherwise, if the schema indicates that there are a maximum number of items and the\n * `formData` matches that value, then false is returned, otherwise true is returned.\n *\n * @param registry - The registry\n * @param schema - The schema for the field\n * @param formItems - The list of items in the form\n * @param [uiSchema] - The UiSchema for the field\n * @returns - True if the item is addable otherwise false\n */\nfunction canAddItem(registry, schema, formItems, uiSchema) {\n let { addable } = getUiOptions(uiSchema, registry.globalUiOptions);\n if (addable !== false) {\n // if ui:options.addable was not explicitly set to false, we can add\n // another item if we have not exceeded maxItems yet\n if (schema.maxItems !== undefined) {\n addable = formItems.length < schema.maxItems;\n }\n else {\n addable = true;\n }\n }\n return addable;\n}\n/** Helper method to compute item UI schema for both normal and fixed arrays\n * Handles both static object and dynamic function cases\n *\n * @param uiSchema - The parent UI schema containing items definition\n * @param item - The item data\n * @param index - The index of the item\n * @param formContext - The form context\n * @returns The computed UI schema for the item\n */\nfunction computeItemUiSchema(uiSchema, item, index, formContext) {\n if (typeof uiSchema.items === 'function') {\n try {\n // Call the function with item data, index, and form context\n // TypeScript now correctly infers the types thanks to the ArrayElement type in UiSchema\n const result = uiSchema.items(item, index, formContext);\n // Only use the result if it's truthy\n return result;\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.error(`Error executing dynamic uiSchema.items function for item at index ${index}:`, e);\n // Fall back to undefined to allow the field to still render\n return undefined;\n }\n }\n else {\n // Static object case - preserve undefined to maintain backward compatibility\n return uiSchema.items;\n }\n}\n/** Returns the default form information for an item based on the schema for that item. Deals with the possibility\n * that the schema is fixed and allows additional items.\n */\nfunction getNewFormDataRow(registry, schema) {\n const { schemaUtils, globalFormOptions } = registry;\n let itemSchema = schema.items;\n if (globalFormOptions.useFallbackUiForUnsupportedType && !itemSchema) {\n // If we don't have itemSchema and useFallbackUiForUnsupportedType is on, use an empty schema\n itemSchema = {};\n }\n else if (isFixedItems(schema) && allowAdditionalItems(schema)) {\n itemSchema = schema.additionalItems;\n }\n // Cast this as a T to work around schema utils being for T[] caused by the FieldProps call on the class\n return schemaUtils.getDefaultFormState(itemSchema);\n}\n/** Renders an array as a set of checkboxes using the 'select' widget\n */\nfunction ArrayAsMultiSelect(props) {\n const { schema, fieldPathId, uiSchema, formData: items = [], disabled = false, readonly = false, autofocus = false, required = false, placeholder, onBlur, onFocus, registry, rawErrors, name, onSelectChange, } = props;\n const { widgets, schemaUtils, globalFormOptions, globalUiOptions } = registry;\n const itemsSchema = schemaUtils.retrieveSchema(schema.items, items);\n // For computing `enumOptions`, fallback to the array property's uiSchema if there is no `items` schema\n // Avoids a breaking change reported in https://github.com/rjsf-team/react-jsonschema-form/issues/4985\n const itemsUiSchema = (uiSchema?.items ?? uiSchema);\n const enumOptions = optionsList(itemsSchema, itemsUiSchema);\n const { widget = 'select', title: uiTitle, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const label = uiTitle ?? schema.title ?? name;\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n // For custom widgets with multiple=true, generate a fieldPathId with isMultiValue flag\n const multiValueFieldPathId = useDeepCompareMemo(toFieldPathId('', globalFormOptions, fieldPathId, true));\n return (_jsx(Widget, { id: multiValueFieldPathId[ID_KEY], name: name, multiple: true, onChange: onSelectChange, onBlur: onBlur, onFocus: onFocus, options: { ...options, enumOptions }, schema: schema, uiSchema: uiSchema, registry: registry, value: items, disabled: disabled, readonly: readonly, required: required, label: label, hideLabel: !displayLabel, placeholder: placeholder, autofocus: autofocus, rawErrors: rawErrors, htmlName: multiValueFieldPathId.name }));\n}\n/** Renders an array using the custom widget provided by the user in the `uiSchema`\n */\nfunction ArrayAsCustomWidget(props) {\n const { schema, fieldPathId, uiSchema, disabled = false, readonly = false, autofocus = false, required = false, hideError, placeholder, onBlur, onFocus, formData: items = [], registry, rawErrors, name, onSelectChange, } = props;\n const { widgets, schemaUtils, globalFormOptions, globalUiOptions } = registry;\n const { widget, title: uiTitle, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const label = uiTitle ?? schema.title ?? name;\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n // For custom widgets with multiple=true, generate a fieldPathId with isMultiValue flag\n const multiValueFieldPathId = useDeepCompareMemo(toFieldPathId('', globalFormOptions, fieldPathId, true));\n return (_jsx(Widget, { id: multiValueFieldPathId[ID_KEY], name: name, multiple: true, onChange: onSelectChange, onBlur: onBlur, onFocus: onFocus, options: options, schema: schema, uiSchema: uiSchema, registry: registry, value: items, disabled: disabled, readonly: readonly, hideError: hideError, required: required, label: label, hideLabel: !displayLabel, placeholder: placeholder, autofocus: autofocus, rawErrors: rawErrors, htmlName: multiValueFieldPathId.name }));\n}\n/** Renders an array of files using the `FileWidget`\n */\nfunction ArrayAsFiles(props) {\n const { schema, uiSchema, fieldPathId, name, disabled = false, readonly = false, autofocus = false, required = false, onBlur, onFocus, registry, formData: items = [], rawErrors, onSelectChange, } = props;\n const { widgets, schemaUtils, globalFormOptions, globalUiOptions } = registry;\n const { widget = 'files', title: uiTitle, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const label = uiTitle ?? schema.title ?? name;\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n // For custom widgets with multiple=true, generate a fieldPathId with isMultiValue flag\n const multiValueFieldPathId = useDeepCompareMemo(toFieldPathId('', globalFormOptions, fieldPathId, true));\n return (_jsx(Widget, { options: options, id: multiValueFieldPathId[ID_KEY], name: name, multiple: true, onChange: onSelectChange, onBlur: onBlur, onFocus: onFocus, schema: schema, uiSchema: uiSchema, value: items, disabled: disabled, readonly: readonly, required: required, registry: registry, autofocus: autofocus, rawErrors: rawErrors, label: label, hideLabel: !displayLabel, htmlName: multiValueFieldPathId.name }));\n}\n/** Renders the individual array item using a `SchemaField` along with the additional properties that are needed to\n * render the whole of the `ArrayFieldItemTemplate`.\n */\nfunction ArrayFieldItemInner(props) {\n const { itemKey, index, name, disabled, hideError, readonly, registry, uiOptions, parentUiSchema, canAdd, canRemove = true, canMoveUp, canMoveDown, rawItemSchema, itemData, itemUiSchema, parentFieldPathId, itemErrorSchema, autofocus, onBlur, onFocus, onChange, rawErrors, totalItems, title, handleAddItem, handleCopyItem, handleRemoveItem, handleReorderItems, } = props;\n const { schemaUtils, fields: { ArraySchemaField, SchemaField }, globalUiOptions, globalFormOptions, } = registry;\n const itemSchema = useMemo(() => schemaUtils.retrieveSchema(rawItemSchema, itemData), [schemaUtils, rawItemSchema, itemData]);\n // parentFieldPathId is the same stable reference for all items; index is a stable number.\n // useMemo avoids creating a new FieldPathId object on every render, letting React.memo bail out.\n const fieldPathId = useMemo(() => toFieldPathId(index, globalFormOptions, parentFieldPathId), [index, globalFormOptions, parentFieldPathId]);\n const ItemSchemaField = ArraySchemaField || SchemaField;\n const ArrayFieldItemTemplate = getTemplate('ArrayFieldItemTemplate', registry, uiOptions);\n const displayLabel = schemaUtils.getDisplayLabel(itemSchema, itemUiSchema, globalUiOptions);\n const { description } = getUiOptions(itemUiSchema);\n const hasDescription = !!description || !!itemSchema.description;\n const { orderable = true, removable = true, copyable = false } = uiOptions;\n const has = {\n moveUp: orderable && canMoveUp,\n moveDown: orderable && canMoveDown,\n copy: copyable && canAdd,\n remove: removable && canRemove,\n toolbar: false,\n };\n has.toolbar = Object.keys(has).some((key) => has[key]);\n const onAddItem = useCallback((event) => {\n handleAddItem(event, index + 1);\n }, [handleAddItem, index]);\n const onCopyItem = useCallback((event) => {\n handleCopyItem(event, index);\n }, [handleCopyItem, index]);\n const onRemoveItem = useCallback((event) => {\n handleRemoveItem(event, index);\n }, [handleRemoveItem, index]);\n const onMoveUpItem = useCallback((event) => {\n handleReorderItems(event, index, index - 1);\n }, [handleReorderItems, index]);\n const onMoveDownItem = useCallback((event) => {\n handleReorderItems(event, index, index + 1);\n }, [handleReorderItems, index]);\n const templateProps = {\n children: (_jsx(ItemSchemaField, { name: name, title: title, index: index, schema: itemSchema, uiSchema: itemUiSchema, formData: itemData, errorSchema: itemErrorSchema, fieldPathId: fieldPathId, required: isItemRequired(itemSchema), onChange: onChange, onBlur: onBlur, onFocus: onFocus, registry: registry, disabled: disabled, readonly: readonly, hideError: hideError, autofocus: autofocus, rawErrors: rawErrors })),\n buttonsProps: {\n fieldPathId,\n disabled,\n readonly,\n canAdd,\n hasCopy: has.copy,\n hasMoveUp: has.moveUp,\n hasMoveDown: has.moveDown,\n hasRemove: has.remove,\n index,\n totalItems,\n onAddItem,\n onCopyItem,\n onRemoveItem,\n onMoveUpItem,\n onMoveDownItem,\n registry,\n schema: itemSchema,\n uiSchema: itemUiSchema,\n },\n itemKey,\n className: 'rjsf-array-item',\n disabled,\n hasToolbar: has.toolbar,\n index,\n totalItems,\n readonly,\n registry,\n schema: itemSchema,\n uiSchema: itemUiSchema,\n parentUiSchema,\n displayLabel,\n hasDescription,\n };\n return _jsx(ArrayFieldItemTemplate, { ...templateProps });\n}\nconst ArrayFieldItem = memo(ArrayFieldItemInner);\n/** Renders a normal array without any limitations of length\n */\nfunction NormalArray(props) {\n const { schema, uiSchema = {}, errorSchema, fieldPathId, formData: formDataFromProps, name, title, disabled = false, readonly = false, autofocus = false, required = false, hideError = false, registry, onBlur, onFocus, rawErrors, onChange, keyedFormData, handleAddItem, handleCopyItem, handleRemoveItem, handleReorderItems, } = props;\n const fieldTitle = schema.title || title || name;\n const { schemaUtils, fields, formContext, globalUiOptions } = registry;\n const { OptionalDataControlsField } = fields;\n const uiOptions = useMemo(() => getUiOptions(uiSchema, globalUiOptions), [uiSchema, globalUiOptions]);\n // Memoize schemaItems to avoid a new `{}` object identity on every render (which would bust retrieveSchema cache)\n const schemaItems = useMemo(() => (isObject(schema.items) ? schema.items : {}), [schema.items]);\n const itemsSchema = useMemo(() => schemaUtils.retrieveSchema(schemaItems), [schemaUtils, schemaItems]);\n const formData = useMemo(() => keyedToPlainFormData(keyedFormData), [keyedFormData]);\n const renderOptionalField = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formDataFromProps);\n const canAdd = useMemo(() => canAddItem(registry, schema, formData, uiSchema) && (!renderOptionalField || hasFormData), [registry, schema, formData, uiSchema, renderOptionalField, hasFormData]);\n const actualFormData = hasFormData ? keyedFormData : [];\n const extraClass = renderOptionalField ? ' rjsf-optional-array-field' : '';\n // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId\n const childFieldPathId = props.childFieldPathId ?? fieldPathId;\n const optionalDataControl = renderOptionalField ? (_jsx(OptionalDataControlsField, { ...props, fieldPathId: childFieldPathId })) : undefined;\n const arrayProps = {\n canAdd,\n items: actualFormData.map((keyedItem, index) => {\n const { key, item } = keyedItem;\n // While we are actually dealing with a single item of type T, the types require a T[], so cast\n const itemCast = item;\n const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;\n // Compute the item UI schema using the helper method\n const itemUiSchema = computeItemUiSchema(uiSchema, item, index, formContext);\n const itemProps = {\n itemKey: key,\n index,\n name: name && `${name}-${index}`,\n registry,\n uiOptions,\n parentUiSchema: uiSchema,\n hideError,\n readonly,\n disabled,\n required,\n title: fieldTitle ? `${fieldTitle}-${index + 1}` : undefined,\n canAdd,\n canMoveUp: index > 0,\n canMoveDown: index < formData.length - 1,\n rawItemSchema: schemaItems,\n parentFieldPathId: childFieldPathId,\n itemErrorSchema,\n itemData: itemCast,\n itemUiSchema,\n autofocus: autofocus && index === 0,\n onBlur,\n onFocus,\n rawErrors,\n totalItems: keyedFormData.length,\n handleAddItem,\n handleCopyItem,\n handleRemoveItem,\n handleReorderItems,\n onChange,\n };\n return _jsx(ArrayFieldItem, { ...itemProps }, key);\n }),\n className: `rjsf-field rjsf-field-array rjsf-field-array-of-${itemsSchema.type}${extraClass}`,\n disabled,\n fieldPathId,\n uiSchema,\n onAddClick: handleAddItem,\n readonly,\n required,\n schema,\n title: fieldTitle,\n formData,\n rawErrors,\n registry,\n optionalDataControl,\n };\n const Template = getTemplate('ArrayFieldTemplate', registry, uiOptions);\n return _jsx(Template, { ...arrayProps });\n}\n/** Renders an array that has a maximum limit of items\n */\nfunction FixedArray(props) {\n const { schema, uiSchema = {}, formData, errorSchema, fieldPathId, name, title, disabled = false, readonly = false, autofocus = false, required = false, hideError = false, registry, onBlur, onFocus, rawErrors, keyedFormData, onChange, handleAddItem, handleCopyItem, handleRemoveItem, handleReorderItems, } = props;\n let { formData: items = [] } = props;\n const fieldTitle = schema.title || title || name;\n const { fields, formContext, globalUiOptions } = registry;\n const uiOptions = useMemo(() => getUiOptions(uiSchema, globalUiOptions), [uiSchema, globalUiOptions]);\n const { OptionalDataControlsField } = fields;\n const renderOptionalField = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formData);\n const schemaItems = useMemo(() => (Array.isArray(schema.items) ? schema.items : []), [schema.items]);\n const hasAdditionalItems = isObject(schema.additionalItems);\n // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId\n const childFieldPathId = props.childFieldPathId ?? fieldPathId;\n if (items.length < schemaItems.length) {\n // to make sure at least all fixed items are generated\n items = items.concat(new Array(schemaItems.length - items.length));\n }\n const actualFormData = hasFormData ? keyedFormData : [];\n const extraClass = renderOptionalField ? ' rjsf-optional-array-field' : '';\n const optionalDataControl = renderOptionalField ? (_jsx(OptionalDataControlsField, { ...props, fieldPathId: childFieldPathId })) : undefined;\n // These are the props passed into the render function\n const canAdd = canAddItem(registry, schema, items, uiSchema) &&\n hasAdditionalItems &&\n (!renderOptionalField || hasFormData);\n const arrayProps = {\n canAdd,\n className: `rjsf-field rjsf-field-array rjsf-field-array-fixed-items${extraClass}`,\n disabled,\n fieldPathId,\n formData,\n items: actualFormData.map((keyedItem, index) => {\n const { key, item } = keyedItem;\n // While we are actually dealing with a single item of type T, the types require a T[], so cast\n const itemCast = item;\n const additional = index >= schemaItems.length;\n const rawItemSchema = (additional && isObject(schema.additionalItems) ? schema.additionalItems : schemaItems[index]) ||\n {};\n // Compute the item UI schema - handle both static and dynamic cases\n let itemUiSchema;\n if (additional) {\n // For additional items, use additionalItems uiSchema\n itemUiSchema = uiSchema.additionalItems;\n }\n else if (Array.isArray(uiSchema.items)) {\n // For fixed items, uiSchema.items can be an array, a function, or a single object\n itemUiSchema = uiSchema.items[index];\n }\n else {\n // Use the helper method for function or static object cases\n itemUiSchema = computeItemUiSchema(uiSchema, item, index, formContext);\n }\n const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;\n const itemProps = {\n index,\n itemKey: key,\n name: name && `${name}-${index}`,\n registry,\n uiOptions,\n parentUiSchema: uiSchema,\n hideError,\n readonly,\n disabled,\n required,\n title: fieldTitle ? `${fieldTitle}-${index + 1}` : undefined,\n canAdd,\n canRemove: additional,\n canMoveUp: index >= schemaItems.length + 1,\n canMoveDown: additional && index < items.length - 1,\n rawItemSchema,\n itemData: itemCast,\n itemUiSchema,\n parentFieldPathId: childFieldPathId,\n itemErrorSchema,\n autofocus: autofocus && index === 0,\n onBlur,\n onFocus,\n rawErrors,\n totalItems: keyedFormData.length,\n onChange,\n handleAddItem,\n handleCopyItem,\n handleRemoveItem,\n handleReorderItems,\n };\n return _jsx(ArrayFieldItem, { ...itemProps }, key);\n }),\n onAddClick: handleAddItem,\n readonly,\n required,\n registry,\n schema,\n uiSchema,\n title: fieldTitle,\n errorSchema,\n rawErrors,\n optionalDataControl,\n };\n const Template = getTemplate('ArrayFieldTemplate', registry, uiOptions);\n return _jsx(Template, { ...arrayProps });\n}\n/** A custom hook that handles the updating of the keyedFormData from an external `formData` change as well as\n * internally by the `ArrayField`. If there was an external `formData` change, then the `keyedFormData` is recomputed\n * in order to preserve the unique keys from the old `keyedFormData` to the new `formData`. Along with the\n * `keyedFormData` this hook also returns an `updateKeyedFormData()` function for use by the `ArrayField`. The detection\n * of external `formData` are handled by storing the hash of that `formData` along with the `keyedFormData` associated\n * with it. The `updateKeyedFormData()` will update that hash whenever the `keyedFormData` is modified and as well as\n * returning the plain `formData` from the `keyedFormData`.\n */\nfunction useKeyedFormData(formData = []) {\n const newHash = useMemo(() => hashObject(formData), [formData]);\n const [state, setState] = useState(() => ({\n formDataHash: newHash,\n keyedFormData: generateKeyedFormData(formData),\n }));\n let { keyedFormData, formDataHash } = state;\n if (newHash !== formDataHash) {\n const nextFormData = Array.isArray(formData) ? formData : [];\n const previousKeyedFormData = keyedFormData || [];\n keyedFormData =\n nextFormData.length === previousKeyedFormData.length\n ? previousKeyedFormData.map((previousKeyedFormDatum, index) => ({\n key: previousKeyedFormDatum.key,\n item: nextFormData[index],\n }))\n : generateKeyedFormData(nextFormData);\n formDataHash = newHash;\n setState({ formDataHash, keyedFormData });\n }\n const updateKeyedFormData = useCallback((newData) => {\n const plainFormData = keyedToPlainFormData(newData);\n const updatedHash = hashObject(plainFormData);\n setState({ formDataHash: updatedHash, keyedFormData: newData });\n return plainFormData;\n }, []);\n return { keyedFormData, updateKeyedFormData };\n}\n/** The `ArrayField` component is used to render a field in the schema that is of type `array`. It supports both normal\n * and fixed array, allowing user to add and remove elements from the array data.\n */\nexport default function ArrayField(props) {\n const { schema, uiSchema, errorSchema, fieldPathId, registry, formData, onChange } = props;\n const { globalFormOptions, schemaUtils, translateString } = registry;\n const { keyedFormData, updateKeyedFormData } = useKeyedFormData(formData);\n // Refs keep the latest values accessible inside stable useCallback closures without being in the dep array,\n // so the four mutation handlers don't get new references on every keyedFormData / errorSchema change.\n const keyedFormDataRef = useRef(keyedFormData);\n keyedFormDataRef.current = keyedFormData;\n const errorSchemaRef = useRef(errorSchema);\n errorSchemaRef.current = errorSchema;\n // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId\n const childFieldPathId = props.childFieldPathId ?? fieldPathId;\n /** Callback handler for when the user clicks on the add or add at index buttons. Creates a new row of keyed form data\n * either at the end of the list (when index is not specified) or inserted at the `index` when it is, adding it into\n * the state, and then returning `onChange()` with the plain form data converted from the keyed data\n *\n * @param event - The event for the click\n * @param [index] - The optional index at which to add the new data\n */\n const handleAddItem = useCallback((event, index) => {\n if (event) {\n event.preventDefault();\n }\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (index === undefined || i < index) {\n setByPath(newErrorSchema, i, errorSchemaRef.current[i]);\n }\n else if (i >= index) {\n setByPath(newErrorSchema, i + 1, errorSchemaRef.current[i]);\n }\n }\n }\n const newKeyedFormDataRow = {\n key: generateRowId(),\n item: getNewFormDataRow(registry, schema),\n };\n const newKeyedFormData = [...keyedFormDataRef.current];\n if (index !== undefined) {\n newKeyedFormData.splice(index, 0, newKeyedFormDataRow);\n }\n else {\n newKeyedFormData.push(newKeyedFormDataRow);\n }\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [registry, schema, onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler for when the user clicks on the copy button on an existing array element. Clones the row of\n * keyed form data at the `index` into the next position in the state, and then returning `onChange()` with the plain\n * form data converted from the keyed data\n *\n * @param index - The index at which the copy button is clicked\n */\n const handleCopyItem = useCallback((event, index) => {\n if (event) {\n event.preventDefault();\n }\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (i <= index) {\n setByPath(newErrorSchema, i, errorSchemaRef.current[i]);\n }\n else if (i > index) {\n setByPath(newErrorSchema, i + 1, errorSchemaRef.current[i]);\n }\n }\n }\n const newKeyedFormDataRow = {\n key: generateRowId(),\n item: structuredClone(keyedFormDataRef.current[index].item),\n };\n const newKeyedFormData = [...keyedFormDataRef.current];\n if (index !== undefined) {\n newKeyedFormData.splice(index + 1, 0, newKeyedFormDataRow);\n }\n else {\n newKeyedFormData.push(newKeyedFormDataRow);\n }\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler for when the user clicks on the remove button on an existing array element. Removes the row of\n * keyed form data at the `index` in the state, and then returning `onChange()` with the plain form data converted\n * from the keyed data\n *\n * @param index - The index at which the remove button is clicked\n */\n const handleRemoveItem = useCallback((event, index) => {\n if (event) {\n event.preventDefault();\n }\n // refs #195: revalidate to ensure properly reindexing errors\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (i < index) {\n setByPath(newErrorSchema, i, errorSchemaRef.current[i]);\n }\n else if (i > index) {\n setByPath(newErrorSchema, i - 1, errorSchemaRef.current[i]);\n }\n }\n }\n const newKeyedFormData = keyedFormDataRef.current.filter((_, i) => i !== index);\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler for when the user clicks on one of the move item buttons on an existing array element. Moves the\n * row of keyed form data at the `index` to the `newIndex` in the state, and then returning `onChange()` with the\n * plain form data converted from the keyed data\n *\n * @param index - The index of the item to move\n * @param newIndex - The index to where the item is to be moved\n */\n const handleReorderItems = useCallback((event, index, newIndex) => {\n if (event) {\n event.preventDefault();\n event.currentTarget.blur();\n }\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (i === index) {\n setByPath(newErrorSchema, newIndex, errorSchemaRef.current[index]);\n }\n else if (i === newIndex) {\n setByPath(newErrorSchema, index, errorSchemaRef.current[newIndex]);\n }\n else {\n setByPath(newErrorSchema, idx, errorSchemaRef.current[i]);\n }\n }\n }\n function reOrderArray() {\n const newKeyedFormData = keyedFormDataRef.current.slice();\n newKeyedFormData.splice(index, 1);\n newKeyedFormData.splice(newIndex, 0, keyedFormDataRef.current[index]);\n return newKeyedFormData;\n }\n const newKeyedFormData = reOrderArray();\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler used to deal with changing the value of the data in the array at the `index`. Calls the\n * `onChange` callback with the updated form data\n *\n * @param index - The index of the item being changed\n */\n const handleChange = useCallback((value, path, newErrorSchema, id) => {\n const lastPathIsItemIndex = typeof path.at(-1) === 'number';\n onChange(\n // We need to treat undefined items as nulls to have validation.\n // See https://github.com/tdegrunt/jsonschema/issues/206\n // Only set to null for array items, and not for object properties within array items\n lastPathIsItemIndex && value === undefined ? null : value, path, newErrorSchema, id);\n }, [onChange]);\n /** Callback handler used to change the value for a checkbox */\n const onSelectChange = useCallback((value) => {\n onChange(value, childFieldPathId.path, undefined, childFieldPathId?.[ID_KEY]);\n }, [onChange, childFieldPathId]);\n const arrayAsMultiProps = {\n ...props,\n formData,\n fieldPathId: childFieldPathId,\n onSelectChange,\n };\n const arrayProps = {\n ...props,\n handleAddItem,\n handleCopyItem,\n handleRemoveItem,\n handleReorderItems,\n keyedFormData,\n onChange: handleChange,\n };\n if (!(ITEMS_KEY in schema)) {\n if (!globalFormOptions.useFallbackUiForUnsupportedType) {\n const uiOptions = getUiOptions(uiSchema);\n const UnsupportedFieldTemplate = getTemplate('UnsupportedFieldTemplate', registry, uiOptions);\n return (_jsx(UnsupportedFieldTemplate, { schema: schema, fieldPathId: fieldPathId, reason: translateString(TranslatableString.MissingItems), registry: registry }));\n }\n // Add an items schema with type as undefined so it triggers FallbackField later on\n const fallbackSchema = { ...schema, [ITEMS_KEY]: { type: undefined } };\n arrayAsMultiProps.schema = fallbackSchema;\n arrayProps.schema = fallbackSchema;\n }\n if (schemaUtils.isMultiSelect(arrayAsMultiProps.schema)) {\n // If array has enum or uniqueItems set to true, call renderMultiSelect() to render the default multiselect widget or a custom widget, if specified.\n return _jsx(ArrayAsMultiSelect, { ...arrayAsMultiProps });\n }\n if (isCustomWidget(uiSchema)) {\n return _jsx(ArrayAsCustomWidget, { ...arrayAsMultiProps });\n }\n if (isFixedItems(arrayAsMultiProps.schema)) {\n return _jsx(FixedArray, { ...arrayProps });\n }\n if (schemaUtils.isFilesArray(arrayAsMultiProps.schema, uiSchema)) {\n return _jsx(ArrayAsFiles, { ...arrayAsMultiProps });\n }\n return _jsx(NormalArray, { ...arrayProps });\n}\n//# sourceMappingURL=ArrayField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { getWidget, getUiOptions, isObject, optionsList, TranslatableString } from '@rjsf/utils';\n/** The `BooleanField` component is used to render a field in the schema is boolean. It constructs `enumOptions` for the\n * two boolean values based on the various alternatives in the schema.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction BooleanField(props) {\n const { schema, name, uiSchema, fieldPathId, formData, registry, required, disabled, readonly, hideError, autofocus, title, onChange, onFocus, onBlur, rawErrors, } = props;\n const { title: schemaTitle } = schema;\n const { widgets, translateString, globalUiOptions } = registry;\n const { widget = 'checkbox', title: uiTitle, \n // Unlike the other fields, don't use `getDisplayLabel()` since it always returns false for the boolean type\n label: displayLabel = true, enumNames, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const yes = translateString(TranslatableString.YesLabel);\n const no = translateString(TranslatableString.NoLabel);\n let enumOptions;\n const label = uiTitle ?? schemaTitle ?? title ?? name;\n if (Array.isArray(schema.oneOf)) {\n enumOptions = optionsList({\n oneOf: schema.oneOf\n .map((option) => {\n if (isObject(option)) {\n return {\n ...option,\n title: option.title || (option.const === true ? yes : no),\n };\n }\n return undefined;\n })\n .filter((o) => o), // cast away the error that typescript can't grok is fixed\n }, uiSchema);\n }\n else {\n const enums = schema.enum ?? [true, false];\n if (!enumNames && enums.length === 2 && enums.every((v) => typeof v === 'boolean')) {\n enumOptions = [\n {\n value: enums[0],\n label: enums[0] ? yes : no,\n },\n {\n value: enums[1],\n label: enums[1] ? yes : no,\n },\n ];\n }\n else {\n enumOptions = optionsList({ enum: enums }, uiSchema);\n }\n }\n const onWidgetChange = useCallback((value, errorSchema, id) => onChange(value, fieldPathId.path, errorSchema, id), [onChange, fieldPathId]);\n return (_jsx(Widget, { options: { ...options, enumOptions }, schema: schema, uiSchema: uiSchema, id: fieldPathId.$id, name: name, onChange: onWidgetChange, onFocus: onFocus, onBlur: onBlur, label: label, hideLabel: !displayLabel, value: formData, required: required, disabled: disabled, readonly: readonly, hideError: hideError, registry: registry, autofocus: autofocus, rawErrors: rawErrors, htmlName: fieldPathId.name }));\n}\nexport default BooleanField;\n//# sourceMappingURL=BooleanField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nimport { getTemplate, getUiOptions, RJSF_REF_CYCLE_KEY } from '@rjsf/utils';\n/** The `CyclicSchemaField` component is used to render a field in the schema that is marked with RJSF_REF_CYCLE_KEY ===\n * true\n *\n * @param props - The `FieldProps` for this template\n */\nexport default function CyclicSchemaField(props) {\n const [expanded, setExpanded] = useState(false);\n const { name, registry, schema, uiSchema, fieldPathId } = props;\n const { globalUiOptions } = registry;\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n const CyclicSchemaExpandTemplate = getTemplate('CyclicSchemaExpandTemplate', registry, uiOptions);\n if (!expanded) {\n return (_jsx(CyclicSchemaExpandTemplate, { registry: registry, schema: schema, uiSchema: uiSchema, name: name, fieldPathId: fieldPathId, onExpand: () => setExpanded(true) }));\n }\n const { fields } = registry;\n const { SchemaField } = fields;\n return _jsx(SchemaField, { ...props, schema: { ...schema, [RJSF_REF_CYCLE_KEY]: false } });\n}\n//# sourceMappingURL=CyclicSchemaField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useMemo, useState } from 'react';\nimport { getTemplate, getUiOptions, hashObject, toFieldPathId, TranslatableString, useDeepCompareMemo, } from '@rjsf/utils';\n/**\n * Get the schema for the type selection component.\n * @param title - The translated title for the type selection schema.\n */\nfunction getFallbackTypeSelectionSchema(title) {\n return {\n type: 'string',\n enum: ['string', 'number', 'boolean', 'object', 'array'],\n default: 'string',\n title,\n };\n}\n/**\n * Determines the JSON Schema type of the given formData.\n * @param formData - The form data whose type is to be determined.\n */\nfunction getTypeOfFormData(formData) {\n const dataType = typeof formData;\n if (dataType === 'string' || dataType === 'number' || dataType === 'boolean') {\n return dataType;\n }\n if (dataType === 'object') {\n return Array.isArray(formData) ? 'array' : 'object';\n }\n // Treat everything else as a string\n return 'string';\n}\n/**\n * Casts the given formData to the specified type.\n * @param formData - The form data to be casted.\n * @param newType - The target type to which the form data should be casted.\n */\nfunction castToNewType(formData, newType) {\n switch (newType) {\n case 'string':\n return String(formData);\n case 'number': {\n const castedNumber = Number(formData);\n return (Number.isNaN(castedNumber) ? 0 : castedNumber);\n }\n case 'boolean':\n return Boolean(formData);\n default:\n return formData;\n }\n}\n/**\n * The `FallbackField` component is used to render a field for unsupported or unknown schema types. If\n * `useFallbackUiForUnsupportedType` is enabled in the `globalUiOptions`, it provides a type selector\n */\nexport default function FallbackField(props) {\n const { id, formData, displayLabel = true, schema, name, uiSchema, required, disabled = false, readonly = false, onBlur, onFocus, registry, fieldPathId, onChange, errorSchema, } = props;\n const { translateString, fields, globalFormOptions } = registry;\n const [type, setType] = useState(getTypeOfFormData(formData));\n const uiOptions = getUiOptions(uiSchema);\n const typeSelectorInnerFieldPathId = useDeepCompareMemo(toFieldPathId('__internal_type_selector', globalFormOptions, fieldPathId));\n const schemaTitle = translateString(TranslatableString.Type);\n const typesOptionSchema = useMemo(() => getFallbackTypeSelectionSchema(schemaTitle), [schemaTitle]);\n const onTypeChange = (newType) => {\n if (newType != null) {\n setType(newType);\n onChange(castToNewType(formData, newType), fieldPathId.path, errorSchema, id);\n }\n };\n if (!globalFormOptions.useFallbackUiForUnsupportedType) {\n const { reason = translateString(TranslatableString.UnknownFieldType, [String(schema.type)]) } = props;\n const UnsupportedFieldTemplate = getTemplate('UnsupportedFieldTemplate', registry, uiOptions);\n return _jsx(UnsupportedFieldTemplate, { schema: schema, fieldPathId: fieldPathId, reason: reason, registry: registry });\n }\n const FallbackFieldTemplate = getTemplate('FallbackFieldTemplate', registry, uiOptions);\n const { SchemaField } = fields;\n return (_jsx(FallbackFieldTemplate, { schema: schema, registry: registry, typeSelector: _jsx(SchemaField, { fieldPathId: typeSelectorInnerFieldPathId, name: `${name}__fallback_type`, schema: typesOptionSchema, formData: type, onChange: onTypeChange, onBlur: onBlur, onFocus: onFocus, registry: registry, hideLabel: !displayLabel, disabled: disabled, readonly: readonly, required: required }, formData ? hashObject(formData) : '__empty__'), schemaField: _jsx(SchemaField, { ...props, schema: {\n type,\n title: translateString(TranslatableString.Value),\n ...(type === 'object' && { additionalProperties: true }),\n } }) }));\n}\n//# sourceMappingURL=FallbackField.js.map","import { createElement as _createElement } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getByPath, toPath, ANY_OF_KEY, deepEquals, getDiscriminatorFieldFromSchema, getTemplate, getTestIds, getPropertySchema, getUiOptions, hashObject, ID_KEY, isObject, isPlainObject, lookupFromFormContext, ONE_OF_KEY, PROPERTIES_KEY, READONLY_KEY, toFieldPathId, UI_OPTIONS_KEY, UI_GLOBAL_OPTIONS_KEY, ITEMS_KEY, useDeepCompareMemo, } from '@rjsf/utils';\n/** The enumeration of the three different Layout GridTemplate type values\n */\nexport var GridType;\n(function (GridType) {\n GridType[\"ROW\"] = \"ui:row\";\n GridType[\"COLUMN\"] = \"ui:col\";\n GridType[\"COLUMNS\"] = \"ui:columns\";\n GridType[\"CONDITION\"] = \"ui:condition\";\n})(GridType || (GridType = {}));\n/** The enumeration of the different operators within a condition\n */\nexport var Operators;\n(function (Operators) {\n Operators[\"ALL\"] = \"all\";\n Operators[\"SOME\"] = \"some\";\n Operators[\"NONE\"] = \"none\";\n})(Operators || (Operators = {}));\n/** The regular expression that is used to detect whether a string contains a lookup key\n */\nexport const LOOKUP_REGEX = /^\\$lookup=(.+)/;\n/** The constant representing the main layout grid schema option name in the `uiSchema`\n */\nexport const LAYOUT_GRID_UI_OPTION = 'layoutGrid';\n/** The constant representing the main layout grid schema option name in the `uiSchema`\n */\nexport const LAYOUT_GRID_OPTION = `ui:${LAYOUT_GRID_UI_OPTION}`;\n/** Returns either the `value` if it is non-nullish or the fallback\n *\n * @param [value] - The potential value to return if it is non-nullish\n * @param [fallback] - The fallback value to return if `value` is nullish\n * @returns - `value` if it is non-nullish otherwise `fallback`\n */\nfunction getNonNullishValue(value, fallback) {\n return value ?? fallback;\n}\n/** Detects if a `str` is made up entirely of numeric characters\n *\n * @param str - The string to check to see if it is a numeric index\n * @return - True if the string consists entirely of numeric characters\n */\nfunction isNumericIndex(str) {\n return /^\\d+?$/.test(str); // Matches positive integers\n}\nconst LAYOUT_GRID_FIELD_TEST_IDS = getTestIds();\n/** Computes the uiSchema for the field with `name` from the `uiProps` and `uiSchema` provided. The field UI Schema\n * will always contain a copy of the global options from the `uiSchema` (so they can be passed down) as well as\n * copying them into the local ui options. When the `forceReadonly` flag is true, then the field UI Schema is\n * updated to make \"readonly\" be true. When the `schemaReadonly` flag is true AND the field UI Schema does NOT have\n * the flag already provided, then we also make \"readonly\" true. We always make sure to return the final value of the\n * field UI Schema's \"readonly\" flag as `uiReadonly` along with the `fieldUiSchema` in the return value.\n *\n * @param field - The name of the field to pull the existing UI Schema for\n * @param uiProps - Any props that should be put into the field's uiSchema\n * @param [uiSchema] - The optional UI Schema from which to get the UI schema for the field\n * @param [schemaReadonly] - Optional flag indicating whether the schema indicates the field is readonly\n * @param [forceReadonly] - Optional flag indicating whether the Form itself is in readonly mode\n */\nexport function computeFieldUiSchema(field, uiProps, uiSchema, schemaReadonly, forceReadonly) {\n const globalUiOptions = uiSchema?.[UI_GLOBAL_OPTIONS_KEY] ?? {};\n const localUiSchema = getByPath(uiSchema, toPath(field));\n const localUiOptions = { ...(localUiSchema?.[UI_OPTIONS_KEY] ?? {}), ...uiProps, ...globalUiOptions };\n const fieldUiSchema = { ...localUiSchema };\n if (Object.keys(localUiOptions).length > 0) {\n fieldUiSchema[UI_OPTIONS_KEY] = localUiOptions;\n }\n if (Object.keys(globalUiOptions).length > 0) {\n // pass the global uiOptions down to the field uiSchema so that they can be applied to all nested fields\n fieldUiSchema[UI_GLOBAL_OPTIONS_KEY] = globalUiOptions;\n }\n let { readonly: uiReadonly } = getUiOptions(fieldUiSchema);\n if (forceReadonly === true || (uiReadonly === undefined && schemaReadonly === true)) {\n // If we are forcing all widgets to be readonly, OR the schema indicates it is readonly AND the uiSchema does not\n // have an overriding value, then update the uiSchema to set readonly to true. Doing this will\n uiReadonly = true;\n const fieldUiOptions = fieldUiSchema[UI_OPTIONS_KEY];\n if (fieldUiOptions && READONLY_KEY in fieldUiOptions) {\n // If the local options has the key value provided in it, then set that one to true\n fieldUiOptions[READONLY_KEY] = true;\n }\n else {\n // otherwise set the `ui:` version\n fieldUiSchema[`ui:${READONLY_KEY}`] = true;\n }\n }\n return { fieldUiSchema, uiReadonly };\n}\n/** Given an `operator`, `datum` and `value` determines whether this condition is considered matching. Matching\n * depends on the `operator`. The `datum` and `value` are converted into arrays if they aren't already and then the\n * contents of the two arrays are compared using the `operator`. When `operator` is All, then the two arrays must be\n * equal to match. When `operator` is SOME then the intersection of the two arrays must have at least one value in\n * common to match. When `operator` is NONE then the intersection of the two arrays must not have any values in common\n * to match.\n *\n * @param [operator] - The optional operator for the condition\n * @param [datum] - The optional datum for the condition, this can be an item or a list of items of type unknown\n * @param [value='$0m3tH1nG Un3xP3cT3d'] The optional value for the condition, defaulting to a highly unlikely value\n * to avoid comparing two undefined elements when `value` was forgotten in the condition definition.\n * This can be an item or a list of items of type unknown\n * @returns - True if the condition matches, false otherwise\n */\nexport function conditionMatches(operator, datum, value = '$0m3tH1nG Un3xP3cT3d') {\n const data = [datum].flat().sort();\n const values = [value].flat().sort();\n switch (operator) {\n case Operators.ALL:\n return deepEquals(data, values);\n case Operators.SOME:\n return data.some((entry) => values.includes(entry));\n case Operators.NONE:\n return !data.some((entry) => values.includes(entry));\n default:\n return false;\n }\n}\n/** From within the `layoutGridSchema` finds the `children` and any extra `gridProps` from the object keyed by\n * `schemaKey`. If the `children` contains extra `gridProps` and those props contain a `className` string, try to\n * lookup whether that `className` has a replacement value in the `registry` using the `FORM_CONTEXT_LOOKUP_BASE`.\n * When the `className` value contains multiple classNames separated by a space, the lookup will look for a\n * replacement value for each `className` and combine them into one.\n *\n * @param layoutGridSchema - The GridSchemaType instance from which to obtain the `schemaKey` children and extra props\n * @param schemaKey - A `GridType` value, used to get the children and extra props from within the `layoutGridSchema`\n * @param registry - The `@rjsf` Registry from which to look up `classNames` if they are present in the extra props\n * @returns - An object containing the list of `LayoutGridSchemaType` `children` and any extra `gridProps`\n * @throws - A `TypeError` when the `children` is not an array\n */\nexport function findChildrenAndProps(layoutGridSchema, schemaKey, registry) {\n let gridProps = {};\n let children = layoutGridSchema[schemaKey];\n if (isPlainObject(children)) {\n const { children: elements, className: toMapClassNames, ...otherProps } = children;\n children = elements;\n if (toMapClassNames) {\n const classes = toMapClassNames.split(' ');\n const className = classes.map((ele) => lookupFromFormContext(registry, ele, ele)).join(' ');\n gridProps = { ...otherProps, className };\n }\n else {\n gridProps = otherProps;\n }\n }\n if (!Array.isArray(children)) {\n throw new TypeError(`Expected array for \"${schemaKey}\" in ${JSON.stringify(layoutGridSchema)}`);\n }\n return { children: children, gridProps };\n}\n/** Computes the `rawSchema` and `fieldPathId` for a `schema` and a `potentialIndex`. If the `schema` is of type array,\n * has an `ITEMS_KEY` element and `potentialIndex` represents a numeric value, the element at `ITEMS_KEY` is checked\n * to see if it is an array. If it is AND the `potentialIndex`th element is available, it is used as the `rawSchema`,\n * otherwise the last value of the element is used. If it is not, then the element is used as the `rawSchema`. In\n * either case, an `fieldPathId` is computed for the array index. If the `schema` does not represent an array or the\n * `potentialIndex` is not a numeric value, then `rawSchema` is returned as undefined and given `fieldPathId` is returned\n * as is.\n *\n * @param schema - The schema to generate the fieldPathId for\n * @param fieldPathId - The FieldPathId for the schema\n * @param potentialIndex - A string containing a potential index\n * @returns - An object containing the `rawSchema` and `fieldPathId` of an array item, otherwise an undefined `rawSchema`\n */\nexport function computeArraySchemasIfPresent(schema, fieldPathId, potentialIndex) {\n let rawSchema;\n let resultPathId = fieldPathId;\n if (isNumericIndex(potentialIndex) && schema && schema?.type === 'array' && ITEMS_KEY in schema) {\n const index = Number(potentialIndex);\n const items = schema[ITEMS_KEY];\n if (Array.isArray(items)) {\n if (index > items.length) {\n rawSchema = items.at(-1);\n }\n else {\n rawSchema = items[index];\n }\n }\n else {\n rawSchema = items;\n }\n resultPathId = {\n [ID_KEY]: fieldPathId[ID_KEY],\n path: [...fieldPathId.path.slice(0, fieldPathId.path.length - 1), index],\n };\n }\n return { rawSchema, fieldPathId: resultPathId };\n}\n/** Given a `dottedPath` to a field in the `initialSchema`, iterate through each individual path in the schema until\n * the leaf path is found and returned (along with whether that leaf path `isRequired`) OR no schema exists for an\n * element in the path. If the leaf schema element happens to be a oneOf/anyOf then also return the oneOf/anyOf as\n * `options`.\n *\n * @param registry - The registry\n * @param dottedPath - The dotted-path to the field for which to get the schema\n * @param initialSchema - The initial schema to start the search from\n * @param formData - The formData, useful for resolving a oneOf/anyOf selection in the path hierarchy\n * @param initialFieldIdPath - The initial fieldPathId to start the search from\n * @returns - An object containing the destination schema, isRequired and isReadonly flags for the field and options\n * info if a oneOf/anyOf\n */\nexport function getSchemaDetailsForField(registry, dottedPath, initialSchema, formData, initialFieldIdPath) {\n const { schemaUtils, globalFormOptions } = registry;\n let rawSchema = initialSchema;\n let fieldPathId = initialFieldIdPath;\n const parts = dottedPath.split('.');\n const leafPath = parts.pop(); // pop off the last element in the list as the leaf\n let schema = schemaUtils.retrieveSchema(rawSchema, formData); // always returns an object\n let innerData = formData;\n let isReadonly = schema.readOnly;\n // For all the remaining path parts\n parts.forEach((part) => {\n // dive into the properties of the current schema (when it exists) and get the schema for the next part\n fieldPathId = toFieldPathId(part, globalFormOptions, fieldPathId);\n const schemaProperties = schema?.[PROPERTIES_KEY];\n if (schemaProperties) {\n rawSchema = (schemaProperties[part] ?? {});\n }\n else if (schema && (ONE_OF_KEY in schema || ANY_OF_KEY in schema)) {\n const xxx = ONE_OF_KEY in schema ? ONE_OF_KEY : ANY_OF_KEY;\n // When the schema represents a oneOf/anyOf, find the selected schema for it and grab the inner part\n const selectedSchema = schemaUtils.findSelectedOptionInXxxOf(schema, part, xxx, innerData);\n rawSchema = getPropertySchema(selectedSchema, part);\n }\n else {\n const result = computeArraySchemasIfPresent(schema, fieldPathId, part);\n rawSchema = result.rawSchema ?? {};\n fieldPathId = result.fieldPathId;\n }\n // Now drill into the innerData for the part, returning an empty object by default if it doesn't exist\n innerData = getByPath(innerData, part, {});\n // Resolve any `$ref`s for the current rawSchema\n schema = schemaUtils.retrieveSchema(rawSchema, innerData);\n isReadonly = getNonNullishValue(schema.readOnly, isReadonly);\n });\n let optionsInfo;\n let isRequired = false;\n // retrieveSchema will return an empty schema in the worst case scenario, convert it to undefined\n if (!schema || Object.keys(schema).length === 0) {\n schema = undefined;\n }\n if (schema && leafPath) {\n // When we have both a schema and a leafPath...\n if (schema && (ONE_OF_KEY in schema || ANY_OF_KEY in schema)) {\n const xxx = ONE_OF_KEY in schema ? ONE_OF_KEY : ANY_OF_KEY;\n // Grab the selected schema for the oneOf/anyOf value for the leafPath using the innerData\n schema = schemaUtils.findSelectedOptionInXxxOf(schema, leafPath, xxx, innerData);\n }\n fieldPathId = toFieldPathId(leafPath, globalFormOptions, fieldPathId);\n isRequired = schema !== undefined && Array.isArray(schema.required) && schema.required.includes(leafPath);\n const result = computeArraySchemasIfPresent(schema, fieldPathId, leafPath);\n if (result.rawSchema) {\n schema = result.rawSchema;\n fieldPathId = result.fieldPathId;\n }\n else {\n // Now grab the schema from the leafPath of the current schema properties\n schema = schema?.[PROPERTIES_KEY]?.[leafPath];\n // Resolve any `$ref`s for the current schema\n schema = schema ? schemaUtils.retrieveSchema(schema) : schema;\n }\n isReadonly = getNonNullishValue(schema?.readOnly, isReadonly);\n if (schema && (ONE_OF_KEY in schema || ANY_OF_KEY in schema)) {\n const xxx = ONE_OF_KEY in schema ? ONE_OF_KEY : ANY_OF_KEY;\n // Set the options if we have a schema with a oneOf/anyOf\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n optionsInfo = { options: schema[xxx], hasDiscriminator: !!discriminator };\n }\n }\n return { schema, isRequired, isReadonly, optionsInfo, fieldPathId };\n}\n/** Gets the custom render component from the `render`, by either determining that it is either already a function or\n * it is a non-function value that can be used to look up the function in the registry. If no function can be found,\n * null is returned.\n *\n * @param render - The potential render function or lookup name to one\n * @param registry - The `@rjsf` Registry from which to look up `classNames` if they are present in the extra props\n * @returns - Either a render function if available, or null if not\n */\nexport function getCustomRenderComponent(render, registry) {\n let customRenderer = render;\n if (typeof customRenderer === 'string') {\n customRenderer = lookupFromFormContext(registry, customRenderer);\n }\n if (typeof customRenderer === 'function') {\n return customRenderer;\n }\n return null;\n}\n/** Extract the `name`, and optional `render` and all other props from the `gridSchema`. We look up the `render` to\n * see if can be resolved to a UIComponent. If `name` does not exist and there is an optional `render` UIComponent, we\n * set the `rendered` component with only specified props for that component in the object.\n *\n * @param registry - The `@rjsf` Registry from which to look up `classNames` if they are present in the extra props\n * @param gridSchema - The string or object that represents the configuration for the grid field\n * @returns - The UIComponentPropsType computed from the gridSchema\n */\nexport function computeUIComponentPropsFromGridSchema(registry, gridSchema) {\n let name;\n let UIComponent = null;\n let uiProps = {};\n let rendered;\n if (typeof gridSchema === 'string' || gridSchema === undefined) {\n name = gridSchema ?? '';\n }\n else {\n const { name: innerName = '', render, ...innerProps } = gridSchema;\n name = innerName;\n uiProps = innerProps;\n // Transform any `$lookup=` in the uiProps props with the appropriate value\n Object.entries(uiProps).forEach(([key, prop]) => {\n if (typeof prop === 'string') {\n const match = LOOKUP_REGEX.exec(prop);\n if (Array.isArray(match) && match.length > 1) {\n const lookupName = match[1];\n uiProps[key] = lookupFromFormContext(registry, lookupName, lookupName);\n }\n }\n });\n UIComponent = getCustomRenderComponent(render, registry);\n if (!innerName && UIComponent) {\n rendered = _jsx(UIComponent, { ...innerProps, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.uiComponent });\n }\n }\n return { name, UIComponent, uiProps, rendered };\n}\n/** Iterates through all the `childrenLayoutGridSchemaId`, rendering a nested `LayoutGridField` for each item in the\n * list, passing all the props for the current `LayoutGridField` along, updating the `schema` by calling\n * `retrieveSchema()` on it to resolve any `$ref`s. In addition to the updated `schema`, each item in\n * `childrenLayoutGridSchemaId` is passed as `layoutGridSchema`.\n *\n * @returns - The nested `LayoutGridField`s\n */\nfunction LayoutGridFieldChildren(props) {\n const { childrenLayoutGridSchemaId, ...layoutGridFieldProps } = props;\n const { registry, schema: rawSchema, formData } = layoutGridFieldProps;\n const { schemaUtils } = registry;\n const schema = schemaUtils.retrieveSchema(rawSchema, formData);\n return childrenLayoutGridSchemaId.map((layoutGridSchema) => (_createElement(LayoutGridField, { ...layoutGridFieldProps, key: `layoutGrid-${hashObject(layoutGridSchema)}`, schema: schema, layoutGridSchema: layoutGridSchema })));\n}\n/** Renders the `children` of the `GridType.CONDITION` if it passes. The `layoutGridSchema` for the\n * `GridType.CONDITION` is separated into the `children` and other `gridProps`. The `gridProps` are used to extract\n * the `operator`, `field` and `value` of the condition. If the condition matches, then all of the `children` are\n * rendered, otherwise null is returned.\n *\n * @returns - The rendered the children for the `GridType.CONDITION` or null\n */\nfunction LayoutGridCondition(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { formData, registry } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.CONDITION, registry);\n const { operator, field = '', value } = gridProps;\n const fieldData = getByPath(formData, toPath(field), null);\n if (conditionMatches(operator, fieldData, value)) {\n return _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: children });\n }\n return null;\n}\n/** Renders a `GridTemplate` as an item. The `layoutGridSchema` for the `GridType.COLUMN` is separated into the\n * `children` and other `gridProps`. The `gridProps` will be spread onto the outer `GridTemplate`. Inside the\n * `GridTemplate` all the `children` are rendered.\n *\n * @returns - The rendered `GridTemplate` containing the children for the `GridType.COLUMN`\n */\nfunction LayoutGridCol(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { registry, uiSchema } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.COLUMN, registry);\n const uiOptions = getUiOptions(uiSchema);\n const GridTemplate = getTemplate('GridTemplate', registry, uiOptions);\n return (_jsx(GridTemplate, { column: true, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.col, ...gridProps, children: _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: children }) }));\n}\n/** Renders a `GridTemplate` as an item. The `layoutGridSchema` for the `GridType.COLUMNS` is separated into the\n * `children` and other `gridProps`. The `children` is iterated on and `gridProps` will be spread onto the outer\n * `GridTemplate`. Each child will have their own rendered `GridTemplate`.\n *\n * @returns - The rendered `GridTemplate` containing the children for the `GridType.COLUMNS`\n */\nfunction LayoutGridColumns(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { registry, uiSchema } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.COLUMNS, registry);\n const uiOptions = getUiOptions(uiSchema);\n const GridTemplate = getTemplate('GridTemplate', registry, uiOptions);\n return children.map((child) => (_jsx(GridTemplate, { column: true, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.col, ...gridProps, children: _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: [child] }) }, `column-${hashObject(child)}`)));\n}\n/** Renders a `GridTemplate` as a container. The `layoutGridSchema` for the `GridType.ROW` is separated into the\n * `children` and other `gridProps`. The `gridProps` will be spread onto the outer `GridTemplate`. Inside of the\n * `GridTemplate` all of the `children` are rendered.\n *\n * @returns - The rendered `GridTemplate` containing the children for the `GridType.ROW`\n */\nfunction LayoutGridRow(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { registry, uiSchema } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.ROW, registry);\n const uiOptions = getUiOptions(uiSchema);\n const GridTemplate = getTemplate('GridTemplate', registry, uiOptions);\n return (_jsx(GridTemplate, { ...gridProps, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.row, children: _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: children }) }));\n}\n/** Renders the field described by `gridSchema`. If `gridSchema` is not an object, then is will be assumed\n * to be the dotted-path to the field in the schema. Otherwise, we extract the `name`, and optional `render` and all\n * other props. If `name` does not exist and there is an optional `render`, we return the `render` component with only\n * specified props for that component. If `name` exists, we take the name, the initial & root schemas and the formData\n * and get the destination schema, is required state and optional oneOf/anyOf options for it. If the destination\n * schema was located along with oneOf/anyOf options then a `LayoutMultiSchemaField` will be rendered with the\n * `uiSchema`, `errorSchema`, `fieldPathId` and `formData` drilled down to the dotted-path field, spreading any other\n * props from `gridSchema` into the `ui:options`. If the destination schema located without any oneOf/anyOf options,\n * then a `SchemaField` will be rendered with the same props as mentioned in the previous sentence. If no destination\n * schema was located, but a custom render component was found, then it will be rendered with many of the non-event\n * handling props. If none of the previous render paths are valid, then a null is returned.\n *\n * @returns - One of `LayoutMultiSchemaField`, `SchemaField`, a custom render component or null, depending\n */\nfunction LayoutGridFieldComponent(props) {\n const { gridSchema, schema: initialSchema, uiSchema, errorSchema, fieldPathId, onBlur, onFocus, formData, readonly, registry, layoutGridSchema, // Used to pull this out of otherProps since we don't want to pass it through\n ...otherProps } = props;\n const { onChange } = otherProps;\n const { fields } = registry;\n const { SchemaField, LayoutMultiSchemaField } = fields;\n const uiComponentProps = computeUIComponentPropsFromGridSchema(registry, gridSchema);\n const { name, UIComponent, uiProps } = uiComponentProps;\n const { schema, isRequired, isReadonly, optionsInfo, fieldPathId: fieldIdSchema, } = getSchemaDetailsForField(registry, name, initialSchema, formData, fieldPathId);\n const memoFieldPathId = useDeepCompareMemo(fieldIdSchema);\n if (uiComponentProps.rendered) {\n return uiComponentProps.rendered;\n }\n if (schema) {\n const Field = optionsInfo?.hasDiscriminator ? LayoutMultiSchemaField : SchemaField;\n // Call this function to get the appropriate UISchema, which will always have its `readonly` state matching the\n // `uiReadonly` flag that it returns. This is done since the `SchemaField` will always defer to the `readonly`\n // state in the uiSchema over anything in the props or schema. Because we are implementing the \"readonly\" state of\n // the `Form` via the prop passed to `LayoutGridField` we need to make sure the uiSchema always has a true value\n // when it is needed\n const { fieldUiSchema, uiReadonly } = computeFieldUiSchema(name, uiProps, uiSchema, isReadonly, readonly);\n const namePath = toPath(name);\n return (_jsx(Field, { \"data-testid\": optionsInfo?.hasDiscriminator\n ? LAYOUT_GRID_FIELD_TEST_IDS.layoutMultiSchemaField\n : LAYOUT_GRID_FIELD_TEST_IDS.field, ...otherProps, name: name, required: isRequired, readonly: uiReadonly, schema: schema, uiSchema: fieldUiSchema, errorSchema: getByPath(errorSchema, namePath), fieldPathId: memoFieldPathId, formData: getByPath(formData, namePath), onChange: onChange, onBlur: onBlur, onFocus: onFocus, options: optionsInfo?.options, registry: registry }));\n }\n if (UIComponent) {\n return (_jsx(UIComponent, { \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.uiComponent, ...otherProps, name: name, required: isRequired, formData: formData, readOnly: !!isReadonly || readonly, errorSchema: errorSchema, uiSchema: uiSchema, schema: initialSchema, fieldPathId: fieldPathId, onBlur: onBlur, onFocus: onFocus, registry: registry, ...uiProps }));\n }\n return null;\n}\n/** The `LayoutGridField` will render a schema, uiSchema and formData combination out into a GridTemplate in the shape\n * described in the uiSchema. To define the grid to use to render the elements within a field in the schema, provide in\n * the uiSchema for that field the object contained under a `ui:layoutGrid` element. E.g. (as a JSON object):\n *\n * ```\n * {\n * \"field1\" : {\n * \"ui:field\": \"LayoutGridField\",\n * \"ui:layoutGrid\": {\n * \"ui:row\": { ... }\n * }\n * }\n * }\n * ```\n *\n * The outermost level of a `LayoutGridField` is the `ui:row` that defines the nested rows, columns, and/or condition\n * elements (i.e. \"grid elements\") in the grid. This definition is either a simple \"grid elements\" OR an object with\n * native `GridTemplate` implementation specific props and a `children` array of \"grid elements\". E.g. (as JSON objects):\n *\n * Simple `ui:row` definition, without additional `GridTemplate` props:\n * ```\n * \"ui:row\": [\n * { \"ui:row\"|\"ui:col\"|\"ui:columns\"|\"ui:condition\": ... },\n * ...\n * ]\n * ```\n *\n * Complex `ui:row` definition, with additional `GridTemplate` (this example uses @mui/material/Grid2 native props):\n * ```\n * \"ui:row\": {\n * \"spacing\": 2,\n * \"size\": { md\": 4 },\n * \"alignContent\": \"flex-start\",\n * \"className\": \"GridRow\",\n * \"children\": [\n * { \"ui:row\"|\"ui:col\"|\"ui:columns\"|\"ui:condition\": ... },\n * ...\n * ]\n * }\n * ```\n *\n * NOTE: Special note about the native `className` prop values. All className values will automatically be looked up in\n * the `formContext.lookupMap` in case they have been defined using a CSS-in-JS approach. In other words, from the\n * example above, if the `Form` was constructed with a `lookupMap` set to `{ GridRow: cssInJs.GridRowClass }`\n * then when rendered, the native `GridTemplate` will get the `className` with the value from\n * `cssInJs.GridRowClass`. This automatic lookup will happen for any of the \"grid elements\" when rendering with\n * `GridTemplate` props. If multiple className values are present, for example:\n * `{ className: 'GridRow GridColumn' }`, the classNames are split apart, looked up individually, and joined\n * together to form one className with the values from `cssInJs.GridRowClass` and `cssInJs.GridColumnClass`.\n *\n * The `ui:col` grid element is used to specify the list of columns within a grid row. A `ui:col` element can take on\n * several forms: 1) a simple list of dotted-path field names within the root field; 2) a list of objects containing the\n * dotted-path field `name` any other props that are gathered into `ui:options` for the field; 3) a list with a one-off\n * `render` functional component with or without a non-field `name` identifier and any other to-be-spread props; and\n * 4) an object with native `GridTemplate` implementation specific props and a `children` array with 1) or 2) or even a\n * nested `ui:row` or a `ui:condition` containing a `ui:row` (although this should be used carefully). E.g.\n * (as JSON objects):\n *\n * Simple `ui:col` definition, without additional `GridTemplate` props and form 1 only children:\n * ```\n * \"ui:col\": [\"innerField\", \"inner.grandChild\", ...]\n * ```\n *\n * Complicated `ui:col` definition, without additional `GridTemplate` props and form 2 only children:\n * ```\n * \"ui:col\": [\n * { \"name\": \"innerField\", \"fullWidth\": true },\n * { \"name\": \"inner.grandChild\", \"convertOther\": true },\n * ...\n * ]\n * ```\n *\n * More complicated `ui:col` definition, without additional `GridTemplate` props and form 2 children, one being a\n * one-off `render` functional component without a non-field `name` identifier\n * ```\n * \"ui:col\": [\n * \"innerField\",\n * {\n * \"render\": \"WizardNavButton\",\n * \"isNext\": true,\n * \"size\": \"large\"\n * }\n * ]\n * ```\n *\n * Most complicated `ui:col` definition, additional `GridTemplate` props and form 1, 2 and 3 children (this example\n * uses @mui/material/Grid2 native props):\n * ```\n * \"ui:col\": {\n * \"size\": { \"md\": 4 },\n * \"className\": \"GridColumn\",\n * \"children\": [\n * \"innerField\",\n * { \"name\": \"inner.grandChild\", \"convertOther\": true },\n * { \"name\": \"customRender\", \"render\": \"CustomRender\", toSpread: \"prop-value\" }\n * { \"ui:row|ui:condition\": ... }\n * ...\n * ]\n * }\n * ```\n *\n * NOTE: If a `name` prop does not exist or its value does not match any field in a schema, then it is assumed to be a\n * custom `render` component. If the `render` prop does not exist, a null render will occur. If `render` is a\n * string, its value will be looked up in the `formContext.lookupMap` first before defaulting to a null render.\n *\n * The `ui:columns` grid element is syntactic sugar to specify a set of `ui:col` columns that all share the same set of\n * native `GridTemplate` props. In other words rather than writing the following configuration that renders a\n * `` element with 3 `` nodes and 2\n * `` nodes within it (one for each of the fields contained in the `children`\n * list):\n *\n * ```\n * \"ui:row\": {\n * \"children\": [\n * {\n * \"ui:col\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [\"innerField\"],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [\"inner.grandChild\"],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [{ \"name\": \"inner.grandChild2\" }],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"col-md-6\",\n * \"children\": [\"innerField2\"],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"col-md-6\",\n * \"children\": [\"inner.grandChild3\"],\n * }\n * },\n\n * ]\n * }\n * ```\n *\n * One can write this instead:\n * ```\n * \"ui:row\": {\n * \"children\": [\n * {\n * \"ui:columns\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [\"innerField\", \"inner.grandChild\", { \"name\": \"inner.grandChild2\", \"convertOther\": true }],\n * }\n * },\n * {\n * \"ui:columns\": {\n * \"className\": \"col-md-6\",\n * \"children\": [\"innerField2\", \"inner.grandChild3\"],\n * }\n * }\n * ]\n * }\n * ```\n *\n * NOTE: This syntax differs from\n * `\"ui:col\": { \"className\": \"col-md-6\", \"children\": [\"innerField2\", \"inner.grandChild3\"] }` in that\n * the `ui:col` will render the two children fields inside a single ``\n * element.\n *\n * The final grid element, `ui:condition`, allows for conditionally displaying \"grid elements\" within a row based on the\n * current value of a field as it relates to a (list of) hard-coded value(s). There are four elements that make up a\n * `ui:condition`: 1) the dotted-path `field` name within the root field that makes up the left-side of the condition;\n * 2) the hard-coded `value` (single or list) that makes up the right-side of the condition; 3) the `operator` that\n * controls how the left and right sides of the condition are compared; and 4) the `children` array that defines the\n * \"grid elements\" to display if the condition passes.\n *\n * A `ui:condition` uses one of three `operators` when deciding if a condition passes: 1) The `all` operator will pass\n * when the right-side and left-side contains all the same value(s); 2) the `some` operator will pass when the\n * right-side and left-side contain as least one value in common; 3) the `none` operator will pass when the right-side\n * and left-side do not contain any values in common. E.g. (as JSON objects):\n *\n * Here is how to render an if-then-else for `field2` which is an enum that has 3 known values and supports allowing\n * any other value:\n * ```\n * \"ui:row\": [\n * {\n * \"ui:condition\": {\n * \"field\": \"field2\",\n * \"operator\": \"all\",\n * \"value\": \"value1\",\n * \"children\": [\n * { \"ui:row\": [...] },\n * ],\n * }\n * },\n * {\n * \"ui:condition\": {\n * \"field\": \"field2\",\n * \"operator\": \"some\",\n * \"value\": [\"value2\", \"value3\"],\n * \"children\": [\n * { \"ui:row\": [...] },\n * ],\n * }\n * },\n * {\n * \"ui:condition\": {\n * \"field\": \"field2\",\n * \"operator\": \"none\",\n * \"value\": [\"value1\", \"value2\", \"value3\"],\n * \"children\": [\n * { \"ui:row\": [...] },\n * ],\n * }\n * }\n * ]\n * ```\n */\nexport default function LayoutGridField(props) {\n /** Render the `LayoutGridField`. If there isn't a `layoutGridSchema` prop defined, then try pulling it out of the\n * `uiSchema` via `ui:LayoutGridField`. If `layoutGridSchema` is an object, then check to see if any of the properties\n * match one of the `GridType`s. If so, call the appropriate render function for the type. Otherwise, just call the\n * generic `renderField()` function with the `layoutGridSchema`.\n */\n const { uiSchema } = props;\n let { layoutGridSchema } = props;\n const uiOptions = getUiOptions(uiSchema);\n if (!layoutGridSchema && LAYOUT_GRID_UI_OPTION in uiOptions && isObject(uiOptions[LAYOUT_GRID_UI_OPTION])) {\n layoutGridSchema = uiOptions[LAYOUT_GRID_UI_OPTION];\n }\n if (isObject(layoutGridSchema)) {\n if (GridType.ROW in layoutGridSchema) {\n return _jsx(LayoutGridRow, { ...props, layoutGridSchema: layoutGridSchema });\n }\n if (GridType.COLUMN in layoutGridSchema) {\n return _jsx(LayoutGridCol, { ...props, layoutGridSchema: layoutGridSchema });\n }\n if (GridType.COLUMNS in layoutGridSchema) {\n return _jsx(LayoutGridColumns, { ...props, layoutGridSchema: layoutGridSchema });\n }\n if (GridType.CONDITION in layoutGridSchema) {\n return _jsx(LayoutGridCondition, { ...props, layoutGridSchema: layoutGridSchema });\n }\n }\n return _jsx(LayoutGridFieldComponent, { ...props, gridSchema: layoutGridSchema });\n}\nLayoutGridField.TEST_IDS = LAYOUT_GRID_FIELD_TEST_IDS;\n//# sourceMappingURL=LayoutGridField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate, getUiOptions, titleId } from '@rjsf/utils';\n/** The `LayoutHeaderField` component renders a `TitleFieldTemplate` with an `id` derived from the `fieldPathId`\n * and whether it is `required` from the props. The `title` is derived from the props as follows:\n * - If there is a title in the `uiSchema`, it is displayed\n * - Else, if there is an explicit `title` passed in the props, it is displayed\n * - Otherwise, if there is a title in the `schema`, it is displayed\n * - Finally, the `name` prop is displayed as the title\n *\n * @param props - The `LayoutHeaderField` for the component\n */\nexport default function LayoutHeaderField(props) {\n const { fieldPathId, title, schema, uiSchema, required, registry, name } = props;\n const options = getUiOptions(uiSchema, registry.globalUiOptions);\n const { title: uiTitle } = options;\n const { title: schemaTitle } = schema;\n const fieldTitle = uiTitle || title || schemaTitle || name;\n if (!fieldTitle) {\n return null;\n }\n const TitleFieldTemplate = getTemplate('TitleFieldTemplate', registry, options);\n return (_jsx(TitleFieldTemplate, { id: titleId(fieldPathId), title: fieldTitle, required: required, schema: schema, uiSchema: uiSchema, registry: registry }));\n}\n//# sourceMappingURL=LayoutHeaderField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useState, useEffect } from 'react';\nimport { getByPath, setByPath, ANY_OF_KEY, CONST_KEY, DEFAULT_KEY, ERRORS_KEY, getDiscriminatorFieldFromSchema, hashObject, ID_KEY, ONE_OF_KEY, optionsList, PROPERTIES_KEY, getTemplate, getPropertySchema, getUiOptions, getWidget, noop, } from '@rjsf/utils';\n/** Gets the selected option from the list of `options`, using the `selectorField` to search inside each `option` for\n * the `properties[selectorField].default(or const)` that matches the given `value`.\n *\n * @param options - The list of schemas each representing a choice in the `oneOf`\n * @param selectorField - The name of the field that is common in all of the schemas that represents the selector field\n * @param value - The current value of the selector field from the data\n */\nexport function getSelectedOption(options, selectorField, value) {\n const defaultValue = '!@#!@$@#$!@$#';\n const schemaOptions = options.map(({ schema }) => schema);\n return schemaOptions.find((option) => {\n const selector = option[PROPERTIES_KEY]?.[selectorField];\n const result = getByPath(selector, DEFAULT_KEY, getByPath(selector, CONST_KEY, defaultValue));\n return result === value;\n });\n}\n/** Computes the `enumOptions` array from the schema and options.\n *\n * @param schema - The schema that contains the `options`\n * @param options - The options from the `schema`\n * @param schemaUtils - The SchemaUtilsType object used to call retrieveSchema,\n * @param [uiSchema] - The optional uiSchema for the schema\n * @param [formData] - The optional formData associated with the schema\n * @returns - The list of enumOptions for the `schema` and `options`\n * @throws - Error when no enum options were computed\n */\nexport function computeEnumOptions(schema, options, schemaUtils, uiSchema, formData) {\n const realOptions = options.map((opt) => schemaUtils.retrieveSchema(opt, formData));\n let tempSchema = schema;\n if (ONE_OF_KEY in schema) {\n tempSchema = { ...schema, [ONE_OF_KEY]: realOptions };\n }\n else if (ANY_OF_KEY in schema) {\n tempSchema = { ...schema, [ANY_OF_KEY]: realOptions };\n }\n const enumOptions = optionsList(tempSchema, uiSchema);\n if (!enumOptions) {\n throw new Error(`No enumOptions were computed from the schema ${JSON.stringify(tempSchema)}`);\n }\n return enumOptions;\n}\n/** The `LayoutMultiSchemaField` is an adaptation of the `MultiSchemaField` but changed considerably to only\n * support `anyOf`/`oneOf` fields that are being displayed in a `LayoutGridField` where the field selection is shown as\n * a radio group by default. It expects that a `selectorField` is provided (either directly via the `discriminator`\n * field or indirectly via `ui:optionsSchemaSelector` in the `uiSchema`) to help determine which `anyOf`/`oneOf` schema\n * is active. If no `selectorField` is specified, then an error is thrown.\n */\nexport default function LayoutMultiSchemaField(props) {\n const { name, baseType, disabled = false, formData, fieldPathId, onBlur, onChange, options, onFocus, registry, uiSchema, schema, autofocus, readonly, required, errorSchema, hideError = false, } = props;\n const { widgets, schemaUtils, globalUiOptions } = registry;\n const [enumOptions, setEnumOptions] = useState(computeEnumOptions(schema, options, schemaUtils, uiSchema, formData));\n const id = fieldPathId[ID_KEY];\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const FieldErrorTemplate = getTemplate('FieldErrorTemplate', registry, options);\n const FieldTemplate = getTemplate('FieldTemplate', registry, options);\n const schemaHash = hashObject(schema);\n const optionsHash = hashObject(options);\n const uiSchemaHash = uiSchema ? hashObject(uiSchema) : '';\n const formDataHash = formData ? hashObject(formData) : '';\n useEffect(() => {\n setEnumOptions(computeEnumOptions(schema, options, schemaUtils, uiSchema, formData));\n // We are using hashes in place of the dependencies\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [schemaHash, optionsHash, schemaUtils, uiSchemaHash, formDataHash]);\n const { widget = discriminator ? 'radio' : 'select', title = '', placeholder = '', optionsSchemaSelector: selectorField = discriminator, hideError: uiSchemaHideError, ...uiOptions } = getUiOptions(uiSchema);\n if (!selectorField) {\n throw new Error('No selector field provided for the LayoutMultiSchemaField');\n }\n const selectedOption = getByPath(formData, selectorField);\n let optionSchema = getPropertySchema(enumOptions[0]?.schema, selectorField);\n const option = getSelectedOption(enumOptions, selectorField, selectedOption);\n // If the subschema doesn't declare a type, infer the type from the parent schema\n optionSchema = optionSchema?.type ? optionSchema : { ...optionSchema, type: option?.type || baseType };\n const Widget = getWidget(optionSchema, widget, widgets);\n // The following code was copied from `@rjsf`'s `SchemaField`\n // Set hideError to the value provided in the uiSchema, otherwise stick with the prop to propagate to children\n const hideFieldError = uiSchemaHideError === undefined ? hideError : Boolean(uiSchemaHideError);\n const rawErrors = errorSchema?.[ERRORS_KEY] ?? [];\n const fieldErrorSchema = { ...errorSchema };\n delete fieldErrorSchema[ERRORS_KEY];\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n /** Callback function that updates the selected option and adjusts the form data based on the structure of the new\n * option, calling the `onChange` callback with the adjusted formData.\n *\n * @param opt - If the option is undefined, we are going to clear the selection otherwise we\n * will use it as the index of the new option to select\n */\n const onOptionChange = (opt) => {\n if (disabled || readonly) {\n return;\n }\n const newOption = getSelectedOption(enumOptions, selectorField, opt);\n const oldOption = getSelectedOption(enumOptions, selectorField, selectedOption);\n let newFormData = schemaUtils.sanitizeDataForNewSchema(newOption, oldOption, formData);\n if (newFormData && newOption) {\n // Call getDefaultFormState to make sure defaults are populated on change.\n newFormData = schemaUtils.getDefaultFormState(newOption, newFormData, 'excludeObjectChildren');\n }\n if (newFormData) {\n setByPath(newFormData, selectorField, opt);\n }\n // Pass the component name in the path\n onChange(newFormData, fieldPathId.path, undefined, id);\n };\n // filtering the options based on the type of widget because `selectField` does not recognize the `convertOther` prop\n const widgetOptions = { enumOptions, ...uiOptions };\n const errors = !hideFieldError && rawErrors.length > 0 ? (_jsx(FieldErrorTemplate, { fieldPathId: fieldPathId, schema: schema, errors: rawErrors, registry: registry })) : undefined;\n return (_jsx(FieldTemplate, { fieldPathId: fieldPathId, id: id, schema: schema, label: (title || schema.title) ?? '', disabled: disabled || (Array.isArray(enumOptions) && enumOptions.length === 0), uiSchema: uiSchema, required: required, readonly: !!readonly, registry: registry, displayLabel: displayLabel, errors: errors, onChange: onChange, onKeyRename: noop, onKeyRenameBlur: noop, onRemoveProperty: noop, children: _jsx(Widget, { id: id, name: name, schema: schema, label: (title || schema.title) ?? '', disabled: disabled || (Array.isArray(enumOptions) && enumOptions.length === 0), uiSchema: uiSchema, autofocus: autofocus, readonly: readonly, required: required, registry: registry, multiple: false, rawErrors: rawErrors, hideError: hideFieldError, hideLabel: !displayLabel, errorSchema: fieldErrorSchema, placeholder: placeholder, onChange: onOptionChange, onBlur: onBlur, onFocus: onFocus, value: selectedOption, options: widgetOptions, htmlName: fieldPathId.name }) }));\n}\n//# sourceMappingURL=LayoutMultiSchemaField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ANY_OF_KEY, deepEquals, ERRORS_KEY, getDiscriminatorFieldFromSchema, getTemplate, getUiOptions, getWidget, hashObject, isFormDataAvailable, mergeSchemas, ONE_OF_KEY, shouldRenderOptionalField, TranslatableString, } from '@rjsf/utils';\n/** The `AnyOfField` component is used to render a field in the schema that is an `anyOf`, `allOf` or `oneOf`. It tracks\n * the currently selected option and cleans up any irrelevant data in `formData`.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction AnyOfField(props) {\n const { name, disabled = false, errorSchema, formData, fieldPathId, onBlur, onChange, onFocus, options, readonly, registry, required = false, schema, uiSchema, } = props;\n const { schemaUtils } = registry;\n // Hash formData by value so the memo only invalidates when data actually changes, not on every\n // new object reference. hashObject(undefined) throws, so null is used as the fallback.\n const formDataHash = hashObject(formData ?? null);\n // retrievedOptions is purely derived from options — useMemo handles re-derivation automatically\n // when options, schemaUtils, or formData's value changes, with no render-phase dispatch needed.\n const retrievedOptions = useMemo(() => options.map((opt) => schemaUtils.retrieveSchema(opt, formData)), \n // oxlint-disable-next-line react-hooks/exhaustive-deps -- formDataHash is the value-stable proxy for formData\n [options, schemaUtils, formDataHash]);\n const [selectedOption, setSelectedOption] = useState(() => {\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n return schemaUtils.getClosestMatchingOption(formData, retrievedOptions, 0, discriminator);\n });\n /** Flag to skip the formData-change-driven option recalculation when the user just selected an option.\n * Set to true in onOptionChange (before onChange is called), consumed and reset in the update effect.\n * This prevents the matching-option recalculation from overriding a user's explicit choice when\n * getDefaultFormState populates undefined properties that make deepEquals see a false formData change.\n */\n const skipNextOptionRecalculation = useRef(false);\n const prevFormDataRef = useRef(formData);\n const prevFieldIdRef = useRef(fieldPathId.$id);\n // Mirrors componentDidUpdate: re-match selectedOption when formData changes on the same field.\n // Runs after every render (no deps array) to compare against prev values stored in refs.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n const prevFormData = prevFormDataRef.current;\n const prevFieldId = prevFieldIdRef.current;\n prevFormDataRef.current = formData;\n prevFieldIdRef.current = fieldPathId.$id;\n if (!deepEquals(formData, prevFormData) && fieldPathId.$id === prevFieldId) {\n if (skipNextOptionRecalculation.current) {\n skipNextOptionRecalculation.current = false;\n return;\n }\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const matchingOption = schemaUtils.getClosestMatchingOption(formData, retrievedOptions, selectedOption, discriminator);\n if (matchingOption !== selectedOption) {\n setSelectedOption(matchingOption);\n }\n }\n });\n const fieldId = `${fieldPathId.$id}${schema.oneOf ? '__oneof_select' : '__anyof_select'}`;\n /** Callback handler to remember what the currently selected option is. In addition to that the `formData` is updated\n * to remove properties that are not part of the newly selected option schema, and then the updated data is passed to\n * the `onChange` handler.\n *\n * @param option - The new option value being selected\n */\n const onOptionChange = useCallback((option) => {\n if (disabled || readonly) {\n return;\n }\n const intOption = option !== undefined ? parseInt(option, 10) : -1;\n if (intOption === selectedOption) {\n return;\n }\n const newOption = intOption >= 0 ? retrievedOptions[intOption] : undefined;\n const oldOption = selectedOption >= 0 ? retrievedOptions[selectedOption] : undefined;\n let newFormData = schemaUtils.sanitizeDataForNewSchema(newOption, oldOption, formData);\n if (newOption) {\n // Call getDefaultFormState to make sure defaults are populated on change. Pass \"excludeObjectChildren\"\n // so that only the root objects themselves are created without adding undefined children properties\n newFormData = schemaUtils.getDefaultFormState(newOption, newFormData, 'excludeObjectChildren');\n }\n setSelectedOption(intOption);\n skipNextOptionRecalculation.current = true;\n onChange(newFormData, fieldPathId.path, undefined, fieldId);\n }, \n // setSelectedOption is stable (guaranteed by useState); skipNextOptionRecalculation is a ref\n [selectedOption, retrievedOptions, disabled, readonly, schemaUtils, formData, fieldPathId, onChange, fieldId]);\n const { widgets, fields, translateString, globalUiOptions } = registry;\n const { SchemaField: SchemaFieldComponent } = fields;\n const MultiSchemaFieldTemplate = getTemplate('MultiSchemaFieldTemplate', registry, globalUiOptions);\n const isOptionalRender = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formData);\n const { widget = 'select', placeholder, autofocus, autocomplete, title = schema.title, ...uiOptions } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget({ type: 'number' }, widget, widgets);\n const rawErrors = errorSchema?.[ERRORS_KEY] ?? [];\n const fieldErrorSchema = { ...errorSchema };\n delete fieldErrorSchema[ERRORS_KEY];\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n const option = selectedOption >= 0 ? retrievedOptions[selectedOption] || null : null;\n let optionSchema;\n if (option) {\n const { required: schemaRequired, type: schemaType } = schema;\n const parentProps = {};\n if (schemaRequired) {\n parentProps.required = schemaRequired;\n }\n // Propagate the parent schema type to options that don't define their own.\n // This is necessary when the parent constrains the type (e.g. { type: 'string',\n // oneOf: [{ pattern: '...' }, { pattern: '...' }] }) but the option sub-schemas\n // omit the type — without it, getSchemaType returns undefined and the option\n // renders as FallbackField instead of the correct widget (e.g. StringField).\n if (schemaType !== undefined && !('type' in option)) {\n parentProps.type = schemaType;\n }\n // Merge in all the non-oneOf/anyOf properties and also skip the special ADDITIONAL_PROPERTY_FLAG property\n optionSchema = Object.keys(parentProps).length > 0 ? mergeSchemas(parentProps, option) : option;\n }\n // First we will check to see if there is an anyOf/oneOf override for the UI schema\n let optionsUiSchema = [];\n if (ONE_OF_KEY in schema && uiSchema && ONE_OF_KEY in uiSchema) {\n if (Array.isArray(uiSchema[ONE_OF_KEY])) {\n optionsUiSchema = uiSchema[ONE_OF_KEY];\n }\n else {\n // oxlint-disable-next-line no-console\n console.warn(`uiSchema.oneOf is not an array for \"${title || name}\"`);\n }\n }\n else if (ANY_OF_KEY in schema && uiSchema && ANY_OF_KEY in uiSchema) {\n if (Array.isArray(uiSchema[ANY_OF_KEY])) {\n optionsUiSchema = uiSchema[ANY_OF_KEY];\n }\n else {\n // oxlint-disable-next-line no-console\n console.warn(`uiSchema.anyOf is not an array for \"${title || name}\"`);\n }\n }\n // Then we pick the one that matches the selected option index, if one exists otherwise default to the main uiSchema\n let optionUiSchema = uiSchema;\n if (selectedOption >= 0 && optionsUiSchema.length > selectedOption) {\n optionUiSchema = optionsUiSchema[selectedOption];\n }\n const translateEnum = title\n ? TranslatableString.TitleOptionPrefix\n : TranslatableString.OptionPrefix;\n const translateParams = title ? [title] : [];\n const enumOptions = retrievedOptions.map((opt, index) => {\n const { title: uiTitle = opt.title } = getUiOptions(optionsUiSchema[index]);\n return {\n label: uiTitle || translateString(translateEnum, translateParams.concat(String(index + 1))),\n value: index,\n };\n });\n const selector = !isOptionalRender || hasFormData ? (_jsx(Widget, { id: fieldId, name: `${name}${schema.oneOf ? '__oneof_select' : '__anyof_select'}`, schema: { type: 'number', default: 0 }, onChange: onOptionChange, onBlur: onBlur, onFocus: onFocus, disabled: disabled || enumOptions.length === 0, multiple: false, rawErrors: rawErrors, errorSchema: fieldErrorSchema, value: selectedOption >= 0 ? selectedOption : undefined, options: { enumOptions, ...uiOptions }, registry: registry, placeholder: placeholder, autocomplete: autocomplete, autofocus: autofocus, label: title ?? name, hideLabel: !displayLabel, readonly: readonly })) : undefined;\n const optionsSchemaField = (optionSchema && optionSchema.type !== 'null' && (_jsx(SchemaFieldComponent, { ...props, schema: optionSchema, uiSchema: optionUiSchema }))) ||\n null;\n return (_jsx(MultiSchemaFieldTemplate, { schema: schema, registry: registry, uiSchema: uiSchema, selector: selector, optionSchemaField: optionsSchemaField }));\n}\nexport default AnyOfField;\n//# sourceMappingURL=MultiSchemaField.js.map","import { useEffect } from 'react';\n/** The `NullField` component is used to render a field in the schema is null. It also ensures that the `formData` is\n * also set to null if it has no value.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction NullField(props) {\n const { formData, onChange, fieldPathId } = props;\n useEffect(() => {\n if (formData === undefined) {\n onChange(null, fieldPathId.path);\n }\n }, [fieldPathId, formData, onChange]);\n return null;\n}\nexport default NullField;\n//# sourceMappingURL=NullField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useState, useCallback } from 'react';\nimport { asNumber, getDecimalSeparator, getUiOptions, optionsList } from '@rjsf/utils';\n// Static matchers for standard '.' separator used during normalization inside handleChange\nconst trailingCharMatcherWithPrefix = /\\.([0-9]*0)*$/;\nconst trailingCharMatcher = /[0.]0*$/;\n/**\n * The NumberField class has some special handling for dealing with trailing\n * decimal points and/or zeroes. This logic is designed to allow trailing values\n * to be visible in the input element, but not be represented in the\n * corresponding form data.\n *\n * The algorithm is as follows:\n *\n * 1. When the input value changes the value is cached in the component state\n *\n * 2. The value is then normalized, removing trailing decimal points and zeros,\n * then passed to the \"onChange\" callback\n *\n * 3. When the component is rendered, the formData value is checked against the\n * value cached in the state. If it matches the cached value, the cached\n * value is passed to the input instead of the formData value\n */\nfunction NumberField(props) {\n const { registry, onChange, formData, value: initialValue } = props;\n const [lastValue, setLastValue] = useState(initialValue);\n const { StringField } = registry.fields;\n const separator = getDecimalSeparator();\n const escapedSeparator = separator === '.' ? '\\\\.' : separator;\n let value = formData;\n /** Handle the change from the `StringField` to properly convert to a number\n *\n * @param value - The current value for the change occurring\n */\n const handleChange = useCallback((newValue, path, errorSchema, id) => {\n // Cache the original value in component state\n setLastValue(newValue);\n // Convert locale separator to standard '.' first\n const standardValue = typeof newValue === 'string' ? newValue.replace(separator, '.') : newValue;\n // Normalize decimals that don't start with a zero character in advance so\n // that the rest of the normalization logic is simpler\n const normalizedValue = `${standardValue}`.startsWith('.') ? `0${standardValue}` : standardValue;\n // Check that the value is a string (this can happen if the widget used is a\n // ` component for the `core` theme.\n * It is used as the template for rendering many of the based widgets that differ by `type` and callbacks only.\n * It can be customized/overridden for other themes or individual implementations as needed.\n *\n * @param props - The `WidgetProps` for this template\n */\nexport default function BaseInputTemplate(props) {\n const { id, name, // remove this from ...rest\n htmlName, value, readonly, disabled, autofocus, onBlur, onFocus, onChange, onChangeOverride, options, schema, uiSchema, registry, rawErrors, type, hideLabel, // remove this from ...rest\n hideError, // remove this from ...rest\n ...rest } = props;\n const { ClearButton } = registry.templates.ButtonTemplates;\n // Note: since React 15.2.0 we can't forward unknown element attributes, so we\n // exclude the \"options\" and \"schema\" ones here.\n if (!id) {\n // oxlint-disable-next-line no-console\n console.log('No id for', props);\n throw new Error(`no id for props ${JSON.stringify(props)}`);\n }\n const inputProps = {\n ...rest,\n ...getInputProps(schema, type, options),\n };\n let inputValue;\n if (inputProps.type === 'number' || inputProps.type === 'integer') {\n inputValue = value || value === 0 ? value : '';\n }\n else {\n inputValue = value == null ? '' : value;\n }\n const handleChange = useCallback(({ target: { value: newValue } }) => onChange(newValue === '' ? options.emptyValue : newValue), [onChange, options]);\n const handleBlur = useCallback(({ target }) => onBlur(id, target?.value), [onBlur, id]);\n const handleFocus = useCallback(({ target }) => onFocus(id, target?.value), [onFocus, id]);\n const handleClear = useCallback((e) => {\n e.preventDefault();\n e.stopPropagation();\n onChange(options.emptyValue);\n }, [onChange, options.emptyValue]);\n return (_jsxs(_Fragment, { children: [_jsx(\"input\", { id: id, name: htmlName || id, className: 'form-control', readOnly: readonly, disabled: disabled, autoFocus: autofocus, value: inputValue, ...inputProps, list: schema.examples ? examplesId(id) : undefined, onChange: onChangeOverride || handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id, !!schema.examples) }), options.allowClearTextInputs && !readonly && !disabled && inputValue && (_jsx(ClearButton, { registry: registry, onClick: handleClear })), _jsx(SchemaExamples, { id: id, schema: schema })] }));\n}\n//# sourceMappingURL=BaseInputTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { memo } from 'react';\nimport { TranslatableString } from '@rjsf/utils';\nfunction IconButtonFn(props) {\n const { iconType = 'default', icon, className, uiSchema, registry, ...otherProps } = props;\n return (_jsx(\"button\", { type: 'button', className: `btn btn-${iconType} ${className}`, ...otherProps, children: _jsx(\"i\", { className: `glyphicon glyphicon-${icon}` }) }));\n}\nconst IconButton = memo(IconButtonFn);\nexport default IconButton;\nfunction CopyButtonFn(props) {\n const { registry: { translateString }, } = props;\n return _jsx(IconButton, { title: translateString(TranslatableString.CopyButton), ...props, icon: 'copy' });\n}\nexport const CopyButton = memo(CopyButtonFn);\nfunction MoveDownButtonFn(props) {\n const { registry: { translateString }, } = props;\n return _jsx(IconButton, { title: translateString(TranslatableString.MoveDownButton), ...props, icon: 'arrow-down' });\n}\nexport const MoveDownButton = memo(MoveDownButtonFn);\nfunction MoveUpButtonFn(props) {\n const { registry: { translateString }, } = props;\n return _jsx(IconButton, { title: translateString(TranslatableString.MoveUpButton), ...props, icon: 'arrow-up' });\n}\nexport const MoveUpButton = memo(MoveUpButtonFn);\nfunction RemoveButtonFn(props) {\n const { registry: { translateString }, } = props;\n return (_jsx(IconButton, { title: translateString(TranslatableString.RemoveButton), ...props, iconType: 'danger', icon: 'remove' }));\n}\nexport const RemoveButton = memo(RemoveButtonFn);\nfunction ClearButtonFn({ id, className, onClick, disabled, registry, ...props }) {\n const { translateString } = registry;\n return (_jsx(IconButton, { id: id, iconType: 'default', icon: 'remove', className: 'btn-clear col-xs-12', title: translateString(TranslatableString.ClearButton), onClick: onClick, disabled: disabled, registry: registry, ...props }));\n}\nexport const ClearButton = memo(ClearButtonFn);\n//# sourceMappingURL=IconButton.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { TranslatableString } from '@rjsf/utils';\nimport IconButton from \"./IconButton.js\";\n/** The `AddButton` renders a button that represent the `Add` action on a form\n */\nexport default function AddButton({ id, className, onClick, disabled, registry, }) {\n const { translateString } = registry;\n return (_jsx(\"div\", { className: 'row', children: _jsx(\"p\", { className: `col-xs-4 col-sm-2 col-lg-1 col-xs-offset-8 col-sm-offset-10 col-lg-offset-11 text-right ${className}`, children: _jsx(IconButton, { id: id, iconType: 'info', icon: 'plus', className: 'btn-add col-xs-12', title: translateString(TranslatableString.AddButton), onClick: onClick, disabled: disabled, registry: registry }) }) }));\n}\n//# sourceMappingURL=AddButton.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getSubmitButtonOptions } from '@rjsf/utils';\n/** The `SubmitButton` renders a button that represent the `Submit` action on a form\n */\nexport default function SubmitButton({ uiSchema }) {\n const { submitText, norender, props: submitButtonProps = {} } = getSubmitButtonOptions(uiSchema);\n if (norender) {\n return null;\n }\n return (_jsx(\"div\", { children: _jsx(\"button\", { type: 'submit', ...submitButtonProps, className: `btn btn-info ${submitButtonProps.className || ''}`, children: submitText }) }));\n}\n//# sourceMappingURL=SubmitButton.js.map","import AddButton from \"./AddButton.js\";\nimport { CopyButton, MoveDownButton, MoveUpButton, RemoveButton, ClearButton } from \"./IconButton.js\";\nimport SubmitButton from \"./SubmitButton.js\";\nfunction buttonTemplates() {\n return {\n SubmitButton,\n AddButton,\n CopyButton,\n MoveDownButton,\n MoveUpButton,\n RemoveButton,\n ClearButton,\n };\n}\nexport default buttonTemplates;\n//# sourceMappingURL=index.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ID_KEY, TranslatableString } from '@rjsf/utils';\n/** The `CyclicSchemaExpandTemplate` is the template to use to render the cyclic schema expand message and controls\n *\n * @param props - The `DescriptionFieldProps` for this component\n */\nexport default function CyclicSchemaExpandTemplate(props) {\n const { name, fieldPathId, registry, onExpand } = props;\n const { translateString } = registry;\n const buttonId = `${fieldPathId[ID_KEY]}-button`;\n return (_jsxs(\"div\", { style: { marginTop: '1rem' }, children: [_jsx(\"div\", { className: 'text-danger', children: translateString(TranslatableString.CycleDetected, [name]) }), _jsxs(\"div\", { children: [_jsx(\"button\", { id: buttonId, type: 'button', className: 'btn btn-sm btn-warning', onClick: () => onExpand(fieldPathId[ID_KEY]), children: translateString(TranslatableString.ExpandButton) }), ' '] })] }));\n}\n//# sourceMappingURL=CyclicSchemaExpandTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTestIds, getUiOptions } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\nconst TEST_IDS = getTestIds();\n/** Renders the given `description` in the props as\n *\n * @param props - The `RichDescriptionProps` for this component\n */\nexport default function RichDescription({ description, registry, uiSchema = {} }) {\n const { globalUiOptions } = registry;\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n if (uiOptions.enableMarkdownInDescription && typeof description === 'string') {\n return (_jsx(Markdown, { options: { disableParsingRawHTML: true }, \"data-testid\": TEST_IDS.markdown, children: description }));\n }\n return description;\n}\nRichDescription.TEST_IDS = TEST_IDS;\n//# sourceMappingURL=RichDescription.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport RichDescription from \"../RichDescription.js\";\n/** The `DescriptionField` is the template to use to render the description of a field\n *\n * @param props - The `DescriptionFieldProps` for this component\n */\nexport default function DescriptionField(props) {\n const { id, description, registry, uiSchema } = props;\n if (!description) {\n return null;\n }\n return (_jsx(\"div\", { id: id, className: 'field-description', children: _jsx(RichDescription, { description: description, registry: registry, uiSchema: uiSchema }) }));\n}\n//# sourceMappingURL=DescriptionField.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { TranslatableString } from '@rjsf/utils';\n/** The `ErrorList` component is the template that renders the all the errors associated with the fields in the `Form`\n *\n * @param props - The `ErrorListProps` for this component\n */\nexport default function ErrorList({ errors, registry, }) {\n const { translateString } = registry;\n return (_jsxs(\"div\", { className: 'panel panel-danger errors', children: [_jsx(\"div\", { className: 'panel-heading', children: _jsx(\"h3\", { className: 'panel-title', children: translateString(TranslatableString.ErrorsLabel) }) }), _jsx(\"ul\", { className: 'list-group', children: errors.map((error, i) => (_jsx(\"li\", { className: 'list-group-item text-danger', children: error.stack }, i))) })] }));\n}\n//# sourceMappingURL=ErrorList.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/**\n * The `FallbackFieldTemplate` is used to render a field when no field matches. The field renders a type selector and\n * the schema field for the form data.\n */\nexport default function FallbackFieldTemplate(props) {\n const { schema, registry, typeSelector, schemaField } = props;\n // By default, use the MultiSchemaFieldTemplate, which handles the same basic requirements.\n const MultiSchemaFieldTemplate = getTemplate('MultiSchemaFieldTemplate', registry);\n return (_jsx(MultiSchemaFieldTemplate, { selector: typeSelector, optionSchemaField: schemaField, schema: schema, registry: registry }));\n}\n//# sourceMappingURL=FallbackFieldTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { errorId } from '@rjsf/utils';\n/** The `FieldErrorTemplate` component renders the errors local to the particular field\n *\n * @param props - The `FieldErrorProps` for the errors being rendered\n */\nexport default function FieldErrorTemplate(props) {\n const { errors = [], fieldPathId } = props;\n if (errors.length === 0) {\n return null;\n }\n const id = errorId(fieldPathId);\n return (_jsx(\"div\", { children: _jsx(\"ul\", { id: id, className: 'error-detail bs-callout bs-callout-info', children: errors\n .filter((elem) => !!elem)\n .map((error, index) => (_jsx(\"li\", { className: 'text-danger', children: error }, index))) }) }));\n}\n//# sourceMappingURL=FieldErrorTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTestIds, getUiOptions } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\nconst TEST_IDS = getTestIds();\n/** Renders the given `description` in the props as\n *\n * @param props - The `RichHelpProps` for this component\n */\nexport default function RichHelp({ help, registry, uiSchema = {}, }) {\n const { globalUiOptions } = registry;\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n if (uiOptions.enableMarkdownInHelp && typeof help === 'string') {\n return (_jsx(Markdown, { options: { disableParsingRawHTML: true }, \"data-testid\": TEST_IDS.markdown, children: help }));\n }\n return help;\n}\nRichHelp.TEST_IDS = TEST_IDS;\n//# sourceMappingURL=RichHelp.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { helpId } from '@rjsf/utils';\nimport RichHelp from \"../RichHelp.js\";\n/** The `FieldHelpTemplate` component renders any help desired for a field\n *\n * @param props - The `FieldHelpProps` to be rendered\n */\nexport default function FieldHelpTemplate(props) {\n const { fieldPathId, help, uiSchema, registry } = props;\n if (!help) {\n return null;\n }\n return (_jsx(\"div\", { id: helpId(fieldPathId), className: 'help-block', children: _jsx(RichHelp, { help: help, registry: registry, uiSchema: uiSchema }) }));\n}\n//# sourceMappingURL=FieldHelpTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst REQUIRED_FIELD_SYMBOL = '*';\n/** Renders a label for a field\n *\n * @param props - The `LabelProps` for this component\n */\nexport default function Label(props) {\n const { label, required, id } = props;\n if (!label) {\n return null;\n }\n return (_jsxs(\"label\", { className: 'control-label', htmlFor: id, children: [label, required && _jsx(\"span\", { className: 'required', children: REQUIRED_FIELD_SYMBOL })] }));\n}\n//# sourceMappingURL=Label.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTemplate, getUiOptions } from '@rjsf/utils';\nimport Label from \"./Label.js\";\n/** The `FieldTemplate` component is the template used by `SchemaField` to render any field. It renders the field\n * content, (label, description, children, errors and help) inside of a `WrapIfAdditional` component.\n *\n * @param props - The `FieldTemplateProps` for this component\n */\nexport default function FieldTemplate(props) {\n const { id, label, children, errors, help, description, hidden, required, displayLabel, registry, uiSchema } = props;\n const uiOptions = getUiOptions(uiSchema);\n const WrapIfAdditionalTemplate = getTemplate('WrapIfAdditionalTemplate', registry, uiOptions);\n if (hidden) {\n return _jsx(\"div\", { className: 'hidden', children: children });\n }\n const isCheckbox = uiOptions.widget === 'checkbox';\n return (_jsxs(WrapIfAdditionalTemplate, { ...props, children: [displayLabel && !isCheckbox && _jsx(Label, { label: label, required: required, id: id }), displayLabel && description ? description : null, children, errors, help] }));\n}\n//# sourceMappingURL=FieldTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/** Renders a `GridTemplate` for bootstrap 3, which is expecting the column information coming in via the `className`\n * prop. Also spreads all the other props provided by the user directly on the div.\n *\n * @param props - The GridTemplateProps, including the expected className for the bootstrap 3 grid behavior\n */\nexport default function GridTemplate(props) {\n const { children, column, className, ...rest } = props;\n return (_jsx(\"div\", { className: className, ...rest, children: children }));\n}\n//# sourceMappingURL=GridTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** The `MultiSchemaFieldTemplate` component renders the layout for the MultiSchemaField, which supports choosing\n * a schema from a list of schemas defined using `anyOf` or `oneOf`.\n *\n * @param props - The `MultiSchemaFieldTemplate` to be rendered\n */\nexport default function MultiSchemaFieldTemplate(props) {\n const { selector, optionSchemaField } = props;\n return (_jsxs(\"div\", { className: 'panel panel-default panel-body', children: [_jsx(\"div\", { className: 'form-group', children: selector }), optionSchemaField] }));\n}\n//# sourceMappingURL=MultiSchemaFieldTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { canExpand, descriptionId, getTemplate, getUiOptions, titleId, buttonId } from '@rjsf/utils';\n/** The `ObjectFieldTemplate` is the template to use to render all the inner properties of an object along with the\n * title and description if available. If the object is expandable, then an `AddButton` is also rendered after all\n * the properties.\n *\n * @param props - The `ObjectFieldTemplateProps` for this component\n */\nexport default function ObjectFieldTemplate(props) {\n const { className, description, disabled, formData, fieldPathId, onAddProperty, optionalDataControl, properties, readonly, registry, required, schema, title, uiSchema, } = props;\n const options = getUiOptions(uiSchema);\n const TitleFieldTemplate = getTemplate('TitleFieldTemplate', registry, options);\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, options);\n // For \"pure union\" schemas (oneOf/anyOf without properties), skip rendering the empty fieldset wrapper.\n // The AnyOfField/OneOfField will handle rendering the union selector and selected variant's content directly.\n const isPureUnionSchema = (schema.oneOf || schema.anyOf) && !schema.properties && properties.length === 0;\n if (isPureUnionSchema) {\n return null;\n }\n const showOptionalDataControlInTitle = !readonly && !disabled;\n // Button templates are not overridden in the uiSchema\n const { ButtonTemplates: { AddButton }, } = registry.templates;\n return (_jsxs(\"fieldset\", { className: className, id: fieldPathId.$id, children: [title && (_jsx(TitleFieldTemplate, { id: titleId(fieldPathId), title: title, required: required, schema: schema, uiSchema: uiSchema, registry: registry, optionalDataControl: showOptionalDataControlInTitle ? optionalDataControl : undefined })), description && (_jsx(DescriptionFieldTemplate, { id: descriptionId(fieldPathId), description: description, schema: schema, uiSchema: uiSchema, registry: registry })), !showOptionalDataControlInTitle ? optionalDataControl : undefined, properties.map((prop) => prop.content), canExpand(schema, uiSchema, formData) && (_jsx(AddButton, { id: buttonId(fieldPathId, 'add'), className: 'rjsf-object-property-expand', onClick: onAddProperty, disabled: disabled || readonly, uiSchema: uiSchema, registry: registry }))] }));\n}\n//# sourceMappingURL=ObjectFieldTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport IconButton from \"./ButtonTemplates/IconButton.js\";\n/** The OptionalDataControlsTemplate renders one of three different states. If\n * there is an `onAddClick()` function, it renders the \"Add\" button. If there is\n * an `onRemoveClick()` function, it renders the \"Remove\" button. Otherwise it\n * renders the \"No data found\" section. All of them use the `label` as either\n * the `title` of buttons or simply outputting it.\n *\n * @param props - The `OptionalDataControlsTemplateProps` for the template\n */\nexport default function OptionalDataControlsTemplate(props) {\n const { id, registry, label, onAddClick, onRemoveClick } = props;\n if (onAddClick) {\n return (_jsx(IconButton, { id: id, registry: registry, icon: 'plus', className: 'rjsf-add-optional-data btn-sm', onClick: onAddClick, title: label }));\n }\n if (onRemoveClick) {\n return (_jsx(IconButton, { id: id, registry: registry, icon: 'remove', className: 'rjsf-remove-optional-data btn-sm', onClick: onRemoveClick, title: label }));\n }\n return _jsx(\"em\", { id: id, children: label });\n}\n//# sourceMappingURL=OptionalDataControlsTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst REQUIRED_FIELD_SYMBOL = '*';\n/** The `TitleField` is the template to use to render the title of a field\n *\n * @param props - The `TitleFieldProps` for this component\n */\nexport default function TitleField(props) {\n const { id, title, required, optionalDataControl } = props;\n return (_jsxs(\"legend\", { id: id, children: [title, required && _jsx(\"span\", { className: 'required', children: REQUIRED_FIELD_SYMBOL }), optionalDataControl && (_jsx(\"span\", { className: 'pull-right', style: { marginBottom: '2px' }, children: optionalDataControl }))] }));\n}\n//# sourceMappingURL=TitleField.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { TranslatableString } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\n/** The `UnsupportedField` component is used to render a field in the schema is one that is not supported by\n * react-jsonschema-form.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction UnsupportedField(props) {\n const { schema, fieldPathId, reason, registry } = props;\n const { translateString } = registry;\n let translateEnum = TranslatableString.UnsupportedField;\n const translateParams = [];\n if (fieldPathId?.$id) {\n translateEnum = TranslatableString.UnsupportedFieldWithId;\n translateParams.push(fieldPathId.$id);\n }\n if (reason) {\n translateEnum =\n translateEnum === TranslatableString.UnsupportedField\n ? TranslatableString.UnsupportedFieldWithReason\n : TranslatableString.UnsupportedFieldWithIdAndReason;\n translateParams.push(reason);\n }\n return (_jsxs(\"div\", { className: 'unsupported-field', children: [_jsx(\"p\", { children: _jsx(Markdown, { options: { disableParsingRawHTML: true }, children: translateString(translateEnum, translateParams) }) }), schema && _jsx(\"pre\", { children: JSON.stringify(schema, null, 2) })] }));\n}\nexport default UnsupportedField;\n//# sourceMappingURL=UnsupportedField.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ADDITIONAL_PROPERTY_FLAG, buttonId, TranslatableString } from '@rjsf/utils';\nimport Label from \"./FieldTemplate/Label.js\";\n/** The `WrapIfAdditional` component is used by the `FieldTemplate` to rename, or remove properties that are\n * part of an `additionalProperties` part of a schema.\n *\n * @param props - The `WrapIfAdditionalProps` for this component\n */\nexport default function WrapIfAdditionalTemplate(props) {\n const { id, classNames, style, disabled, displayLabel, label, onKeyRenameBlur, onRemoveProperty, rawDescription, readonly, required, schema, hideError, rawErrors, children, uiSchema, registry, } = props;\n const { templates, translateString } = registry;\n // Button templates are not overridden in the uiSchema\n const { RemoveButton } = templates.ButtonTemplates;\n const keyLabel = translateString(TranslatableString.KeyLabel, [label]);\n const additional = ADDITIONAL_PROPERTY_FLAG in schema;\n const hasDescription = !!rawDescription;\n const classNamesList = ['form-group', classNames];\n if (!hideError && rawErrors && rawErrors.length > 0) {\n classNamesList.push('has-error has-danger');\n }\n const uiClassNames = classNamesList.join(' ').trim();\n if (!additional) {\n return (_jsx(\"div\", { className: uiClassNames, style: style, children: children }));\n }\n const margin = hasDescription ? 46 : 26;\n return (_jsx(\"div\", { className: uiClassNames, style: style, children: _jsxs(\"div\", { className: 'row', children: [_jsx(\"div\", { className: 'col-xs-5 form-additional', children: _jsxs(\"div\", { className: 'form-group', children: [displayLabel && _jsx(Label, { label: keyLabel, required: required, id: `${id}-key` }), displayLabel && rawDescription && _jsx(\"div\", { children: \"\\u00A0\" }), _jsx(\"input\", { className: 'form-control', type: 'text', id: `${id}-key`, onBlur: onKeyRenameBlur, defaultValue: label }, label)] }) }), _jsx(\"div\", { className: 'form-additional form-group col-xs-5', children: children }), _jsx(\"div\", { className: 'col-xs-2', style: { marginTop: displayLabel ? `${margin}px` : undefined }, children: _jsx(RemoveButton, { id: buttonId(id, 'remove'), className: 'rjsf-object-property-remove btn-block', style: { border: '0' }, disabled: disabled || readonly, onClick: onRemoveProperty, uiSchema: uiSchema, registry: registry }) })] }) }));\n}\n//# sourceMappingURL=WrapIfAdditionalTemplate.js.map","import ArrayFieldDescriptionTemplate from \"./ArrayFieldDescriptionTemplate.js\";\nimport ArrayFieldItemButtonsTemplate from \"./ArrayFieldItemButtonsTemplate.js\";\nimport ArrayFieldItemTemplate from \"./ArrayFieldItemTemplate.js\";\nimport ArrayFieldTemplate from \"./ArrayFieldTemplate.js\";\nimport ArrayFieldTitleTemplate from \"./ArrayFieldTitleTemplate.js\";\nimport BaseInputTemplate from \"./BaseInputTemplate.js\";\nimport ButtonTemplates from \"./ButtonTemplates/index.js\";\nimport CyclicSchemaExpandTemplate from \"./CyclicSchemaExpandTemplate.js\";\nimport DescriptionField from \"./DescriptionField.js\";\nimport ErrorList from \"./ErrorList.js\";\nimport FallbackFieldTemplate from \"./FallbackFieldTemplate.js\";\nimport FieldErrorTemplate from \"./FieldErrorTemplate.js\";\nimport FieldHelpTemplate from \"./FieldHelpTemplate.js\";\nimport FieldTemplate from \"./FieldTemplate/index.js\";\nimport GridTemplate from \"./GridTemplate.js\";\nimport MultiSchemaFieldTemplate from \"./MultiSchemaFieldTemplate.js\";\nimport ObjectFieldTemplate from \"./ObjectFieldTemplate.js\";\nimport OptionalDataControlsTemplate from \"./OptionalDataControlsTemplate.js\";\nimport TitleField from \"./TitleField.js\";\nimport UnsupportedField from \"./UnsupportedField.js\";\nimport WrapIfAdditionalTemplate from \"./WrapIfAdditionalTemplate.js\";\nfunction templates() {\n return {\n ArrayFieldDescriptionTemplate,\n ArrayFieldItemTemplate,\n ArrayFieldItemButtonsTemplate,\n ArrayFieldTemplate,\n ArrayFieldTitleTemplate,\n ButtonTemplates: ButtonTemplates(),\n BaseInputTemplate,\n CyclicSchemaExpandTemplate,\n DescriptionFieldTemplate: DescriptionField,\n ErrorListTemplate: ErrorList,\n FallbackFieldTemplate,\n FieldTemplate,\n FieldErrorTemplate,\n FieldHelpTemplate,\n GridTemplate,\n MultiSchemaFieldTemplate,\n ObjectFieldTemplate,\n OptionalDataControlsTemplate,\n TitleFieldTemplate: TitleField,\n UnsupportedFieldTemplate: UnsupportedField,\n WrapIfAdditionalTemplate,\n };\n}\nexport default templates;\n//# sourceMappingURL=index.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/** The `AltDateTimeWidget` is an alternative widget for rendering datetime properties.\n * It uses the AltDateWidget for rendering, with the `time` prop set to true by default.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction AltDateTimeWidget({ time = true, ...props }) {\n const { AltDateWidget } = props.registry.widgets;\n return _jsx(AltDateWidget, { time: time, ...props });\n}\nexport default AltDateTimeWidget;\n//# sourceMappingURL=AltDateTimeWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { DateElement, TranslatableString, useAltDateWidgetProps } from '@rjsf/utils';\n/** The `AltDateWidget` is an alternative widget for rendering date properties.\n * @param props - The `WidgetProps` for this component\n */\nfunction AltDateWidget(props) {\n const { disabled = false, readonly = false, autofocus = false, options, id, name, registry, onBlur, onFocus } = props;\n const { translateString } = registry;\n const { elements, handleChange, handleClear, handleSetNow } = useAltDateWidgetProps(props);\n return (_jsxs(\"ul\", { className: 'list-inline', children: [elements.map((elemProps, i) => (_jsx(\"li\", { className: 'list-inline-item', children: _jsx(DateElement, { rootId: id, name: name, select: handleChange, ...elemProps, disabled: disabled, readonly: readonly, registry: registry, onBlur: onBlur, onFocus: onFocus, autofocus: autofocus && i === 0 }) }, i))), (options.hideNowButton !== 'undefined' ? !options.hideNowButton : true) && (_jsx(\"li\", { className: 'list-inline-item', children: _jsx(\"button\", { type: 'button', className: 'btn btn-info btn-now', onClick: handleSetNow, children: translateString(TranslatableString.NowLabel) }) })), (options.hideClearButton !== 'undefined' ? !options.hideClearButton : true) && (_jsx(\"li\", { className: 'list-inline-item', children: _jsx(\"button\", { type: 'button', className: 'btn btn-warning btn-clear', onClick: handleClear, children: translateString(TranslatableString.ClearLabel) }) }))] }));\n}\nexport default AltDateWidget;\n//# sourceMappingURL=AltDateWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, enumOptionValueDecoder, enumOptionValueEncoder, enumOptionsDeselectValue, enumOptionsIsSelected, enumOptionsSelectValue, getOptionValueFormat, optionId, } from '@rjsf/utils';\n/** The `CheckboxesWidget` is a widget for rendering checkbox groups.\n * It is typically used to represent an array of enums.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction CheckboxesWidget({ id, disabled, options, value, autofocus = false, readonly, onChange, onBlur, onFocus, htmlName, }) {\n const { inline = false, enumOptions, enumDisabled, emptyValue } = options;\n const optionValueFormat = getOptionValueFormat(options);\n const checkboxesValues = Array.isArray(value) ? value : [value];\n const handleBlur = useCallback(({ target }) => onBlur(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onBlur, id, enumOptions, emptyValue, optionValueFormat]);\n const handleFocus = useCallback(({ target }) => onFocus(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onFocus, id, enumOptions, emptyValue, optionValueFormat]);\n return (_jsx(\"div\", { className: 'checkboxes', id: id, children: Array.isArray(enumOptions) &&\n enumOptions.map((option, index) => {\n const checked = enumOptionsIsSelected(option.value, checkboxesValues);\n const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.includes(option.value);\n const disabledCls = disabled || itemDisabled || readonly ? 'disabled' : '';\n const handleChange = (event) => {\n if (event.target.checked) {\n onChange(enumOptionsSelectValue(index, checkboxesValues, enumOptions));\n }\n else {\n onChange(enumOptionsDeselectValue(index, checkboxesValues, enumOptions));\n }\n };\n const checkbox = (_jsxs(\"span\", { children: [_jsx(\"input\", { type: 'checkbox', id: optionId(id, index), name: htmlName || id, checked: checked, value: enumOptionValueEncoder(option.value, index, optionValueFormat), disabled: disabled || itemDisabled || readonly, autoFocus: autofocus && index === 0, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id) }), _jsx(\"span\", { children: option.label })] }));\n return inline ? (_jsx(\"label\", { className: `checkbox-inline ${disabledCls}`, children: checkbox }, String(option.value))) : (_jsx(\"div\", { className: `checkbox ${disabledCls}`, children: _jsx(\"label\", { children: checkbox }) }, String(option.value)));\n }) }));\n}\nexport default CheckboxesWidget;\n//# sourceMappingURL=CheckboxesWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, descriptionId, getTemplate, labelValue, schemaRequiresTrueValue, getUiOptions, } from '@rjsf/utils';\n/** The `CheckBoxWidget` is a widget for rendering boolean properties.\n * It is typically used to represent a boolean.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction CheckboxWidget({ schema, uiSchema, options, id, value, disabled, readonly, label, hideLabel, autofocus = false, onBlur, onFocus, onChange, registry, htmlName, required, }) {\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, options);\n // Because an unchecked checkbox will cause html5 validation to fail, only add\n // the \"required\" attribute if the field value must be \"true\", due to the\n // \"const\" or \"enum\" keywords\n const trueValueRequired = schemaRequiresTrueValue(schema) && required;\n const handleChange = useCallback((event) => onChange(event.target.checked), [onChange]);\n const handleBlur = useCallback((event) => onBlur(id, event.target.checked), [onBlur, id]);\n const handleFocus = useCallback((event) => onFocus(id, event.target.checked), [onFocus, id]);\n const uiOptions = getUiOptions(uiSchema);\n const isCheckboxWidget = uiOptions.widget === 'checkbox';\n const description = isCheckboxWidget ? undefined : (options.description ?? schema.description);\n return (_jsxs(\"div\", { className: `checkbox ${disabled || readonly ? 'disabled' : ''}`, children: [!hideLabel && description && (_jsx(DescriptionFieldTemplate, { id: descriptionId(id), description: description, schema: schema, uiSchema: uiSchema, registry: registry })), _jsxs(\"label\", { children: [_jsx(\"input\", { type: 'checkbox', id: id, name: htmlName || id, checked: typeof value === 'undefined' ? false : value, required: required, disabled: disabled || readonly, autoFocus: autofocus, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id) }), labelValue(_jsxs(\"span\", { children: [label, trueValueRequired && _jsx(\"span\", { className: 'required', children: \"*\" })] }), hideLabel)] })] }));\n}\nexport default CheckboxWidget;\n//# sourceMappingURL=CheckboxWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `ColorWidget` component uses the `BaseInputTemplate` changing the type to `color` and disables it when it is\n * either disabled or readonly.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function ColorWidget(props) {\n const { disabled, readonly, options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'color', ...props, disabled: disabled || readonly });\n}\n//# sourceMappingURL=ColorWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate, localToUTC, utcToLocal } from '@rjsf/utils';\n/** The `DateTimeWidget` component uses the `BaseInputTemplate` changing the type to `datetime-local` and transforms\n * the value to/from utc using the appropriate utility functions.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function DateTimeWidget(props) {\n const { onChange, value, options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return (_jsx(BaseInputTemplate, { type: 'datetime-local', ...props, value: utcToLocal(value), onChange: (newValue) => onChange(localToUTC(newValue)) }));\n}\n//# sourceMappingURL=DateTimeWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { getTemplate } from '@rjsf/utils';\n/** The `DateWidget` component uses the `BaseInputTemplate` changing the type to `date` and transforms\n * the value to undefined when it is falsy during the `onChange` handling.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function DateWidget(props) {\n const { onChange, options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n const handleChange = useCallback((value) => onChange(value || undefined), [onChange]);\n return _jsx(BaseInputTemplate, { type: 'date', ...props, onChange: handleChange });\n}\n//# sourceMappingURL=DateWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `EmailWidget` component uses the `BaseInputTemplate` changing the type to `email`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function EmailWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'email', ...props });\n}\n//# sourceMappingURL=EmailWidget.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTemplate, TranslatableString, useFileWidgetProps } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\nfunction FileInfoPreview({ fileInfo, registry, }) {\n const { translateString } = registry;\n const { dataURL, type, name } = fileInfo;\n if (!dataURL) {\n return null;\n }\n const previewLabel = translateString(TranslatableString.PreviewLabel);\n // If type is JPEG or PNG then show image preview.\n // Originally, any type of image was supported, but this was changed into a whitelist\n // since SVGs and animated GIFs are also images, which are generally considered a security risk.\n if (['image/jpeg', 'image/png'].includes(type)) {\n return _jsx(\"img\", { src: dataURL, alt: previewLabel, style: { maxWidth: '100%' }, className: 'file-preview' });\n }\n // otherwise, let users download file\n return (_jsxs(_Fragment, { children: [' ', _jsx(\"a\", { download: `preview-${name}`, href: dataURL, className: 'file-download', children: previewLabel })] }));\n}\nfunction FilesInfo({ filesInfo, registry, preview, onRemove, options, }) {\n if (filesInfo.length === 0) {\n return null;\n }\n const { translateString } = registry;\n const { RemoveButton } = getTemplate('ButtonTemplates', registry, options);\n return (_jsx(\"ul\", { className: 'file-info', children: filesInfo.map((fileInfo, key) => {\n const { name, size, type } = fileInfo;\n const handleRemove = () => onRemove(key);\n return (_jsxs(\"li\", { children: [_jsx(Markdown, { children: translateString(TranslatableString.FilesInfo, [name, type, String(size)]) }), preview && _jsx(FileInfoPreview, { fileInfo: fileInfo, registry: registry }), _jsx(RemoveButton, { onClick: handleRemove, registry: registry })] }, key));\n }) }));\n}\n/**\n * The `FileWidget` is a widget for rendering file upload fields.\n * It is typically used with a string property with data-url format.\n */\nfunction FileWidget(props) {\n const { disabled, readonly, required, multiple, onChange, value, options, registry } = props;\n const { filesInfo, handleChange, handleRemove } = useFileWidgetProps(value, onChange, multiple);\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n const handleOnChangeEvent = (event) => {\n if (event.target.files) {\n // handleChange is async; DOM event handlers are void-returning, so we intentionally don't await\n // oxlint-disable-next-line no-floating-promises, no-void\n void handleChange(event.target.files);\n }\n };\n return (_jsxs(\"div\", { children: [_jsx(BaseInputTemplate, { ...props, disabled: disabled || readonly, type: 'file', required: value ? false : required, onChangeOverride: handleOnChangeEvent, value: '', accept: options.accept ? String(options.accept) : undefined }), _jsx(FilesInfo, { filesInfo: filesInfo, onRemove: handleRemove, registry: registry, preview: options.filePreview, options: options })] }));\n}\nexport default FileWidget;\n//# sourceMappingURL=FileWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/** The `HiddenWidget` is a widget for rendering a hidden input field.\n * It is typically used by setting type to \"hidden\".\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction HiddenWidget({ id, value, htmlName, }) {\n return _jsx(\"input\", { type: 'hidden', id: id, name: htmlName || id, value: typeof value === 'undefined' ? '' : value });\n}\nexport default HiddenWidget;\n//# sourceMappingURL=HiddenWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `PasswordWidget` component uses the `BaseInputTemplate` changing the type to `password`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function PasswordWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'password', ...props });\n}\n//# sourceMappingURL=PasswordWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, enumOptionValueDecoder, enumOptionValueEncoder, enumOptionsIsSelected, getOptionValueFormat, optionId, } from '@rjsf/utils';\n/** The `RadioWidget` is a widget for rendering a radio group.\n * It is typically used with a string property constrained with enum options.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction RadioWidget({ options, value, required, disabled, readonly, autofocus = false, onBlur, onFocus, onChange, id, htmlName, }) {\n const { enumOptions, enumDisabled, inline, emptyValue } = options;\n const optionValueFormat = getOptionValueFormat(options);\n const handleBlur = useCallback(({ target }) => onBlur(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onBlur, enumOptions, emptyValue, id, optionValueFormat]);\n const handleFocus = useCallback(({ target }) => onFocus(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onFocus, enumOptions, emptyValue, id, optionValueFormat]);\n return (_jsx(\"div\", { className: 'field-radio-group', id: id, role: 'radiogroup', children: Array.isArray(enumOptions) &&\n enumOptions.map((option, i) => {\n const checked = enumOptionsIsSelected(option.value, value);\n const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.includes(option.value);\n const disabledCls = disabled || itemDisabled || readonly ? 'disabled' : '';\n const handleChange = () => onChange(option.value);\n const radio = (_jsxs(\"span\", { children: [_jsx(\"input\", { type: 'radio', id: optionId(id, i), checked: checked, name: htmlName || id, required: required, value: enumOptionValueEncoder(option.value, i, optionValueFormat), disabled: disabled || itemDisabled || readonly, autoFocus: autofocus && i === 0, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id) }), _jsx(\"span\", { children: option.label })] }));\n return inline ? (_jsx(\"label\", { className: `radio-inline ${disabledCls}`, children: radio }, String(option.value))) : (_jsx(\"div\", { className: `radio ${disabledCls}`, children: _jsx(\"label\", { children: radio }) }, String(option.value)));\n }) }));\n}\nexport default RadioWidget;\n//# sourceMappingURL=RadioWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** The `RangeWidget` component uses the `BaseInputTemplate` changing the type to `range` and wrapping the result\n * in a div, with the value along side it.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function RangeWidget(props) {\n const { value, registry: { templates: { BaseInputTemplate }, }, } = props;\n return (_jsxs(\"div\", { className: 'field-range-wrapper', children: [_jsx(BaseInputTemplate, { type: 'range', ...props }), _jsx(\"span\", { className: 'range-view', children: value })] }));\n}\n//# sourceMappingURL=RangeWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\n/** The `RatingWidget` component renders a star or heart rating input\n *\n * Features:\n * - Configurable number of stars/hearts (1-5) with default of 5\n * - Supports different shapes (star, heart)\n * - Supports minimum and maximum values from schema\n * - Handles required, disabled, and readonly states\n * - Provides focus and blur event handling for accessibility\n * - Uses Unicode characters for better visual representation\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function RatingWidget({ id, value, required, disabled, readonly, onChange, onFocus, onBlur, schema, options, htmlName, }) {\n const { stars = 5, shape = 'star' } = options;\n // Use schema.maximum if provided, otherwise use stars option (limited to 1-5)\n const numStars = schema.maximum ? Math.min(schema.maximum, 5) : Math.min(Math.max(stars, 1), 5);\n const min = schema.minimum || 0;\n /** Handles clicking on a star to set the rating */\n const handleStarClick = useCallback((starValue) => {\n if (!disabled && !readonly) {\n onChange(starValue);\n }\n }, [onChange, disabled, readonly]);\n /** Handles focus events for accessibility */\n const handleFocus = useCallback((event) => {\n if (onFocus) {\n // Get the star value from the data attribute\n const starValue = Number(event.target.dataset.value);\n onFocus(id, starValue);\n }\n }, [onFocus, id]);\n /** Handles blur events for accessibility */\n const handleBlur = useCallback((event) => {\n if (onBlur) {\n // Get the star value from the data attribute\n const starValue = Number(event.target.dataset.value);\n onBlur(id, starValue);\n }\n }, [onBlur, id]);\n // Get the appropriate Unicode character based on shape option\n const getSymbol = (isFilled) => {\n if (shape === 'heart') {\n return isFilled ? '♥' : '♡';\n }\n return isFilled ? '★' : '☆';\n };\n return (_jsxs(\"div\", { className: 'rating-widget', style: {\n display: 'inline-flex',\n fontSize: '1.5rem',\n cursor: disabled || readonly ? 'default' : 'pointer',\n }, children: [[...Array(numStars)].map((_, index) => {\n const starValue = min + index;\n const isFilled = starValue <= value;\n return (_jsx(\"span\", { onClick: () => handleStarClick(starValue), onKeyDown: (e) => (e.key === 'Enter' || e.key === ' ') && handleStarClick(starValue), onFocus: handleFocus, onBlur: handleBlur, \"data-value\": starValue, tabIndex: disabled || readonly ? -1 : 0, role: 'radio', \"aria-checked\": starValue === value, \"aria-label\": `${starValue} ${shape === 'heart' ? 'heart' : 'star'}${starValue === 1 ? '' : 's'}`, style: {\n color: isFilled ? '#FFD700' : '#ccc',\n padding: '0 0.2rem',\n transition: 'color 0.2s',\n userSelect: 'none',\n }, children: getSymbol(isFilled) }, index));\n }), _jsx(\"input\", { type: 'hidden', id: id, name: htmlName || id, value: value || '', required: required, disabled: disabled || readonly, \"aria-hidden\": 'true' })] }));\n}\n//# sourceMappingURL=RatingWidget.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, enumOptionSelectedValue, enumOptionValueDecoder, enumOptionValueEncoder, getOptionValueFormat, logUnsupportedDefaultForEnum, SelectedOptionDescription, } from '@rjsf/utils';\nfunction getValue(event, multiple) {\n if (multiple) {\n return Array.from(event.target.options)\n .slice()\n .filter((o) => o.selected)\n .map((o) => o.value);\n }\n return event.target.value;\n}\n/** The `SelectWidget` is a widget for rendering dropdowns.\n * It is typically used with string properties constrained with enum options.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction SelectWidget({ schema, id, options, value, required, disabled, readonly, multiple = false, autofocus = false, onChange, onBlur, onFocus, placeholder, htmlName, registry, uiSchema, }) {\n const { enumOptions, enumDisabled, emptyValue: optEmptyVal } = options;\n const emptyValue = multiple ? [] : '';\n const optionValueFormat = getOptionValueFormat(options);\n const handleFocus = useCallback((event) => {\n const newValue = getValue(event, multiple);\n return onFocus(id, enumOptionValueDecoder(newValue, enumOptions, optionValueFormat, optEmptyVal));\n }, [onFocus, id, multiple, enumOptions, optEmptyVal, optionValueFormat]);\n const handleBlur = useCallback((event) => {\n const newValue = getValue(event, multiple);\n return onBlur(id, enumOptionValueDecoder(newValue, enumOptions, optionValueFormat, optEmptyVal));\n }, [onBlur, id, multiple, enumOptions, optEmptyVal, optionValueFormat]);\n const handleChange = useCallback((event) => {\n const newValue = getValue(event, multiple);\n return onChange(enumOptionValueDecoder(newValue, enumOptions, optionValueFormat, optEmptyVal));\n }, [onChange, multiple, enumOptions, optEmptyVal, optionValueFormat]);\n const selectValue = enumOptionSelectedValue(value, enumOptions, multiple, optionValueFormat, emptyValue);\n const showPlaceholderOption = !multiple && schema.default === undefined;\n logUnsupportedDefaultForEnum(id, schema, enumOptions, multiple);\n return (_jsxs(_Fragment, { children: [_jsx(SelectedOptionDescription, { id: id, multiple: multiple, options: options, registry: registry, uiSchema: uiSchema, value: value }), _jsxs(\"select\", { id: id, name: htmlName || id, multiple: multiple, className: 'form-control', value: selectValue, required: required, disabled: disabled || readonly, autoFocus: autofocus, onBlur: handleBlur, onFocus: handleFocus, onChange: handleChange, \"aria-describedby\": ariaDescribedByIds(id), children: [showPlaceholderOption && _jsx(\"option\", { value: '', children: placeholder }), Array.isArray(enumOptions) &&\n enumOptions.map(({ value: enumValue, label: enumLabel }, i) => {\n const isDisabled = enumDisabled && enumDisabled.includes(enumValue);\n return (_jsx(\"option\", { value: enumOptionValueEncoder(enumValue, i, optionValueFormat), disabled: isDisabled, children: enumLabel }, String(enumValue)));\n })] })] }));\n}\nexport default SelectWidget;\n//# sourceMappingURL=SelectWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds } from '@rjsf/utils';\n/** The `TextareaWidget` is a widget for rendering input fields as textarea.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction TextareaWidget({ id, options, placeholder, value, required, disabled, readonly, autofocus = false, onChange, onBlur, onFocus, htmlName, }) {\n const handleChange = useCallback(({ target: { value: newValue } }) => onChange(newValue === '' ? options.emptyValue : newValue), [onChange, options.emptyValue]);\n const handleBlur = useCallback(({ target }) => onBlur(id, target?.value), [onBlur, id]);\n const handleFocus = useCallback(({ target }) => onFocus(id, target?.value), [id, onFocus]);\n return (_jsx(\"textarea\", { id: id, name: htmlName || id, className: 'form-control', value: value || '', placeholder: placeholder, required: required, disabled: disabled, readOnly: readonly, autoFocus: autofocus, rows: options.rows, onBlur: handleBlur, onFocus: handleFocus, onChange: handleChange, \"aria-describedby\": ariaDescribedByIds(id) }));\n}\nexport default TextareaWidget;\n//# sourceMappingURL=TextareaWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `TextWidget` component uses the `BaseInputTemplate`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function TextWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { ...props });\n}\n//# sourceMappingURL=TextWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { getTemplate } from '@rjsf/utils';\n/** The `TimeWidget` component uses the `BaseInputTemplate` changing the type to `time` and transforms\n * the value to undefined when it is falsy during the `onChange` handling.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function TimeWidget(props) {\n const { onChange, options, registry, schema, value } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n const hasSecondPrecision = typeof schema.multipleOf === 'number' && Number.isFinite(schema.multipleOf) && schema.multipleOf < 60;\n const handleChange = useCallback((newValue) => {\n if (!newValue) {\n onChange(undefined);\n }\n else if (hasSecondPrecision) {\n onChange(newValue);\n }\n else {\n onChange(`${newValue}:00`);\n }\n }, [hasSecondPrecision, onChange]);\n const displayValue = typeof value === 'string' && !hasSecondPrecision && /^\\d{2}:\\d{2}:00$/.test(value) ? value.slice(0, -3) : value;\n return _jsx(BaseInputTemplate, { type: 'time', ...props, value: displayValue, onChange: handleChange });\n}\n//# sourceMappingURL=TimeWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `UpDownWidget` component uses the `BaseInputTemplate` changing the type to `number`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function UpDownWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'number', ...props });\n}\n//# sourceMappingURL=UpDownWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `URLWidget` component uses the `BaseInputTemplate` changing the type to `url`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function URLWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'url', ...props });\n}\n//# sourceMappingURL=URLWidget.js.map","import AltDateTimeWidget from \"./AltDateTimeWidget.js\";\nimport AltDateWidget from \"./AltDateWidget.js\";\nimport CheckboxesWidget from \"./CheckboxesWidget.js\";\nimport CheckboxWidget from \"./CheckboxWidget.js\";\nimport ColorWidget from \"./ColorWidget.js\";\nimport DateTimeWidget from \"./DateTimeWidget.js\";\nimport DateWidget from \"./DateWidget.js\";\nimport EmailWidget from \"./EmailWidget.js\";\nimport FileWidget from \"./FileWidget.js\";\nimport HiddenWidget from \"./HiddenWidget.js\";\nimport PasswordWidget from \"./PasswordWidget.js\";\nimport RadioWidget from \"./RadioWidget.js\";\nimport RangeWidget from \"./RangeWidget.js\";\nimport RatingWidget from \"./RatingWidget.js\";\nimport SelectWidget from \"./SelectWidget.js\";\nimport TextareaWidget from \"./TextareaWidget.js\";\nimport TextWidget from \"./TextWidget.js\";\nimport TimeWidget from \"./TimeWidget.js\";\nimport UpDownWidget from \"./UpDownWidget.js\";\nimport URLWidget from \"./URLWidget.js\";\nfunction widgets() {\n return {\n AltDateWidget,\n AltDateTimeWidget,\n CheckboxWidget,\n CheckboxesWidget,\n ColorWidget,\n DateWidget,\n DateTimeWidget,\n EmailWidget,\n FileWidget,\n HiddenWidget,\n PasswordWidget,\n RadioWidget,\n RangeWidget,\n RatingWidget,\n SelectWidget,\n TextWidget,\n TextareaWidget,\n TimeWidget,\n UpDownWidget,\n URLWidget,\n };\n}\nexport default widgets;\n//# sourceMappingURL=index.js.map","import { DEFAULT_ID_PREFIX, DEFAULT_ID_SEPARATOR, englishStringTranslator } from '@rjsf/utils';\nimport fields from \"./components/fields/index.js\";\nimport templates from \"./components/templates/index.js\";\nimport widgets from \"./components/widgets/index.js\";\n/** The default registry consists of all the fields, templates and widgets provided in the core implementation,\n * plus an empty `rootSchema` and `formContext. We omit schemaUtils here because it cannot be defaulted without a\n * rootSchema and validator. It will be added into the computed registry later in the Form.\n */\nexport default function getDefaultRegistry() {\n return {\n fields: fields(),\n templates: templates(),\n widgets: widgets(),\n rootSchema: {},\n formContext: {},\n translateString: englishStringTranslator,\n globalFormOptions: {\n idPrefix: DEFAULT_ID_PREFIX,\n idSeparator: DEFAULT_ID_SEPARATOR,\n useFallbackUiForUnsupportedType: false,\n },\n };\n}\n//# sourceMappingURL=getDefaultRegistry.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Component, createRef } from 'react';\nimport { getByPath, setByPath, toPath, unsetByPath, createSchemaUtils, deepEquals, ErrorSchemaBuilder, getChangedFields, getTemplate, getUiOptions, hashObject, isObject, mergeObjects, shouldRender, SUBMIT_BTN_OPTIONS_KEY, toErrorList, toFieldPathId, UI_DEFINITIONS_KEY, UI_GLOBAL_OPTIONS_KEY, UI_OPTIONS_KEY, validationDataMerge, DEFAULT_ID_SEPARATOR, DEFAULT_ID_PREFIX, ERRORS_KEY, ID_KEY, getUsedFormData, getFieldNames, ANY_OF_KEY, ONE_OF_KEY, } from '@rjsf/utils';\nimport getDefaultRegistry from \"../getDefaultRegistry.js\";\nimport { ADDITIONAL_PROPERTY_KEY_REMOVE, IS_RESET } from \"./constants.js\";\n/** Converts the full `FormState` into the `IChangeEvent` version by picking out the public values\n *\n * @param state - The state of the form\n * @param status - The status provided by the onSubmit\n * @returns - The `IChangeEvent` for the state\n */\nfunction toIChangeEvent(state, status) {\n const { schema, uiSchema, fieldPathId, schemaUtils, formData, edit, errors, errorSchema } = state;\n return {\n schema,\n uiSchema,\n fieldPathId,\n schemaUtils,\n formData,\n edit,\n errors,\n errorSchema,\n ...(status !== undefined && { status }),\n };\n}\n/** The `Form` component renders the outer form and all the fields defined in the `schema` */\nexport default class Form extends Component {\n /** The ref used to hold the `form` element, this needs to be `any` because `tagName` or `_internalFormWrapper` can\n * provide any possible type here\n */\n formElement;\n /** The list of pending changes\n */\n pendingChanges = [];\n /** Flag to track when we're processing a user-initiated field change.\n * This prevents componentDidUpdate from reverting oneOf/anyOf option switches.\n */\n isProcessingUserChange = false;\n /** When the `extraErrors` prop changes, re-merges `schemaValidationErrors` + `extraErrors` + `customErrors` into\n * state before render, ensuring the updated errors are visible immediately in a single render cycle.\n *\n * @param props - The current props\n * @param state - The current state\n * @returns Partial state with re-merged errors if `extraErrors` changed, or `null` if no update is needed\n */\n static getDerivedStateFromProps(props, state) {\n if (props.extraErrors !== state.prevExtraErrors) {\n const baseErrors = {\n errors: state.schemaValidationErrors || [],\n errorSchema: state.schemaValidationErrorSchema || {},\n };\n let { errors, errorSchema } = baseErrors;\n if (props.extraErrors) {\n ({ errors, errorSchema } = validationDataMerge(baseErrors, props.extraErrors));\n }\n if (state.customErrors) {\n ({ errors, errorSchema } = validationDataMerge({ errors, errorSchema }, state.customErrors.ErrorSchema, true));\n }\n return { prevExtraErrors: props.extraErrors, errors, errorSchema };\n }\n return null;\n }\n /** Constructs the `Form` from the `props`. Will setup the initial state from the props. It will also call the\n * `onChange` handler if the initially provided `formData` is modified to add missing default values as part of the\n * state construction.\n *\n * @param props - The initial props for the `Form`\n */\n constructor(props) {\n super(props);\n if (!props.validator) {\n throw new Error('A validator is required for Form functionality to work');\n }\n const { formData: propsFormData, initialFormData, onChange } = props;\n const formData = propsFormData ?? initialFormData;\n this.state = {\n ...this.getStateFromProps(props, formData, undefined, undefined, undefined, true),\n prevExtraErrors: props.extraErrors,\n };\n if (onChange && !deepEquals(this.state.formData, formData)) {\n onChange(toIChangeEvent(this.state));\n }\n this.formElement = createRef();\n }\n /**\n * `getSnapshotBeforeUpdate` is a React lifecycle method that is invoked right before the most recently rendered\n * output is committed to the DOM. It enables your component to capture current values (e.g., scroll position) before\n * they are potentially changed.\n *\n * In this case, it checks if the props have changed since the last render. If they have, it computes the next state\n * of the component using `getStateFromProps` method and returns it along with a `shouldUpdate` flag set to `true` IF\n * the `nextState` and `prevState` are different, otherwise `false`. This ensures that we have the most up-to-date\n * state ready to be applied in `componentDidUpdate`.\n *\n * If `formData` hasn't changed, it simply returns an object with `shouldUpdate` set to `false`, indicating that a\n * state update is not necessary.\n *\n * @param prevProps - The previous set of props before the update.\n * @param prevState - The previous state before the update.\n * @returns Either an object containing the next state and a flag indicating that an update should occur, or an object\n * with a flag indicating that an update is not necessary.\n */\n getSnapshotBeforeUpdate(prevProps, prevState) {\n if (!deepEquals(this.props, prevProps)) {\n // Compare the previous props formData against the current props formData\n const formDataChangedFields = getChangedFields(this.props.formData, prevProps.formData);\n // Compare the current props formData against the current state's formData to determine if the new props were the\n // result of the onChange from the existing state formData\n const stateDataChangedFields = getChangedFields(this.props.formData, this.state.formData);\n const isSchemaChanged = !deepEquals(prevProps.schema, this.props.schema);\n // When formData is not an object, getChangedFields returns an empty array.\n // In this case, deepEquals is most needed to check again.\n const isFormDataChanged = formDataChangedFields.length > 0 || !deepEquals(prevProps.formData, this.props.formData);\n const isStateDataChanged = stateDataChangedFields.length > 0 || !deepEquals(this.state.formData, this.props.formData);\n const nextState = this.getStateFromProps(this.props, this.props.formData, \n // If the `schema` has changed, we need to update the retrieved schema.\n // Or if the `formData` changes, for example in the case of a schema with dependencies that need to\n // match one of the subSchemas, the retrieved schema must be updated.\n isSchemaChanged || isFormDataChanged ? undefined : this.state.retrievedSchema, isSchemaChanged, \n // Only the error clearing needs the path of each changed field, and it runs only when live validation does\n // not, so the walk that produces them is left for `getStateFromProps` to ask for\n () => getChangedFields(this.props.formData, prevProps.formData, true), \n // Skip live validation for this request if no form data has changed from the last state\n !isStateDataChanged);\n const shouldUpdate = !deepEquals(nextState, prevState);\n return { nextState, shouldUpdate };\n }\n return { shouldUpdate: false };\n }\n /**\n * `componentDidUpdate` is a React lifecycle method that is invoked immediately after updating occurs. This method is\n * not called for the initial render.\n *\n * Here, it checks if an update is necessary based on the `shouldUpdate` flag received from `getSnapshotBeforeUpdate`.\n * If an update is required, it applies the next state and, if needed, triggers the `onChange` handler to inform about\n * changes.\n *\n * @param _ - The previous set of props.\n * @param prevState - The previous state of the component before the update.\n * @param snapshot - The value returned from `getSnapshotBeforeUpdate`.\n */\n componentDidUpdate(_, prevState, snapshot) {\n if (snapshot.shouldUpdate) {\n const { nextState } = snapshot;\n // Prevent oneOf/anyOf option switches from reverting when getStateFromProps\n // re-evaluates and produces stale formData.\n const nextStateDiffersFromProps = !deepEquals(nextState.formData, this.props.formData);\n const wasProcessingUserChange = this.isProcessingUserChange;\n this.isProcessingUserChange = false;\n if (wasProcessingUserChange && nextStateDiffersFromProps) {\n // Skip - the user's option switch is already applied via processPendingChange\n return;\n }\n if (nextStateDiffersFromProps && !deepEquals(nextState.formData, prevState.formData) && this.props.onChange) {\n this.props.onChange(toIChangeEvent(nextState));\n }\n // oxlint-disable-next-line react/no-did-update-set-state -- guarded to prevent infinite loop\n this.setState(nextState);\n }\n }\n /** Extracts the updated state from the given `props` and `inputFormData`. As part of this process, the\n * `inputFormData` is first processed to add any missing required defaults. After that, the data is run through the\n * validation process IF required by the `props`.\n *\n * @param props - The props passed to the `Form`\n * @param inputFormData - The new or current data for the `Form`\n * @param retrievedSchema - An expanded schema, if not provided, it will be retrieved from the `schema` and `formData`.\n * @param [isSchemaChanged=false] - A flag indicating whether the schema has changed.\n * @param [getFormDataChangedFields=() => []] - Optional function returning the path of each `formData` field that\n * changed, only called when those paths are needed, which is when live validation is not going to run\n * @param [skipLiveValidate=false] - Optional flag, if true, means that we are not running live validation\n * @param [shouldSanitize=false] - Optional flag, if true, means that we should attempt to sanitize formData\n * @returns - The new state for the `Form`\n */\n getStateFromProps(props, inputFormData, retrievedSchema, isSchemaChanged = false, getFormDataChangedFields = () => [], skipLiveValidate = false, shouldSanitize = false) {\n const state = this.state || {};\n const schema = 'schema' in props ? props.schema : this.props.schema;\n const validator = 'validator' in props ? props.validator : this.props.validator;\n const uiSchema = ('uiSchema' in props ? props.uiSchema : this.props.uiSchema) || {};\n const isUncontrolled = props.formData === undefined && this.props.formData === undefined;\n const edit = typeof inputFormData !== 'undefined';\n const liveValidate = 'liveValidate' in props ? props.liveValidate : this.props.liveValidate;\n // oxlint-disable-next-line typescript/no-deprecated\n const mustValidate = edit && !props.noValidate && liveValidate;\n const experimental_defaultFormStateBehavior = 'experimental_defaultFormStateBehavior' in props\n ? props.experimental_defaultFormStateBehavior\n : this.props.experimental_defaultFormStateBehavior;\n const experimental_customMergeAllOf = 'experimental_customMergeAllOf' in props\n ? props.experimental_customMergeAllOf\n : this.props.experimental_customMergeAllOf;\n let { schemaUtils } = state;\n if (!schemaUtils ||\n schemaUtils.doesSchemaUtilsDiffer(validator, schema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf)) {\n schemaUtils = createSchemaUtils(validator, schema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n }\n const rootSchema = schemaUtils.getRootSchema();\n // Compute the formData for getDefaultFormState() function based on the inputFormData, isUncontrolled and state\n let defaultsFormData = inputFormData;\n if (inputFormData === IS_RESET) {\n defaultsFormData = undefined;\n }\n else if (inputFormData === undefined && isUncontrolled) {\n defaultsFormData = state.formData;\n }\n let formData;\n let computedRetrievedSchema;\n let wasSanitized = false;\n const preventInfiniteSanitize = [];\n do {\n formData = schemaUtils.getDefaultFormState(rootSchema, defaultsFormData, false, state.initialDefaultsGenerated);\n // Only hash when sanitizing, wrapping `formData` in an object to deal with a scalar/undefined value\n const formHash = shouldSanitize ? hashObject({ formData }) : '';\n computedRetrievedSchema = this.updateRetrievedSchema(retrievedSchema ?? schemaUtils.retrieveSchema(rootSchema, formData));\n if (shouldSanitize &&\n !preventInfiniteSanitize.includes(formHash) &&\n !deepEquals(computedRetrievedSchema, state.retrievedSchema)) {\n // Sanitize the form data if shouldSanitize is true, we haven't already processed this same formData AND\n // we have a different retrieved schema from when we last ran the state\n const sanitizedFormData = schemaUtils.sanitizeDataForNewSchema(computedRetrievedSchema, state.retrievedSchema, formData);\n wasSanitized = !deepEquals(sanitizedFormData, formData);\n if (wasSanitized) {\n // Update both the formData AND defaultsFormData due to the sanitize so the loop works with the new data\n formData = sanitizedFormData;\n defaultsFormData = sanitizedFormData;\n const sanitizedFormHash = hashObject({ formData: sanitizedFormData });\n // If we've seen the sanitized data before, we are done\n wasSanitized = !preventInfiniteSanitize.includes(sanitizedFormHash);\n preventInfiniteSanitize.push(sanitizedFormHash);\n }\n preventInfiniteSanitize.push(formHash);\n }\n else {\n wasSanitized = false;\n }\n } while (wasSanitized);\n const getCurrentErrors = () => {\n // If the `props.noValidate` option is set or the schema has changed, we reset the error state.\n // oxlint-disable-next-line typescript/no-deprecated\n if (props.noValidate || isSchemaChanged) {\n return { errors: [], errorSchema: {} };\n }\n if (!props.liveValidate) {\n return {\n errors: state.schemaValidationErrors || [],\n errorSchema: state.schemaValidationErrorSchema || {},\n };\n }\n return {\n errors: state.errors || [],\n errorSchema: state.errorSchema || {},\n };\n };\n let errors;\n let errorSchema;\n let { schemaValidationErrors, schemaValidationErrorSchema } = state;\n // If we are skipping live validate, it means that the state has already been updated with live validation errors\n if (mustValidate && !skipLiveValidate) {\n const liveValidation = this.liveValidate(rootSchema, schemaUtils, state.errorSchema, formData, undefined, state.customErrors, retrievedSchema, \n // If retrievedSchema is undefined which means the schema or formData has changed, we do not merge state.\n // Else in the case where it hasn't changed,\n retrievedSchema !== undefined);\n errors = liveValidation.errors;\n errorSchema = liveValidation.errorSchema;\n schemaValidationErrors = liveValidation.schemaValidationErrors;\n schemaValidationErrorSchema = liveValidation.schemaValidationErrorSchema;\n }\n else {\n const currentErrors = getCurrentErrors();\n errors = currentErrors.errors;\n errorSchema = currentErrors.errorSchema;\n // We only update the error schema for changed fields if mustValidate is false\n if (!mustValidate) {\n const formDataChangedFields = getFormDataChangedFields();\n if (formDataChangedFields.length > 0) {\n // `formDataChangedFields` carries the path of each field that changed, so clearing has to follow that path\n // instead of dropping the whole branch it starts in. The path is split with `toPath()`, the same way\n // `toErrorSchema()` splits a validation error property, so the two address the same entry. Intermediate\n // objects are forced so the numeric segment of an array item stays an object key, which is how an\n // `ErrorSchema` addresses array items.\n const newErrorSchema = formDataChangedFields.reduce((acc, path) => {\n const pathOfField = toPath(path);\n // Every container holding the field changed along with it, so an error of their own, such as the\n // `uniqueItems` of the array the field sits in, is cleared too. Only their own errors go: the other\n // fields they hold did not change and keep theirs.\n for (let i = 1; i < pathOfField.length; i++) {\n setByPath(acc, [...pathOfField.slice(0, i), ERRORS_KEY], undefined, true);\n }\n return setByPath(acc, pathOfField, undefined, true);\n }, {});\n schemaValidationErrorSchema = mergeObjects(currentErrors.errorSchema, newErrorSchema, 'preventDuplicates');\n errorSchema = schemaValidationErrorSchema;\n }\n }\n const mergedErrors = Form.mergeErrors({ errorSchema, errors }, props.extraErrors, state.customErrors);\n errors = mergedErrors.errors;\n errorSchema = mergedErrors.errorSchema;\n }\n // Only store a new registry when the props cause a different one to be created\n const newRegistry = Form.getRegistry(props, rootSchema, schemaUtils);\n const registry = deepEquals(state.registry, newRegistry) ? state.registry : newRegistry;\n // Only compute a new `fieldPathId` when the `idPrefix` is different than the existing fieldPathId's ID_KEY\n const fieldPathId = state.fieldPathId && state.fieldPathId?.[ID_KEY] === registry.globalFormOptions.idPrefix\n ? state.fieldPathId\n : toFieldPathId('', registry.globalFormOptions);\n const nextState = {\n schemaUtils,\n schema: rootSchema,\n uiSchema,\n fieldPathId,\n formData,\n edit,\n errors,\n errorSchema,\n schemaValidationErrors,\n schemaValidationErrorSchema,\n retrievedSchema: computedRetrievedSchema,\n initialDefaultsGenerated: true,\n registry,\n };\n return nextState;\n }\n /** React lifecycle method that is used to determine whether component should be updated.\n *\n * @param nextProps - The next version of the props\n * @param nextState - The next version of the state\n * @returns - True if the component should be updated, false otherwise\n */\n shouldComponentUpdate(nextProps, nextState) {\n const { experimental_componentUpdateStrategy = 'customDeep' } = this.props;\n return shouldRender(this, nextProps, nextState, experimental_componentUpdateStrategy);\n }\n /** Validates the `formData` against the `schema` using the `altSchemaUtils` (if provided otherwise it uses the\n * `schemaUtils` in the state), returning the results.\n *\n * @param formData - The new form data to validate\n * @param schema - The schema used to validate against\n * @param [altSchemaUtils] - The alternate schemaUtils to use for validation\n * @param [retrievedSchema] - An optionally retrieved schema for per\n */\n validate(formData, schema = this.state.schema, altSchemaUtils, retrievedSchema) {\n const schemaUtils = altSchemaUtils || this.state.schemaUtils;\n const { customValidate, transformErrors, uiSchema } = this.props;\n // When a pre-resolved schema is provided (e.g., from live validation), use it directly.\n // Otherwise validate against the original schema so AJV sees the full constraint set.\n const validationSchema = retrievedSchema ?? schema;\n // JSON.stringify drops keys with `undefined` values; JSON.parse on the result gives AJV a clean\n // object that avoids spurious type errors for `type: \"string\"` fields that were cleared (#4518).\n const validationFormData = formData ? JSON.parse(JSON.stringify(formData)) : undefined;\n return schemaUtils\n .getValidator()\n .validateFormData(validationFormData, validationSchema, customValidate, transformErrors, uiSchema);\n }\n /** Renders any errors contained in the `state` in using the `ErrorList`, if not disabled by `showErrorList`. */\n renderErrors(registry) {\n const { errors, errorSchema, schema, uiSchema } = this.state;\n const options = getUiOptions(uiSchema);\n const ErrorListTemplate = getTemplate('ErrorListTemplate', registry, options);\n if (errors?.length) {\n return (_jsx(ErrorListTemplate, { errors: errors, errorSchema: errorSchema || {}, schema: schema, uiSchema: uiSchema, registry: registry }));\n }\n return null;\n }\n /** Merges any `extraErrors` or `customErrors` into the given `schemaValidation` object, returning the result\n *\n * @param schemaValidation - The `ValidationData` object into which additional errors are merged\n * @param [extraErrors] - The extra errors from the props\n * @param [customErrors] - The customErrors from custom components\n * @return - The `extraErrors` and `customErrors` merged into the `schemaValidation`\n * @private\n */\n static mergeErrors(schemaValidation, extraErrors, customErrors) {\n let { errorSchema, errors } = schemaValidation;\n if (extraErrors) {\n const merged = validationDataMerge(schemaValidation, extraErrors);\n errorSchema = merged.errorSchema;\n errors = merged.errors;\n }\n if (customErrors) {\n const merged = validationDataMerge({ errors, errorSchema }, customErrors.ErrorSchema, true);\n errorSchema = merged.errorSchema;\n errors = merged.errors;\n }\n return { errors, errorSchema };\n }\n /** Performs live validation and then updates and returns the errors and error schemas by potentially merging in\n * `extraErrors` and `customErrors`.\n *\n * @param rootSchema - The `rootSchema` from the state\n * @param schemaUtils - The `SchemaUtilsType` from the state\n * @param originalErrorSchema - The original `ErrorSchema` from the state\n * @param [formData] - The new form data to validate\n * @param [extraErrors] - The extra errors from the props\n * @param [customErrors] - The customErrors from custom components\n * @param [retrievedSchema] - An expanded schema, if not provided, it will be retrieved from the `schema` and `formData`\n * @param [mergeIntoOriginalErrorSchema=false] - Optional flag indicating whether we merge into original schema\n * @returns - An object containing `errorSchema`, `errors`, `schemaValidationErrors` and `schemaValidationErrorSchema`\n * @private\n */\n liveValidate(rootSchema, schemaUtils, originalErrorSchema, formData, extraErrors, customErrors, retrievedSchema, mergeIntoOriginalErrorSchema = false) {\n const schemaValidation = this.validate(formData, rootSchema, schemaUtils, retrievedSchema);\n const { errors } = schemaValidation;\n let { errorSchema } = schemaValidation;\n // We merge 'originalErrorSchema' with 'schemaValidation.errorSchema.'; This done to display the raised field error.\n if (mergeIntoOriginalErrorSchema) {\n errorSchema = mergeObjects(originalErrorSchema, schemaValidation.errorSchema, 'preventDuplicates');\n }\n const schemaValidationErrors = errors;\n const schemaValidationErrorSchema = errorSchema;\n const mergedErrors = Form.mergeErrors({ errorSchema, errors }, extraErrors, customErrors);\n return { ...mergedErrors, schemaValidationErrors, schemaValidationErrorSchema };\n }\n /** Returns the `formData` with only the elements specified in the `fields` list\n *\n * @param formData - The data for the `Form`\n * @param fields - The fields to keep while filtering\n * @deprecated - To be removed as an exported `Form` function in a future release; there isn't a planned replacement\n */\n // oxlint-disable-next-line class-methods-use-this, typescript/no-deprecated\n getUsedFormData = (formData, fields) => getUsedFormData(formData, fields);\n /** Returns the list of field names from inspecting the `pathSchema` as well as using the `formData`\n *\n * @param pathSchema - The `PathSchema` object for the form\n * @param [formData] - The form data to use while checking for empty objects/arrays\n * @deprecated - To be removed as an exported `Form` function in a future release; there isn't a planned replacement\n */\n // oxlint-disable-next-line class-methods-use-this, typescript/no-deprecated\n getFieldNames = (pathSchema, formData) => getFieldNames(pathSchema, formData);\n /** Returns the `formData` after filtering to remove any extra data not in a form field\n *\n * @param formData - The data for the `Form`\n * @returns The `formData` after omitting extra data\n * @deprecated - To be removed as an exported `Form` function in a future release, use `SchemaUtils.omitExtraData`\n * instead.\n */\n omitExtraData = (formData) => {\n const { schema, schemaUtils } = this.state;\n return schemaUtils.omitExtraData(schema, formData);\n };\n /** Allows a user to set a value for the provided `fieldPath`, which must be either a dotted path to the field OR a\n * `FieldPathList`. To set the root element, used either `''` or `[]` for the path. Passing undefined will clear the\n * value in the field.\n *\n * @param fieldPath - Either a dotted path to the field or the `FieldPathList` to the field\n * @param [newValue] - The new value for the field\n */\n setFieldValue = (fieldPath, newValue) => {\n const { registry } = this.state;\n const path = Array.isArray(fieldPath) ? fieldPath : fieldPath.split('.');\n const fieldPathId = toFieldPathId('', registry.globalFormOptions, path);\n this.onChange(newValue, path, undefined, fieldPathId[ID_KEY]);\n };\n /** Pushes the given change information into the `pendingChanges` array and then calls `processPendingChanges()` if\n * the array only contains a single pending change.\n *\n * @param newValue - The new form data from a change to a field\n * @param path - The path to the change into which to set the formData\n * @param [newErrorSchema] - The new `ErrorSchema` based on the field change\n * @param [id] - The id of the field that caused the change\n */\n onChange = (newValue, path, newErrorSchema, id) => {\n this.pendingChanges.push({ newValue, path, newErrorSchema, id });\n if (this.pendingChanges.length === 1) {\n this.processPendingChange();\n }\n };\n /** Function to handle changes made to a field in the `Form`. This handler gets the first change from the\n * `pendingChanges` list, containing the `newValue` for the `formData` and the `path` at which the `newValue` is to be\n * updated, along with a new, optional `ErrorSchema` for that same `path` and potentially the `id` of the field being\n * changed. It will first update the `formData` with any missing default fields and then, if `omitExtraData` and\n * `liveOmit` are turned on, the `formData` will be filtered to remove any extra data not in a form field. Then, the\n * resulting `formData` will be validated if required. The state will be updated with the new updated (potentially\n * filtered) `formData`, any errors that resulted from validation. Finally the `onChange` callback will be called, if\n * specified, with the updated state and the `processPendingChange()` function is called again.\n */\n processPendingChange() {\n if (this.pendingChanges.length === 0) {\n return;\n }\n // Mark that we're processing a user-initiated change.\n // This prevents componentDidUpdate from reverting oneOf/anyOf option switches.\n this.isProcessingUserChange = true;\n const { newValue, path, id } = this.pendingChanges[0];\n const { newErrorSchema } = this.pendingChanges[0];\n // oxlint-disable-next-line typescript/no-deprecated\n const { extraErrors, omitExtraData, liveOmit, noValidate, liveValidate, onChange, disabled, readonly } = this.props;\n const { formData: oldFormData, schemaUtils, schema, fieldPathId, schemaValidationErrorSchema, errors } = this.state;\n let { customErrors, retrievedSchema } = this.state;\n // Use the un-merged AJV-only schema as the base for re-merging extraErrors. Mirrors the\n // pattern in getStateFromProps/getDerivedStateFromProps and avoids the duplication that\n // happened when state.errorSchema (already containing merged extraErrors) was passed in.\n let mergeBaseErrorSchema = schemaValidationErrorSchema;\n const rootPathId = fieldPathId.path[0] || '';\n const isRootPath = !path || path.length === 0 || (path.length === 1 && path[0] === rootPathId);\n let formData = isRootPath ? newValue : structuredClone(oldFormData);\n // When switching from null to an object option in oneOf, MultiSchemaField sends\n // an object with property names but undefined values (e.g., {types: undefined, content: undefined}).\n // In this case, pass undefined to getStateFromProps to trigger fresh default computation.\n // Only do this when the previous formData was null/undefined (switching FROM null).\n const hasOnlyUndefinedValues = isObject(formData) &&\n Object.keys(formData).length > 0 &&\n Object.values(formData).every((v) => v === undefined);\n const wasPreviouslyNull = oldFormData === null || oldFormData === undefined;\n const inputForDefaults = hasOnlyUndefinedValues && wasPreviouslyNull ? undefined : formData;\n if (isObject(formData) || Array.isArray(formData)) {\n // Tracks if the user cleared a plain (non-oneOf/anyOf) leaf field.\n // The key is removed twice: once before getStateFromProps so inputForDefaults\n // reflects an empty field for conditional schema resolution, and once after so\n // the user's clear overrides any schema default getStateFromProps re-applied (#5125)\n // and AJV never receives { key: undefined } for type:\"string\" fields (#4518).\n let plainLeafWasCleared = false;\n if (newValue === ADDITIONAL_PROPERTY_KEY_REMOVE) {\n // For additional properties, this key was explicitly removed, so unset it\n unsetByPath(formData, path);\n }\n else if (!isRootPath) {\n // Set the new value at its path in the form data.\n let valueForPath = newValue;\n if (newValue === undefined) {\n const lastSegment = path[path.length - 1];\n if (typeof lastSegment === 'number') {\n // Array items: match ArrayField `handleChange` — AJV needs `null`, not undefined.\n valueForPath = null;\n }\n else {\n const { field } = schemaUtils.findFieldInSchema(schema, path, oldFormData);\n const leaf = field;\n const isOneOfOrAnyOfLeaf = leaf && (ONE_OF_KEY in leaf || ANY_OF_KEY in leaf);\n // oneOf/anyOf and unresolved leaves keep `undefined` so mergeDefaults doesn't\n // re-apply a branch default when the user clears the widget.\n // Plain resolved leaves use plainLeafWasCleared instead (see below).\n if (!isOneOfOrAnyOfLeaf && leaf !== undefined) {\n plainLeafWasCleared = true;\n }\n }\n }\n if (plainLeafWasCleared) {\n setByPath(formData, path, undefined);\n }\n else {\n setByPath(formData, path, valueForPath);\n }\n }\n const shouldSanitize = retrievedSchema && !isRootPath && !isObject(newValue) && !Array.isArray(newValue) && !disabled && !readonly;\n // Skip live validation here; it runs later in this function.\n const newState = this.getStateFromProps(this.props, inputForDefaults, undefined, undefined, undefined, true, shouldSanitize);\n formData = newState.formData;\n retrievedSchema = newState.retrievedSchema;\n // Re-set to undefined after merging defaults so the user's clear is preserved in\n // state (#5125 regression: without this, clearing a second field re-applies the\n // default to previously-cleared fields). The undefined key is stripped from the\n // formData copy passed to AJV via JSON.parse(JSON.stringify(...)) so the validator never\n // sees { [key]: undefined } for type:\"string\" or patternProperties fields (#4518).\n if (plainLeafWasCleared && formData) {\n setByPath(formData, path, undefined);\n }\n }\n const mustValidate = !noValidate && (liveValidate === true || liveValidate === 'onChange');\n let state = { formData, retrievedSchema };\n let newFormData = formData;\n if (omitExtraData === true && (liveOmit === true || liveOmit === 'onChange')) {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(formData);\n state = { ...state, formData: newFormData };\n }\n if (newErrorSchema) {\n // First check to see if there is an existing validation error on this path...\n const oldValidationError = !isRootPath\n ? getByPath(schemaValidationErrorSchema, path)\n : schemaValidationErrorSchema;\n // If there is an old validation error for this path, assume we are updating it directly\n if (oldValidationError && Object.keys(oldValidationError).length > 0) {\n // Apply the user-supplied newErrorSchema onto a clone of the AJV-only base, so that\n // mergeErrors below sees the user's error at this path without mutating shared state.\n if (!isRootPath) {\n mergeBaseErrorSchema = structuredClone(schemaValidationErrorSchema);\n // An `ErrorSchema` nests plain objects even at numeric segments, so never auto-vivify arrays\n setByPath(mergeBaseErrorSchema, path, newErrorSchema, true);\n }\n else {\n mergeBaseErrorSchema = newErrorSchema;\n }\n }\n else {\n if (!customErrors) {\n customErrors = new ErrorSchemaBuilder();\n }\n if (isRootPath) {\n const pathErrors = newErrorSchema[ERRORS_KEY];\n if (pathErrors) {\n // only set errors when there are some\n customErrors.setErrors(pathErrors);\n }\n }\n else {\n // An `ErrorSchema` nests plain objects even at numeric segments, so never auto-vivify arrays\n setByPath(customErrors.ErrorSchema, path, newErrorSchema, true);\n }\n }\n }\n else if (customErrors && getByPath(customErrors.ErrorSchema, [...path, ERRORS_KEY])) {\n // If we have custom errors and the path has an error, then we need to clear it\n customErrors.clearErrors(path);\n }\n // If there are pending changes in the queue, skip live validation since it will happen with the last change\n if (mustValidate && this.pendingChanges.length === 1) {\n const liveValidation = this.liveValidate(schema, schemaUtils, mergeBaseErrorSchema, newFormData, extraErrors, customErrors, retrievedSchema);\n state = { ...state, formData: newFormData, ...liveValidation, customErrors };\n }\n else if (!noValidate && newErrorSchema) {\n // Merging 'newErrorSchema' into 'errorSchema' to display the custom raised errors.\n const mergedErrors = Form.mergeErrors({ errorSchema: mergeBaseErrorSchema, errors }, extraErrors, customErrors);\n state = { ...state, formData: newFormData, ...mergedErrors, customErrors };\n }\n this.setState(state, () => {\n if (onChange) {\n onChange(toIChangeEvent({ ...this.state, ...state }), id);\n }\n // Now remove the change we just completed and call this again\n this.pendingChanges.shift();\n this.processPendingChange();\n });\n }\n /**\n * If the retrievedSchema has changed the new retrievedSchema is returned.\n * Otherwise, the old retrievedSchema is returned to persist reference.\n * - This ensures that AJV retrieves the schema from the cache when it has not changed,\n * avoiding the performance cost of recompiling the schema.\n *\n * @param retrievedSchema The new retrieved schema.\n * @returns The new retrieved schema if it has changed, else the old retrieved schema.\n */\n updateRetrievedSchema(retrievedSchema) {\n const isTheSame = deepEquals(retrievedSchema, this.state?.retrievedSchema);\n return isTheSame ? this.state.retrievedSchema : retrievedSchema;\n }\n /**\n * Callback function to handle reset form data.\n * - Reset all fields with default values.\n * - Reset validations and errors\n *\n */\n reset = () => {\n // Cast the IS_RESET symbol to T to avoid type issues, we use this symbol to detect reset mode\n const { formData: propsFormData, initialFormData = IS_RESET, onChange } = this.props;\n const newState = this.getStateFromProps(this.props, propsFormData ?? initialFormData, undefined, undefined, undefined, true);\n const newFormData = newState.formData;\n const state = {\n formData: newFormData,\n errorSchema: {},\n errors: [],\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n initialDefaultsGenerated: false,\n customErrors: undefined,\n };\n this.setState(state, () => onChange?.(toIChangeEvent({ ...this.state, ...state })));\n };\n /** Callback function to handle when a field on the form is blurred. Calls the `onBlur` callback for the `Form` if it\n * was provided. Also runs any live validation and/or live omit operations if the flags indicate they should happen\n * during `onBlur`.\n *\n * @param id - The unique `id` of the field that was blurred\n * @param data - The data associated with the field that was blurred\n */\n onBlur = (id, data) => {\n const { onBlur, omitExtraData, liveOmit, liveValidate } = this.props;\n if (onBlur) {\n onBlur(id, data);\n }\n if ((omitExtraData === true && liveOmit === 'onBlur') || liveValidate === 'onBlur') {\n const { onChange, extraErrors } = this.props;\n const { formData } = this.state;\n let newFormData = formData;\n let state = { formData: newFormData };\n if (omitExtraData === true && liveOmit === 'onBlur') {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(formData);\n state = { formData: newFormData };\n }\n if (liveValidate === 'onBlur') {\n const { schema, schemaUtils, errorSchema, customErrors, retrievedSchema } = this.state;\n const liveValidation = this.liveValidate(schema, schemaUtils, errorSchema, newFormData, extraErrors, customErrors, retrievedSchema);\n state = { formData: newFormData, ...liveValidation, customErrors };\n }\n const hasChanges = Object.keys(state)\n // Filter out `schemaValidationErrors` and `schemaValidationErrorSchema` since they aren't IChangeEvent props\n .filter((key) => !key.startsWith('schemaValidation'))\n .some((key) => {\n const oldData = this.state[key];\n const newData = state[key];\n return !deepEquals(oldData, newData);\n });\n this.setState(state, () => {\n if (onChange && hasChanges) {\n onChange(toIChangeEvent({ ...this.state, ...state }), id);\n }\n });\n }\n };\n /** Callback function to handle when a field on the form is focused. Calls the `onFocus` callback for the `Form` if it\n * was provided.\n *\n * @param id - The unique `id` of the field that was focused\n * @param data - The data associated with the field that was focused\n */\n onFocus = (id, data) => {\n const { onFocus } = this.props;\n if (onFocus) {\n onFocus(id, data);\n }\n };\n /** Callback function to handle when the form is submitted. First, it prevents the default event behavior. Nothing\n * happens if the target and currentTarget of the event are not the same. It will omit any extra data in the\n * `formData` in the state if `omitExtraData` is true. It will validate the resulting `formData`, reporting errors\n * via the `onError()` callback unless validation is disabled. Finally, it will add in any `extraErrors` and then call\n * back the `onSubmit` callback if it was provided.\n *\n * @param event - The submit HTML form event\n */\n onSubmit = (event) => {\n event.preventDefault();\n if (event.target !== event.currentTarget) {\n return;\n }\n event.persist();\n // oxlint-disable-next-line typescript/no-deprecated\n const { omitExtraData, extraErrors, noValidate, onSubmit } = this.props;\n let { formData: newFormData } = this.state;\n if (omitExtraData === true) {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(newFormData);\n }\n if (noValidate || this.validateFormWithFormData(newFormData)) {\n // There are no errors generated through schema validation.\n // Check for user provided errors and update state accordingly.\n const errorSchema = extraErrors || {};\n const errors = extraErrors ? toErrorList(extraErrors) : [];\n this.setState({\n formData: newFormData,\n errors,\n errorSchema,\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n }, () => {\n if (onSubmit) {\n onSubmit(toIChangeEvent({ ...this.state, formData: newFormData }, 'submitted'), event);\n }\n });\n }\n };\n /** Extracts the `GlobalFormOptions` from the given Form `props`\n *\n * @param props - The form props to extract the global form options from\n * @returns - The `GlobalFormOptions` from the props\n * @private\n */\n static getGlobalFormOptions(props) {\n const { uiSchema = {}, experimental_componentUpdateStrategy, idSeparator = DEFAULT_ID_SEPARATOR, idPrefix = DEFAULT_ID_PREFIX, nameGenerator, useFallbackUiForUnsupportedType = false, } = props;\n // oxlint-disable-next-line typescript/no-deprecated\n const rootFieldId = uiSchema['ui:rootFieldId'];\n // Omit any options that are undefined or null\n return {\n idPrefix: rootFieldId || idPrefix,\n idSeparator,\n useFallbackUiForUnsupportedType,\n ...(experimental_componentUpdateStrategy !== undefined && { experimental_componentUpdateStrategy }),\n ...(nameGenerator !== undefined && { nameGenerator }),\n };\n }\n /** Computed the registry for the form using the given `props`, `schema` and `schemaUtils` */\n static getRegistry(props, schema, schemaUtils) {\n const { translateString: customTranslateString, uiSchema = {} } = props;\n const { fields, templates, widgets, formContext, translateString } = getDefaultRegistry();\n return {\n fields: { ...fields, ...props.fields },\n templates: {\n ...templates,\n ...props.templates,\n ButtonTemplates: {\n ...templates.ButtonTemplates,\n ...props.templates?.ButtonTemplates,\n },\n },\n widgets: { ...widgets, ...props.widgets },\n rootSchema: schema,\n formContext: props.formContext || formContext,\n schemaUtils,\n translateString: customTranslateString || translateString,\n globalUiOptions: uiSchema[UI_GLOBAL_OPTIONS_KEY],\n globalFormOptions: Form.getGlobalFormOptions(props),\n uiSchemaDefinitions: uiSchema[UI_DEFINITIONS_KEY] ?? {},\n };\n }\n /** Provides a function that can be used to programmatically submit the `Form` */\n submit = () => {\n if (this.formElement.current) {\n const submitCustomEvent = new CustomEvent('submit', {\n cancelable: true,\n });\n submitCustomEvent.preventDefault();\n this.formElement.current.dispatchEvent(submitCustomEvent);\n this.formElement.current.requestSubmit();\n }\n };\n /** Attempts to focus on the field associated with the `error`. Uses the `property` field to compute path of the error\n * field, then, using the `idPrefix` and `idSeparator` converts that path into an id. Then the input element with that\n * id is attempted to be found using the `formElement` ref. If it is located, then it is focused.\n *\n * @param error - The error on which to focus\n */\n focusOnError(error) {\n const { idPrefix = 'root', idSeparator = '_' } = this.props;\n const { property } = error;\n const path = toPath(property ?? '');\n // The id of the root element is the idPrefix, so prepend it to the path\n path.unshift(idPrefix);\n const elementId = path.join(idSeparator);\n let field = this.formElement.current.elements[elementId];\n if (!field) {\n // if not an exact match, try finding a focusable element starting with the element id (like radio buttons or checkboxes)\n // some themes (e.g. shadcn) use button elements instead of native inputs for radio groups\n field = this.formElement.current.querySelector(`input[id^=\"${elementId}\"], button[id^=\"${elementId}\"]`);\n }\n if (field?.length) {\n // If we got a list with length > 0\n // oxlint-disable-next-line prefer-destructuring\n field = field[0];\n }\n if (field) {\n field.focus();\n }\n }\n /** Validates the form using the given `formData`. For use on form submission or on programmatic validation.\n * If `onError` is provided, then it will be called with the list of errors.\n *\n * @param formData - The form data to validate\n * @returns - True if the form is valid, false otherwise.\n */\n validateFormWithFormData = (formData) => {\n const { extraErrors, extraErrorsBlockSubmit, focusOnFirstError, onError } = this.props;\n const { errors: prevErrors } = this.state;\n const schemaValidation = this.validate(formData);\n // Always merge extraErrors so they remain visible in state regardless of extraErrorsBlockSubmit.\n const { errors, errorSchema } = extraErrors ? Form.mergeErrors(schemaValidation, extraErrors) : schemaValidation;\n // hasError gates submission: schema errors always block; extraErrors only block when\n // extraErrorsBlockSubmit is set (non-breaking default: extraErrors are informational only).\n const hasError = schemaValidation.errors.length > 0 || (extraErrors && extraErrorsBlockSubmit);\n if (hasError) {\n if (focusOnFirstError) {\n if (typeof focusOnFirstError === 'function') {\n focusOnFirstError(errors[0]);\n }\n else {\n this.focusOnError(errors[0]);\n }\n }\n this.setState({\n errors,\n errorSchema,\n schemaValidationErrors: schemaValidation.errors,\n schemaValidationErrorSchema: schemaValidation.errorSchema,\n }, () => {\n if (onError) {\n onError(errors);\n }\n else {\n // oxlint-disable-next-line no-console\n console.error('Form validation failed', errors);\n }\n });\n }\n else if (errors.length > 0) {\n // Non-blocking extraErrors are present — update display state without triggering onError.\n this.setState({\n errors,\n errorSchema,\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n });\n }\n else if (prevErrors.length > 0) {\n this.setState({\n errors: [],\n errorSchema: {},\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n });\n }\n return !hasError;\n };\n /** Programmatically validate the form. If `omitExtraData` is true, the `formData` will first be filtered to remove\n * any extra data not in a form field. If `onError` is provided, then it will be called with the list of errors the\n * same way as would happen on form submission.\n *\n * @returns - True if the form is valid, false otherwise.\n */\n validateForm() {\n const { omitExtraData } = this.props;\n let { formData: newFormData } = this.state;\n if (omitExtraData === true) {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(newFormData);\n }\n return this.validateFormWithFormData(newFormData);\n }\n /** Renders the `Form` fields inside the
| `tagName` or `_internalFormWrapper`, rendering any errors if\n * needed along with the submit button or any children of the form.\n */\n render() {\n const { children, id, className = '', tagName, name, method, target, action, autoComplete, enctype, acceptCharset, noHtml5Validate = false, disabled, readonly, showErrorList = 'top', _internalFormWrapper, } = this.props;\n const { schema, uiSchema, formData, errorSchema, fieldPathId, registry } = this.state;\n const { SchemaField: SchemaFieldComponent } = registry.fields;\n const { SubmitButton } = registry.templates.ButtonTemplates;\n // The `semantic-ui` and `material-ui` themes have `_internalFormWrapper`s that take an `as` prop that is the\n // PropTypes.elementType to use for the inner tag, so we'll need to pass `tagName` along if it is provided.\n // NOTE, the `as` prop is native to `semantic-ui` and is emulated in the `material-ui` theme\n const as = _internalFormWrapper ? tagName : undefined;\n const FormTag = _internalFormWrapper || tagName || 'form';\n let { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions = {} } = getUiOptions(uiSchema);\n if (disabled) {\n submitOptions = { ...submitOptions, props: { ...submitOptions.props, disabled: true } };\n }\n const submitUiSchema = { [UI_OPTIONS_KEY]: { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions } };\n return (_jsxs(FormTag, { className: className || 'rjsf', id: id, name: name, method: method, target: target, action: action, autoComplete: autoComplete, encType: enctype, acceptCharset: acceptCharset, noValidate: noHtml5Validate, onSubmit: this.onSubmit, as: as, ref: this.formElement, children: [showErrorList === 'top' && this.renderErrors(registry), _jsx(SchemaFieldComponent, { name: '', schema: schema, uiSchema: uiSchema, errorSchema: errorSchema, fieldPathId: fieldPathId, formData: formData, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, registry: registry, disabled: disabled, readonly: readonly }), children || _jsx(SubmitButton, { uiSchema: submitUiSchema, registry: registry }), showErrorList === 'bottom' && this.renderErrors(registry)] }));\n }\n}\n//# sourceMappingURL=Form.js.map","import { ANY_OF_KEY, createErrorHandler, getByPath, getDefaultFormState, getUiOptions, ONE_OF_KEY, PROPERTIES_KEY, toErrorSchema, toPath, unwrapErrorHandler, validationDataMerge, } from '@rjsf/utils';\n/** Filters duplicate errors from `anyOf`/`oneOf` schema paths according to the `suppressDuplicateFiltering` flag.\n *\n * @param errorList - The list of `RJSFValidationError`s to filter\n * @param [suppressDuplicateFiltering='none'] - Controls which duplicate filtering is suppressed:\n * - `'none'` (default): filters duplicates for both `anyOf` and `oneOf`\n * - `'all'`: returns `errorList` unmodified\n * - `'anyOf'`: suppresses filtering for `anyOf` errors; `oneOf` duplicates are still filtered\n * - `'oneOf'`: suppresses filtering for `oneOf` errors; `anyOf` duplicates are still filtered\n */\nexport function filterDuplicateErrors(errorList, suppressDuplicateFiltering = 'none') {\n if (suppressDuplicateFiltering === 'all') {\n return errorList;\n }\n return errorList.reduce((acc, err) => {\n const { message, schemaPath } = err;\n // Compute the index only when filtering for that keyword is not suppressed.\n // 'all' is already handled above; within the reduce, only 'none', 'anyOf', and 'oneOf' are possible.\n const anyOfIndex = suppressDuplicateFiltering !== 'anyOf' ? schemaPath?.indexOf(`/${ANY_OF_KEY}/`) : undefined;\n const oneOfIndex = suppressDuplicateFiltering !== 'oneOf' ? schemaPath?.indexOf(`/${ONE_OF_KEY}/`) : undefined;\n let schemaPrefix;\n if (anyOfIndex && anyOfIndex >= 0) {\n schemaPrefix = schemaPath?.substring(0, anyOfIndex);\n }\n else if (oneOfIndex && oneOfIndex >= 0) {\n schemaPrefix = schemaPath?.substring(0, oneOfIndex);\n }\n // If there is a schemaPrefix, then search for a duplicate message with the same prefix, otherwise undefined\n const dup = schemaPrefix\n ? acc.find((e) => e.message === message && e.schemaPath?.startsWith(schemaPrefix))\n : undefined;\n if (!dup) {\n acc.push(err);\n }\n return acc;\n }, []);\n}\n/** Transforming the error output from ajv to format used by @rjsf/utils.\n * At some point, components should be updated to support ajv.\n *\n * @param errors - The list of AJV errors to convert to `RJSFValidationErrors`\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n * @param [suppressDuplicateFiltering] - Controls which duplicate filtering is suppressed; see `filterDuplicateErrors`\n * @param [schema] - The schema for the validation\n */\nexport function transformRJSFValidationErrors(errors = [], uiSchema, suppressDuplicateFiltering, schema) {\n const errorList = errors.map((e) => {\n const { instancePath, keyword, params, schemaPath, parentSchema, ...rest } = e;\n let { message = '' } = rest;\n let property = instancePath.replace(/\\//g, '.');\n let stack = `${property} ${message}`.trim();\n let uiTitle = '';\n const rawPropertyNames = [\n ...(params.deps?.split(', ') || []),\n params.missingProperty,\n params.property,\n ].filter((item) => item);\n if (rawPropertyNames.length > 0) {\n rawPropertyNames.forEach((currentProperty) => {\n const path = property ? `${property}.${currentProperty}` : currentProperty;\n let uiSchemaTitle = getUiOptions(getByPath(uiSchema, toPath(path))).title;\n if (uiSchemaTitle === undefined) {\n // To retrieve a title from UI schema, construct a path to UI schema from `schemaPath` and `currentProperty`.\n // For example, when `#/properties/A/properties/B/required` and `C` are given, they are converted into `['A', 'B', 'C']`.\n const uiSchemaPath = schemaPath\n .replace(/\\/properties\\//g, '/')\n .split('/')\n .slice(1, -1)\n .concat([currentProperty]);\n uiSchemaTitle = getUiOptions(getByPath(uiSchema, uiSchemaPath)).title;\n }\n if (uiSchemaTitle === undefined) {\n // schemaPath may include non-property segments (e.g. allOf/if/then) that do\n // not exist in the uiSchema; fall back to the instance path, the same way the\n // root-schema title fallback does below.\n const propParts = property.replace(/^\\./, '').split('.').filter(Boolean);\n uiSchemaTitle = getByPath(uiSchema, [...propParts, currentProperty, 'title']);\n }\n if (uiSchemaTitle) {\n message = message.replace(`'${currentProperty}'`, `'${uiSchemaTitle}'`);\n uiTitle = uiSchemaTitle;\n }\n else {\n const parentSchemaTitle = getByPath(parentSchema, [\n PROPERTIES_KEY,\n currentProperty,\n 'title',\n ]);\n if (parentSchemaTitle) {\n message = message.replace(`'${currentProperty}'`, `'${parentSchemaTitle}'`);\n uiTitle = parentSchemaTitle;\n }\n else if (schema) {\n // parentSchema may be an allOf/anyOf/oneOf entry that lacks `properties`;\n // fall back to looking up the title from the root schema.\n const propParts = property.replace(/^\\./, '').split('.').filter(Boolean);\n const aSchemaPath = [];\n for (const part of propParts) {\n aSchemaPath.push(PROPERTIES_KEY, part);\n }\n aSchemaPath.push(PROPERTIES_KEY, currentProperty, 'title');\n const rootSchemaTitle = getByPath(schema, aSchemaPath);\n if (rootSchemaTitle) {\n message = message.replace(`'${currentProperty}'`, `'${rootSchemaTitle}'`);\n uiTitle = rootSchemaTitle;\n }\n }\n }\n });\n stack = message;\n }\n else {\n const uiSchemaTitle = getUiOptions(getByPath(uiSchema, toPath(property))).title;\n if (uiSchemaTitle) {\n stack = `'${uiSchemaTitle}' ${message}`.trim();\n uiTitle = uiSchemaTitle;\n }\n else {\n const parentSchemaTitle = parentSchema?.title;\n if (parentSchemaTitle) {\n stack = `'${parentSchemaTitle}' ${message}`.trim();\n uiTitle = parentSchemaTitle;\n }\n }\n }\n // If params.missingProperty is undefined, it is removed from rawPropertyNames by filter((item) => item).\n if ('missingProperty' in params) {\n property = property ? `${property}.${params.missingProperty}` : params.missingProperty;\n }\n // put data in expected format\n return {\n name: keyword,\n property,\n message,\n params, // specific to ajv\n stack,\n schemaPath,\n title: uiTitle,\n };\n });\n return filterDuplicateErrors(errorList, suppressDuplicateFiltering);\n}\n/** This function processes the `formData` with an optional user contributed `customValidate` function, which receives\n * the form data and a `errorHandler` function that will be used to add custom validation errors for each field. Also\n * supports a `transformErrors` function that will take the raw AJV validation errors, prior to custom validation and\n * transform them in what ever way it chooses.\n *\n * @param validator - The `ValidatorType` implementation used for the `getDefaultFormState()` call\n * @param rawErrors - The list of raw `ErrorObject`s to process\n * @param formData - The form data to validate\n * @param schema - The schema against which to validate the form data\n * @param [customValidate] - An optional function that is used to perform custom validation\n * @param [transformErrors] - An optional function that is used to transform errors after AJV validation\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n * @param [suppressDuplicateFiltering] - Controls which duplicate filtering is suppressed; see `filterDuplicateErrors`\n */\nexport default function processRawValidationErrors(validator, rawErrors, formData, schema, customValidate, transformErrors, uiSchema, suppressDuplicateFiltering) {\n const { validationError: invalidSchemaError } = rawErrors;\n let errors = transformRJSFValidationErrors(rawErrors.errors, uiSchema, suppressDuplicateFiltering, schema);\n if (invalidSchemaError) {\n errors = [...errors, { stack: invalidSchemaError.message }];\n }\n if (typeof transformErrors === 'function') {\n errors = transformErrors(errors, uiSchema);\n }\n let errorSchema = toErrorSchema(errors);\n if (invalidSchemaError) {\n errorSchema = {\n ...errorSchema,\n $schema: {\n __errors: [invalidSchemaError.message],\n },\n };\n }\n if (typeof customValidate !== 'function') {\n return { errors, errorSchema };\n }\n // Include form data with undefined values, which is required for custom validation.\n const newFormData = getDefaultFormState(validator, schema, formData, schema, true);\n const errorHandler = customValidate(newFormData, createErrorHandler(newFormData), uiSchema, errorSchema);\n const userErrorSchema = unwrapErrorHandler(errorHandler);\n return validationDataMerge({ errors, errorSchema }, userErrorSchema);\n}\n//# sourceMappingURL=processRawValidationErrors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n constructor(s) {\n super();\n if (!exports.IDENTIFIER.test(s))\n throw new Error(\"CodeGen: name must be a valid identifier\");\n this.str = s;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n return false;\n }\n get names() {\n return { [this.str]: 1 };\n }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n constructor(code) {\n super();\n this._items = typeof code === \"string\" ? [code] : code;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n if (this._items.length > 1)\n return false;\n const item = this._items[0];\n return item === \"\" || item === '\"\"';\n }\n get str() {\n var _a;\n return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n }\n get names() {\n var _a;\n return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n if (c instanceof Name)\n names[c.str] = (names[c.str] || 0) + 1;\n return names;\n }, {})));\n }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n const code = [strs[0]];\n let i = 0;\n while (i < args.length) {\n addCodeArg(code, args[i]);\n code.push(strs[++i]);\n }\n return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n const expr = [safeStringify(strs[0])];\n let i = 0;\n while (i < args.length) {\n expr.push(plus);\n addCodeArg(expr, args[i]);\n expr.push(plus, safeStringify(strs[++i]));\n }\n optimize(expr);\n return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n if (arg instanceof _Code)\n code.push(...arg._items);\n else if (arg instanceof Name)\n code.push(arg);\n else\n code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n let i = 1;\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n if (res !== undefined) {\n expr.splice(i - 1, 3, res);\n continue;\n }\n expr[i++] = \"+\";\n }\n i++;\n }\n}\nfunction mergeExprItems(a, b) {\n if (b === '\"\"')\n return a;\n if (a === '\"\"')\n return b;\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"')\n return;\n if (typeof b != \"string\")\n return `${a.slice(0, -1)}${b}\"`;\n if (b[0] === '\"')\n return a.slice(0, -1) + b.slice(1);\n return;\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n return `\"${a}${b.slice(1)}`;\n return;\n}\nfunction strConcat(c1, c2) {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n return new _Code(`${key}`);\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = require(\"./code\");\nclass ValueError extends Error {\n constructor(name) {\n super(`CodeGen: \"code\" for ${name} not defined`);\n this.value = name.value;\n }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState || (exports.UsedValueState = UsedValueState = {}));\nexports.varKinds = {\n const: new code_1.Name(\"const\"),\n let: new code_1.Name(\"let\"),\n var: new code_1.Name(\"var\"),\n};\nclass Scope {\n constructor({ prefixes, parent } = {}) {\n this._names = {};\n this._prefixes = prefixes;\n this._parent = parent;\n }\n toName(nameOrPrefix) {\n return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n }\n name(prefix) {\n return new code_1.Name(this._newName(prefix));\n }\n _newName(prefix) {\n const ng = this._names[prefix] || this._nameGroup(prefix);\n return `${prefix}${ng.index++}`;\n }\n _nameGroup(prefix) {\n var _a, _b;\n if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n }\n return (this._names[prefix] = { prefix, index: 0 });\n }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n constructor(prefix, nameStr) {\n super(nameStr);\n this.prefix = prefix;\n }\n setValue(value, { property, itemIndex }) {\n this.value = value;\n this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n constructor(opts) {\n super(opts);\n this._values = {};\n this._scope = opts.scope;\n this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n }\n get() {\n return this._scope;\n }\n name(prefix) {\n return new ValueScopeName(prefix, this._newName(prefix));\n }\n value(nameOrPrefix, value) {\n var _a;\n if (value.ref === undefined)\n throw new Error(\"CodeGen: ref must be passed in value\");\n const name = this.toName(nameOrPrefix);\n const { prefix } = name;\n const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n let vs = this._values[prefix];\n if (vs) {\n const _name = vs.get(valueKey);\n if (_name)\n return _name;\n }\n else {\n vs = this._values[prefix] = new Map();\n }\n vs.set(valueKey, name);\n const s = this._scope[prefix] || (this._scope[prefix] = []);\n const itemIndex = s.length;\n s[itemIndex] = value.ref;\n name.setValue(value, { property: prefix, itemIndex });\n return name;\n }\n getValue(prefix, keyOrRef) {\n const vs = this._values[prefix];\n if (!vs)\n return;\n return vs.get(keyOrRef);\n }\n scopeRefs(scopeName, values = this._values) {\n return this._reduceValues(values, (name) => {\n if (name.scopePath === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return (0, code_1._) `${scopeName}${name.scopePath}`;\n });\n }\n scopeCode(values = this._values, usedValues, getCode) {\n return this._reduceValues(values, (name) => {\n if (name.value === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return name.value.code;\n }, usedValues, getCode);\n }\n _reduceValues(values, valueCode, usedValues = {}, getCode) {\n let code = code_1.nil;\n for (const prefix in values) {\n const vs = values[prefix];\n if (!vs)\n continue;\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n vs.forEach((name) => {\n if (nameSet.has(name))\n return;\n nameSet.set(name, UsedValueState.Started);\n let c = valueCode(name);\n if (c) {\n const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n }\n else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n code = (0, code_1._) `${code}${c}${this.opts._n}`;\n }\n else {\n throw new ValueError(name);\n }\n nameSet.set(name, UsedValueState.Completed);\n });\n }\n return code;\n }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = require(\"./code\");\nconst scope_1 = require(\"./scope\");\nvar code_2 = require(\"./code\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return code_2._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return code_2.str; } });\nObject.defineProperty(exports, \"strConcat\", { enumerable: true, get: function () { return code_2.strConcat; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return code_2.nil; } });\nObject.defineProperty(exports, \"getProperty\", { enumerable: true, get: function () { return code_2.getProperty; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return code_2.stringify; } });\nObject.defineProperty(exports, \"regexpCode\", { enumerable: true, get: function () { return code_2.regexpCode; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return code_2.Name; } });\nvar scope_2 = require(\"./scope\");\nObject.defineProperty(exports, \"Scope\", { enumerable: true, get: function () { return scope_2.Scope; } });\nObject.defineProperty(exports, \"ValueScope\", { enumerable: true, get: function () { return scope_2.ValueScope; } });\nObject.defineProperty(exports, \"ValueScopeName\", { enumerable: true, get: function () { return scope_2.ValueScopeName; } });\nObject.defineProperty(exports, \"varKinds\", { enumerable: true, get: function () { return scope_2.varKinds; } });\nexports.operators = {\n GT: new code_1._Code(\">\"),\n GTE: new code_1._Code(\">=\"),\n LT: new code_1._Code(\"<\"),\n LTE: new code_1._Code(\"<=\"),\n EQ: new code_1._Code(\"===\"),\n NEQ: new code_1._Code(\"!==\"),\n NOT: new code_1._Code(\"!\"),\n OR: new code_1._Code(\"||\"),\n AND: new code_1._Code(\"&&\"),\n ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n optimizeNodes() {\n return this;\n }\n optimizeNames(_names, _constants) {\n return this;\n }\n}\nclass Def extends Node {\n constructor(varKind, name, rhs) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.rhs = rhs;\n }\n render({ es5, _n }) {\n const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n return `${varKind} ${this.name}${rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (!names[this.name.str])\n return;\n if (this.rhs)\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n }\n}\nclass Assign extends Node {\n constructor(lhs, rhs, sideEffects) {\n super();\n this.lhs = lhs;\n this.rhs = rhs;\n this.sideEffects = sideEffects;\n }\n render({ _n }) {\n return `${this.lhs} = ${this.rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n return;\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n return addExprNames(names, this.rhs);\n }\n}\nclass AssignOp extends Assign {\n constructor(lhs, op, rhs, sideEffects) {\n super(lhs, rhs, sideEffects);\n this.op = op;\n }\n render({ _n }) {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n }\n}\nclass Label extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n return `${this.label}:` + _n;\n }\n}\nclass Break extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n const label = this.label ? ` ${this.label}` : \"\";\n return `break${label};` + _n;\n }\n}\nclass Throw extends Node {\n constructor(error) {\n super();\n this.error = error;\n }\n render({ _n }) {\n return `throw ${this.error};` + _n;\n }\n get names() {\n return this.error.names;\n }\n}\nclass AnyCode extends Node {\n constructor(code) {\n super();\n this.code = code;\n }\n render({ _n }) {\n return `${this.code};` + _n;\n }\n optimizeNodes() {\n return `${this.code}` ? this : undefined;\n }\n optimizeNames(names, constants) {\n this.code = optimizeExpr(this.code, names, constants);\n return this;\n }\n get names() {\n return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n }\n}\nclass ParentNode extends Node {\n constructor(nodes = []) {\n super();\n this.nodes = nodes;\n }\n render(opts) {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n }\n optimizeNodes() {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n const n = nodes[i].optimizeNodes();\n if (Array.isArray(n))\n nodes.splice(i, 1, ...n);\n else if (n)\n nodes[i] = n;\n else\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n optimizeNames(names, constants) {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i];\n if (n.optimizeNames(names, constants))\n continue;\n subtractNames(names, n.names);\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n get names() {\n return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n }\n}\nclass BlockNode extends ParentNode {\n render(opts) {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n constructor(condition, nodes) {\n super(nodes);\n this.condition = condition;\n }\n render(opts) {\n let code = `if(${this.condition})` + super.render(opts);\n if (this.else)\n code += \"else \" + this.else.render(opts);\n return code;\n }\n optimizeNodes() {\n super.optimizeNodes();\n const cond = this.condition;\n if (cond === true)\n return this.nodes; // else is ignored here\n let e = this.else;\n if (e) {\n const ns = e.optimizeNodes();\n e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n }\n if (e) {\n if (cond === false)\n return e instanceof If ? e : e.nodes;\n if (this.nodes.length)\n return this;\n return new If(not(cond), e instanceof If ? [e] : e.nodes);\n }\n if (cond === false || !this.nodes.length)\n return undefined;\n return this;\n }\n optimizeNames(names, constants) {\n var _a;\n this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n if (!(super.optimizeNames(names, constants) || this.else))\n return;\n this.condition = optimizeExpr(this.condition, names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n addExprNames(names, this.condition);\n if (this.else)\n addNames(names, this.else.names);\n return names;\n }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n constructor(iteration) {\n super();\n this.iteration = iteration;\n }\n render(opts) {\n return `for(${this.iteration})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iteration = optimizeExpr(this.iteration, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iteration.names);\n }\n}\nclass ForRange extends For {\n constructor(varKind, name, from, to) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.from = from;\n this.to = to;\n }\n render(opts) {\n const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n const { name, from, to } = this;\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n }\n get names() {\n const names = addExprNames(super.names, this.from);\n return addExprNames(names, this.to);\n }\n}\nclass ForIter extends For {\n constructor(loop, varKind, name, iterable) {\n super();\n this.loop = loop;\n this.varKind = varKind;\n this.name = name;\n this.iterable = iterable;\n }\n render(opts) {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iterable = optimizeExpr(this.iterable, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iterable.names);\n }\n}\nclass Func extends BlockNode {\n constructor(name, args, async) {\n super();\n this.name = name;\n this.args = args;\n this.async = async;\n }\n render(opts) {\n const _async = this.async ? \"async \" : \"\";\n return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n render(opts) {\n return \"return \" + super.render(opts);\n }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n render(opts) {\n let code = \"try\" + super.render(opts);\n if (this.catch)\n code += this.catch.render(opts);\n if (this.finally)\n code += this.finally.render(opts);\n return code;\n }\n optimizeNodes() {\n var _a, _b;\n super.optimizeNodes();\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n return this;\n }\n optimizeNames(names, constants) {\n var _a, _b;\n super.optimizeNames(names, constants);\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n if (this.catch)\n addNames(names, this.catch.names);\n if (this.finally)\n addNames(names, this.finally.names);\n return names;\n }\n}\nclass Catch extends BlockNode {\n constructor(error) {\n super();\n this.error = error;\n }\n render(opts) {\n return `catch(${this.error})` + super.render(opts);\n }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n render(opts) {\n return \"finally\" + super.render(opts);\n }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n constructor(extScope, opts = {}) {\n this._values = {};\n this._blockStarts = [];\n this._constants = {};\n this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n this._extScope = extScope;\n this._scope = new scope_1.Scope({ parent: extScope });\n this._nodes = [new Root()];\n }\n toString() {\n return this._root.render(this.opts);\n }\n // returns unique name in the internal scope\n name(prefix) {\n return this._scope.name(prefix);\n }\n // reserves unique name in the external scope\n scopeName(prefix) {\n return this._extScope.name(prefix);\n }\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName, value) {\n const name = this._extScope.value(prefixOrName, value);\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n vs.add(name);\n return name;\n }\n getScopeValue(prefix, keyOrRef) {\n return this._extScope.getValue(prefix, keyOrRef);\n }\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName) {\n return this._extScope.scopeRefs(scopeName, this._values);\n }\n scopeCode() {\n return this._extScope.scopeCode(this._values);\n }\n _def(varKind, nameOrPrefix, rhs, constant) {\n const name = this._scope.toName(nameOrPrefix);\n if (rhs !== undefined && constant)\n this._constants[name.str] = rhs;\n this._leafNode(new Def(varKind, name, rhs));\n return name;\n }\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n }\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n }\n // `var` declaration with optional assignment\n var(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n }\n // assignment code\n assign(lhs, rhs, sideEffects) {\n return this._leafNode(new Assign(lhs, rhs, sideEffects));\n }\n // `+=` code\n add(lhs, rhs) {\n return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n }\n // appends passed SafeExpr to code or executes Block\n code(c) {\n if (typeof c == \"function\")\n c();\n else if (c !== code_1.nil)\n this._leafNode(new AnyCode(c));\n return this;\n }\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues) {\n const code = [\"{\"];\n for (const [key, value] of keyValues) {\n if (code.length > 1)\n code.push(\",\");\n code.push(key);\n if (key !== value || this.opts.es5) {\n code.push(\":\");\n (0, code_1.addCodeArg)(code, value);\n }\n }\n code.push(\"}\");\n return new code_1._Code(code);\n }\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition, thenBody, elseBody) {\n this._blockNode(new If(condition));\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf();\n }\n else if (thenBody) {\n this.code(thenBody).endIf();\n }\n else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body');\n }\n return this;\n }\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition) {\n return this._elseNode(new If(condition));\n }\n // `else` clause - only valid after `if` or `else if` clauses\n else() {\n return this._elseNode(new Else());\n }\n // end `if` statement (needed if gen.if was used only with condition)\n endIf() {\n return this._endBlockNode(If, Else);\n }\n _for(node, forBody) {\n this._blockNode(node);\n if (forBody)\n this.code(forBody).endFor();\n return this;\n }\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration, forBody) {\n return this._for(new ForLoop(iteration), forBody);\n }\n // `for` statement for a range of values\n forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n }\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n const name = this._scope.toName(nameOrPrefix);\n if (this.opts.es5) {\n const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n this.var(name, (0, code_1._) `${arr}[${i}]`);\n forBody(name);\n });\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n }\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n }\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n }\n // end `for` loop\n endFor() {\n return this._endBlockNode(For);\n }\n // `label` statement\n label(label) {\n return this._leafNode(new Label(label));\n }\n // `break` statement\n break(label) {\n return this._leafNode(new Break(label));\n }\n // `return` statement\n return(value) {\n const node = new Return();\n this._blockNode(node);\n this.code(value);\n if (node.nodes.length !== 1)\n throw new Error('CodeGen: \"return\" should have one node');\n return this._endBlockNode(Return);\n }\n // `try` statement\n try(tryBody, catchCode, finallyCode) {\n if (!catchCode && !finallyCode)\n throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n const node = new Try();\n this._blockNode(node);\n this.code(tryBody);\n if (catchCode) {\n const error = this.name(\"e\");\n this._currNode = node.catch = new Catch(error);\n catchCode(error);\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally();\n this.code(finallyCode);\n }\n return this._endBlockNode(Catch, Finally);\n }\n // `throw` statement\n throw(error) {\n return this._leafNode(new Throw(error));\n }\n // start self-balancing block\n block(body, nodeCount) {\n this._blockStarts.push(this._nodes.length);\n if (body)\n this.code(body).endBlock(nodeCount);\n return this;\n }\n // end the current self-balancing block\n endBlock(nodeCount) {\n const len = this._blockStarts.pop();\n if (len === undefined)\n throw new Error(\"CodeGen: not in self-balancing block\");\n const toClose = this._nodes.length - len;\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n }\n this._nodes.length = len;\n return this;\n }\n // `function` heading (or definition if funcBody is passed)\n func(name, args = code_1.nil, async, funcBody) {\n this._blockNode(new Func(name, args, async));\n if (funcBody)\n this.code(funcBody).endFunc();\n return this;\n }\n // end function definition\n endFunc() {\n return this._endBlockNode(Func);\n }\n optimize(n = 1) {\n while (n-- > 0) {\n this._root.optimizeNodes();\n this._root.optimizeNames(this._root.names, this._constants);\n }\n }\n _leafNode(node) {\n this._currNode.nodes.push(node);\n return this;\n }\n _blockNode(node) {\n this._currNode.nodes.push(node);\n this._nodes.push(node);\n }\n _endBlockNode(N1, N2) {\n const n = this._currNode;\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop();\n return this;\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n }\n _elseNode(node) {\n const n = this._currNode;\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"');\n }\n this._currNode = n.else = node;\n return this;\n }\n get _root() {\n return this._nodes[0];\n }\n get _currNode() {\n const ns = this._nodes;\n return ns[ns.length - 1];\n }\n set _currNode(node) {\n const ns = this._nodes;\n ns[ns.length - 1] = node;\n }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) + (from[n] || 0);\n return names;\n}\nfunction addExprNames(names, from) {\n return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n if (expr instanceof code_1.Name)\n return replaceName(expr);\n if (!canOptimize(expr))\n return expr;\n return new code_1._Code(expr._items.reduce((items, c) => {\n if (c instanceof code_1.Name)\n c = replaceName(c);\n if (c instanceof code_1._Code)\n items.push(...c._items);\n else\n items.push(c);\n return items;\n }, []));\n function replaceName(n) {\n const c = constants[n.str];\n if (c === undefined || names[n.str] !== 1)\n return n;\n delete names[n.str];\n return c;\n }\n function canOptimize(e) {\n return (e instanceof code_1._Code &&\n e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n }\n}\nfunction subtractNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst code_1 = require(\"./codegen/code\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n const hash = {};\n for (const item of arr)\n hash[item] = true;\n return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n if (typeof schema == \"boolean\")\n return schema;\n if (Object.keys(schema).length === 0)\n return true;\n checkUnknownRules(it, schema);\n return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n const { opts, self } = it;\n if (!opts.strictSchema)\n return;\n if (typeof schema === \"boolean\")\n return;\n const rules = self.RULES.keywords;\n for (const key in schema) {\n if (!rules[key])\n checkStrictMode(it, `unknown keyword: \"${key}\"`);\n }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (rules[key])\n return true;\n return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (key !== \"$ref\" && RULES.all[key])\n return true;\n return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\")\n return schema;\n if (typeof schema == \"string\")\n return (0, codegen_1._) `${schema}`;\n }\n return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n if (typeof str == \"number\")\n return `${str}`;\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n if (Array.isArray(xs)) {\n for (const x of xs)\n f(x);\n }\n else {\n f(xs);\n }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n return (gen, from, to, toName) => {\n const res = to === undefined\n ? from\n : to instanceof codegen_1.Name\n ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof codegen_1.Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to);\n return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n };\n}\nexports.mergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n }),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true);\n }\n else {\n gen.assign(to, (0, codegen_1._) `${to} || {}`);\n setEvaluated(gen, to, from);\n }\n }),\n mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n if (ps === true)\n return gen.var(\"props\", true);\n const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n if (ps !== undefined)\n setEvaluated(gen, props, ps);\n return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n Type[Type[\"Num\"] = 0] = \"Num\";\n Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type || (exports.Type = Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n // let path\n if (dataProp instanceof codegen_1.Name) {\n const isNumber = dataPropType === Type.Num;\n return jsPropertySyntax\n ? isNumber\n ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? (0, codegen_1._) `\"/\" + ${dataProp}`\n : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n if (!mode)\n return;\n msg = `strict mode: ${msg}`;\n if (mode === true)\n throw new Error(msg);\n it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"./codegen\");\nconst names = {\n // validation function arguments\n data: new codegen_1.Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new codegen_1.Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new codegen_1.Name(\"instancePath\"),\n parentData: new codegen_1.Name(\"parentData\"),\n parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n rootData: new codegen_1.Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new codegen_1.Name(\"vErrors\"), // null or array of validation errors\n errors: new codegen_1.Name(\"errors\"), // counter of validation errors\n this: new codegen_1.Name(\"this\"),\n // \"globals\"\n self: new codegen_1.Name(\"self\"),\n scope: new codegen_1.Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new codegen_1.Name(\"json\"),\n jsonPos: new codegen_1.Name(\"jsonPos\"),\n jsonLen: new codegen_1.Name(\"jsonLen\"),\n jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports.default = names;\n//# sourceMappingURL=names.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst util_1 = require(\"./util\");\nconst names_1 = require(\"./names\");\nexports.keywordError = {\n message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n message: ({ keyword, schemaType }) => schemaType\n ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n addError(gen, errObj);\n }\n else {\n returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n addError(gen, errObj);\n if (!(compositeRule || allErrors)) {\n returnErrors(it, names_1.default.vErrors);\n }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n gen.assign(names_1.default.errors, errsCount);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n /* istanbul ignore if */\n if (errsCount === undefined)\n throw new Error(\"ajv implementation error\");\n const err = gen.name(\"err\");\n gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n if (it.opts.verbose) {\n gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n gen.assign((0, codegen_1._) `${err}.data`, data);\n }\n });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n const err = gen.const(\"err\", errObj);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n const { gen, validateName, schemaEnv } = it;\n if (schemaEnv.$async) {\n gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n gen.return(false);\n }\n}\nconst E = {\n keyword: new codegen_1.Name(\"keyword\"),\n schemaPath: new codegen_1.Name(\"schemaPath\"), // also used in JTD errors\n params: new codegen_1.Name(\"params\"),\n propertyName: new codegen_1.Name(\"propertyName\"),\n message: new codegen_1.Name(\"message\"),\n schema: new codegen_1.Name(\"schema\"),\n parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n const { createErrors } = cxt.it;\n if (createErrors === false)\n return (0, codegen_1._) `{}`;\n return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n const { gen, it } = cxt;\n const keyValues = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ];\n extraErrorProps(cxt, error, keyValues);\n return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n const instPath = instancePath\n ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n : errorPath;\n return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n if (schemaPath) {\n schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n }\n return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n const { keyword, data, schemaValue, it } = cxt;\n const { opts, propertyName, topSchemaRef, schemaPath } = it;\n keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n }\n if (opts.verbose) {\n keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n }\n if (propertyName)\n keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst boolError = {\n message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n const { gen, schema, validateName } = it;\n if (schema === false) {\n falseSchemaError(it, false);\n }\n else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(names_1.default.data);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n gen.return(true);\n }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n const { gen, schema } = it;\n if (schema === false) {\n gen.var(valid, false); // TODO var\n falseSchemaError(it);\n }\n else {\n gen.var(valid, true); // TODO var\n }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n const { gen, data } = it;\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n };\n (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n const groups = {\n number: { type: \"number\", rules: [] },\n string: { type: \"string\", rules: [] },\n array: { type: \"array\", rules: [] },\n object: { type: \"object\", rules: [] },\n };\n return {\n types: { ...groups, integer: true, boolean: true, null: true },\n rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n post: { rules: [] },\n all: {},\n keywords: {},\n };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n const group = self.RULES.types[type];\n return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n var _a;\n return (schema[rule.keyword] !== undefined ||\n ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = require(\"../rules\");\nconst applicability_1 = require(\"./applicability\");\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nvar DataType;\n(function (DataType) {\n DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType || (exports.DataType = DataType = {}));\nfunction getSchemaTypes(schema) {\n const types = getJSONTypes(schema.type);\n const hasNull = types.includes(\"null\");\n if (hasNull) {\n if (schema.nullable === false)\n throw new Error(\"type: null contradicts nullable: false\");\n }\n else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"');\n }\n if (schema.nullable === true)\n types.push(\"null\");\n }\n return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction getJSONTypes(ts) {\n const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n if (types.every(rules_1.isJSONType))\n return types;\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n const { gen, data, opts } = it;\n const coerceTo = coerceToTypes(types, opts.coerceTypes);\n const checkTypes = types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n gen.if(wrongType, () => {\n if (coerceTo.length)\n coerceData(it, types, coerceTo);\n else\n reportTypeError(it);\n });\n }\n return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : [];\n}\nfunction coerceData(it, types, coerceTo) {\n const { gen, data, opts } = it;\n const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n if (opts.coerceTypes === \"array\") {\n gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n .assign(data, (0, codegen_1._) `${data}[0]`)\n .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n }\n gen.if((0, codegen_1._) `${coerced} !== undefined`);\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t);\n }\n }\n gen.else();\n reportTypeError(it);\n gen.endIf();\n gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n gen.assign(data, coerced);\n assignParentData(it, coerced);\n });\n function coerceSpecificType(t) {\n switch (t) {\n case \"string\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n .elseIf((0, codegen_1._) `${data} === null`)\n .assign(coerced, (0, codegen_1._) `\"\"`);\n return;\n case \"number\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"integer\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"boolean\":\n gen\n .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true);\n return;\n case \"null\":\n gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n gen.assign(coerced, null);\n return;\n case \"array\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`)\n .assign(coerced, (0, codegen_1._) `[${data}]`);\n }\n }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n // TODO use gen.property\n gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n let cond;\n switch (dataType) {\n case \"null\":\n return (0, codegen_1._) `${data} ${EQ} null`;\n case \"array\":\n cond = (0, codegen_1._) `Array.isArray(${data})`;\n break;\n case \"object\":\n cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n break;\n case \"integer\":\n cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n break;\n case \"number\":\n cond = numCond();\n break;\n default:\n return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n }\n return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n function numCond(_cond = codegen_1.nil) {\n return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct);\n }\n let cond;\n const types = (0, util_1.toHash)(dataTypes);\n if (types.array && types.object) {\n const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n delete types.null;\n delete types.array;\n delete types.object;\n }\n else {\n cond = codegen_1.nil;\n }\n if (types.number)\n delete types.integer;\n for (const t in types)\n cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n message: ({ schema }) => `must be ${schema}`,\n params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n const cxt = getTypeErrorContext(it);\n (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n const { gen, data, schema } = it;\n const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n };\n}\n//# sourceMappingURL=dataType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignDefaults = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction assignDefaults(it, ty) {\n const { properties, items } = it.schema;\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default);\n }\n }\n else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i) => assignDefault(it, i, sch.default));\n }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n const { gen, compositeRule, data, opts } = it;\n if (defaultValue === undefined)\n return;\n const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n if (compositeRule) {\n (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n return;\n }\n let condition = (0, codegen_1._) `${childData} === undefined`;\n if (opts.useDefaults === \"empty\") {\n condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = require(\"../compile/codegen\");\nconst util_1 = require(\"../compile/util\");\nconst names_1 = require(\"../compile/names\");\nconst util_2 = require(\"../compile/util\");\nfunction checkReportMissingProp(cxt, prop) {\n const { gen, data, it } = cxt;\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n cxt.error();\n });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n cxt.setParams({ missingProperty: missing }, true);\n cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n const valCxt = [\n [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n [names_1.default.parentData, it.parentData],\n [names_1.default.parentDataProperty, it.parentDataProperty],\n [names_1.default.rootData, names_1.default.rootData],\n ];\n if (it.opts.dynamicRef)\n valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n const u = opts.unicodeRegExp ? \"u\" : \"\";\n const { regExp } = opts.code;\n const rx = regExp(pattern, u);\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true);\n validateItems(() => gen.assign(validArr, false));\n return validArr;\n }\n gen.var(valid, true);\n validateItems(() => gen.break());\n return valid;\n function validateItems(notValid) {\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword,\n dataProp: i,\n dataPropType: util_1.Type.Num,\n }, valid);\n gen.if((0, codegen_1.not)(valid), notValid);\n });\n }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n const { gen, schema, keyword, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n if (alwaysValid && !it.opts.unevaluated)\n return;\n const valid = gen.let(\"valid\", false);\n const schValid = gen.name(\"_valid\");\n gen.block(() => schema.forEach((_sch, i) => {\n const schCxt = cxt.subschema({\n keyword,\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged)\n gen.if((0, codegen_1.not)(valid));\n }));\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst errors_1 = require(\"../errors\");\nfunction macroKeywordCode(cxt, def) {\n const { gen, keyword, schema, parentSchema, it } = cxt;\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n const schemaRef = useKeyword(gen, keyword, macroSchema);\n if (it.opts.validateSchema !== false)\n it.self.validateSchema(macroSchema, true);\n const valid = gen.name(\"valid\");\n cxt.subschema({\n schema: macroSchema,\n schemaPath: codegen_1.nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n }, valid);\n cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n var _a;\n const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n checkAsyncKeyword(it, def);\n const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n const validateRef = useKeyword(gen, keyword, validate);\n const valid = gen.let(\"valid\");\n cxt.block$data(valid, validateKeyword);\n cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n function validateKeyword() {\n if (def.errors === false) {\n assignValid();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => cxt.error());\n }\n else {\n const ruleErrs = def.async ? validateAsync() : validateSync();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => addErrs(cxt, ruleErrs));\n }\n }\n function validateAsync() {\n const ruleErrs = gen.let(\"ruleErrs\", null);\n gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n return ruleErrs;\n }\n function validateSync() {\n const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n gen.assign(validateErrs, null);\n assignValid(codegen_1.nil);\n return validateErrs;\n }\n function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n }\n function reportErrs(errors) {\n var _a;\n gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n const { gen, data, it } = cxt;\n gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n const { gen } = cxt;\n gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n gen\n .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n (0, errors_1.extendErrors)(cxt);\n }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n if (def.async && !schemaEnv.$async)\n throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n if (result === undefined)\n throw new Error(`keyword \"${keyword}\" failed to compile`);\n return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n // TODO add tests\n return (!schemaType.length ||\n schemaType.some((st) => st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\");\n }\n const deps = def.dependencies;\n if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n }\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword]);\n if (!valid) {\n const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors);\n if (opts.validateSchema === \"log\")\n self.logger.error(msg);\n else\n throw new Error(msg);\n }\n }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n }\n if (keyword !== undefined) {\n const sch = it.schema[keyword];\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n };\n }\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n };\n }\n throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n }\n const { gen } = it;\n if (dataProp !== undefined) {\n const { errorPath, dataPathArr, opts } = it;\n const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n dataContextProps(nextData);\n subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n }\n if (data !== undefined) {\n const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n dataContextProps(nextData);\n if (propertyName !== undefined)\n subschema.propertyName = propertyName;\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n if (dataTypes)\n subschema.dataTypes = dataTypes;\n function dataContextProps(_nextData) {\n subschema.data = _nextData;\n subschema.dataLevel = it.dataLevel + 1;\n subschema.dataTypes = [];\n it.definedProperties = new Set();\n subschema.parentData = it.data;\n subschema.dataNames = [...it.dataNames, _nextData];\n }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n if (compositeRule !== undefined)\n subschema.compositeRule = compositeRule;\n if (createErrors !== undefined)\n subschema.createErrors = createErrors;\n if (allErrors !== undefined)\n subschema.allErrors = allErrors;\n subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i (count += countKeys(sch)));\n }\n if (count === Infinity)\n return Infinity;\n }\n return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n if (normalize !== false)\n id = normalizeId(id);\n const p = resolver.parse(id);\n return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n const serialized = resolver.serialize(p);\n return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n id = normalizeId(id);\n return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n if (typeof schema == \"boolean\")\n return {};\n const { schemaId, uriResolver } = this.opts;\n const schId = normalizeId(schema[schemaId] || baseId);\n const baseIds = { \"\": schId };\n const pathPrefix = getFullPath(uriResolver, schId, false);\n const localRefs = {};\n const schemaRefs = new Set();\n traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined)\n return;\n const fullPath = pathPrefix + jsonPtr;\n let innerBaseId = baseIds[parentJsonPtr];\n if (typeof sch[schemaId] == \"string\")\n innerBaseId = addRef.call(this, sch[schemaId]);\n addAnchor.call(this, sch.$anchor);\n addAnchor.call(this, sch.$dynamicAnchor);\n baseIds[jsonPtr] = innerBaseId;\n function addRef(ref) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve;\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);\n if (schemaRefs.has(ref))\n throw ambiguos(ref);\n schemaRefs.add(ref);\n let schOrRef = this.refs[ref];\n if (typeof schOrRef == \"string\")\n schOrRef = this.refs[schOrRef];\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref);\n }\n else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref);\n localRefs[ref] = sch;\n }\n else {\n this.refs[ref] = fullPath;\n }\n }\n return ref;\n }\n function addAnchor(anchor) {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor))\n throw new Error(`invalid anchor \"${anchor}\"`);\n addRef.call(this, `#${anchor}`);\n }\n }\n });\n return localRefs;\n function checkAmbiguosRef(sch1, sch2, ref) {\n if (sch2 !== undefined && !equal(sch1, sch2))\n throw ambiguos(ref);\n }\n function ambiguos(ref) {\n return new Error(`reference \"${ref}\" resolves to more than one schema`);\n }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = require(\"./boolSchema\");\nconst dataType_1 = require(\"./dataType\");\nconst applicability_1 = require(\"./applicability\");\nconst dataType_2 = require(\"./dataType\");\nconst defaults_1 = require(\"./defaults\");\nconst keyword_1 = require(\"./keyword\");\nconst subschema_1 = require(\"./subschema\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst resolve_1 = require(\"../resolve\");\nconst util_1 = require(\"../util\");\nconst errors_1 = require(\"../errors\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it);\n return;\n }\n }\n validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n if (opts.code.es5) {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n destructureValCxtES5(gen, opts);\n gen.code(body);\n });\n }\n else {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n }\n}\nfunction destructureValCxt(opts) {\n return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n gen.if(names_1.default.valCxt, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n }, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.rootData, names_1.default.data);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n });\n}\nfunction topSchemaObjCode(it) {\n const { schema, opts, gen } = it;\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n checkNoDefault(it);\n gen.let(names_1.default.vErrors, null);\n gen.let(names_1.default.errors, 0);\n if (opts.unevaluated)\n resetEvaluated(it);\n typeAndKeywords(it);\n returnResults(it);\n });\n return;\n}\nfunction resetEvaluated(it) {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const { gen, validateName } = it;\n it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n const schId = typeof schema == \"object\" && schema[opts.schemaId];\n return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid);\n return;\n }\n }\n (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (self.RULES.all[key])\n return true;\n return false;\n}\nfunction isSchemaObj(it) {\n return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n const { schema, gen, opts } = it;\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n updateContext(it);\n checkAsyncSchema(it);\n const errsCount = gen.const(\"_errs\", names_1.default.errors);\n typeAndKeywords(it, errsCount);\n // TODO var\n gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n (0, util_1.checkUnknownRules)(it);\n checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n if (it.opts.jtd)\n return schemaKeywords(it, [], false, errsCount);\n const types = (0, dataType_1.getSchemaTypes)(it.schema);\n const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n const { schema, errSchemaPath, opts, self } = it;\n if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n }\n}\nfunction checkNoDefault(it) {\n const { schema, opts } = it;\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n }\n}\nfunction updateContext(it) {\n const schId = it.schema[it.opts.schemaId];\n if (schId)\n it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n if (it.schema.$async && !it.schemaEnv.$async)\n throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n const msg = schema.$comment;\n if (opts.$comment === true) {\n gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n }\n else if (typeof opts.$comment == \"function\") {\n const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n }\n}\nfunction returnResults(it) {\n const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n if (opts.unevaluated)\n assignEvaluated(it);\n gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n if (props instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n if (items instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n const { gen, schema, data, allErrors, opts, self } = it;\n const { RULES } = self;\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n return;\n }\n if (!opts.jtd)\n checkStrictTypes(it, types);\n gen.block(() => {\n for (const group of RULES.rules)\n groupKeywords(group);\n groupKeywords(RULES.post);\n });\n function groupKeywords(group) {\n if (!(0, applicability_1.shouldUseGroup)(schema, group))\n return;\n if (group.type) {\n gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n iterateKeywords(it, group);\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else();\n (0, dataType_2.reportTypeError)(it);\n }\n gen.endIf();\n }\n else {\n iterateKeywords(it, group);\n }\n // TODO make it \"ok\" call?\n if (!allErrors)\n gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n }\n}\nfunction iterateKeywords(it, group) {\n const { gen, schema, opts: { useDefaults }, } = it;\n if (useDefaults)\n (0, defaults_1.assignDefaults)(it, group.type);\n gen.block(() => {\n for (const rule of group.rules) {\n if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type);\n }\n }\n });\n}\nfunction checkStrictTypes(it, types) {\n if (it.schemaEnv.meta || !it.opts.strictTypes)\n return;\n checkContextTypes(it, types);\n if (!it.opts.allowUnionTypes)\n checkMultipleTypes(it, types);\n checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n if (!types.length)\n return;\n if (!it.dataTypes.length) {\n it.dataTypes = types;\n return;\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n }\n });\n narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n }\n}\nfunction checkKeywordTypes(it, ts) {\n const rules = it.self.RULES.all;\n for (const keyword in rules) {\n const rule = rules[keyword];\n if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n const { type } = rule.definition;\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n }\n }\n }\n}\nfunction hasApplicableType(schTs, kwdT) {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n const ts = [];\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t))\n ts.push(t);\n else if (withTypes.includes(\"integer\") && t === \"number\")\n ts.push(\"integer\");\n }\n it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n msg += ` at \"${schemaPath}\" (strictTypes)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n constructor(it, def, keyword) {\n (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n this.gen = it.gen;\n this.allErrors = it.allErrors;\n this.keyword = keyword;\n this.data = it.data;\n this.schema = it.schema[keyword];\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n this.schemaType = def.schemaType;\n this.parentSchema = it.schema;\n this.params = {};\n this.it = it;\n this.def = def;\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n }\n else {\n this.schemaCode = this.schemaValue;\n if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n }\n }\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n }\n }\n result(condition, successAction, failAction) {\n this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n }\n failResult(condition, successAction, failAction) {\n this.gen.if(condition);\n if (failAction)\n failAction();\n else\n this.error();\n if (successAction) {\n this.gen.else();\n successAction();\n if (this.allErrors)\n this.gen.endIf();\n }\n else {\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n }\n pass(condition, failAction) {\n this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n }\n fail(condition) {\n if (condition === undefined) {\n this.error();\n if (!this.allErrors)\n this.gen.if(false); // this branch will be removed by gen.optimize\n return;\n }\n this.gen.if(condition);\n this.error();\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n fail$data(condition) {\n if (!this.$data)\n return this.fail(condition);\n const { schemaCode } = this;\n this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n }\n error(append, errorParams, errorPaths) {\n if (errorParams) {\n this.setParams(errorParams);\n this._error(append, errorPaths);\n this.setParams({});\n return;\n }\n this._error(append, errorPaths);\n }\n _error(append, errorPaths) {\n ;\n (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n }\n $dataError() {\n (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n }\n reset() {\n if (this.errsCount === undefined)\n throw new Error('add \"trackErrors\" to keyword definition');\n (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n }\n ok(cond) {\n if (!this.allErrors)\n this.gen.if(cond);\n }\n setParams(obj, assign) {\n if (assign)\n Object.assign(this.params, obj);\n else\n this.params = obj;\n }\n block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n this.gen.block(() => {\n this.check$data(valid, $dataValid);\n codeBlock();\n });\n }\n check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n if (!this.$data)\n return;\n const { gen, schemaCode, schemaType, def } = this;\n gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n if (valid !== codegen_1.nil)\n gen.assign(valid, true);\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data());\n this.$dataError();\n if (valid !== codegen_1.nil)\n gen.assign(valid, false);\n }\n gen.else();\n }\n invalid$data() {\n const { gen, schemaCode, schemaType, def, it } = this;\n return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n function wrong$DataType() {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof codegen_1.Name))\n throw new Error(\"ajv implementation error\");\n const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n }\n return codegen_1.nil;\n }\n function invalid$DataSchema() {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n }\n return codegen_1.nil;\n }\n }\n subschema(appl, valid) {\n const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n (0, subschema_1.extendSubschemaMode)(subschema, appl);\n const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n subschemaCode(nextContext, valid);\n return nextContext;\n }\n mergeEvaluated(schemaCxt, toName) {\n const { it, gen } = this;\n if (!it.opts.unevaluated)\n return;\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n }\n }\n mergeValidEvaluated(schemaCxt, valid) {\n const { it, gen } = this;\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n return true;\n }\n }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n const cxt = new KeywordCxt(it, def, keyword);\n if (\"code\" in def) {\n def.code(cxt, ruleType);\n }\n else if (cxt.$data && def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n else if (\"macro\" in def) {\n (0, keyword_1.macroKeywordCode)(cxt, def);\n }\n else if (def.compile || def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n let jsonPointer;\n let data;\n if ($data === \"\")\n return names_1.default.rootData;\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data))\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n jsonPointer = $data;\n data = names_1.default.rootData;\n }\n else {\n const matches = RELATIVE_JSON_POINTER.exec($data);\n if (!matches)\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n const up = +matches[1];\n jsonPointer = matches[2];\n if (jsonPointer === \"#\") {\n if (up >= dataLevel)\n throw new Error(errorMsg(\"property/index\", up));\n return dataPathArr[dataLevel - up];\n }\n if (up > dataLevel)\n throw new Error(errorMsg(\"data\", up));\n data = dataNames[dataLevel - up];\n if (!jsonPointer)\n return data;\n }\n let expr = data;\n const segments = jsonPointer.split(\"/\");\n for (const segment of segments) {\n if (segment) {\n data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n expr = (0, codegen_1._) `${expr} && ${data}`;\n }\n }\n return expr;\n function errorMsg(pointerType, up) {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValidationError extends Error {\n constructor(errors) {\n super(\"validation failed\");\n this.errors = errors;\n this.ajv = this.validation = true;\n }\n}\nexports.default = ValidationError;\n//# sourceMappingURL=validation_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolve_1 = require(\"./resolve\");\nclass MissingRefError extends Error {\n constructor(resolver, baseId, ref, msg) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n }\n}\nexports.default = MissingRefError;\n//# sourceMappingURL=ref_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst validation_error_1 = require(\"../runtime/validation_error\");\nconst names_1 = require(\"./names\");\nconst resolve_1 = require(\"./resolve\");\nconst util_1 = require(\"./util\");\nconst validate_1 = require(\"./validate\");\nclass SchemaEnv {\n constructor(env) {\n var _a;\n this.refs = {};\n this.dynamicAnchors = {};\n let schema;\n if (typeof env.schema == \"object\")\n schema = env.schema;\n this.schema = env.schema;\n this.schemaId = env.schemaId;\n this.root = env.root || this;\n this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n this.schemaPath = env.schemaPath;\n this.localRefs = env.localRefs;\n this.meta = env.meta;\n this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n this.refs = {};\n }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch);\n if (_sch)\n return _sch;\n const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n const { es5, lines } = this.opts.code;\n const { ownProperties } = this.opts;\n const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n let _ValidationError;\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: validation_error_1.default,\n code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n });\n }\n const validateName = gen.scopeName(\"validate\");\n sch.validateName = validateName;\n const schemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: names_1.default.data,\n parentData: names_1.default.parentData,\n parentDataProperty: names_1.default.parentDataProperty,\n dataNames: [names_1.default.data],\n dataPathArr: [codegen_1.nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set(),\n topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n : { ref: sch.schema }),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: codegen_1.nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: (0, codegen_1._) `\"\"`,\n opts: this.opts,\n self: this,\n };\n let sourceCode;\n try {\n this._compilations.add(sch);\n (0, validate_1.validateFunctionCode)(schemaCxt);\n gen.optimize(this.opts.code.optimize);\n // gen.optimize(1)\n const validateCode = gen.toString();\n sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process)\n sourceCode = this.opts.code.process(sourceCode, sch);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n const validate = makeValidate(this, this.scope.get());\n this.scope.value(validateName, { ref: validate });\n validate.errors = null;\n validate.schema = sch.schema;\n validate.schemaEnv = sch;\n if (sch.$async)\n validate.$async = true;\n if (this.opts.code.source === true) {\n validate.source = { validateName, validateCode, scopeValues: gen._values };\n }\n if (this.opts.unevaluated) {\n const { props, items } = schemaCxt;\n validate.evaluated = {\n props: props instanceof codegen_1.Name ? undefined : props,\n items: items instanceof codegen_1.Name ? undefined : items,\n dynamicProps: props instanceof codegen_1.Name,\n dynamicItems: items instanceof codegen_1.Name,\n };\n if (validate.source)\n validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n }\n sch.validate = validate;\n return sch;\n }\n catch (e) {\n delete sch.validate;\n delete sch.validateName;\n if (sourceCode)\n this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e;\n }\n finally {\n this._compilations.delete(sch);\n }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n var _a;\n ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n const schOrFunc = root.refs[ref];\n if (schOrFunc)\n return schOrFunc;\n let _sch = resolve.call(this, root, ref);\n if (_sch === undefined) {\n const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n const { schemaId } = this.opts;\n if (schema)\n _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n }\n if (_sch === undefined)\n return;\n return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n return sch.schema;\n return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv))\n return sch;\n }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n let sch;\n while (typeof (sch = this.refs[ref]) == \"string\")\n ref = sch;\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n const p = this.opts.uriResolver.parse(ref);\n const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root);\n }\n const id = (0, resolve_1.normalizeId)(refPath);\n const schOrRef = this.refs[id] || this.schemas[id];\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef);\n if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n return;\n return getJsonPointer.call(this, p, sch);\n }\n if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n return;\n if (!schOrRef.validate)\n compileSchema.call(this, schOrRef);\n if (id === (0, resolve_1.normalizeId)(ref)) {\n const { schema } = schOrRef;\n const { schemaId } = this.opts;\n const schId = schema[schemaId];\n if (schId)\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n return new SchemaEnv({ schema, schemaId, root, baseId });\n }\n return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n var _a;\n if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n return;\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\")\n return;\n const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n if (partSchema === undefined)\n return;\n schema = partSchema;\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n }\n }\n let env;\n if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n env = resolveSchema.call(this, root, $ref);\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const { schemaId } = this.opts;\n env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n if (env.schema !== env.root.schema)\n return env;\n return undefined;\n}\n//# sourceMappingURL=index.js.map","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/** @type {(value: string) => boolean} */\nconst isPort = RegExp.prototype.test.bind(/^\\d*$/u)\n\n/** @type {(value: string) => boolean} */\nconst isHexPair = RegExp.prototype.test.bind(/^[\\da-f]{2}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isUnreserved = RegExp.prototype.test.bind(/^[\\da-z\\-._~]$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:]$/u)\n\nconst BYTE_HEX = new Array(256)\n{\n const HEX_DIGITS = '0123456789ABCDEF'\n for (let i = 0; i < 256; i++) {\n BYTE_HEX[i] = '%' + HEX_DIGITS[i >> 4] + HEX_DIGITS[i & 0xF]\n }\n}\nfunction percentEncodeNonAscii (cp) {\n if (cp < 0x800) {\n return BYTE_HEX[0xC0 | (cp >> 6)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n if (cp < 0x10000) {\n return BYTE_HEX[0xE0 | (cp >> 12)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n return BYTE_HEX[0xF0 | (cp >> 18)] +\n BYTE_HEX[0x80 | ((cp >> 12) & 0x3F)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n}\n\n/**\n * @param {Array} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/** @type {(value: string) => boolean} */\nconst isHextet = RegExp.prototype.test.bind(/^[\\dA-Fa-f]{1,4}$/)\n\n/** @type {(value: string) => boolean} */\nconst isIPvFuture = RegExp.prototype.test.bind(/^[vV][\\dA-Fa-f]+\\.[A-Za-z\\d\\-._~!$&'()*+,;=:]+$/)\n\n/** @type {(value: string) => boolean} */\nconst isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\\d\\-._~]$/)\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {string} zone\n * @returns {boolean}\n */\nfunction isZoneIdentifier (zone) {\n if (zone.length === 0) return false\n\n for (let i = 0; i < zone.length; i++) {\n if (isZoneCharacter(zone[i])) continue\n if (zone[i] === '%' && i + 2 < zone.length && isHexPair(zone.slice(i + 1, i + 3))) {\n i += 2\n continue\n }\n return false\n }\n\n return true\n}\n\n/**\n * Compresses the longest run of zero hextets to \"::\" per RFC 5952. A run of a\n * single zero hextet is left uncompressed. On ties the leftmost run wins.\n *\n * @param {string[]} hextets\n * @returns {string}\n */\nfunction compressIPv6ZeroRun (hextets) {\n let bestStart = -1\n let bestLength = 0\n let runStart = -1\n let runLength = 0\n for (let i = 0; i < hextets.length; i++) {\n if (hextets[i] === '0') {\n if (runStart === -1) runStart = i\n runLength++\n if (runLength > bestLength) {\n bestLength = runLength\n bestStart = runStart\n }\n } else {\n runStart = -1\n runLength = 0\n }\n }\n\n if (bestLength < 2) return hextets.join(':')\n\n const head = hextets.slice(0, bestStart).join(':')\n const tail = hextets.slice(bestStart + bestLength).join(':')\n return head + '::' + tail\n}\n\n/**\n * Validates an IPv6 address against the alternatives in RFC 3986 section\n * 3.2.2 and returns the same address with leading hextet zeroes removed.\n * An embedded IPv4 address counts as two hextets and is only valid at the end.\n *\n * @param {string} input\n * @returns {string|undefined}\n */\nfunction normalizeIPv6Address (input) {\n const compression = input.indexOf('::')\n if (compression !== -1 && input.indexOf('::', compression + 1) !== -1) return undefined\n\n const left = compression === -1 ? input.split(':') : input.slice(0, compression).split(':')\n const right = compression === -1 ? [] : input.slice(compression + 2).split(':')\n if (compression !== -1) {\n if (left.length === 1 && left[0] === '') left.length = 0\n if (right.length === 1 && right[0] === '') right.length = 0\n }\n\n const parts = left.concat(right)\n let hextetCount = 0\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part === '') return undefined\n\n if (part.indexOf('.') !== -1) {\n if (i !== parts.length - 1 || (compression !== -1 && right.length === 0) || !isIPv4(part)) return undefined\n hextetCount += 2\n continue\n }\n\n if (!isHextet(part)) return undefined\n parts[i] = parseInt(part, 16).toString(16)\n hextetCount++\n }\n\n if (compression === -1) {\n if (hextetCount !== 8) return undefined\n return compressIPv6ZeroRun(parts)\n }\n if (hextetCount >= 8) return undefined\n\n // expand \"::\" then re-compress the longest run for a canonical result\n const expanded = parts.slice(0, left.length)\n for (let i = hextetCount; i < 8; i++) expanded.push('0')\n for (let i = left.length; i < parts.length; i++) expanded.push(parts[i])\n return compressIPv6ZeroRun(expanded)\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n * @property {boolean} [isIPVFuture] - Indicates if the host is an IPvFuture literal.\n * @property {boolean} [error] - Indicates if a bracketed IP literal is malformed.\n */\n\n/**\n * Validates and normalizes a bracketed IP literal. Raw zone separators remain\n * accepted for backwards compatibility, while encoded separators and zone\n * contents follow RFC 6874.\n *\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n const bracketed = host[0] === '[' && host[host.length - 1] === ']'\n const hasBracket = host[0] === '[' || host[host.length - 1] === ']'\n if (hasBracket && !bracketed) return { host, isIPV6: false, error: true }\n\n let input = bracketed ? host.slice(1, -1) : host\n if (bracketed && isIPvFuture(input)) {\n input = input.toLowerCase()\n return { host: `[${input}]`, escapedHost: input, isIPV6: false, isIPVFuture: true }\n }\n\n if (findToken(input, ':') < 2) {\n return { host, isIPV6: false, error: bracketed }\n }\n\n let zoneIdentifier = ''\n const zoneSeparator = input.indexOf('%')\n if (zoneSeparator !== -1) {\n const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === '%25' ? 3 : 1\n zoneIdentifier = input.slice(zoneSeparator + separatorLength)\n if (!isZoneIdentifier(zoneIdentifier)) return { host, isIPV6: false, error: true }\n input = input.slice(0, zoneSeparator)\n }\n\n const address = normalizeIPv6Address(input)\n if (address === undefined) return { host, isIPV6: false, error: true }\n\n return {\n host: address + (zoneIdentifier ? '%' + zoneIdentifier : ''),\n escapedHost: address + (zoneIdentifier ? '%25' + zoneIdentifier : ''),\n isIPV6: true\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.' || input[1] === '/') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * Re-escape RFC 3986 gen-delims that must not appear literally in the host.\n * After the URI regex parses, these characters cannot be literal in the host\n * field, so any that appear after decoding came from percent-encoding and\n * must be restored to prevent authority structure changes.\n *\n * @param {string} host\n * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)\n * @returns {string}\n */\nconst HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' }\nconst HOST_DELIM_RE = /[@/?#:]/g\nconst HOST_DELIM_NO_COLON_RE = /[@/?#]/g\n\nfunction reescapeHostDelimiters (host, isIP) {\n const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE\n re.lastIndex = 0\n return host.replace(re, (ch) => HOST_DELIMS[ch])\n}\n\n/**\n * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.\n * Reserved delimiters such as `%2F` stay escaped; `%2E` is unreserved.\n *\n * @param {string} input\n * @param {boolean} [decodeUnreserved=false]\n * @returns {string}\n */\nfunction normalizePercentEncoding (input, decodeUnreserved = false) {\n if (input.indexOf('%') === -1) {\n return input\n }\n\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decodeUnreserved && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n output += input[i]\n }\n\n return output\n}\n\n/**\n * Normalizes path data without turning reserved escapes into live path syntax.\n * Valid escapes are uppercased, raw unsafe characters are escaped, and only\n * unreserved bytes that are not `.` are decoded.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizePathEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decoded !== '.' && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isPathCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Serializes a path without rewriting reserved data. Raw RFC 3986 path\n * characters remain literal, valid escapes are preserved and uppercased, and\n * everything else is UTF-8 percent-encoded. In a path-noscheme, a colon in the\n * first segment must be escaped so the result cannot be parsed as a scheme.\n *\n * @param {string} input\n * @param {boolean} [pathNoScheme=false]\n * @returns {string}\n */\nfunction serializePathEncoding (input, pathNoScheme = false) {\n let output = ''\n let firstSegment = pathNoScheme && input[0] !== '/'\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (ch === '/') {\n firstSegment = false\n }\n\n if (isPathCharacter(ch) && (ch !== ':' || !firstSegment)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Percent-encodes a URI component using its RFC 3986 literal character set.\n * Existing valid escapes are preserved and normalized to uppercase hex.\n *\n * @param {string} input\n * @param {(value: string) => boolean} isAllowed\n * @returns {string}\n */\nfunction encodeComponent (input, isAllowed) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (isAllowed(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Encodes userinfo while preserving its RFC 3986 §3.2.1 literal characters.\n * In particular, authority delimiters such as `@`, `/`, `?`, and `#` are data.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeUserinfo (input) {\n return encodeComponent(input, isUserinfoCharacter)\n}\n\n/**\n * Encodes query data using the RFC 3986 §3.4 grammar. A literal `#` must be\n * escaped because it would otherwise begin the fragment component.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeQuery (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\n/**\n * Encodes fragment data using the RFC 3986 §3.5 grammar.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeFragment (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\nfunction isEscapeSafe (cp) {\n return (\n (cp >= 0x30 && cp <= 0x39) ||\n (cp >= 0x41 && cp <= 0x5A) ||\n (cp >= 0x61 && cp <= 0x7A) ||\n cp === 0x2A || cp === 0x2B || cp === 0x2D || cp === 0x2E ||\n cp === 0x2F || cp === 0x40 || cp === 0x5F\n )\n}\n\n/**\n * Normalizes the percent-encoding of a query or fragment component.\n *\n * Like `normalizePathEncoding`, but uses the query/fragment character set\n * (which additionally allows `?`) and decodes `.` since it has no dot-segment\n * meaning outside of a path.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeQueryFragmentEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isQueryFragmentCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Escapes a component while preserving existing valid percent escapes.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction escapePreservingEscapes (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n output += escape(input[i])\n }\n\n return output\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(encodeUserinfo(component.userinfo))\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = component.host\n if (!isIPv4(host)) {\n let ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {\n // Decode only unreserved bytes, once. In particular, keep %25 encoded\n // so it cannot introduce a second escape during recomposition.\n host = normalizePercentEncoding(host, true)\n ipV6res = normalizeIPv6(host)\n }\n if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = reescapeHostDelimiters(host, false)\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n const port = String(component.port)\n if (!isPort(port)) {\n throw new TypeError('URI port is malformed.')\n }\n uriTokens.push(':')\n uriTokens.push(port)\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n nonSimpleDomain,\n recomposeAuthority,\n reescapeHostDelimiters,\n normalizePercentEncoding,\n normalizePathEncoding,\n serializePathEncoding,\n normalizeQueryFragmentEncoding,\n encodeUserinfo,\n encodeQuery,\n encodeFragment,\n escapePreservingEscapes,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /^([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-./:;=@]|%[\\da-f]{2})+)$/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const queryIndex = wsComponent.resourceName.indexOf('?')\n const path = queryIndex === -1\n ? wsComponent.resourceName\n : wsComponent.resourceName.slice(0, queryIndex)\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = queryIndex === -1\n ? undefined\n : wsComponent.resourceName.slice(queryIndex + 1)\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches && matches[0] === urnComponent.path) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\nconst VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u\nconst MALFORMED_SCHEME_ERROR = 'URI scheme is malformed.'\n\n/**\n * @param {string} scheme\n * @returns {string}\n */\nfunction decodeValidScheme (scheme) {\n const decodedScheme = unescape(String(scheme))\n if (!VALID_SCHEME.test(decodedScheme)) {\n throw new TypeError(MALFORMED_SCHEME_ERROR)\n }\n return decodedScheme\n}\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (normalizeString(uri, options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const {\n parsed: baseParsed,\n malformedAuthorityOrPort: baseMalformed,\n malformedPercentEncoding: baseMalformedPercentEncoding,\n malformedSchemeSpecific: baseMalformedSchemeSpecific,\n malformedHost: baseMalformedHost,\n malformedScheme: baseMalformedScheme\n } = parseWithStatus(baseURI, schemelessOptions)\n const {\n parsed: relativeParsed,\n malformedAuthorityOrPort: relativeMalformed,\n malformedPercentEncoding: relativeMalformedPercentEncoding,\n malformedSchemeSpecific: relativeMalformedSchemeSpecific,\n malformedHost: relativeMalformedHost,\n malformedScheme: relativeMalformedScheme\n } = parseWithStatus(relativeURI, schemelessOptions)\n if (\n baseMalformed ||\n relativeMalformed ||\n baseMalformedPercentEncoding ||\n relativeMalformedPercentEncoding ||\n baseMalformedSchemeSpecific ||\n relativeMalformedSchemeSpecific ||\n baseMalformedHost ||\n relativeMalformedHost ||\n baseMalformedScheme ||\n relativeMalformedScheme\n ) {\n throw new Error(baseParsed.error || relativeParsed.error || 'URI is malformed.')\n }\n const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true)\n const resolvedSchemeHandler = getSchemeHandler((options && options.scheme) || resolved.scheme)\n const resolvedHost = resolved.host\n const resolvedHostIsIP = resolvedHost !== undefined && resolvedHost !== '' &&\n (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6)\n canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP)\n // Percent escapes in an ASCII reg-name are encoded data. The WHATWG hostname\n // parser can reject them even though fast-uri preserves them safely as RFC\n // 3986 data. A raw non-ASCII host must still fail closed if conversion fails.\n const encodedASCIIHost = resolvedHost && resolvedHost.indexOf('%') !== -1 &&\n !/\\P{ASCII}/u.test(resolvedHost)\n if (resolved.error && !encodedASCIIHost) {\n throw new Error(resolved.error)\n }\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n const normalizedA = normalizeComparableURI(uriA, options)\n const normalizedB = normalizeComparableURI(uriB, options)\n\n return normalizedA !== undefined && normalizedB !== undefined && normalizedA === normalizedB\n}\n\n/**\n * @param {Readonly} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n if (component.scheme) {\n component.scheme = decodeValidScheme(component.scheme)\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n const hasAuthority = component.userinfo !== undefined || component.host !== undefined || component.port !== undefined\n const pathNoScheme = !options.skipEscape && component.scheme === undefined && !hasAuthority\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = serializePathEncoding(component.path, pathNoScheme)\n } else {\n component.path = normalizePercentEncoding(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n // Scheme handlers may replace the scheme during serialization.\n component.scheme = decodeValidScheme(component.scheme)\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n // Dot-segment removal can expose a colon that was not originally in the\n // first segment (for example, \"./a:b\"). Reapply path-noscheme encoding so\n // the serialized relative reference cannot be reparsed as a URI scheme.\n if (pathNoScheme) {\n s = serializePathEncoding(s, true)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', encodeQuery(component.query))\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', encodeFragment(component.fragment))\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n// Captures the authority component (between \"//\" and the next \"/\", \"?\" or \"#\"),\n// with or without a scheme prefix, for the literal-backslash rejection below.\nconst AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\\/\\/([^/?#]*)/\n\n// Captures the leading authority-introducer region after an optional scheme: a\n// run of forward slashes, backslashes, and the characters the WHATWG URL parser\n// removes before parsing (TAB U+0009, LF U+000A, CR U+000D). A valid introducer\n// is exactly \"//\". Node treats \"\\\" as \"/\" on special schemes and strips those\n// characters first, so forms like \"\\\\\", \"/\\\", \"\\/\", \"//\", or a leading\n// \"//\" reach an authority in Node while fast-uri's URI_PARSE folds them into\n// the path group (host confusion / SSRF / redirect bypass).\nconst AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\\\\t\\n\\r]*)/\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {RegExpMatchArray} matches\n * @returns {string|undefined}\n */\nfunction getParseError (parsed, matches) {\n if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {\n return 'URI path must start with \"/\" when authority is present.'\n }\n\n if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {\n return 'URI port is malformed.'\n }\n\n return undefined\n}\n\n/**\n * Checks percent syntax without decoding the represented octets. RFC 3986\n * percent-encoding is byte-oriented, so sequences such as `%FF` are valid even\n * though they are not independently valid UTF-8.\n *\n * @param {string|undefined} component\n * @returns {boolean}\n */\nfunction hasMalformedPercentEncoding (component) {\n if (component === undefined) return false\n\n let percent = component.indexOf('%')\n while (percent !== -1) {\n if (percent + 2 >= component.length || !/^[\\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) {\n return true\n }\n percent = component.indexOf('%', percent + 3)\n }\n\n return false\n}\n\n/**\n * Whether the host is a bracketed IP literal (RFC 3986 `IP-literal`).\n * An unterminated `[` is not a literal, so it must still be validated as a\n * reg-name instead of being waved through as an IP.\n *\n * @param {string} host\n * @returns {boolean}\n */\nfunction isIPLiteral (host) {\n return host[0] === '[' && host[host.length - 1] === ']'\n}\n\n/**\n * @param {RegExpMatchArray} matches\n * @returns {boolean}\n */\nfunction hasMalformedComponentPercentEncoding (matches) {\n // Bracketed IP literals use a raw \"%\" as the zone separator for historical\n // compatibility. Their parsing is intentionally left to normalizeIPv6.\n const host = matches[4]\n return hasMalformedPercentEncoding(matches[3]) ||\n (host !== undefined && !isIPLiteral(host) && hasMalformedPercentEncoding(host)) ||\n hasMalformedPercentEncoding(matches[6]) ||\n hasMalformedPercentEncoding(matches[7]) ||\n hasMalformedPercentEncoding(matches[8])\n}\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {import('./types/index').Options} options\n * @param {{ domainHost?: boolean, unicodeSupport?: boolean }|undefined} schemeHandler\n * @param {boolean} isIP\n * @returns {boolean} whether host conversion failed\n */\nfunction canonicalizeHost (parsed, options, schemeHandler, isIP) {\n if (\n !options.unicodeSupport &&\n (!schemeHandler || !schemeHandler.unicodeSupport) &&\n parsed.host &&\n !isIPLiteral(parsed.host) &&\n (options.domainHost || (schemeHandler && schemeHandler.domainHost)) &&\n isIP === false &&\n nonSimpleDomain(parsed.host)\n ) {\n try {\n parsed.host = new URL('http://' + parsed.host).hostname\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n return true\n }\n }\n return false\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction parseWithStatus (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let malformedAuthorityOrPort = false\n let malformedPercentEncoding = false\n let malformedSchemeSpecific = false\n let malformedHost = false\n let malformedIPLiteral = false\n let malformedScheme = false\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n // A literal backslash (U+005C) is not a valid RFC 3986 URI character and is\n // not an authority delimiter. Reject it in the authority rather than\n // rewriting it: normalizing \"\\\" -> \"/\" (WHATWG error recovery) could silently\n // change the resource identified by an otherwise-invalid input, and lets \"\\\"\n // act as a host delimiter here while Node's native URL parses a different\n // host (SSRF / redirect / origin-allowlist bypass). Percent-encoded %5C is\n // untouched and remains valid encoded data.\n const authorityMatch = uri.match(AUTHORITY_PREFIX)\n if (authorityMatch !== null && authorityMatch[1].indexOf('\\\\') !== -1) {\n parsed.error = 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n }\n\n // Reject a malformed or whitespace-smuggled authority introducer. fast-uri\n // only recognizes a literal \"//\"; anything else in the leading separator run\n // (a backslash, or a \"//\" that appears only after removing the TAB/LF/CR that\n // Node strips) means the authority fast-uri parses differs from the one Node's\n // URL resolves. Reject rather than rewrite, mirroring the literal-backslash\n // guard above. Percent-encoded forms (%5C, %09) are untouched, valid data.\n const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION)\n if (introducerMatch !== null) {\n const region = introducerMatch[1]\n const normalizedRegion = region.replace(/[\\t\\n\\r]/g, '')\n // Two or more leading separators introduce an authority.\n if (normalizedRegion.length >= 2) {\n if (normalizedRegion.slice(0, 2) !== '//') {\n parsed.error = parsed.error || 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n } else if (region.length !== normalizedRegion.length) {\n parsed.error = parsed.error || 'URI authority introducer must not contain whitespace.'\n malformedAuthorityOrPort = true\n }\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n if (parsed.scheme !== undefined) {\n const decodedScheme = unescape(parsed.scheme)\n if (VALID_SCHEME.test(decodedScheme)) {\n parsed.scheme = decodedScheme.toLowerCase()\n } else {\n parsed.error = parsed.error || MALFORMED_SCHEME_ERROR\n malformedScheme = true\n }\n }\n\n malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches)\n if (malformedPercentEncoding) {\n parsed.error = parsed.error || 'URI contains malformed percent-encoding.'\n }\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n\n const parseError = getParseError(parsed, matches)\n if (parseError !== undefined) {\n parsed.error = parsed.error || parseError\n malformedAuthorityOrPort = true\n }\n\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const bracketedIPLiteral = isIPLiteral(parsed.host)\n const hasIPLiteralBracket = parsed.host.indexOf('[') !== -1 || parsed.host.indexOf(']') !== -1\n const ipv6result = normalizeIPv6(parsed.host)\n isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true\n malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true)\n parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase()\n\n if (malformedIPLiteral) {\n parsed.error = parsed.error || 'URI host is malformed.'\n malformedAuthorityOrPort = true\n }\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // convert Unicode IDN -> ASCII IDN when the effective scheme uses domain hosts\n if (!malformedIPLiteral) {\n malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP)\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (uri.indexOf('%') !== -1) {\n if (parsed.host !== undefined && !malformedIPLiteral) {\n const host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true)\n parsed.host = reescapeHostDelimiters(host, isIP)\n }\n }\n if (parsed.path) {\n parsed.path = normalizePathEncoding(parsed.path)\n }\n if (parsed.query) {\n parsed.query = normalizeQueryFragmentEncoding(parsed.query)\n }\n if (parsed.fragment) {\n parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment)\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n if (schemeHandler === SCHEMES.urn && parsed.nid === undefined) {\n malformedSchemeSpecific = true\n }\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme }\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n return parseWithStatus(uri, opts).parsed\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction normalizeString (uri, opts) {\n return normalizeStringWithStatus(uri, opts).normalized\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ normalized: string, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction normalizeStringWithStatus (uri, opts) {\n const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts)\n return {\n normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize(parsed, opts),\n malformedAuthorityOrPort,\n malformedPercentEncoding,\n malformedSchemeSpecific,\n malformedHost,\n malformedScheme\n }\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string|undefined}\n */\nfunction normalizeComparableURI (uri, opts) {\n if (typeof uri !== 'string' && typeof uri !== 'object') {\n return undefined\n }\n\n let value\n try {\n value = typeof uri === 'string' ? uri : serialize(uri, opts)\n } catch {\n return undefined\n }\n const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts)\n return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? undefined : normalized\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uri = require(\"fast-uri\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports.default = uri;\n//# sourceMappingURL=uri.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nconst validation_error_1 = require(\"./runtime/validation_error\");\nconst ref_error_1 = require(\"./compile/ref_error\");\nconst rules_1 = require(\"./compile/rules\");\nconst compile_1 = require(\"./compile\");\nconst codegen_2 = require(\"./compile/codegen\");\nconst resolve_1 = require(\"./compile/resolve\");\nconst dataType_1 = require(\"./compile/validate/dataType\");\nconst util_1 = require(\"./compile/util\");\nconst $dataRefSchema = require(\"./refs/data.json\");\nconst uri_1 = require(\"./runtime/uri\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n]);\nconst removedOptions = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n const s = o.strict;\n const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n return {\n strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n uriResolver: uriResolver,\n };\n}\nclass Ajv {\n constructor(opts = {}) {\n this.schemas = {};\n this.refs = {};\n this.formats = Object.create(null);\n this._compilations = new Set();\n this._loading = {};\n this._cache = new Map();\n opts = this.opts = { ...opts, ...requiredOptions(opts) };\n const { es5, lines } = this.opts.code;\n this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n this.logger = getLogger(opts.logger);\n const formatOpt = opts.validateFormats;\n opts.validateFormats = false;\n this.RULES = (0, rules_1.getRules)();\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n this._metaOpts = getMetaSchemaOptions.call(this);\n if (opts.formats)\n addInitialFormats.call(this);\n this._addVocabularies();\n this._addDefaultMetaSchema();\n if (opts.keywords)\n addInitialKeywords.call(this, opts.keywords);\n if (typeof opts.meta == \"object\")\n this.addMetaSchema(opts.meta);\n addInitialSchemas.call(this);\n opts.validateFormats = formatOpt;\n }\n _addVocabularies() {\n this.addKeyword(\"$async\");\n }\n _addDefaultMetaSchema() {\n const { $data, meta, schemaId } = this.opts;\n let _dataRefSchema = $dataRefSchema;\n if (schemaId === \"id\") {\n _dataRefSchema = { ...$dataRefSchema };\n _dataRefSchema.id = _dataRefSchema.$id;\n delete _dataRefSchema.$id;\n }\n if (meta && $data)\n this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n }\n defaultMeta() {\n const { meta, schemaId } = this.opts;\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n }\n validate(schemaKeyRef, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data // to be validated\n ) {\n let v;\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema(schemaKeyRef);\n if (!v)\n throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n }\n else {\n v = this.compile(schemaKeyRef);\n }\n const valid = v(data);\n if (!(\"$async\" in v))\n this.errors = v.errors;\n return valid;\n }\n compile(schema, _meta) {\n const sch = this._addSchema(schema, _meta);\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n compileAsync(schema, meta) {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\");\n }\n const { loadSchema } = this.opts;\n return runCompileAsync.call(this, schema, meta);\n async function runCompileAsync(_schema, _meta) {\n await loadMetaSchema.call(this, _schema.$schema);\n const sch = this._addSchema(_schema, _meta);\n return sch.validate || _compileAsync.call(this, sch);\n }\n async function loadMetaSchema($ref) {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, { $ref }, true);\n }\n }\n async function _compileAsync(sch) {\n try {\n return this._compileSchemaEnv(sch);\n }\n catch (e) {\n if (!(e instanceof ref_error_1.default))\n throw e;\n checkLoaded.call(this, e);\n await loadMissingSchema.call(this, e.missingSchema);\n return _compileAsync.call(this, sch);\n }\n }\n function checkLoaded({ missingSchema: ref, missingRef }) {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n }\n }\n async function loadMissingSchema(ref) {\n const _schema = await _loadSchema.call(this, ref);\n if (!this.refs[ref])\n await loadMetaSchema.call(this, _schema.$schema);\n if (!this.refs[ref])\n this.addSchema(_schema, ref, meta);\n }\n async function _loadSchema(ref) {\n const p = this._loading[ref];\n if (p)\n return p;\n try {\n return await (this._loading[ref] = loadSchema(ref));\n }\n finally {\n delete this._loading[ref];\n }\n }\n }\n // Adds schema to the instance\n addSchema(schema, // If array is passed, `key` will be ignored\n key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ) {\n if (Array.isArray(schema)) {\n for (const sch of schema)\n this.addSchema(sch, undefined, _meta, _validateSchema);\n return this;\n }\n let id;\n if (typeof schema === \"object\") {\n const { schemaId } = this.opts;\n id = schema[schemaId];\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`);\n }\n }\n key = (0, resolve_1.normalizeId)(key || id);\n this._checkUnique(key);\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n return this;\n }\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(schema, key, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ) {\n this.addSchema(schema, key, true, _validateSchema);\n return this;\n }\n // Validate schema against its meta-schema\n validateSchema(schema, throwOrLogError) {\n if (typeof schema == \"boolean\")\n return true;\n let $schema;\n $schema = schema.$schema;\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\");\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\");\n this.errors = null;\n return true;\n }\n const valid = this.validate($schema, schema);\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText();\n if (this.opts.validateSchema === \"log\")\n this.logger.error(message);\n else\n throw new Error(message);\n }\n return valid;\n }\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema(keyRef) {\n let sch;\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n keyRef = sch;\n if (sch === undefined) {\n const { schemaId } = this.opts;\n const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n sch = compile_1.resolveSchema.call(this, root, keyRef);\n if (!sch)\n return;\n this.refs[keyRef] = sch;\n }\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef) {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef);\n this._removeAllSchemas(this.refs, schemaKeyRef);\n return this;\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas);\n this._removeAllSchemas(this.refs);\n this._cache.clear();\n return this;\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef);\n if (typeof sch == \"object\")\n this._cache.delete(sch.schema);\n delete this.schemas[schemaKeyRef];\n delete this.refs[schemaKeyRef];\n return this;\n }\n case \"object\": {\n const cacheKey = schemaKeyRef;\n this._cache.delete(cacheKey);\n let id = schemaKeyRef[this.opts.schemaId];\n if (id) {\n id = (0, resolve_1.normalizeId)(id);\n delete this.schemas[id];\n delete this.refs[id];\n }\n return this;\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\");\n }\n }\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions) {\n for (const def of definitions)\n this.addKeyword(def);\n return this;\n }\n addKeyword(kwdOrDef, def // deprecated\n ) {\n let keyword;\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef;\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n def.keyword = keyword;\n }\n }\n else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef;\n keyword = def.keyword;\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n }\n }\n else {\n throw new Error(\"invalid addKeywords parameters\");\n }\n checkKeyword.call(this, keyword, def);\n if (!def) {\n (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n return this;\n }\n keywordMetaschema.call(this, def);\n const definition = {\n ...def,\n type: (0, dataType_1.getJSONTypes)(def.type),\n schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n };\n (0, util_1.eachItem)(keyword, definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n return this;\n }\n getKeyword(keyword) {\n const rule = this.RULES.all[keyword];\n return typeof rule == \"object\" ? rule.definition : !!rule;\n }\n // Remove keyword\n removeKeyword(keyword) {\n // TODO return type should be Ajv\n const { RULES } = this;\n delete RULES.keywords[keyword];\n delete RULES.all[keyword];\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n if (i >= 0)\n group.rules.splice(i, 1);\n }\n return this;\n }\n // Add format\n addFormat(name, format) {\n if (typeof format == \"string\")\n format = new RegExp(format);\n this.formats[name] = format;\n return this;\n }\n errorsText(errors = this.errors, // optional array of validation errors\n { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n ) {\n if (!errors || errors.length === 0)\n return \"No errors\";\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg);\n }\n $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n const rules = this.RULES.all;\n metaSchema = JSON.parse(JSON.stringify(metaSchema));\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n let keywords = metaSchema;\n for (const seg of segments)\n keywords = keywords[seg];\n for (const key in rules) {\n const rule = rules[key];\n if (typeof rule != \"object\")\n continue;\n const { $data } = rule.definition;\n const schema = keywords[key];\n if ($data && schema)\n keywords[key] = schemaOrData(schema);\n }\n }\n return metaSchema;\n }\n _removeAllSchemas(schemas, regex) {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef];\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef];\n }\n else if (sch && !sch.meta) {\n this._cache.delete(sch.schema);\n delete schemas[keyRef];\n }\n }\n }\n }\n _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n let id;\n const { schemaId } = this.opts;\n if (typeof schema == \"object\") {\n id = schema[schemaId];\n }\n else {\n if (this.opts.jtd)\n throw new Error(\"schema must be object\");\n else if (typeof schema != \"boolean\")\n throw new Error(\"schema must be object or boolean\");\n }\n let sch = this._cache.get(schema);\n if (sch !== undefined)\n return sch;\n baseId = (0, resolve_1.normalizeId)(id || baseId);\n const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n this._cache.set(sch.schema, sch);\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId)\n this._checkUnique(baseId);\n this.refs[baseId] = sch;\n }\n if (validateSchema)\n this.validateSchema(schema, true);\n return sch;\n }\n _checkUnique(id) {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`);\n }\n }\n _compileSchemaEnv(sch) {\n if (sch.meta)\n this._compileMetaSchema(sch);\n else\n compile_1.compileSchema.call(this, sch);\n /* istanbul ignore if */\n if (!sch.validate)\n throw new Error(\"ajv implementation error\");\n return sch.validate;\n }\n _compileMetaSchema(sch) {\n const currentOpts = this.opts;\n this.opts = this._metaOpts;\n try {\n compile_1.compileSchema.call(this, sch);\n }\n finally {\n this.opts = currentOpts;\n }\n }\n}\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nexports.default = Ajv;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n for (const key in checkOpts) {\n const opt = key;\n if (opt in options)\n this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n }\n}\nfunction getSchEnv(keyRef) {\n keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n const optsSchemas = this.opts.schemas;\n if (!optsSchemas)\n return;\n if (Array.isArray(optsSchemas))\n this.addSchema(optsSchemas);\n else\n for (const key in optsSchemas)\n this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name];\n if (format)\n this.addFormat(name, format);\n }\n}\nfunction addInitialKeywords(defs) {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs);\n return;\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\");\n for (const keyword in defs) {\n const def = defs[keyword];\n if (!def.keyword)\n def.keyword = keyword;\n this.addKeyword(def);\n }\n}\nfunction getMetaSchemaOptions() {\n const metaOpts = { ...this.opts };\n for (const opt of META_IGNORE_OPTIONS)\n delete metaOpts[opt];\n return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n if (logger === false)\n return noLogs;\n if (logger === undefined)\n return console;\n if (logger.log && logger.warn && logger.error)\n return logger;\n throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n const { RULES } = this;\n (0, util_1.eachItem)(keyword, (kwd) => {\n if (RULES.keywords[kwd])\n throw new Error(`Keyword ${kwd} is already defined`);\n if (!KEYWORD_NAME.test(kwd))\n throw new Error(`Keyword ${kwd} has invalid name`);\n });\n if (!def)\n return;\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function');\n }\n}\nfunction addRule(keyword, definition, dataType) {\n var _a;\n const post = definition === null || definition === void 0 ? void 0 : definition.post;\n if (dataType && post)\n throw new Error('keyword with \"post\" flag cannot have \"type\"');\n const { RULES } = this;\n let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n if (!ruleGroup) {\n ruleGroup = { type: dataType, rules: [] };\n RULES.rules.push(ruleGroup);\n }\n RULES.keywords[keyword] = true;\n if (!definition)\n return;\n const rule = {\n keyword,\n definition: {\n ...definition,\n type: (0, dataType_1.getJSONTypes)(definition.type),\n schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n },\n };\n if (definition.before)\n addBeforeRule.call(this, ruleGroup, rule, definition.before);\n else\n ruleGroup.rules.push(rule);\n RULES.all[keyword] = rule;\n (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule);\n }\n else {\n ruleGroup.rules.push(rule);\n this.logger.warn(`rule ${before} is not defined`);\n }\n}\nfunction keywordMetaschema(def) {\n let { metaSchema } = def;\n if (metaSchema === undefined)\n return;\n if (def.$data && this.opts.$data)\n metaSchema = schemaOrData(metaSchema);\n def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst def = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n },\n};\nexports.default = def;\n//# sourceMappingURL=id.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt) {\n const { gen, schema: $ref, it } = cxt;\n const { baseId, schemaEnv: env, validateName, opts, self } = it;\n const { root } = env;\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n return callRootRef();\n const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n if (schOrEnv === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n if (schOrEnv instanceof compile_1.SchemaEnv)\n return callValidate(schOrEnv);\n return inlineRefSchema(schOrEnv);\n function callRootRef() {\n if (env === root)\n return callRef(cxt, validateName, env, env.$async);\n const rootName = gen.scopeValue(\"root\", { ref: root });\n return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n }\n function callValidate(sch) {\n const v = getValidate(cxt, sch);\n callRef(cxt, v, sch, sch.$async);\n }\n function inlineRefSchema(sch) {\n const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n const valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({\n schema: sch,\n dataTypes: [],\n schemaPath: codegen_1.nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n }, valid);\n cxt.mergeEvaluated(schCxt);\n cxt.ok(valid);\n }\n },\n};\nfunction getValidate(cxt, sch) {\n const { gen } = cxt;\n return sch.validate\n ? gen.scopeValue(\"validate\", { ref: sch.validate })\n : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n const { gen, it } = cxt;\n const { allErrors, schemaEnv: env, opts } = it;\n const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n if ($async)\n callAsyncRef();\n else\n callSyncRef();\n function callAsyncRef() {\n if (!env.$async)\n throw new Error(\"async schema referenced by sync schema\");\n const valid = gen.let(\"valid\");\n gen.try(() => {\n gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n if (!allErrors)\n gen.assign(valid, true);\n }, (e) => {\n gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n addErrorsFrom(e);\n if (!allErrors)\n gen.assign(valid, false);\n });\n cxt.ok(valid);\n }\n function callSyncRef() {\n cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n }\n function addErrorsFrom(source) {\n const errs = (0, codegen_1._) `${source}.errors`;\n gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n }\n function addEvaluatedFrom(source) {\n var _a;\n if (!it.opts.unevaluated)\n return;\n const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n }\n }\n else {\n const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n }\n }\n else {\n const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n }\n }\n }\n}\nexports.callRef = callRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst id_1 = require(\"./id\");\nconst ref_1 = require(\"./ref\");\nconst core = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n { keyword: \"$comment\" },\n \"definitions\",\n id_1.default,\n ref_1.default,\n];\nexports.default = core;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, schemaCode, it } = cxt;\n // const bdt = bad$DataType(schemaCode, def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision;\n const res = gen.let(\"res\");\n const invalid = prec\n ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : (0, codegen_1._) `${res} !== parseInt(${res})`;\n cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=multipleOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n const len = str.length;\n let length = 0;\n let pos = 0;\n let value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xfc00) === 0xdc00)\n pos++; // low surrogate\n }\n }\n return length;\n}\nexports.default = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst ucs2length_1 = require(\"../../runtime/ucs2length\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode, it } = cxt;\n const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitLength.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n if ($data) {\n const { regExp } = it.opts.code;\n const regExpCode = regExp.code === \"new RegExp\" ? (0, codegen_1._) `new RegExp` : (0, util_1.useFunc)(gen, regExp);\n const valid = gen.let(\"valid\");\n gen.try(() => gen.assign(valid, (0, codegen_1._) `${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));\n cxt.fail$data((0, codegen_1._) `!${valid}`);\n }\n else {\n const regExp = (0, code_1.usePattern)(cxt, schema);\n cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=pattern.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, schema, schemaCode, data, $data, it } = cxt;\n const { opts } = it;\n if (!$data && schema.length === 0)\n return;\n const useLoop = schema.length >= opts.loopRequired;\n if (it.allErrors)\n allErrorsMode();\n else\n exitOnErrorMode();\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties;\n const { definedProperties } = cxt.it;\n for (const requiredKey of schema) {\n if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n }\n }\n }\n function allErrorsMode() {\n if (useLoop || $data) {\n cxt.block$data(codegen_1.nil, loopAllRequired);\n }\n else {\n for (const prop of schema) {\n (0, code_1.checkReportMissingProp)(cxt, prop);\n }\n }\n }\n function exitOnErrorMode() {\n const missing = gen.let(\"missing\");\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true);\n cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n cxt.ok(valid);\n }\n else {\n gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n function loopAllRequired() {\n gen.forOf(\"prop\", schemaCode, (prop) => {\n cxt.setParams({ missingProperty: prop });\n gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n });\n }\n function loopUntilMissing(missing, valid) {\n cxt.setParams({ missingProperty: missing });\n gen.forOf(missing, schemaCode, () => {\n gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error();\n gen.break();\n });\n }, codegen_1.nil);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=required.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = require(\"fast-deep-equal\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports.default = equal;\n//# sourceMappingURL=equal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dataType_1 = require(\"../../compile/validate/dataType\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n if (!$data && !schema)\n return;\n const valid = gen.let(\"valid\");\n const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n cxt.ok(valid);\n function validateUniqueItems() {\n const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n const j = gen.let(\"j\");\n cxt.setParams({ i, j });\n gen.assign(valid, true);\n gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n }\n function canOptimize() {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n }\n function loopN(i, j) {\n const item = gen.name(\"item\");\n const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n gen.for((0, codegen_1._) `;${i}--;`, () => {\n gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n gen.if(wrongType, (0, codegen_1._) `continue`);\n if (itemTypes.length > 1)\n gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n gen\n .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n cxt.error();\n gen.assign(valid, false).break();\n })\n .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n });\n }\n function loopN2(i, j) {\n const eql = (0, util_1.useFunc)(gen, equal_1.default);\n const outer = gen.name(\"outer\");\n gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error();\n gen.assign(valid, false).break(outer);\n })));\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=uniqueItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to constant\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schemaCode, schema } = cxt;\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n }\n else {\n cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=const.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to one of the allowed values\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n if (!$data && schema.length === 0)\n throw new Error(\"enum must have non-empty array\");\n const useLoop = schema.length >= it.opts.loopEnum;\n let eql;\n const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n let valid;\n if (useLoop || $data) {\n valid = gen.let(\"valid\");\n cxt.block$data(valid, loopEnum);\n }\n else {\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const vSchema = gen.const(\"vSchema\", schemaCode);\n valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n }\n cxt.pass(valid);\n function loopEnum() {\n gen.assign(valid, false);\n gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n }\n function equalCode(vSchema, i) {\n const sch = schema[i];\n return typeof sch === \"object\" && sch !== null\n ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n : (0, codegen_1._) `${data} === ${sch}`;\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst limitNumber_1 = require(\"./limitNumber\");\nconst multipleOf_1 = require(\"./multipleOf\");\nconst limitLength_1 = require(\"./limitLength\");\nconst pattern_1 = require(\"./pattern\");\nconst limitProperties_1 = require(\"./limitProperties\");\nconst required_1 = require(\"./required\");\nconst limitItems_1 = require(\"./limitItems\");\nconst uniqueItems_1 = require(\"./uniqueItems\");\nconst const_1 = require(\"./const\");\nconst enum_1 = require(\"./enum\");\nconst validation = [\n // number\n limitNumber_1.default,\n multipleOf_1.default,\n // string\n limitLength_1.default,\n pattern_1.default,\n // object\n limitProperties_1.default,\n required_1.default,\n // array\n limitItems_1.default,\n uniqueItems_1.default,\n // any\n { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n { keyword: \"nullable\", schemaType: \"boolean\" },\n const_1.default,\n enum_1.default,\n];\nexports.default = validation;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"additionalItems\",\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { parentSchema, it } = cxt;\n const { items } = parentSchema;\n if (!Array.isArray(items)) {\n (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n return;\n }\n validateAdditionalItems(cxt, items);\n },\n};\nfunction validateAdditionalItems(cxt, items) {\n const { gen, schema, data, keyword, it } = cxt;\n it.items = true;\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n if (schema === false) {\n cxt.setParams({ len: items.length });\n cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n }\n else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n cxt.ok(valid);\n }\n function validateItems(valid) {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n if (!it.allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n });\n }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports.default = def;\n//# sourceMappingURL=additionalItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTuple = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt) {\n const { schema, it } = cxt;\n if (Array.isArray(schema))\n return validateTuple(cxt, \"additionalItems\", schema);\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n const { gen, parentSchema, data, keyword, it } = cxt;\n checkStrictTuple(parentSchema);\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n }\n const valid = gen.name(\"valid\");\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n schArr.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n keyword,\n schemaProp: i,\n dataProp: i,\n }, valid));\n cxt.ok(valid);\n });\n function checkStrictTuple(sch) {\n const { opts, errSchemaPath } = it;\n const l = schArr.length;\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n }\n }\n}\nexports.validateTuple = validateTuple;\nexports.default = def;\n//# sourceMappingURL=items.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst items_1 = require(\"./items\");\nconst def = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports.default = def;\n//# sourceMappingURL=prefixItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst additionalItems_1 = require(\"./additionalItems\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { schema, parentSchema, it } = cxt;\n const { prefixItems } = parentSchema;\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n if (prefixItems)\n (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n else\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nexports.default = def;\n//# sourceMappingURL=items2020.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { min, max } }) => max === undefined\n ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n let min;\n let max;\n const { minContains, maxContains } = parentSchema;\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains;\n max = maxContains;\n }\n else {\n min = 1;\n }\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n cxt.setParams({ min, max });\n if (max === undefined && min === 0) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n return;\n }\n if (max !== undefined && min > max) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n cxt.fail();\n return;\n }\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n let cond = (0, codegen_1._) `${len} >= ${min}`;\n if (max !== undefined)\n cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n cxt.pass(cond);\n return;\n }\n it.items = true;\n const valid = gen.name(\"valid\");\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()));\n }\n else if (min === 0) {\n gen.let(valid, true);\n if (max !== undefined)\n gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n }\n else {\n gen.let(valid, false);\n validateItemsWithCount();\n }\n cxt.result(valid, () => cxt.reset());\n function validateItemsWithCount() {\n const schValid = gen.name(\"_valid\");\n const count = gen.let(\"count\", 0);\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n }\n function validateItems(_valid, block) {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword: \"contains\",\n dataProp: i,\n dataPropType: util_1.Type.Num,\n compositeRule: true,\n }, _valid);\n block();\n });\n }\n function checkLimits(count) {\n gen.code((0, codegen_1._) `${count}++`);\n if (max === undefined) {\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n }\n else {\n gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n if (min === 1)\n gen.assign(valid, true);\n else\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=contains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nexports.error = {\n message: ({ params: { property, depsCount, deps } }) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n },\n params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error: exports.error,\n code(cxt) {\n const [propDeps, schDeps] = splitDependencies(cxt);\n validatePropertyDeps(cxt, propDeps);\n validateSchemaDeps(cxt, schDeps);\n },\n};\nfunction splitDependencies({ schema }) {\n const propertyDeps = {};\n const schemaDeps = {};\n for (const key in schema) {\n if (key === \"__proto__\")\n continue;\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n deps[key] = schema[key];\n }\n return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n const { gen, data, it } = cxt;\n if (Object.keys(propertyDeps).length === 0)\n return;\n const missing = gen.let(\"missing\");\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop];\n if (deps.length === 0)\n continue;\n const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n });\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n (0, code_1.checkReportMissingProp)(cxt, depProp);\n }\n });\n }\n else {\n gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n for (const prop in schemaDeps) {\n if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n continue;\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n cxt.mergeValidEvaluated(schCxt, valid);\n }, () => gen.var(valid, true) // TODO var\n );\n cxt.ok(valid);\n }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports.default = def;\n//# sourceMappingURL=dependencies.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"property name must be valid\",\n params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt) {\n const { gen, schema, data, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n const valid = gen.name(\"valid\");\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({ propertyName: key });\n cxt.subschema({\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n }, valid);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error(true);\n if (!it.allErrors)\n gen.break();\n });\n });\n cxt.ok(valid);\n },\n};\nexports.default = def;\n//# sourceMappingURL=propertyNames.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must NOT have additional properties\",\n params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n /* istanbul ignore if */\n if (!errsCount)\n throw new Error(\"ajv implementation error\");\n const { allErrors, opts } = it;\n it.props = true;\n if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n return;\n const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n checkAdditionalProperties();\n cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n function checkAdditionalProperties() {\n gen.forIn(\"key\", data, (key) => {\n if (!props.length && !patProps.length)\n additionalPropertyCode(key);\n else\n gen.if(isAdditional(key), () => additionalPropertyCode(key));\n });\n }\n function isAdditional(key) {\n let definedProp;\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n }\n else if (props.length) {\n definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n }\n else {\n definedProp = codegen_1.nil;\n }\n if (patProps.length) {\n definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n }\n return (0, codegen_1.not)(definedProp);\n }\n function deleteAdditional(key) {\n gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n }\n function additionalPropertyCode(key) {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key);\n return;\n }\n if (schema === false) {\n cxt.setParams({ additionalProperty: key });\n cxt.error();\n if (!allErrors)\n gen.break();\n return;\n }\n if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.name(\"valid\");\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.reset();\n deleteAdditional(key);\n });\n }\n else {\n applyAdditionalSchema(key, valid);\n if (!allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n }\n }\n function applyAdditionalSchema(key, valid, errors) {\n const subschema = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: util_1.Type.Str,\n };\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n });\n }\n cxt.subschema(subschema, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=additionalProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_1 = require(\"../../compile/validate\");\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst def = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n }\n const allProps = (0, code_1.allSchemaProperties)(schema);\n for (const prop of allProps) {\n it.definedProperties.add(prop);\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n }\n const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n if (properties.length === 0)\n return;\n const valid = gen.name(\"valid\");\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop);\n }\n else {\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n applyPropertySchema(prop);\n if (!it.allErrors)\n gen.else().var(valid, true);\n gen.endIf();\n }\n cxt.it.definedProperties.add(prop);\n cxt.ok(valid);\n }\n function hasDefault(prop) {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n }\n function applyPropertySchema(prop) {\n cxt.subschema({\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n }, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=properties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst util_2 = require(\"../../compile/util\");\nconst def = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, data, parentSchema, it } = cxt;\n const { opts } = it;\n const patterns = (0, code_1.allSchemaProperties)(schema);\n const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n if (patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))) {\n return;\n }\n const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n const valid = gen.name(\"valid\");\n if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n }\n const { props } = it;\n validatePatternProperties();\n function validatePatternProperties() {\n for (const pat of patterns) {\n if (checkProperties)\n checkMatchingProperties(pat);\n if (it.allErrors) {\n validateProperties(pat);\n }\n else {\n gen.var(valid, true); // TODO var\n validateProperties(pat);\n gen.if(valid);\n }\n }\n }\n function checkMatchingProperties(pat) {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n }\n }\n }\n function validateProperties(pat) {\n gen.forIn(\"key\", data, (key) => {\n gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat);\n if (!alwaysValid) {\n cxt.subschema({\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: util_2.Type.Str,\n }, valid);\n }\n if (it.opts.unevaluated && props !== true) {\n gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n }\n else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=patternProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt) {\n const { gen, schema, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n cxt.fail();\n return;\n }\n const valid = gen.name(\"valid\");\n cxt.subschema({\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, valid);\n cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n },\n error: { message: \"must NOT be valid\" },\n};\nexports.default = def;\n//# sourceMappingURL=not.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: code_1.validateUnion,\n error: { message: \"must match a schema in anyOf\" },\n};\nexports.default = def;\n//# sourceMappingURL=anyOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must match exactly one schema in oneOf\",\n params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n if (it.opts.discriminator && parentSchema.discriminator)\n return;\n const schArr = schema;\n const valid = gen.let(\"valid\", false);\n const passing = gen.let(\"passing\", null);\n const schValid = gen.name(\"_valid\");\n cxt.setParams({ passing });\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n gen.block(validateOneOf);\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n function validateOneOf() {\n schArr.forEach((sch, i) => {\n let schCxt;\n if ((0, util_1.alwaysValidSchema)(it, sch)) {\n gen.var(schValid, true);\n }\n else {\n schCxt = cxt.subschema({\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n }\n if (i > 0) {\n gen\n .if((0, codegen_1._) `${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n .else();\n }\n gen.if(schValid, () => {\n gen.assign(valid, true);\n gen.assign(passing, i);\n if (schCxt)\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=oneOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt) {\n const { gen, schema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const valid = gen.name(\"valid\");\n schema.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n cxt.ok(valid);\n cxt.mergeEvaluated(schCxt);\n });\n },\n};\nexports.default = def;\n//# sourceMappingURL=allOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, parentSchema, it } = cxt;\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n }\n const hasThen = hasSchema(it, \"then\");\n const hasElse = hasSchema(it, \"else\");\n if (!hasThen && !hasElse)\n return;\n const valid = gen.let(\"valid\", true);\n const schValid = gen.name(\"_valid\");\n validateIf();\n cxt.reset();\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\");\n cxt.setParams({ ifClause });\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n }\n else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"));\n }\n else {\n gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n }\n cxt.pass(valid, () => cxt.error(true));\n function validateIf() {\n const schCxt = cxt.subschema({\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, schValid);\n cxt.mergeEvaluated(schCxt);\n }\n function validateClause(keyword, ifClause) {\n return () => {\n const schCxt = cxt.subschema({ keyword }, schValid);\n gen.assign(valid, schValid);\n cxt.mergeValidEvaluated(schCxt, valid);\n if (ifClause)\n gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n else\n cxt.setParams({ ifClause: keyword });\n };\n }\n },\n};\nfunction hasSchema(it, keyword) {\n const schema = it.schema[keyword];\n return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports.default = def;\n//# sourceMappingURL=if.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({ keyword, parentSchema, it }) {\n if (parentSchema.if === undefined)\n (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=thenElse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst additionalItems_1 = require(\"./additionalItems\");\nconst prefixItems_1 = require(\"./prefixItems\");\nconst items_1 = require(\"./items\");\nconst items2020_1 = require(\"./items2020\");\nconst contains_1 = require(\"./contains\");\nconst dependencies_1 = require(\"./dependencies\");\nconst propertyNames_1 = require(\"./propertyNames\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst properties_1 = require(\"./properties\");\nconst patternProperties_1 = require(\"./patternProperties\");\nconst not_1 = require(\"./not\");\nconst anyOf_1 = require(\"./anyOf\");\nconst oneOf_1 = require(\"./oneOf\");\nconst allOf_1 = require(\"./allOf\");\nconst if_1 = require(\"./if\");\nconst thenElse_1 = require(\"./thenElse\");\nfunction getApplicator(draft2020 = false) {\n const applicator = [\n // any\n not_1.default,\n anyOf_1.default,\n oneOf_1.default,\n allOf_1.default,\n if_1.default,\n thenElse_1.default,\n // object\n propertyNames_1.default,\n additionalProperties_1.default,\n dependencies_1.default,\n properties_1.default,\n patternProperties_1.default,\n ];\n // array\n if (draft2020)\n applicator.push(prefixItems_1.default, items2020_1.default);\n else\n applicator.push(additionalItems_1.default, items_1.default);\n applicator.push(contains_1.default);\n return applicator;\n}\nexports.default = getApplicator;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt, ruleType) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const { opts, errSchemaPath, schemaEnv, self } = it;\n if (!opts.validateFormats)\n return;\n if ($data)\n validate$DataFormat();\n else\n validateFormat();\n function validate$DataFormat() {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n });\n const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n const fType = gen.let(\"fType\");\n const format = gen.let(\"format\");\n // TODO simplify\n gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n function unknownFmt() {\n if (opts.strictSchema === false)\n return codegen_1.nil;\n return (0, codegen_1._) `${schemaCode} && !${format}`;\n }\n function invalidFmt() {\n const callFormat = schemaEnv.$async\n ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : (0, codegen_1._) `${format}(${data})`;\n const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n }\n }\n function validateFormat() {\n const formatDef = self.formats[schema];\n if (!formatDef) {\n unknownFormat();\n return;\n }\n if (formatDef === true)\n return;\n const [fmtType, format, fmtRef] = getFormat(formatDef);\n if (fmtType === ruleType)\n cxt.pass(validCondition());\n function unknownFormat() {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg());\n return;\n }\n throw new Error(unknownMsg());\n function unknownMsg() {\n return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n }\n }\n function getFormat(fmtDef) {\n const code = fmtDef instanceof RegExp\n ? (0, codegen_1.regexpCode)(fmtDef)\n : opts.code.formats\n ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n : undefined;\n const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n }\n return [\"string\", fmtDef, fmt];\n }\n function validCondition() {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async)\n throw new Error(\"async format in sync schema\");\n return (0, codegen_1._) `await ${fmtRef}(${data})`;\n }\n return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst format_1 = require(\"./format\");\nconst format = [format_1.default];\nexports.default = format;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n];\nexports.contentVocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft7Vocabularies = [\n core_1.default,\n validation_1.default,\n (0, applicator_1.default)(),\n format_1.default,\n metadata_1.metadataVocabulary,\n metadata_1.contentVocabulary,\n];\nexports.default = draft7Vocabularies;\n//# sourceMappingURL=draft7.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n DiscrError[\"Tag\"] = \"tag\";\n DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError || (exports.DiscrError = DiscrError = {}));\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst types_1 = require(\"../discriminator/types\");\nconst compile_1 = require(\"../../compile\");\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt) {\n const { gen, data, schema, parentSchema, it } = cxt;\n const { oneOf } = parentSchema;\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\");\n }\n const tagName = schema.propertyName;\n if (typeof tagName != \"string\")\n throw new Error(\"discriminator: requires propertyName\");\n if (schema.mapping)\n throw new Error(\"discriminator: mapping is not supported\");\n if (!oneOf)\n throw new Error(\"discriminator: requires oneOf keyword\");\n const valid = gen.let(\"valid\", false);\n const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n cxt.ok(valid);\n function validateMapping() {\n const mapping = getMapping();\n gen.if(false);\n for (const tagValue in mapping) {\n gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n gen.assign(valid, applyTagSchema(mapping[tagValue]));\n }\n gen.else();\n cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n gen.endIf();\n }\n function applyTagSchema(schemaProp) {\n const _valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n return _valid;\n }\n function getMapping() {\n var _a;\n const oneOfMapping = {};\n const topRequired = hasRequired(parentSchema);\n let tagRequired = true;\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i];\n if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n const ref = sch.$ref;\n sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);\n if (sch instanceof compile_1.SchemaEnv)\n sch = sch.schema;\n if (sch === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);\n }\n const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n if (typeof propSch != \"object\") {\n throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch));\n addMappings(propSch, i);\n }\n if (!tagRequired)\n throw new Error(`discriminator: \"${tagName}\" must be required`);\n return oneOfMapping;\n function hasRequired({ required }) {\n return Array.isArray(required) && required.includes(tagName);\n }\n function addMappings(sch, i) {\n if (sch.const) {\n addMapping(sch.const, i);\n }\n else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i);\n }\n }\n else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n }\n }\n function addMapping(tagValue, i) {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n }\n oneOfMapping[tagValue] = i;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst draft7MetaSchema = require(\"./refs/json-schema-draft-07.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\";\nclass Ajv extends core_1.default {\n _addVocabularies() {\n super._addVocabularies();\n draft7_1.default.forEach((v) => this.addVocabulary(v));\n if (this.opts.discriminator)\n this.addKeyword(discriminator_1.default);\n }\n _addDefaultMetaSchema() {\n super._addDefaultMetaSchema();\n if (!this.opts.meta)\n return;\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema;\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n }\n defaultMeta() {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n }\n}\nexports.Ajv = Ajv;\nmodule.exports = exports = Ajv;\nmodule.exports.Ajv = Ajv;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=ajv.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatNames = exports.fastFormats = exports.fullFormats = void 0;\nfunction fmtDef(validate, compare) {\n return { validate, compare };\n}\nexports.fullFormats = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: fmtDef(date, compareDate),\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: fmtDef(time, compareTime),\n \"date-time\": fmtDef(date_time, compareDateTime),\n // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n uri,\n \"uri-reference\": /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n // uri-template: https://tools.ietf.org/html/rfc6570\n \"uri-template\": /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n // For the source: https://gist.github.com/dperini/729294\n // For test cases: https://mathiasbynens.be/demo/url-regex\n url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n // byte: https://github.com/miguelmota/is-base64\n byte,\n // signed 32 bit integer\n int32: { type: \"number\", validate: validateInt32 },\n // signed 64 bit integer\n int64: { type: \"number\", validate: validateInt64 },\n // C-type float\n float: { type: \"number\", validate: validateNumber },\n // C-type double\n double: { type: \"number\", validate: validateNumber },\n // hint to the UI to hide input strings\n password: true,\n // unchecked string payload\n binary: true,\n};\nexports.fastFormats = {\n ...exports.fullFormats,\n date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n time: fmtDef(/^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i, compareTime),\n \"date-time\": fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i, compareDateTime),\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n};\nexports.formatNames = Object.keys(exports.fullFormats);\nfunction isLeapYear(year) {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction date(str) {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n const matches = DATE.exec(str);\n if (!matches)\n return false;\n const year = +matches[1];\n const month = +matches[2];\n const day = +matches[3];\n return (month >= 1 &&\n month <= 12 &&\n day >= 1 &&\n day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]));\n}\nfunction compareDate(d1, d2) {\n if (!(d1 && d2))\n return undefined;\n if (d1 > d2)\n return 1;\n if (d1 < d2)\n return -1;\n return 0;\n}\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nfunction time(str, withTimeZone) {\n const matches = TIME.exec(str);\n if (!matches)\n return false;\n const hour = +matches[1];\n const minute = +matches[2];\n const second = +matches[3];\n const timeZone = matches[5];\n return (((hour <= 23 && minute <= 59 && second <= 59) ||\n (hour === 23 && minute === 59 && second === 60)) &&\n (!withTimeZone || timeZone !== \"\"));\n}\nfunction compareTime(t1, t2) {\n if (!(t1 && t2))\n return undefined;\n const a1 = TIME.exec(t1);\n const a2 = TIME.exec(t2);\n if (!(a1 && a2))\n return undefined;\n t1 = a1[1] + a1[2] + a1[3] + (a1[4] || \"\");\n t2 = a2[1] + a2[2] + a2[3] + (a2[4] || \"\");\n if (t1 > t2)\n return 1;\n if (t1 < t2)\n return -1;\n return 0;\n}\nconst DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n const dateTime = str.split(DATE_TIME_SEPARATOR);\n return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\nfunction compareDateTime(dt1, dt2) {\n if (!(dt1 && dt2))\n return undefined;\n const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR);\n const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR);\n const res = compareDate(d1, d2);\n if (res === undefined)\n return undefined;\n return res || compareTime(t1, t2);\n}\nconst NOT_URI_FRAGMENT = /\\/|:/;\nconst URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nfunction uri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;\nfunction byte(str) {\n BYTE.lastIndex = 0;\n return BYTE.test(str);\n}\nconst MIN_INT32 = -(2 ** 31);\nconst MAX_INT32 = 2 ** 31 - 1;\nfunction validateInt32(value) {\n return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32;\n}\nfunction validateInt64(value) {\n // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n return Number.isInteger(value);\n}\nfunction validateNumber() {\n return true;\n}\nconst Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n if (Z_ANCHOR.test(str))\n return false;\n try {\n new RegExp(str);\n return true;\n }\n catch (e) {\n return false;\n }\n}\n//# sourceMappingURL=formats.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n constructor(s) {\n super();\n if (!exports.IDENTIFIER.test(s))\n throw new Error(\"CodeGen: name must be a valid identifier\");\n this.str = s;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n return false;\n }\n get names() {\n return { [this.str]: 1 };\n }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n constructor(code) {\n super();\n this._items = typeof code === \"string\" ? [code] : code;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n if (this._items.length > 1)\n return false;\n const item = this._items[0];\n return item === \"\" || item === '\"\"';\n }\n get str() {\n var _a;\n return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n }\n get names() {\n var _a;\n return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n if (c instanceof Name)\n names[c.str] = (names[c.str] || 0) + 1;\n return names;\n }, {})));\n }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n const code = [strs[0]];\n let i = 0;\n while (i < args.length) {\n addCodeArg(code, args[i]);\n code.push(strs[++i]);\n }\n return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n const expr = [safeStringify(strs[0])];\n let i = 0;\n while (i < args.length) {\n expr.push(plus);\n addCodeArg(expr, args[i]);\n expr.push(plus, safeStringify(strs[++i]));\n }\n optimize(expr);\n return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n if (arg instanceof _Code)\n code.push(...arg._items);\n else if (arg instanceof Name)\n code.push(arg);\n else\n code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n let i = 1;\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n if (res !== undefined) {\n expr.splice(i - 1, 3, res);\n continue;\n }\n expr[i++] = \"+\";\n }\n i++;\n }\n}\nfunction mergeExprItems(a, b) {\n if (b === '\"\"')\n return a;\n if (a === '\"\"')\n return b;\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"')\n return;\n if (typeof b != \"string\")\n return `${a.slice(0, -1)}${b}\"`;\n if (b[0] === '\"')\n return a.slice(0, -1) + b.slice(1);\n return;\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n return `\"${a}${b.slice(1)}`;\n return;\n}\nfunction strConcat(c1, c2) {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n return new _Code(`${key}`);\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = require(\"./code\");\nclass ValueError extends Error {\n constructor(name) {\n super(`CodeGen: \"code\" for ${name} not defined`);\n this.value = name.value;\n }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState || (exports.UsedValueState = UsedValueState = {}));\nexports.varKinds = {\n const: new code_1.Name(\"const\"),\n let: new code_1.Name(\"let\"),\n var: new code_1.Name(\"var\"),\n};\nclass Scope {\n constructor({ prefixes, parent } = {}) {\n this._names = {};\n this._prefixes = prefixes;\n this._parent = parent;\n }\n toName(nameOrPrefix) {\n return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n }\n name(prefix) {\n return new code_1.Name(this._newName(prefix));\n }\n _newName(prefix) {\n const ng = this._names[prefix] || this._nameGroup(prefix);\n return `${prefix}${ng.index++}`;\n }\n _nameGroup(prefix) {\n var _a, _b;\n if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n }\n return (this._names[prefix] = { prefix, index: 0 });\n }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n constructor(prefix, nameStr) {\n super(nameStr);\n this.prefix = prefix;\n }\n setValue(value, { property, itemIndex }) {\n this.value = value;\n this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n constructor(opts) {\n super(opts);\n this._values = {};\n this._scope = opts.scope;\n this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n }\n get() {\n return this._scope;\n }\n name(prefix) {\n return new ValueScopeName(prefix, this._newName(prefix));\n }\n value(nameOrPrefix, value) {\n var _a;\n if (value.ref === undefined)\n throw new Error(\"CodeGen: ref must be passed in value\");\n const name = this.toName(nameOrPrefix);\n const { prefix } = name;\n const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n let vs = this._values[prefix];\n if (vs) {\n const _name = vs.get(valueKey);\n if (_name)\n return _name;\n }\n else {\n vs = this._values[prefix] = new Map();\n }\n vs.set(valueKey, name);\n const s = this._scope[prefix] || (this._scope[prefix] = []);\n const itemIndex = s.length;\n s[itemIndex] = value.ref;\n name.setValue(value, { property: prefix, itemIndex });\n return name;\n }\n getValue(prefix, keyOrRef) {\n const vs = this._values[prefix];\n if (!vs)\n return;\n return vs.get(keyOrRef);\n }\n scopeRefs(scopeName, values = this._values) {\n return this._reduceValues(values, (name) => {\n if (name.scopePath === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return (0, code_1._) `${scopeName}${name.scopePath}`;\n });\n }\n scopeCode(values = this._values, usedValues, getCode) {\n return this._reduceValues(values, (name) => {\n if (name.value === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return name.value.code;\n }, usedValues, getCode);\n }\n _reduceValues(values, valueCode, usedValues = {}, getCode) {\n let code = code_1.nil;\n for (const prefix in values) {\n const vs = values[prefix];\n if (!vs)\n continue;\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n vs.forEach((name) => {\n if (nameSet.has(name))\n return;\n nameSet.set(name, UsedValueState.Started);\n let c = valueCode(name);\n if (c) {\n const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n }\n else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n code = (0, code_1._) `${code}${c}${this.opts._n}`;\n }\n else {\n throw new ValueError(name);\n }\n nameSet.set(name, UsedValueState.Completed);\n });\n }\n return code;\n }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = require(\"./code\");\nconst scope_1 = require(\"./scope\");\nvar code_2 = require(\"./code\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return code_2._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return code_2.str; } });\nObject.defineProperty(exports, \"strConcat\", { enumerable: true, get: function () { return code_2.strConcat; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return code_2.nil; } });\nObject.defineProperty(exports, \"getProperty\", { enumerable: true, get: function () { return code_2.getProperty; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return code_2.stringify; } });\nObject.defineProperty(exports, \"regexpCode\", { enumerable: true, get: function () { return code_2.regexpCode; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return code_2.Name; } });\nvar scope_2 = require(\"./scope\");\nObject.defineProperty(exports, \"Scope\", { enumerable: true, get: function () { return scope_2.Scope; } });\nObject.defineProperty(exports, \"ValueScope\", { enumerable: true, get: function () { return scope_2.ValueScope; } });\nObject.defineProperty(exports, \"ValueScopeName\", { enumerable: true, get: function () { return scope_2.ValueScopeName; } });\nObject.defineProperty(exports, \"varKinds\", { enumerable: true, get: function () { return scope_2.varKinds; } });\nexports.operators = {\n GT: new code_1._Code(\">\"),\n GTE: new code_1._Code(\">=\"),\n LT: new code_1._Code(\"<\"),\n LTE: new code_1._Code(\"<=\"),\n EQ: new code_1._Code(\"===\"),\n NEQ: new code_1._Code(\"!==\"),\n NOT: new code_1._Code(\"!\"),\n OR: new code_1._Code(\"||\"),\n AND: new code_1._Code(\"&&\"),\n ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n optimizeNodes() {\n return this;\n }\n optimizeNames(_names, _constants) {\n return this;\n }\n}\nclass Def extends Node {\n constructor(varKind, name, rhs) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.rhs = rhs;\n }\n render({ es5, _n }) {\n const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n return `${varKind} ${this.name}${rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (!names[this.name.str])\n return;\n if (this.rhs)\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n }\n}\nclass Assign extends Node {\n constructor(lhs, rhs, sideEffects) {\n super();\n this.lhs = lhs;\n this.rhs = rhs;\n this.sideEffects = sideEffects;\n }\n render({ _n }) {\n return `${this.lhs} = ${this.rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n return;\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n return addExprNames(names, this.rhs);\n }\n}\nclass AssignOp extends Assign {\n constructor(lhs, op, rhs, sideEffects) {\n super(lhs, rhs, sideEffects);\n this.op = op;\n }\n render({ _n }) {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n }\n}\nclass Label extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n return `${this.label}:` + _n;\n }\n}\nclass Break extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n const label = this.label ? ` ${this.label}` : \"\";\n return `break${label};` + _n;\n }\n}\nclass Throw extends Node {\n constructor(error) {\n super();\n this.error = error;\n }\n render({ _n }) {\n return `throw ${this.error};` + _n;\n }\n get names() {\n return this.error.names;\n }\n}\nclass AnyCode extends Node {\n constructor(code) {\n super();\n this.code = code;\n }\n render({ _n }) {\n return `${this.code};` + _n;\n }\n optimizeNodes() {\n return `${this.code}` ? this : undefined;\n }\n optimizeNames(names, constants) {\n this.code = optimizeExpr(this.code, names, constants);\n return this;\n }\n get names() {\n return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n }\n}\nclass ParentNode extends Node {\n constructor(nodes = []) {\n super();\n this.nodes = nodes;\n }\n render(opts) {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n }\n optimizeNodes() {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n const n = nodes[i].optimizeNodes();\n if (Array.isArray(n))\n nodes.splice(i, 1, ...n);\n else if (n)\n nodes[i] = n;\n else\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n optimizeNames(names, constants) {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i];\n if (n.optimizeNames(names, constants))\n continue;\n subtractNames(names, n.names);\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n get names() {\n return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n }\n}\nclass BlockNode extends ParentNode {\n render(opts) {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n constructor(condition, nodes) {\n super(nodes);\n this.condition = condition;\n }\n render(opts) {\n let code = `if(${this.condition})` + super.render(opts);\n if (this.else)\n code += \"else \" + this.else.render(opts);\n return code;\n }\n optimizeNodes() {\n super.optimizeNodes();\n const cond = this.condition;\n if (cond === true)\n return this.nodes; // else is ignored here\n let e = this.else;\n if (e) {\n const ns = e.optimizeNodes();\n e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n }\n if (e) {\n if (cond === false)\n return e instanceof If ? e : e.nodes;\n if (this.nodes.length)\n return this;\n return new If(not(cond), e instanceof If ? [e] : e.nodes);\n }\n if (cond === false || !this.nodes.length)\n return undefined;\n return this;\n }\n optimizeNames(names, constants) {\n var _a;\n this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n if (!(super.optimizeNames(names, constants) || this.else))\n return;\n this.condition = optimizeExpr(this.condition, names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n addExprNames(names, this.condition);\n if (this.else)\n addNames(names, this.else.names);\n return names;\n }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n constructor(iteration) {\n super();\n this.iteration = iteration;\n }\n render(opts) {\n return `for(${this.iteration})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iteration = optimizeExpr(this.iteration, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iteration.names);\n }\n}\nclass ForRange extends For {\n constructor(varKind, name, from, to) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.from = from;\n this.to = to;\n }\n render(opts) {\n const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n const { name, from, to } = this;\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n }\n get names() {\n const names = addExprNames(super.names, this.from);\n return addExprNames(names, this.to);\n }\n}\nclass ForIter extends For {\n constructor(loop, varKind, name, iterable) {\n super();\n this.loop = loop;\n this.varKind = varKind;\n this.name = name;\n this.iterable = iterable;\n }\n render(opts) {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iterable = optimizeExpr(this.iterable, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iterable.names);\n }\n}\nclass Func extends BlockNode {\n constructor(name, args, async) {\n super();\n this.name = name;\n this.args = args;\n this.async = async;\n }\n render(opts) {\n const _async = this.async ? \"async \" : \"\";\n return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n render(opts) {\n return \"return \" + super.render(opts);\n }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n render(opts) {\n let code = \"try\" + super.render(opts);\n if (this.catch)\n code += this.catch.render(opts);\n if (this.finally)\n code += this.finally.render(opts);\n return code;\n }\n optimizeNodes() {\n var _a, _b;\n super.optimizeNodes();\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n return this;\n }\n optimizeNames(names, constants) {\n var _a, _b;\n super.optimizeNames(names, constants);\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n if (this.catch)\n addNames(names, this.catch.names);\n if (this.finally)\n addNames(names, this.finally.names);\n return names;\n }\n}\nclass Catch extends BlockNode {\n constructor(error) {\n super();\n this.error = error;\n }\n render(opts) {\n return `catch(${this.error})` + super.render(opts);\n }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n render(opts) {\n return \"finally\" + super.render(opts);\n }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n constructor(extScope, opts = {}) {\n this._values = {};\n this._blockStarts = [];\n this._constants = {};\n this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n this._extScope = extScope;\n this._scope = new scope_1.Scope({ parent: extScope });\n this._nodes = [new Root()];\n }\n toString() {\n return this._root.render(this.opts);\n }\n // returns unique name in the internal scope\n name(prefix) {\n return this._scope.name(prefix);\n }\n // reserves unique name in the external scope\n scopeName(prefix) {\n return this._extScope.name(prefix);\n }\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName, value) {\n const name = this._extScope.value(prefixOrName, value);\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n vs.add(name);\n return name;\n }\n getScopeValue(prefix, keyOrRef) {\n return this._extScope.getValue(prefix, keyOrRef);\n }\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName) {\n return this._extScope.scopeRefs(scopeName, this._values);\n }\n scopeCode() {\n return this._extScope.scopeCode(this._values);\n }\n _def(varKind, nameOrPrefix, rhs, constant) {\n const name = this._scope.toName(nameOrPrefix);\n if (rhs !== undefined && constant)\n this._constants[name.str] = rhs;\n this._leafNode(new Def(varKind, name, rhs));\n return name;\n }\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n }\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n }\n // `var` declaration with optional assignment\n var(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n }\n // assignment code\n assign(lhs, rhs, sideEffects) {\n return this._leafNode(new Assign(lhs, rhs, sideEffects));\n }\n // `+=` code\n add(lhs, rhs) {\n return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n }\n // appends passed SafeExpr to code or executes Block\n code(c) {\n if (typeof c == \"function\")\n c();\n else if (c !== code_1.nil)\n this._leafNode(new AnyCode(c));\n return this;\n }\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues) {\n const code = [\"{\"];\n for (const [key, value] of keyValues) {\n if (code.length > 1)\n code.push(\",\");\n code.push(key);\n if (key !== value || this.opts.es5) {\n code.push(\":\");\n (0, code_1.addCodeArg)(code, value);\n }\n }\n code.push(\"}\");\n return new code_1._Code(code);\n }\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition, thenBody, elseBody) {\n this._blockNode(new If(condition));\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf();\n }\n else if (thenBody) {\n this.code(thenBody).endIf();\n }\n else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body');\n }\n return this;\n }\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition) {\n return this._elseNode(new If(condition));\n }\n // `else` clause - only valid after `if` or `else if` clauses\n else() {\n return this._elseNode(new Else());\n }\n // end `if` statement (needed if gen.if was used only with condition)\n endIf() {\n return this._endBlockNode(If, Else);\n }\n _for(node, forBody) {\n this._blockNode(node);\n if (forBody)\n this.code(forBody).endFor();\n return this;\n }\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration, forBody) {\n return this._for(new ForLoop(iteration), forBody);\n }\n // `for` statement for a range of values\n forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n }\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n const name = this._scope.toName(nameOrPrefix);\n if (this.opts.es5) {\n const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n this.var(name, (0, code_1._) `${arr}[${i}]`);\n forBody(name);\n });\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n }\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n }\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n }\n // end `for` loop\n endFor() {\n return this._endBlockNode(For);\n }\n // `label` statement\n label(label) {\n return this._leafNode(new Label(label));\n }\n // `break` statement\n break(label) {\n return this._leafNode(new Break(label));\n }\n // `return` statement\n return(value) {\n const node = new Return();\n this._blockNode(node);\n this.code(value);\n if (node.nodes.length !== 1)\n throw new Error('CodeGen: \"return\" should have one node');\n return this._endBlockNode(Return);\n }\n // `try` statement\n try(tryBody, catchCode, finallyCode) {\n if (!catchCode && !finallyCode)\n throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n const node = new Try();\n this._blockNode(node);\n this.code(tryBody);\n if (catchCode) {\n const error = this.name(\"e\");\n this._currNode = node.catch = new Catch(error);\n catchCode(error);\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally();\n this.code(finallyCode);\n }\n return this._endBlockNode(Catch, Finally);\n }\n // `throw` statement\n throw(error) {\n return this._leafNode(new Throw(error));\n }\n // start self-balancing block\n block(body, nodeCount) {\n this._blockStarts.push(this._nodes.length);\n if (body)\n this.code(body).endBlock(nodeCount);\n return this;\n }\n // end the current self-balancing block\n endBlock(nodeCount) {\n const len = this._blockStarts.pop();\n if (len === undefined)\n throw new Error(\"CodeGen: not in self-balancing block\");\n const toClose = this._nodes.length - len;\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n }\n this._nodes.length = len;\n return this;\n }\n // `function` heading (or definition if funcBody is passed)\n func(name, args = code_1.nil, async, funcBody) {\n this._blockNode(new Func(name, args, async));\n if (funcBody)\n this.code(funcBody).endFunc();\n return this;\n }\n // end function definition\n endFunc() {\n return this._endBlockNode(Func);\n }\n optimize(n = 1) {\n while (n-- > 0) {\n this._root.optimizeNodes();\n this._root.optimizeNames(this._root.names, this._constants);\n }\n }\n _leafNode(node) {\n this._currNode.nodes.push(node);\n return this;\n }\n _blockNode(node) {\n this._currNode.nodes.push(node);\n this._nodes.push(node);\n }\n _endBlockNode(N1, N2) {\n const n = this._currNode;\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop();\n return this;\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n }\n _elseNode(node) {\n const n = this._currNode;\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"');\n }\n this._currNode = n.else = node;\n return this;\n }\n get _root() {\n return this._nodes[0];\n }\n get _currNode() {\n const ns = this._nodes;\n return ns[ns.length - 1];\n }\n set _currNode(node) {\n const ns = this._nodes;\n ns[ns.length - 1] = node;\n }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) + (from[n] || 0);\n return names;\n}\nfunction addExprNames(names, from) {\n return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n if (expr instanceof code_1.Name)\n return replaceName(expr);\n if (!canOptimize(expr))\n return expr;\n return new code_1._Code(expr._items.reduce((items, c) => {\n if (c instanceof code_1.Name)\n c = replaceName(c);\n if (c instanceof code_1._Code)\n items.push(...c._items);\n else\n items.push(c);\n return items;\n }, []));\n function replaceName(n) {\n const c = constants[n.str];\n if (c === undefined || names[n.str] !== 1)\n return n;\n delete names[n.str];\n return c;\n }\n function canOptimize(e) {\n return (e instanceof code_1._Code &&\n e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n }\n}\nfunction subtractNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst code_1 = require(\"./codegen/code\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n const hash = {};\n for (const item of arr)\n hash[item] = true;\n return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n if (typeof schema == \"boolean\")\n return schema;\n if (Object.keys(schema).length === 0)\n return true;\n checkUnknownRules(it, schema);\n return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n const { opts, self } = it;\n if (!opts.strictSchema)\n return;\n if (typeof schema === \"boolean\")\n return;\n const rules = self.RULES.keywords;\n for (const key in schema) {\n if (!rules[key])\n checkStrictMode(it, `unknown keyword: \"${key}\"`);\n }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (rules[key])\n return true;\n return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (key !== \"$ref\" && RULES.all[key])\n return true;\n return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\")\n return schema;\n if (typeof schema == \"string\")\n return (0, codegen_1._) `${schema}`;\n }\n return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n if (typeof str == \"number\")\n return `${str}`;\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n if (Array.isArray(xs)) {\n for (const x of xs)\n f(x);\n }\n else {\n f(xs);\n }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n return (gen, from, to, toName) => {\n const res = to === undefined\n ? from\n : to instanceof codegen_1.Name\n ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof codegen_1.Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to);\n return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n };\n}\nexports.mergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n }),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true);\n }\n else {\n gen.assign(to, (0, codegen_1._) `${to} || {}`);\n setEvaluated(gen, to, from);\n }\n }),\n mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n if (ps === true)\n return gen.var(\"props\", true);\n const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n if (ps !== undefined)\n setEvaluated(gen, props, ps);\n return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n Type[Type[\"Num\"] = 0] = \"Num\";\n Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type || (exports.Type = Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n // let path\n if (dataProp instanceof codegen_1.Name) {\n const isNumber = dataPropType === Type.Num;\n return jsPropertySyntax\n ? isNumber\n ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? (0, codegen_1._) `\"/\" + ${dataProp}`\n : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n if (!mode)\n return;\n msg = `strict mode: ${msg}`;\n if (mode === true)\n throw new Error(msg);\n it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"./codegen\");\nconst names = {\n // validation function arguments\n data: new codegen_1.Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new codegen_1.Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new codegen_1.Name(\"instancePath\"),\n parentData: new codegen_1.Name(\"parentData\"),\n parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n rootData: new codegen_1.Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new codegen_1.Name(\"vErrors\"), // null or array of validation errors\n errors: new codegen_1.Name(\"errors\"), // counter of validation errors\n this: new codegen_1.Name(\"this\"),\n // \"globals\"\n self: new codegen_1.Name(\"self\"),\n scope: new codegen_1.Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new codegen_1.Name(\"json\"),\n jsonPos: new codegen_1.Name(\"jsonPos\"),\n jsonLen: new codegen_1.Name(\"jsonLen\"),\n jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports.default = names;\n//# sourceMappingURL=names.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst util_1 = require(\"./util\");\nconst names_1 = require(\"./names\");\nexports.keywordError = {\n message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n message: ({ keyword, schemaType }) => schemaType\n ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n addError(gen, errObj);\n }\n else {\n returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n addError(gen, errObj);\n if (!(compositeRule || allErrors)) {\n returnErrors(it, names_1.default.vErrors);\n }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n gen.assign(names_1.default.errors, errsCount);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n /* istanbul ignore if */\n if (errsCount === undefined)\n throw new Error(\"ajv implementation error\");\n const err = gen.name(\"err\");\n gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n if (it.opts.verbose) {\n gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n gen.assign((0, codegen_1._) `${err}.data`, data);\n }\n });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n const err = gen.const(\"err\", errObj);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n const { gen, validateName, schemaEnv } = it;\n if (schemaEnv.$async) {\n gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n gen.return(false);\n }\n}\nconst E = {\n keyword: new codegen_1.Name(\"keyword\"),\n schemaPath: new codegen_1.Name(\"schemaPath\"), // also used in JTD errors\n params: new codegen_1.Name(\"params\"),\n propertyName: new codegen_1.Name(\"propertyName\"),\n message: new codegen_1.Name(\"message\"),\n schema: new codegen_1.Name(\"schema\"),\n parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n const { createErrors } = cxt.it;\n if (createErrors === false)\n return (0, codegen_1._) `{}`;\n return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n const { gen, it } = cxt;\n const keyValues = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ];\n extraErrorProps(cxt, error, keyValues);\n return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n const instPath = instancePath\n ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n : errorPath;\n return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n if (schemaPath) {\n schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n }\n return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n const { keyword, data, schemaValue, it } = cxt;\n const { opts, propertyName, topSchemaRef, schemaPath } = it;\n keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n }\n if (opts.verbose) {\n keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n }\n if (propertyName)\n keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst boolError = {\n message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n const { gen, schema, validateName } = it;\n if (schema === false) {\n falseSchemaError(it, false);\n }\n else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(names_1.default.data);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n gen.return(true);\n }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n const { gen, schema } = it;\n if (schema === false) {\n gen.var(valid, false); // TODO var\n falseSchemaError(it);\n }\n else {\n gen.var(valid, true); // TODO var\n }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n const { gen, data } = it;\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n };\n (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n const groups = {\n number: { type: \"number\", rules: [] },\n string: { type: \"string\", rules: [] },\n array: { type: \"array\", rules: [] },\n object: { type: \"object\", rules: [] },\n };\n return {\n types: { ...groups, integer: true, boolean: true, null: true },\n rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n post: { rules: [] },\n all: {},\n keywords: {},\n };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n const group = self.RULES.types[type];\n return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n var _a;\n return (schema[rule.keyword] !== undefined ||\n ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = require(\"../rules\");\nconst applicability_1 = require(\"./applicability\");\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nvar DataType;\n(function (DataType) {\n DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType || (exports.DataType = DataType = {}));\nfunction getSchemaTypes(schema) {\n const types = getJSONTypes(schema.type);\n const hasNull = types.includes(\"null\");\n if (hasNull) {\n if (schema.nullable === false)\n throw new Error(\"type: null contradicts nullable: false\");\n }\n else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"');\n }\n if (schema.nullable === true)\n types.push(\"null\");\n }\n return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction getJSONTypes(ts) {\n const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n if (types.every(rules_1.isJSONType))\n return types;\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n const { gen, data, opts } = it;\n const coerceTo = coerceToTypes(types, opts.coerceTypes);\n const checkTypes = types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n gen.if(wrongType, () => {\n if (coerceTo.length)\n coerceData(it, types, coerceTo);\n else\n reportTypeError(it);\n });\n }\n return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : [];\n}\nfunction coerceData(it, types, coerceTo) {\n const { gen, data, opts } = it;\n const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n if (opts.coerceTypes === \"array\") {\n gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n .assign(data, (0, codegen_1._) `${data}[0]`)\n .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n }\n gen.if((0, codegen_1._) `${coerced} !== undefined`);\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t);\n }\n }\n gen.else();\n reportTypeError(it);\n gen.endIf();\n gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n gen.assign(data, coerced);\n assignParentData(it, coerced);\n });\n function coerceSpecificType(t) {\n switch (t) {\n case \"string\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n .elseIf((0, codegen_1._) `${data} === null`)\n .assign(coerced, (0, codegen_1._) `\"\"`);\n return;\n case \"number\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"integer\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"boolean\":\n gen\n .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true);\n return;\n case \"null\":\n gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n gen.assign(coerced, null);\n return;\n case \"array\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`)\n .assign(coerced, (0, codegen_1._) `[${data}]`);\n }\n }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n // TODO use gen.property\n gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n let cond;\n switch (dataType) {\n case \"null\":\n return (0, codegen_1._) `${data} ${EQ} null`;\n case \"array\":\n cond = (0, codegen_1._) `Array.isArray(${data})`;\n break;\n case \"object\":\n cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n break;\n case \"integer\":\n cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n break;\n case \"number\":\n cond = numCond();\n break;\n default:\n return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n }\n return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n function numCond(_cond = codegen_1.nil) {\n return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct);\n }\n let cond;\n const types = (0, util_1.toHash)(dataTypes);\n if (types.array && types.object) {\n const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n delete types.null;\n delete types.array;\n delete types.object;\n }\n else {\n cond = codegen_1.nil;\n }\n if (types.number)\n delete types.integer;\n for (const t in types)\n cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n message: ({ schema }) => `must be ${schema}`,\n params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n const cxt = getTypeErrorContext(it);\n (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n const { gen, data, schema } = it;\n const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n };\n}\n//# sourceMappingURL=dataType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignDefaults = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction assignDefaults(it, ty) {\n const { properties, items } = it.schema;\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default);\n }\n }\n else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i) => assignDefault(it, i, sch.default));\n }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n const { gen, compositeRule, data, opts } = it;\n if (defaultValue === undefined)\n return;\n const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n if (compositeRule) {\n (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n return;\n }\n let condition = (0, codegen_1._) `${childData} === undefined`;\n if (opts.useDefaults === \"empty\") {\n condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = require(\"../compile/codegen\");\nconst util_1 = require(\"../compile/util\");\nconst names_1 = require(\"../compile/names\");\nconst util_2 = require(\"../compile/util\");\nfunction checkReportMissingProp(cxt, prop) {\n const { gen, data, it } = cxt;\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n cxt.error();\n });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n cxt.setParams({ missingProperty: missing }, true);\n cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n const valCxt = [\n [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n [names_1.default.parentData, it.parentData],\n [names_1.default.parentDataProperty, it.parentDataProperty],\n [names_1.default.rootData, names_1.default.rootData],\n ];\n if (it.opts.dynamicRef)\n valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n const u = opts.unicodeRegExp ? \"u\" : \"\";\n const { regExp } = opts.code;\n const rx = regExp(pattern, u);\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true);\n validateItems(() => gen.assign(validArr, false));\n return validArr;\n }\n gen.var(valid, true);\n validateItems(() => gen.break());\n return valid;\n function validateItems(notValid) {\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword,\n dataProp: i,\n dataPropType: util_1.Type.Num,\n }, valid);\n gen.if((0, codegen_1.not)(valid), notValid);\n });\n }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n const { gen, schema, keyword, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n if (alwaysValid && !it.opts.unevaluated)\n return;\n const valid = gen.let(\"valid\", false);\n const schValid = gen.name(\"_valid\");\n gen.block(() => schema.forEach((_sch, i) => {\n const schCxt = cxt.subschema({\n keyword,\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged)\n gen.if((0, codegen_1.not)(valid));\n }));\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst errors_1 = require(\"../errors\");\nfunction macroKeywordCode(cxt, def) {\n const { gen, keyword, schema, parentSchema, it } = cxt;\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n const schemaRef = useKeyword(gen, keyword, macroSchema);\n if (it.opts.validateSchema !== false)\n it.self.validateSchema(macroSchema, true);\n const valid = gen.name(\"valid\");\n cxt.subschema({\n schema: macroSchema,\n schemaPath: codegen_1.nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n }, valid);\n cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n var _a;\n const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n checkAsyncKeyword(it, def);\n const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n const validateRef = useKeyword(gen, keyword, validate);\n const valid = gen.let(\"valid\");\n cxt.block$data(valid, validateKeyword);\n cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n function validateKeyword() {\n if (def.errors === false) {\n assignValid();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => cxt.error());\n }\n else {\n const ruleErrs = def.async ? validateAsync() : validateSync();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => addErrs(cxt, ruleErrs));\n }\n }\n function validateAsync() {\n const ruleErrs = gen.let(\"ruleErrs\", null);\n gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n return ruleErrs;\n }\n function validateSync() {\n const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n gen.assign(validateErrs, null);\n assignValid(codegen_1.nil);\n return validateErrs;\n }\n function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n }\n function reportErrs(errors) {\n var _a;\n gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n const { gen, data, it } = cxt;\n gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n const { gen } = cxt;\n gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n gen\n .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n (0, errors_1.extendErrors)(cxt);\n }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n if (def.async && !schemaEnv.$async)\n throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n if (result === undefined)\n throw new Error(`keyword \"${keyword}\" failed to compile`);\n return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n // TODO add tests\n return (!schemaType.length ||\n schemaType.some((st) => st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\");\n }\n const deps = def.dependencies;\n if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n }\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword]);\n if (!valid) {\n const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors);\n if (opts.validateSchema === \"log\")\n self.logger.error(msg);\n else\n throw new Error(msg);\n }\n }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n }\n if (keyword !== undefined) {\n const sch = it.schema[keyword];\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n };\n }\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n };\n }\n throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n }\n const { gen } = it;\n if (dataProp !== undefined) {\n const { errorPath, dataPathArr, opts } = it;\n const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n dataContextProps(nextData);\n subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n }\n if (data !== undefined) {\n const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n dataContextProps(nextData);\n if (propertyName !== undefined)\n subschema.propertyName = propertyName;\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n if (dataTypes)\n subschema.dataTypes = dataTypes;\n function dataContextProps(_nextData) {\n subschema.data = _nextData;\n subschema.dataLevel = it.dataLevel + 1;\n subschema.dataTypes = [];\n it.definedProperties = new Set();\n subschema.parentData = it.data;\n subschema.dataNames = [...it.dataNames, _nextData];\n }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n if (compositeRule !== undefined)\n subschema.compositeRule = compositeRule;\n if (createErrors !== undefined)\n subschema.createErrors = createErrors;\n if (allErrors !== undefined)\n subschema.allErrors = allErrors;\n subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i (count += countKeys(sch)));\n }\n if (count === Infinity)\n return Infinity;\n }\n return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n if (normalize !== false)\n id = normalizeId(id);\n const p = resolver.parse(id);\n return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n const serialized = resolver.serialize(p);\n return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n id = normalizeId(id);\n return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n if (typeof schema == \"boolean\")\n return {};\n const { schemaId, uriResolver } = this.opts;\n const schId = normalizeId(schema[schemaId] || baseId);\n const baseIds = { \"\": schId };\n const pathPrefix = getFullPath(uriResolver, schId, false);\n const localRefs = {};\n const schemaRefs = new Set();\n traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined)\n return;\n const fullPath = pathPrefix + jsonPtr;\n let innerBaseId = baseIds[parentJsonPtr];\n if (typeof sch[schemaId] == \"string\")\n innerBaseId = addRef.call(this, sch[schemaId]);\n addAnchor.call(this, sch.$anchor);\n addAnchor.call(this, sch.$dynamicAnchor);\n baseIds[jsonPtr] = innerBaseId;\n function addRef(ref) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve;\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);\n if (schemaRefs.has(ref))\n throw ambiguos(ref);\n schemaRefs.add(ref);\n let schOrRef = this.refs[ref];\n if (typeof schOrRef == \"string\")\n schOrRef = this.refs[schOrRef];\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref);\n }\n else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref);\n localRefs[ref] = sch;\n }\n else {\n this.refs[ref] = fullPath;\n }\n }\n return ref;\n }\n function addAnchor(anchor) {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor))\n throw new Error(`invalid anchor \"${anchor}\"`);\n addRef.call(this, `#${anchor}`);\n }\n }\n });\n return localRefs;\n function checkAmbiguosRef(sch1, sch2, ref) {\n if (sch2 !== undefined && !equal(sch1, sch2))\n throw ambiguos(ref);\n }\n function ambiguos(ref) {\n return new Error(`reference \"${ref}\" resolves to more than one schema`);\n }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = require(\"./boolSchema\");\nconst dataType_1 = require(\"./dataType\");\nconst applicability_1 = require(\"./applicability\");\nconst dataType_2 = require(\"./dataType\");\nconst defaults_1 = require(\"./defaults\");\nconst keyword_1 = require(\"./keyword\");\nconst subschema_1 = require(\"./subschema\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst resolve_1 = require(\"../resolve\");\nconst util_1 = require(\"../util\");\nconst errors_1 = require(\"../errors\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it);\n return;\n }\n }\n validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n if (opts.code.es5) {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n destructureValCxtES5(gen, opts);\n gen.code(body);\n });\n }\n else {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n }\n}\nfunction destructureValCxt(opts) {\n return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n gen.if(names_1.default.valCxt, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n }, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.rootData, names_1.default.data);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n });\n}\nfunction topSchemaObjCode(it) {\n const { schema, opts, gen } = it;\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n checkNoDefault(it);\n gen.let(names_1.default.vErrors, null);\n gen.let(names_1.default.errors, 0);\n if (opts.unevaluated)\n resetEvaluated(it);\n typeAndKeywords(it);\n returnResults(it);\n });\n return;\n}\nfunction resetEvaluated(it) {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const { gen, validateName } = it;\n it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n const schId = typeof schema == \"object\" && schema[opts.schemaId];\n return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid);\n return;\n }\n }\n (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (self.RULES.all[key])\n return true;\n return false;\n}\nfunction isSchemaObj(it) {\n return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n const { schema, gen, opts } = it;\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n updateContext(it);\n checkAsyncSchema(it);\n const errsCount = gen.const(\"_errs\", names_1.default.errors);\n typeAndKeywords(it, errsCount);\n // TODO var\n gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n (0, util_1.checkUnknownRules)(it);\n checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n if (it.opts.jtd)\n return schemaKeywords(it, [], false, errsCount);\n const types = (0, dataType_1.getSchemaTypes)(it.schema);\n const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n const { schema, errSchemaPath, opts, self } = it;\n if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n }\n}\nfunction checkNoDefault(it) {\n const { schema, opts } = it;\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n }\n}\nfunction updateContext(it) {\n const schId = it.schema[it.opts.schemaId];\n if (schId)\n it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n if (it.schema.$async && !it.schemaEnv.$async)\n throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n const msg = schema.$comment;\n if (opts.$comment === true) {\n gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n }\n else if (typeof opts.$comment == \"function\") {\n const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n }\n}\nfunction returnResults(it) {\n const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n if (opts.unevaluated)\n assignEvaluated(it);\n gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n if (props instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n if (items instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n const { gen, schema, data, allErrors, opts, self } = it;\n const { RULES } = self;\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n return;\n }\n if (!opts.jtd)\n checkStrictTypes(it, types);\n gen.block(() => {\n for (const group of RULES.rules)\n groupKeywords(group);\n groupKeywords(RULES.post);\n });\n function groupKeywords(group) {\n if (!(0, applicability_1.shouldUseGroup)(schema, group))\n return;\n if (group.type) {\n gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n iterateKeywords(it, group);\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else();\n (0, dataType_2.reportTypeError)(it);\n }\n gen.endIf();\n }\n else {\n iterateKeywords(it, group);\n }\n // TODO make it \"ok\" call?\n if (!allErrors)\n gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n }\n}\nfunction iterateKeywords(it, group) {\n const { gen, schema, opts: { useDefaults }, } = it;\n if (useDefaults)\n (0, defaults_1.assignDefaults)(it, group.type);\n gen.block(() => {\n for (const rule of group.rules) {\n if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type);\n }\n }\n });\n}\nfunction checkStrictTypes(it, types) {\n if (it.schemaEnv.meta || !it.opts.strictTypes)\n return;\n checkContextTypes(it, types);\n if (!it.opts.allowUnionTypes)\n checkMultipleTypes(it, types);\n checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n if (!types.length)\n return;\n if (!it.dataTypes.length) {\n it.dataTypes = types;\n return;\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n }\n });\n narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n }\n}\nfunction checkKeywordTypes(it, ts) {\n const rules = it.self.RULES.all;\n for (const keyword in rules) {\n const rule = rules[keyword];\n if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n const { type } = rule.definition;\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n }\n }\n }\n}\nfunction hasApplicableType(schTs, kwdT) {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n const ts = [];\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t))\n ts.push(t);\n else if (withTypes.includes(\"integer\") && t === \"number\")\n ts.push(\"integer\");\n }\n it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n msg += ` at \"${schemaPath}\" (strictTypes)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n constructor(it, def, keyword) {\n (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n this.gen = it.gen;\n this.allErrors = it.allErrors;\n this.keyword = keyword;\n this.data = it.data;\n this.schema = it.schema[keyword];\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n this.schemaType = def.schemaType;\n this.parentSchema = it.schema;\n this.params = {};\n this.it = it;\n this.def = def;\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n }\n else {\n this.schemaCode = this.schemaValue;\n if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n }\n }\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n }\n }\n result(condition, successAction, failAction) {\n this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n }\n failResult(condition, successAction, failAction) {\n this.gen.if(condition);\n if (failAction)\n failAction();\n else\n this.error();\n if (successAction) {\n this.gen.else();\n successAction();\n if (this.allErrors)\n this.gen.endIf();\n }\n else {\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n }\n pass(condition, failAction) {\n this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n }\n fail(condition) {\n if (condition === undefined) {\n this.error();\n if (!this.allErrors)\n this.gen.if(false); // this branch will be removed by gen.optimize\n return;\n }\n this.gen.if(condition);\n this.error();\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n fail$data(condition) {\n if (!this.$data)\n return this.fail(condition);\n const { schemaCode } = this;\n this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n }\n error(append, errorParams, errorPaths) {\n if (errorParams) {\n this.setParams(errorParams);\n this._error(append, errorPaths);\n this.setParams({});\n return;\n }\n this._error(append, errorPaths);\n }\n _error(append, errorPaths) {\n ;\n (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n }\n $dataError() {\n (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n }\n reset() {\n if (this.errsCount === undefined)\n throw new Error('add \"trackErrors\" to keyword definition');\n (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n }\n ok(cond) {\n if (!this.allErrors)\n this.gen.if(cond);\n }\n setParams(obj, assign) {\n if (assign)\n Object.assign(this.params, obj);\n else\n this.params = obj;\n }\n block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n this.gen.block(() => {\n this.check$data(valid, $dataValid);\n codeBlock();\n });\n }\n check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n if (!this.$data)\n return;\n const { gen, schemaCode, schemaType, def } = this;\n gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n if (valid !== codegen_1.nil)\n gen.assign(valid, true);\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data());\n this.$dataError();\n if (valid !== codegen_1.nil)\n gen.assign(valid, false);\n }\n gen.else();\n }\n invalid$data() {\n const { gen, schemaCode, schemaType, def, it } = this;\n return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n function wrong$DataType() {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof codegen_1.Name))\n throw new Error(\"ajv implementation error\");\n const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n }\n return codegen_1.nil;\n }\n function invalid$DataSchema() {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n }\n return codegen_1.nil;\n }\n }\n subschema(appl, valid) {\n const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n (0, subschema_1.extendSubschemaMode)(subschema, appl);\n const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n subschemaCode(nextContext, valid);\n return nextContext;\n }\n mergeEvaluated(schemaCxt, toName) {\n const { it, gen } = this;\n if (!it.opts.unevaluated)\n return;\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n }\n }\n mergeValidEvaluated(schemaCxt, valid) {\n const { it, gen } = this;\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n return true;\n }\n }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n const cxt = new KeywordCxt(it, def, keyword);\n if (\"code\" in def) {\n def.code(cxt, ruleType);\n }\n else if (cxt.$data && def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n else if (\"macro\" in def) {\n (0, keyword_1.macroKeywordCode)(cxt, def);\n }\n else if (def.compile || def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n let jsonPointer;\n let data;\n if ($data === \"\")\n return names_1.default.rootData;\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data))\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n jsonPointer = $data;\n data = names_1.default.rootData;\n }\n else {\n const matches = RELATIVE_JSON_POINTER.exec($data);\n if (!matches)\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n const up = +matches[1];\n jsonPointer = matches[2];\n if (jsonPointer === \"#\") {\n if (up >= dataLevel)\n throw new Error(errorMsg(\"property/index\", up));\n return dataPathArr[dataLevel - up];\n }\n if (up > dataLevel)\n throw new Error(errorMsg(\"data\", up));\n data = dataNames[dataLevel - up];\n if (!jsonPointer)\n return data;\n }\n let expr = data;\n const segments = jsonPointer.split(\"/\");\n for (const segment of segments) {\n if (segment) {\n data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n expr = (0, codegen_1._) `${expr} && ${data}`;\n }\n }\n return expr;\n function errorMsg(pointerType, up) {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValidationError extends Error {\n constructor(errors) {\n super(\"validation failed\");\n this.errors = errors;\n this.ajv = this.validation = true;\n }\n}\nexports.default = ValidationError;\n//# sourceMappingURL=validation_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolve_1 = require(\"./resolve\");\nclass MissingRefError extends Error {\n constructor(resolver, baseId, ref, msg) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n }\n}\nexports.default = MissingRefError;\n//# sourceMappingURL=ref_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst validation_error_1 = require(\"../runtime/validation_error\");\nconst names_1 = require(\"./names\");\nconst resolve_1 = require(\"./resolve\");\nconst util_1 = require(\"./util\");\nconst validate_1 = require(\"./validate\");\nclass SchemaEnv {\n constructor(env) {\n var _a;\n this.refs = {};\n this.dynamicAnchors = {};\n let schema;\n if (typeof env.schema == \"object\")\n schema = env.schema;\n this.schema = env.schema;\n this.schemaId = env.schemaId;\n this.root = env.root || this;\n this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n this.schemaPath = env.schemaPath;\n this.localRefs = env.localRefs;\n this.meta = env.meta;\n this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n this.refs = {};\n }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch);\n if (_sch)\n return _sch;\n const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n const { es5, lines } = this.opts.code;\n const { ownProperties } = this.opts;\n const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n let _ValidationError;\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: validation_error_1.default,\n code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n });\n }\n const validateName = gen.scopeName(\"validate\");\n sch.validateName = validateName;\n const schemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: names_1.default.data,\n parentData: names_1.default.parentData,\n parentDataProperty: names_1.default.parentDataProperty,\n dataNames: [names_1.default.data],\n dataPathArr: [codegen_1.nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set(),\n topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n : { ref: sch.schema }),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: codegen_1.nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: (0, codegen_1._) `\"\"`,\n opts: this.opts,\n self: this,\n };\n let sourceCode;\n try {\n this._compilations.add(sch);\n (0, validate_1.validateFunctionCode)(schemaCxt);\n gen.optimize(this.opts.code.optimize);\n // gen.optimize(1)\n const validateCode = gen.toString();\n sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process)\n sourceCode = this.opts.code.process(sourceCode, sch);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n const validate = makeValidate(this, this.scope.get());\n this.scope.value(validateName, { ref: validate });\n validate.errors = null;\n validate.schema = sch.schema;\n validate.schemaEnv = sch;\n if (sch.$async)\n validate.$async = true;\n if (this.opts.code.source === true) {\n validate.source = { validateName, validateCode, scopeValues: gen._values };\n }\n if (this.opts.unevaluated) {\n const { props, items } = schemaCxt;\n validate.evaluated = {\n props: props instanceof codegen_1.Name ? undefined : props,\n items: items instanceof codegen_1.Name ? undefined : items,\n dynamicProps: props instanceof codegen_1.Name,\n dynamicItems: items instanceof codegen_1.Name,\n };\n if (validate.source)\n validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n }\n sch.validate = validate;\n return sch;\n }\n catch (e) {\n delete sch.validate;\n delete sch.validateName;\n if (sourceCode)\n this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e;\n }\n finally {\n this._compilations.delete(sch);\n }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n var _a;\n ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n const schOrFunc = root.refs[ref];\n if (schOrFunc)\n return schOrFunc;\n let _sch = resolve.call(this, root, ref);\n if (_sch === undefined) {\n const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n const { schemaId } = this.opts;\n if (schema)\n _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n }\n if (_sch === undefined)\n return;\n return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n return sch.schema;\n return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv))\n return sch;\n }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n let sch;\n while (typeof (sch = this.refs[ref]) == \"string\")\n ref = sch;\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n const p = this.opts.uriResolver.parse(ref);\n const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root);\n }\n const id = (0, resolve_1.normalizeId)(refPath);\n const schOrRef = this.refs[id] || this.schemas[id];\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef);\n if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n return;\n return getJsonPointer.call(this, p, sch);\n }\n if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n return;\n if (!schOrRef.validate)\n compileSchema.call(this, schOrRef);\n if (id === (0, resolve_1.normalizeId)(ref)) {\n const { schema } = schOrRef;\n const { schemaId } = this.opts;\n const schId = schema[schemaId];\n if (schId)\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n return new SchemaEnv({ schema, schemaId, root, baseId });\n }\n return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n var _a;\n if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n return;\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\")\n return;\n const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n if (partSchema === undefined)\n return;\n schema = partSchema;\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n }\n }\n let env;\n if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n env = resolveSchema.call(this, root, $ref);\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const { schemaId } = this.opts;\n env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n if (env.schema !== env.root.schema)\n return env;\n return undefined;\n}\n//# sourceMappingURL=index.js.map","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/** @type {(value: string) => boolean} */\nconst isPort = RegExp.prototype.test.bind(/^\\d*$/u)\n\n/** @type {(value: string) => boolean} */\nconst isHexPair = RegExp.prototype.test.bind(/^[\\da-f]{2}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isUnreserved = RegExp.prototype.test.bind(/^[\\da-z\\-._~]$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:]$/u)\n\nconst BYTE_HEX = new Array(256)\n{\n const HEX_DIGITS = '0123456789ABCDEF'\n for (let i = 0; i < 256; i++) {\n BYTE_HEX[i] = '%' + HEX_DIGITS[i >> 4] + HEX_DIGITS[i & 0xF]\n }\n}\nfunction percentEncodeNonAscii (cp) {\n if (cp < 0x800) {\n return BYTE_HEX[0xC0 | (cp >> 6)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n if (cp < 0x10000) {\n return BYTE_HEX[0xE0 | (cp >> 12)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n return BYTE_HEX[0xF0 | (cp >> 18)] +\n BYTE_HEX[0x80 | ((cp >> 12) & 0x3F)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n}\n\n/**\n * @param {Array} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/** @type {(value: string) => boolean} */\nconst isHextet = RegExp.prototype.test.bind(/^[\\dA-Fa-f]{1,4}$/)\n\n/** @type {(value: string) => boolean} */\nconst isIPvFuture = RegExp.prototype.test.bind(/^[vV][\\dA-Fa-f]+\\.[A-Za-z\\d\\-._~!$&'()*+,;=:]+$/)\n\n/** @type {(value: string) => boolean} */\nconst isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\\d\\-._~]$/)\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {string} zone\n * @returns {boolean}\n */\nfunction isZoneIdentifier (zone) {\n if (zone.length === 0) return false\n\n for (let i = 0; i < zone.length; i++) {\n if (isZoneCharacter(zone[i])) continue\n if (zone[i] === '%' && i + 2 < zone.length && isHexPair(zone.slice(i + 1, i + 3))) {\n i += 2\n continue\n }\n return false\n }\n\n return true\n}\n\n/**\n * Compresses the longest run of zero hextets to \"::\" per RFC 5952. A run of a\n * single zero hextet is left uncompressed. On ties the leftmost run wins.\n *\n * @param {string[]} hextets\n * @returns {string}\n */\nfunction compressIPv6ZeroRun (hextets) {\n let bestStart = -1\n let bestLength = 0\n let runStart = -1\n let runLength = 0\n for (let i = 0; i < hextets.length; i++) {\n if (hextets[i] === '0') {\n if (runStart === -1) runStart = i\n runLength++\n if (runLength > bestLength) {\n bestLength = runLength\n bestStart = runStart\n }\n } else {\n runStart = -1\n runLength = 0\n }\n }\n\n if (bestLength < 2) return hextets.join(':')\n\n const head = hextets.slice(0, bestStart).join(':')\n const tail = hextets.slice(bestStart + bestLength).join(':')\n return head + '::' + tail\n}\n\n/**\n * Validates an IPv6 address against the alternatives in RFC 3986 section\n * 3.2.2 and returns the same address with leading hextet zeroes removed.\n * An embedded IPv4 address counts as two hextets and is only valid at the end.\n *\n * @param {string} input\n * @returns {string|undefined}\n */\nfunction normalizeIPv6Address (input) {\n const compression = input.indexOf('::')\n if (compression !== -1 && input.indexOf('::', compression + 1) !== -1) return undefined\n\n const left = compression === -1 ? input.split(':') : input.slice(0, compression).split(':')\n const right = compression === -1 ? [] : input.slice(compression + 2).split(':')\n if (compression !== -1) {\n if (left.length === 1 && left[0] === '') left.length = 0\n if (right.length === 1 && right[0] === '') right.length = 0\n }\n\n const parts = left.concat(right)\n let hextetCount = 0\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part === '') return undefined\n\n if (part.indexOf('.') !== -1) {\n if (i !== parts.length - 1 || (compression !== -1 && right.length === 0) || !isIPv4(part)) return undefined\n hextetCount += 2\n continue\n }\n\n if (!isHextet(part)) return undefined\n parts[i] = parseInt(part, 16).toString(16)\n hextetCount++\n }\n\n if (compression === -1) {\n if (hextetCount !== 8) return undefined\n return compressIPv6ZeroRun(parts)\n }\n if (hextetCount >= 8) return undefined\n\n // expand \"::\" then re-compress the longest run for a canonical result\n const expanded = parts.slice(0, left.length)\n for (let i = hextetCount; i < 8; i++) expanded.push('0')\n for (let i = left.length; i < parts.length; i++) expanded.push(parts[i])\n return compressIPv6ZeroRun(expanded)\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n * @property {boolean} [isIPVFuture] - Indicates if the host is an IPvFuture literal.\n * @property {boolean} [error] - Indicates if a bracketed IP literal is malformed.\n */\n\n/**\n * Validates and normalizes a bracketed IP literal. Raw zone separators remain\n * accepted for backwards compatibility, while encoded separators and zone\n * contents follow RFC 6874.\n *\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n const bracketed = host[0] === '[' && host[host.length - 1] === ']'\n const hasBracket = host[0] === '[' || host[host.length - 1] === ']'\n if (hasBracket && !bracketed) return { host, isIPV6: false, error: true }\n\n let input = bracketed ? host.slice(1, -1) : host\n if (bracketed && isIPvFuture(input)) {\n input = input.toLowerCase()\n return { host: `[${input}]`, escapedHost: input, isIPV6: false, isIPVFuture: true }\n }\n\n if (findToken(input, ':') < 2) {\n return { host, isIPV6: false, error: bracketed }\n }\n\n let zoneIdentifier = ''\n const zoneSeparator = input.indexOf('%')\n if (zoneSeparator !== -1) {\n const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === '%25' ? 3 : 1\n zoneIdentifier = input.slice(zoneSeparator + separatorLength)\n if (!isZoneIdentifier(zoneIdentifier)) return { host, isIPV6: false, error: true }\n input = input.slice(0, zoneSeparator)\n }\n\n const address = normalizeIPv6Address(input)\n if (address === undefined) return { host, isIPV6: false, error: true }\n\n return {\n host: address + (zoneIdentifier ? '%' + zoneIdentifier : ''),\n escapedHost: address + (zoneIdentifier ? '%25' + zoneIdentifier : ''),\n isIPV6: true\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.' || input[1] === '/') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * Re-escape RFC 3986 gen-delims that must not appear literally in the host.\n * After the URI regex parses, these characters cannot be literal in the host\n * field, so any that appear after decoding came from percent-encoding and\n * must be restored to prevent authority structure changes.\n *\n * @param {string} host\n * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)\n * @returns {string}\n */\nconst HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' }\nconst HOST_DELIM_RE = /[@/?#:]/g\nconst HOST_DELIM_NO_COLON_RE = /[@/?#]/g\n\nfunction reescapeHostDelimiters (host, isIP) {\n const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE\n re.lastIndex = 0\n return host.replace(re, (ch) => HOST_DELIMS[ch])\n}\n\n/**\n * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.\n * Reserved delimiters such as `%2F` stay escaped; `%2E` is unreserved.\n *\n * @param {string} input\n * @param {boolean} [decodeUnreserved=false]\n * @returns {string}\n */\nfunction normalizePercentEncoding (input, decodeUnreserved = false) {\n if (input.indexOf('%') === -1) {\n return input\n }\n\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decodeUnreserved && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n output += input[i]\n }\n\n return output\n}\n\n/**\n * Normalizes path data without turning reserved escapes into live path syntax.\n * Valid escapes are uppercased, raw unsafe characters are escaped, and only\n * unreserved bytes that are not `.` are decoded.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizePathEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decoded !== '.' && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isPathCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Serializes a path without rewriting reserved data. Raw RFC 3986 path\n * characters remain literal, valid escapes are preserved and uppercased, and\n * everything else is UTF-8 percent-encoded. In a path-noscheme, a colon in the\n * first segment must be escaped so the result cannot be parsed as a scheme.\n *\n * @param {string} input\n * @param {boolean} [pathNoScheme=false]\n * @returns {string}\n */\nfunction serializePathEncoding (input, pathNoScheme = false) {\n let output = ''\n let firstSegment = pathNoScheme && input[0] !== '/'\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (ch === '/') {\n firstSegment = false\n }\n\n if (isPathCharacter(ch) && (ch !== ':' || !firstSegment)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Percent-encodes a URI component using its RFC 3986 literal character set.\n * Existing valid escapes are preserved and normalized to uppercase hex.\n *\n * @param {string} input\n * @param {(value: string) => boolean} isAllowed\n * @returns {string}\n */\nfunction encodeComponent (input, isAllowed) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (isAllowed(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Encodes userinfo while preserving its RFC 3986 §3.2.1 literal characters.\n * In particular, authority delimiters such as `@`, `/`, `?`, and `#` are data.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeUserinfo (input) {\n return encodeComponent(input, isUserinfoCharacter)\n}\n\n/**\n * Encodes query data using the RFC 3986 §3.4 grammar. A literal `#` must be\n * escaped because it would otherwise begin the fragment component.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeQuery (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\n/**\n * Encodes fragment data using the RFC 3986 §3.5 grammar.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeFragment (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\nfunction isEscapeSafe (cp) {\n return (\n (cp >= 0x30 && cp <= 0x39) ||\n (cp >= 0x41 && cp <= 0x5A) ||\n (cp >= 0x61 && cp <= 0x7A) ||\n cp === 0x2A || cp === 0x2B || cp === 0x2D || cp === 0x2E ||\n cp === 0x2F || cp === 0x40 || cp === 0x5F\n )\n}\n\n/**\n * Normalizes the percent-encoding of a query or fragment component.\n *\n * Like `normalizePathEncoding`, but uses the query/fragment character set\n * (which additionally allows `?`) and decodes `.` since it has no dot-segment\n * meaning outside of a path.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeQueryFragmentEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isQueryFragmentCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Escapes a component while preserving existing valid percent escapes.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction escapePreservingEscapes (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n output += escape(input[i])\n }\n\n return output\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(encodeUserinfo(component.userinfo))\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = component.host\n if (!isIPv4(host)) {\n let ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {\n // Decode only unreserved bytes, once. In particular, keep %25 encoded\n // so it cannot introduce a second escape during recomposition.\n host = normalizePercentEncoding(host, true)\n ipV6res = normalizeIPv6(host)\n }\n if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = reescapeHostDelimiters(host, false)\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n const port = String(component.port)\n if (!isPort(port)) {\n throw new TypeError('URI port is malformed.')\n }\n uriTokens.push(':')\n uriTokens.push(port)\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n nonSimpleDomain,\n recomposeAuthority,\n reescapeHostDelimiters,\n normalizePercentEncoding,\n normalizePathEncoding,\n serializePathEncoding,\n normalizeQueryFragmentEncoding,\n encodeUserinfo,\n encodeQuery,\n encodeFragment,\n escapePreservingEscapes,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /^([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-./:;=@]|%[\\da-f]{2})+)$/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const queryIndex = wsComponent.resourceName.indexOf('?')\n const path = queryIndex === -1\n ? wsComponent.resourceName\n : wsComponent.resourceName.slice(0, queryIndex)\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = queryIndex === -1\n ? undefined\n : wsComponent.resourceName.slice(queryIndex + 1)\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches && matches[0] === urnComponent.path) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\nconst VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u\nconst MALFORMED_SCHEME_ERROR = 'URI scheme is malformed.'\n\n/**\n * @param {string} scheme\n * @returns {string}\n */\nfunction decodeValidScheme (scheme) {\n const decodedScheme = unescape(String(scheme))\n if (!VALID_SCHEME.test(decodedScheme)) {\n throw new TypeError(MALFORMED_SCHEME_ERROR)\n }\n return decodedScheme\n}\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (normalizeString(uri, options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const {\n parsed: baseParsed,\n malformedAuthorityOrPort: baseMalformed,\n malformedPercentEncoding: baseMalformedPercentEncoding,\n malformedSchemeSpecific: baseMalformedSchemeSpecific,\n malformedHost: baseMalformedHost,\n malformedScheme: baseMalformedScheme\n } = parseWithStatus(baseURI, schemelessOptions)\n const {\n parsed: relativeParsed,\n malformedAuthorityOrPort: relativeMalformed,\n malformedPercentEncoding: relativeMalformedPercentEncoding,\n malformedSchemeSpecific: relativeMalformedSchemeSpecific,\n malformedHost: relativeMalformedHost,\n malformedScheme: relativeMalformedScheme\n } = parseWithStatus(relativeURI, schemelessOptions)\n if (\n baseMalformed ||\n relativeMalformed ||\n baseMalformedPercentEncoding ||\n relativeMalformedPercentEncoding ||\n baseMalformedSchemeSpecific ||\n relativeMalformedSchemeSpecific ||\n baseMalformedHost ||\n relativeMalformedHost ||\n baseMalformedScheme ||\n relativeMalformedScheme\n ) {\n throw new Error(baseParsed.error || relativeParsed.error || 'URI is malformed.')\n }\n const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true)\n const resolvedSchemeHandler = getSchemeHandler((options && options.scheme) || resolved.scheme)\n const resolvedHost = resolved.host\n const resolvedHostIsIP = resolvedHost !== undefined && resolvedHost !== '' &&\n (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6)\n canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP)\n // Percent escapes in an ASCII reg-name are encoded data. The WHATWG hostname\n // parser can reject them even though fast-uri preserves them safely as RFC\n // 3986 data. A raw non-ASCII host must still fail closed if conversion fails.\n const encodedASCIIHost = resolvedHost && resolvedHost.indexOf('%') !== -1 &&\n !/\\P{ASCII}/u.test(resolvedHost)\n if (resolved.error && !encodedASCIIHost) {\n throw new Error(resolved.error)\n }\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n const normalizedA = normalizeComparableURI(uriA, options)\n const normalizedB = normalizeComparableURI(uriB, options)\n\n return normalizedA !== undefined && normalizedB !== undefined && normalizedA === normalizedB\n}\n\n/**\n * @param {Readonly} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n if (component.scheme) {\n component.scheme = decodeValidScheme(component.scheme)\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n const hasAuthority = component.userinfo !== undefined || component.host !== undefined || component.port !== undefined\n const pathNoScheme = !options.skipEscape && component.scheme === undefined && !hasAuthority\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = serializePathEncoding(component.path, pathNoScheme)\n } else {\n component.path = normalizePercentEncoding(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n // Scheme handlers may replace the scheme during serialization.\n component.scheme = decodeValidScheme(component.scheme)\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n // Dot-segment removal can expose a colon that was not originally in the\n // first segment (for example, \"./a:b\"). Reapply path-noscheme encoding so\n // the serialized relative reference cannot be reparsed as a URI scheme.\n if (pathNoScheme) {\n s = serializePathEncoding(s, true)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', encodeQuery(component.query))\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', encodeFragment(component.fragment))\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n// Captures the authority component (between \"//\" and the next \"/\", \"?\" or \"#\"),\n// with or without a scheme prefix, for the literal-backslash rejection below.\nconst AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\\/\\/([^/?#]*)/\n\n// Captures the leading authority-introducer region after an optional scheme: a\n// run of forward slashes, backslashes, and the characters the WHATWG URL parser\n// removes before parsing (TAB U+0009, LF U+000A, CR U+000D). A valid introducer\n// is exactly \"//\". Node treats \"\\\" as \"/\" on special schemes and strips those\n// characters first, so forms like \"\\\\\", \"/\\\", \"\\/\", \"//\", or a leading\n// \"//\" reach an authority in Node while fast-uri's URI_PARSE folds them into\n// the path group (host confusion / SSRF / redirect bypass).\nconst AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\\\\t\\n\\r]*)/\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {RegExpMatchArray} matches\n * @returns {string|undefined}\n */\nfunction getParseError (parsed, matches) {\n if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {\n return 'URI path must start with \"/\" when authority is present.'\n }\n\n if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {\n return 'URI port is malformed.'\n }\n\n return undefined\n}\n\n/**\n * Checks percent syntax without decoding the represented octets. RFC 3986\n * percent-encoding is byte-oriented, so sequences such as `%FF` are valid even\n * though they are not independently valid UTF-8.\n *\n * @param {string|undefined} component\n * @returns {boolean}\n */\nfunction hasMalformedPercentEncoding (component) {\n if (component === undefined) return false\n\n let percent = component.indexOf('%')\n while (percent !== -1) {\n if (percent + 2 >= component.length || !/^[\\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) {\n return true\n }\n percent = component.indexOf('%', percent + 3)\n }\n\n return false\n}\n\n/**\n * Whether the host is a bracketed IP literal (RFC 3986 `IP-literal`).\n * An unterminated `[` is not a literal, so it must still be validated as a\n * reg-name instead of being waved through as an IP.\n *\n * @param {string} host\n * @returns {boolean}\n */\nfunction isIPLiteral (host) {\n return host[0] === '[' && host[host.length - 1] === ']'\n}\n\n/**\n * @param {RegExpMatchArray} matches\n * @returns {boolean}\n */\nfunction hasMalformedComponentPercentEncoding (matches) {\n // Bracketed IP literals use a raw \"%\" as the zone separator for historical\n // compatibility. Their parsing is intentionally left to normalizeIPv6.\n const host = matches[4]\n return hasMalformedPercentEncoding(matches[3]) ||\n (host !== undefined && !isIPLiteral(host) && hasMalformedPercentEncoding(host)) ||\n hasMalformedPercentEncoding(matches[6]) ||\n hasMalformedPercentEncoding(matches[7]) ||\n hasMalformedPercentEncoding(matches[8])\n}\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {import('./types/index').Options} options\n * @param {{ domainHost?: boolean, unicodeSupport?: boolean }|undefined} schemeHandler\n * @param {boolean} isIP\n * @returns {boolean} whether host conversion failed\n */\nfunction canonicalizeHost (parsed, options, schemeHandler, isIP) {\n if (\n !options.unicodeSupport &&\n (!schemeHandler || !schemeHandler.unicodeSupport) &&\n parsed.host &&\n !isIPLiteral(parsed.host) &&\n (options.domainHost || (schemeHandler && schemeHandler.domainHost)) &&\n isIP === false &&\n nonSimpleDomain(parsed.host)\n ) {\n try {\n parsed.host = new URL('http://' + parsed.host).hostname\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n return true\n }\n }\n return false\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction parseWithStatus (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let malformedAuthorityOrPort = false\n let malformedPercentEncoding = false\n let malformedSchemeSpecific = false\n let malformedHost = false\n let malformedIPLiteral = false\n let malformedScheme = false\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n // A literal backslash (U+005C) is not a valid RFC 3986 URI character and is\n // not an authority delimiter. Reject it in the authority rather than\n // rewriting it: normalizing \"\\\" -> \"/\" (WHATWG error recovery) could silently\n // change the resource identified by an otherwise-invalid input, and lets \"\\\"\n // act as a host delimiter here while Node's native URL parses a different\n // host (SSRF / redirect / origin-allowlist bypass). Percent-encoded %5C is\n // untouched and remains valid encoded data.\n const authorityMatch = uri.match(AUTHORITY_PREFIX)\n if (authorityMatch !== null && authorityMatch[1].indexOf('\\\\') !== -1) {\n parsed.error = 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n }\n\n // Reject a malformed or whitespace-smuggled authority introducer. fast-uri\n // only recognizes a literal \"//\"; anything else in the leading separator run\n // (a backslash, or a \"//\" that appears only after removing the TAB/LF/CR that\n // Node strips) means the authority fast-uri parses differs from the one Node's\n // URL resolves. Reject rather than rewrite, mirroring the literal-backslash\n // guard above. Percent-encoded forms (%5C, %09) are untouched, valid data.\n const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION)\n if (introducerMatch !== null) {\n const region = introducerMatch[1]\n const normalizedRegion = region.replace(/[\\t\\n\\r]/g, '')\n // Two or more leading separators introduce an authority.\n if (normalizedRegion.length >= 2) {\n if (normalizedRegion.slice(0, 2) !== '//') {\n parsed.error = parsed.error || 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n } else if (region.length !== normalizedRegion.length) {\n parsed.error = parsed.error || 'URI authority introducer must not contain whitespace.'\n malformedAuthorityOrPort = true\n }\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n if (parsed.scheme !== undefined) {\n const decodedScheme = unescape(parsed.scheme)\n if (VALID_SCHEME.test(decodedScheme)) {\n parsed.scheme = decodedScheme.toLowerCase()\n } else {\n parsed.error = parsed.error || MALFORMED_SCHEME_ERROR\n malformedScheme = true\n }\n }\n\n malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches)\n if (malformedPercentEncoding) {\n parsed.error = parsed.error || 'URI contains malformed percent-encoding.'\n }\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n\n const parseError = getParseError(parsed, matches)\n if (parseError !== undefined) {\n parsed.error = parsed.error || parseError\n malformedAuthorityOrPort = true\n }\n\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const bracketedIPLiteral = isIPLiteral(parsed.host)\n const hasIPLiteralBracket = parsed.host.indexOf('[') !== -1 || parsed.host.indexOf(']') !== -1\n const ipv6result = normalizeIPv6(parsed.host)\n isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true\n malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true)\n parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase()\n\n if (malformedIPLiteral) {\n parsed.error = parsed.error || 'URI host is malformed.'\n malformedAuthorityOrPort = true\n }\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // convert Unicode IDN -> ASCII IDN when the effective scheme uses domain hosts\n if (!malformedIPLiteral) {\n malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP)\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (uri.indexOf('%') !== -1) {\n if (parsed.host !== undefined && !malformedIPLiteral) {\n const host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true)\n parsed.host = reescapeHostDelimiters(host, isIP)\n }\n }\n if (parsed.path) {\n parsed.path = normalizePathEncoding(parsed.path)\n }\n if (parsed.query) {\n parsed.query = normalizeQueryFragmentEncoding(parsed.query)\n }\n if (parsed.fragment) {\n parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment)\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n if (schemeHandler === SCHEMES.urn && parsed.nid === undefined) {\n malformedSchemeSpecific = true\n }\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme }\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n return parseWithStatus(uri, opts).parsed\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction normalizeString (uri, opts) {\n return normalizeStringWithStatus(uri, opts).normalized\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ normalized: string, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction normalizeStringWithStatus (uri, opts) {\n const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts)\n return {\n normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize(parsed, opts),\n malformedAuthorityOrPort,\n malformedPercentEncoding,\n malformedSchemeSpecific,\n malformedHost,\n malformedScheme\n }\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string|undefined}\n */\nfunction normalizeComparableURI (uri, opts) {\n if (typeof uri !== 'string' && typeof uri !== 'object') {\n return undefined\n }\n\n let value\n try {\n value = typeof uri === 'string' ? uri : serialize(uri, opts)\n } catch {\n return undefined\n }\n const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts)\n return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? undefined : normalized\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uri = require(\"fast-uri\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports.default = uri;\n//# sourceMappingURL=uri.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nconst validation_error_1 = require(\"./runtime/validation_error\");\nconst ref_error_1 = require(\"./compile/ref_error\");\nconst rules_1 = require(\"./compile/rules\");\nconst compile_1 = require(\"./compile\");\nconst codegen_2 = require(\"./compile/codegen\");\nconst resolve_1 = require(\"./compile/resolve\");\nconst dataType_1 = require(\"./compile/validate/dataType\");\nconst util_1 = require(\"./compile/util\");\nconst $dataRefSchema = require(\"./refs/data.json\");\nconst uri_1 = require(\"./runtime/uri\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n]);\nconst removedOptions = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n const s = o.strict;\n const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n return {\n strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n uriResolver: uriResolver,\n };\n}\nclass Ajv {\n constructor(opts = {}) {\n this.schemas = {};\n this.refs = {};\n this.formats = Object.create(null);\n this._compilations = new Set();\n this._loading = {};\n this._cache = new Map();\n opts = this.opts = { ...opts, ...requiredOptions(opts) };\n const { es5, lines } = this.opts.code;\n this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n this.logger = getLogger(opts.logger);\n const formatOpt = opts.validateFormats;\n opts.validateFormats = false;\n this.RULES = (0, rules_1.getRules)();\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n this._metaOpts = getMetaSchemaOptions.call(this);\n if (opts.formats)\n addInitialFormats.call(this);\n this._addVocabularies();\n this._addDefaultMetaSchema();\n if (opts.keywords)\n addInitialKeywords.call(this, opts.keywords);\n if (typeof opts.meta == \"object\")\n this.addMetaSchema(opts.meta);\n addInitialSchemas.call(this);\n opts.validateFormats = formatOpt;\n }\n _addVocabularies() {\n this.addKeyword(\"$async\");\n }\n _addDefaultMetaSchema() {\n const { $data, meta, schemaId } = this.opts;\n let _dataRefSchema = $dataRefSchema;\n if (schemaId === \"id\") {\n _dataRefSchema = { ...$dataRefSchema };\n _dataRefSchema.id = _dataRefSchema.$id;\n delete _dataRefSchema.$id;\n }\n if (meta && $data)\n this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n }\n defaultMeta() {\n const { meta, schemaId } = this.opts;\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n }\n validate(schemaKeyRef, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data // to be validated\n ) {\n let v;\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema(schemaKeyRef);\n if (!v)\n throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n }\n else {\n v = this.compile(schemaKeyRef);\n }\n const valid = v(data);\n if (!(\"$async\" in v))\n this.errors = v.errors;\n return valid;\n }\n compile(schema, _meta) {\n const sch = this._addSchema(schema, _meta);\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n compileAsync(schema, meta) {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\");\n }\n const { loadSchema } = this.opts;\n return runCompileAsync.call(this, schema, meta);\n async function runCompileAsync(_schema, _meta) {\n await loadMetaSchema.call(this, _schema.$schema);\n const sch = this._addSchema(_schema, _meta);\n return sch.validate || _compileAsync.call(this, sch);\n }\n async function loadMetaSchema($ref) {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, { $ref }, true);\n }\n }\n async function _compileAsync(sch) {\n try {\n return this._compileSchemaEnv(sch);\n }\n catch (e) {\n if (!(e instanceof ref_error_1.default))\n throw e;\n checkLoaded.call(this, e);\n await loadMissingSchema.call(this, e.missingSchema);\n return _compileAsync.call(this, sch);\n }\n }\n function checkLoaded({ missingSchema: ref, missingRef }) {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n }\n }\n async function loadMissingSchema(ref) {\n const _schema = await _loadSchema.call(this, ref);\n if (!this.refs[ref])\n await loadMetaSchema.call(this, _schema.$schema);\n if (!this.refs[ref])\n this.addSchema(_schema, ref, meta);\n }\n async function _loadSchema(ref) {\n const p = this._loading[ref];\n if (p)\n return p;\n try {\n return await (this._loading[ref] = loadSchema(ref));\n }\n finally {\n delete this._loading[ref];\n }\n }\n }\n // Adds schema to the instance\n addSchema(schema, // If array is passed, `key` will be ignored\n key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ) {\n if (Array.isArray(schema)) {\n for (const sch of schema)\n this.addSchema(sch, undefined, _meta, _validateSchema);\n return this;\n }\n let id;\n if (typeof schema === \"object\") {\n const { schemaId } = this.opts;\n id = schema[schemaId];\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`);\n }\n }\n key = (0, resolve_1.normalizeId)(key || id);\n this._checkUnique(key);\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n return this;\n }\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(schema, key, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ) {\n this.addSchema(schema, key, true, _validateSchema);\n return this;\n }\n // Validate schema against its meta-schema\n validateSchema(schema, throwOrLogError) {\n if (typeof schema == \"boolean\")\n return true;\n let $schema;\n $schema = schema.$schema;\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\");\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\");\n this.errors = null;\n return true;\n }\n const valid = this.validate($schema, schema);\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText();\n if (this.opts.validateSchema === \"log\")\n this.logger.error(message);\n else\n throw new Error(message);\n }\n return valid;\n }\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema(keyRef) {\n let sch;\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n keyRef = sch;\n if (sch === undefined) {\n const { schemaId } = this.opts;\n const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n sch = compile_1.resolveSchema.call(this, root, keyRef);\n if (!sch)\n return;\n this.refs[keyRef] = sch;\n }\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef) {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef);\n this._removeAllSchemas(this.refs, schemaKeyRef);\n return this;\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas);\n this._removeAllSchemas(this.refs);\n this._cache.clear();\n return this;\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef);\n if (typeof sch == \"object\")\n this._cache.delete(sch.schema);\n delete this.schemas[schemaKeyRef];\n delete this.refs[schemaKeyRef];\n return this;\n }\n case \"object\": {\n const cacheKey = schemaKeyRef;\n this._cache.delete(cacheKey);\n let id = schemaKeyRef[this.opts.schemaId];\n if (id) {\n id = (0, resolve_1.normalizeId)(id);\n delete this.schemas[id];\n delete this.refs[id];\n }\n return this;\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\");\n }\n }\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions) {\n for (const def of definitions)\n this.addKeyword(def);\n return this;\n }\n addKeyword(kwdOrDef, def // deprecated\n ) {\n let keyword;\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef;\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n def.keyword = keyword;\n }\n }\n else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef;\n keyword = def.keyword;\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n }\n }\n else {\n throw new Error(\"invalid addKeywords parameters\");\n }\n checkKeyword.call(this, keyword, def);\n if (!def) {\n (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n return this;\n }\n keywordMetaschema.call(this, def);\n const definition = {\n ...def,\n type: (0, dataType_1.getJSONTypes)(def.type),\n schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n };\n (0, util_1.eachItem)(keyword, definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n return this;\n }\n getKeyword(keyword) {\n const rule = this.RULES.all[keyword];\n return typeof rule == \"object\" ? rule.definition : !!rule;\n }\n // Remove keyword\n removeKeyword(keyword) {\n // TODO return type should be Ajv\n const { RULES } = this;\n delete RULES.keywords[keyword];\n delete RULES.all[keyword];\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n if (i >= 0)\n group.rules.splice(i, 1);\n }\n return this;\n }\n // Add format\n addFormat(name, format) {\n if (typeof format == \"string\")\n format = new RegExp(format);\n this.formats[name] = format;\n return this;\n }\n errorsText(errors = this.errors, // optional array of validation errors\n { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n ) {\n if (!errors || errors.length === 0)\n return \"No errors\";\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg);\n }\n $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n const rules = this.RULES.all;\n metaSchema = JSON.parse(JSON.stringify(metaSchema));\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n let keywords = metaSchema;\n for (const seg of segments)\n keywords = keywords[seg];\n for (const key in rules) {\n const rule = rules[key];\n if (typeof rule != \"object\")\n continue;\n const { $data } = rule.definition;\n const schema = keywords[key];\n if ($data && schema)\n keywords[key] = schemaOrData(schema);\n }\n }\n return metaSchema;\n }\n _removeAllSchemas(schemas, regex) {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef];\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef];\n }\n else if (sch && !sch.meta) {\n this._cache.delete(sch.schema);\n delete schemas[keyRef];\n }\n }\n }\n }\n _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n let id;\n const { schemaId } = this.opts;\n if (typeof schema == \"object\") {\n id = schema[schemaId];\n }\n else {\n if (this.opts.jtd)\n throw new Error(\"schema must be object\");\n else if (typeof schema != \"boolean\")\n throw new Error(\"schema must be object or boolean\");\n }\n let sch = this._cache.get(schema);\n if (sch !== undefined)\n return sch;\n baseId = (0, resolve_1.normalizeId)(id || baseId);\n const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n this._cache.set(sch.schema, sch);\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId)\n this._checkUnique(baseId);\n this.refs[baseId] = sch;\n }\n if (validateSchema)\n this.validateSchema(schema, true);\n return sch;\n }\n _checkUnique(id) {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`);\n }\n }\n _compileSchemaEnv(sch) {\n if (sch.meta)\n this._compileMetaSchema(sch);\n else\n compile_1.compileSchema.call(this, sch);\n /* istanbul ignore if */\n if (!sch.validate)\n throw new Error(\"ajv implementation error\");\n return sch.validate;\n }\n _compileMetaSchema(sch) {\n const currentOpts = this.opts;\n this.opts = this._metaOpts;\n try {\n compile_1.compileSchema.call(this, sch);\n }\n finally {\n this.opts = currentOpts;\n }\n }\n}\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nexports.default = Ajv;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n for (const key in checkOpts) {\n const opt = key;\n if (opt in options)\n this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n }\n}\nfunction getSchEnv(keyRef) {\n keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n const optsSchemas = this.opts.schemas;\n if (!optsSchemas)\n return;\n if (Array.isArray(optsSchemas))\n this.addSchema(optsSchemas);\n else\n for (const key in optsSchemas)\n this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name];\n if (format)\n this.addFormat(name, format);\n }\n}\nfunction addInitialKeywords(defs) {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs);\n return;\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\");\n for (const keyword in defs) {\n const def = defs[keyword];\n if (!def.keyword)\n def.keyword = keyword;\n this.addKeyword(def);\n }\n}\nfunction getMetaSchemaOptions() {\n const metaOpts = { ...this.opts };\n for (const opt of META_IGNORE_OPTIONS)\n delete metaOpts[opt];\n return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n if (logger === false)\n return noLogs;\n if (logger === undefined)\n return console;\n if (logger.log && logger.warn && logger.error)\n return logger;\n throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n const { RULES } = this;\n (0, util_1.eachItem)(keyword, (kwd) => {\n if (RULES.keywords[kwd])\n throw new Error(`Keyword ${kwd} is already defined`);\n if (!KEYWORD_NAME.test(kwd))\n throw new Error(`Keyword ${kwd} has invalid name`);\n });\n if (!def)\n return;\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function');\n }\n}\nfunction addRule(keyword, definition, dataType) {\n var _a;\n const post = definition === null || definition === void 0 ? void 0 : definition.post;\n if (dataType && post)\n throw new Error('keyword with \"post\" flag cannot have \"type\"');\n const { RULES } = this;\n let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n if (!ruleGroup) {\n ruleGroup = { type: dataType, rules: [] };\n RULES.rules.push(ruleGroup);\n }\n RULES.keywords[keyword] = true;\n if (!definition)\n return;\n const rule = {\n keyword,\n definition: {\n ...definition,\n type: (0, dataType_1.getJSONTypes)(definition.type),\n schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n },\n };\n if (definition.before)\n addBeforeRule.call(this, ruleGroup, rule, definition.before);\n else\n ruleGroup.rules.push(rule);\n RULES.all[keyword] = rule;\n (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule);\n }\n else {\n ruleGroup.rules.push(rule);\n this.logger.warn(`rule ${before} is not defined`);\n }\n}\nfunction keywordMetaschema(def) {\n let { metaSchema } = def;\n if (metaSchema === undefined)\n return;\n if (def.$data && this.opts.$data)\n metaSchema = schemaOrData(metaSchema);\n def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst def = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n },\n};\nexports.default = def;\n//# sourceMappingURL=id.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt) {\n const { gen, schema: $ref, it } = cxt;\n const { baseId, schemaEnv: env, validateName, opts, self } = it;\n const { root } = env;\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n return callRootRef();\n const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n if (schOrEnv === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n if (schOrEnv instanceof compile_1.SchemaEnv)\n return callValidate(schOrEnv);\n return inlineRefSchema(schOrEnv);\n function callRootRef() {\n if (env === root)\n return callRef(cxt, validateName, env, env.$async);\n const rootName = gen.scopeValue(\"root\", { ref: root });\n return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n }\n function callValidate(sch) {\n const v = getValidate(cxt, sch);\n callRef(cxt, v, sch, sch.$async);\n }\n function inlineRefSchema(sch) {\n const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n const valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({\n schema: sch,\n dataTypes: [],\n schemaPath: codegen_1.nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n }, valid);\n cxt.mergeEvaluated(schCxt);\n cxt.ok(valid);\n }\n },\n};\nfunction getValidate(cxt, sch) {\n const { gen } = cxt;\n return sch.validate\n ? gen.scopeValue(\"validate\", { ref: sch.validate })\n : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n const { gen, it } = cxt;\n const { allErrors, schemaEnv: env, opts } = it;\n const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n if ($async)\n callAsyncRef();\n else\n callSyncRef();\n function callAsyncRef() {\n if (!env.$async)\n throw new Error(\"async schema referenced by sync schema\");\n const valid = gen.let(\"valid\");\n gen.try(() => {\n gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n if (!allErrors)\n gen.assign(valid, true);\n }, (e) => {\n gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n addErrorsFrom(e);\n if (!allErrors)\n gen.assign(valid, false);\n });\n cxt.ok(valid);\n }\n function callSyncRef() {\n cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n }\n function addErrorsFrom(source) {\n const errs = (0, codegen_1._) `${source}.errors`;\n gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n }\n function addEvaluatedFrom(source) {\n var _a;\n if (!it.opts.unevaluated)\n return;\n const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n }\n }\n else {\n const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n }\n }\n else {\n const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n }\n }\n }\n}\nexports.callRef = callRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst id_1 = require(\"./id\");\nconst ref_1 = require(\"./ref\");\nconst core = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n { keyword: \"$comment\" },\n \"definitions\",\n id_1.default,\n ref_1.default,\n];\nexports.default = core;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, schemaCode, it } = cxt;\n // const bdt = bad$DataType(schemaCode, def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision;\n const res = gen.let(\"res\");\n const invalid = prec\n ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : (0, codegen_1._) `${res} !== parseInt(${res})`;\n cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=multipleOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n const len = str.length;\n let length = 0;\n let pos = 0;\n let value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xfc00) === 0xdc00)\n pos++; // low surrogate\n }\n }\n return length;\n}\nexports.default = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst ucs2length_1 = require(\"../../runtime/ucs2length\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode, it } = cxt;\n const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitLength.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n if ($data) {\n const { regExp } = it.opts.code;\n const regExpCode = regExp.code === \"new RegExp\" ? (0, codegen_1._) `new RegExp` : (0, util_1.useFunc)(gen, regExp);\n const valid = gen.let(\"valid\");\n gen.try(() => gen.assign(valid, (0, codegen_1._) `${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));\n cxt.fail$data((0, codegen_1._) `!${valid}`);\n }\n else {\n const regExp = (0, code_1.usePattern)(cxt, schema);\n cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=pattern.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, schema, schemaCode, data, $data, it } = cxt;\n const { opts } = it;\n if (!$data && schema.length === 0)\n return;\n const useLoop = schema.length >= opts.loopRequired;\n if (it.allErrors)\n allErrorsMode();\n else\n exitOnErrorMode();\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties;\n const { definedProperties } = cxt.it;\n for (const requiredKey of schema) {\n if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n }\n }\n }\n function allErrorsMode() {\n if (useLoop || $data) {\n cxt.block$data(codegen_1.nil, loopAllRequired);\n }\n else {\n for (const prop of schema) {\n (0, code_1.checkReportMissingProp)(cxt, prop);\n }\n }\n }\n function exitOnErrorMode() {\n const missing = gen.let(\"missing\");\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true);\n cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n cxt.ok(valid);\n }\n else {\n gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n function loopAllRequired() {\n gen.forOf(\"prop\", schemaCode, (prop) => {\n cxt.setParams({ missingProperty: prop });\n gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n });\n }\n function loopUntilMissing(missing, valid) {\n cxt.setParams({ missingProperty: missing });\n gen.forOf(missing, schemaCode, () => {\n gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error();\n gen.break();\n });\n }, codegen_1.nil);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=required.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = require(\"fast-deep-equal\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports.default = equal;\n//# sourceMappingURL=equal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dataType_1 = require(\"../../compile/validate/dataType\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n if (!$data && !schema)\n return;\n const valid = gen.let(\"valid\");\n const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n cxt.ok(valid);\n function validateUniqueItems() {\n const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n const j = gen.let(\"j\");\n cxt.setParams({ i, j });\n gen.assign(valid, true);\n gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n }\n function canOptimize() {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n }\n function loopN(i, j) {\n const item = gen.name(\"item\");\n const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n gen.for((0, codegen_1._) `;${i}--;`, () => {\n gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n gen.if(wrongType, (0, codegen_1._) `continue`);\n if (itemTypes.length > 1)\n gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n gen\n .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n cxt.error();\n gen.assign(valid, false).break();\n })\n .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n });\n }\n function loopN2(i, j) {\n const eql = (0, util_1.useFunc)(gen, equal_1.default);\n const outer = gen.name(\"outer\");\n gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error();\n gen.assign(valid, false).break(outer);\n })));\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=uniqueItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to constant\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schemaCode, schema } = cxt;\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n }\n else {\n cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=const.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to one of the allowed values\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n if (!$data && schema.length === 0)\n throw new Error(\"enum must have non-empty array\");\n const useLoop = schema.length >= it.opts.loopEnum;\n let eql;\n const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n let valid;\n if (useLoop || $data) {\n valid = gen.let(\"valid\");\n cxt.block$data(valid, loopEnum);\n }\n else {\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const vSchema = gen.const(\"vSchema\", schemaCode);\n valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n }\n cxt.pass(valid);\n function loopEnum() {\n gen.assign(valid, false);\n gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n }\n function equalCode(vSchema, i) {\n const sch = schema[i];\n return typeof sch === \"object\" && sch !== null\n ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n : (0, codegen_1._) `${data} === ${sch}`;\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst limitNumber_1 = require(\"./limitNumber\");\nconst multipleOf_1 = require(\"./multipleOf\");\nconst limitLength_1 = require(\"./limitLength\");\nconst pattern_1 = require(\"./pattern\");\nconst limitProperties_1 = require(\"./limitProperties\");\nconst required_1 = require(\"./required\");\nconst limitItems_1 = require(\"./limitItems\");\nconst uniqueItems_1 = require(\"./uniqueItems\");\nconst const_1 = require(\"./const\");\nconst enum_1 = require(\"./enum\");\nconst validation = [\n // number\n limitNumber_1.default,\n multipleOf_1.default,\n // string\n limitLength_1.default,\n pattern_1.default,\n // object\n limitProperties_1.default,\n required_1.default,\n // array\n limitItems_1.default,\n uniqueItems_1.default,\n // any\n { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n { keyword: \"nullable\", schemaType: \"boolean\" },\n const_1.default,\n enum_1.default,\n];\nexports.default = validation;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"additionalItems\",\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { parentSchema, it } = cxt;\n const { items } = parentSchema;\n if (!Array.isArray(items)) {\n (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n return;\n }\n validateAdditionalItems(cxt, items);\n },\n};\nfunction validateAdditionalItems(cxt, items) {\n const { gen, schema, data, keyword, it } = cxt;\n it.items = true;\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n if (schema === false) {\n cxt.setParams({ len: items.length });\n cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n }\n else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n cxt.ok(valid);\n }\n function validateItems(valid) {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n if (!it.allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n });\n }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports.default = def;\n//# sourceMappingURL=additionalItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTuple = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt) {\n const { schema, it } = cxt;\n if (Array.isArray(schema))\n return validateTuple(cxt, \"additionalItems\", schema);\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n const { gen, parentSchema, data, keyword, it } = cxt;\n checkStrictTuple(parentSchema);\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n }\n const valid = gen.name(\"valid\");\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n schArr.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n keyword,\n schemaProp: i,\n dataProp: i,\n }, valid));\n cxt.ok(valid);\n });\n function checkStrictTuple(sch) {\n const { opts, errSchemaPath } = it;\n const l = schArr.length;\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n }\n }\n}\nexports.validateTuple = validateTuple;\nexports.default = def;\n//# sourceMappingURL=items.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst items_1 = require(\"./items\");\nconst def = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports.default = def;\n//# sourceMappingURL=prefixItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst additionalItems_1 = require(\"./additionalItems\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { schema, parentSchema, it } = cxt;\n const { prefixItems } = parentSchema;\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n if (prefixItems)\n (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n else\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nexports.default = def;\n//# sourceMappingURL=items2020.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { min, max } }) => max === undefined\n ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n let min;\n let max;\n const { minContains, maxContains } = parentSchema;\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains;\n max = maxContains;\n }\n else {\n min = 1;\n }\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n cxt.setParams({ min, max });\n if (max === undefined && min === 0) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n return;\n }\n if (max !== undefined && min > max) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n cxt.fail();\n return;\n }\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n let cond = (0, codegen_1._) `${len} >= ${min}`;\n if (max !== undefined)\n cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n cxt.pass(cond);\n return;\n }\n it.items = true;\n const valid = gen.name(\"valid\");\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()));\n }\n else if (min === 0) {\n gen.let(valid, true);\n if (max !== undefined)\n gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n }\n else {\n gen.let(valid, false);\n validateItemsWithCount();\n }\n cxt.result(valid, () => cxt.reset());\n function validateItemsWithCount() {\n const schValid = gen.name(\"_valid\");\n const count = gen.let(\"count\", 0);\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n }\n function validateItems(_valid, block) {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword: \"contains\",\n dataProp: i,\n dataPropType: util_1.Type.Num,\n compositeRule: true,\n }, _valid);\n block();\n });\n }\n function checkLimits(count) {\n gen.code((0, codegen_1._) `${count}++`);\n if (max === undefined) {\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n }\n else {\n gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n if (min === 1)\n gen.assign(valid, true);\n else\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=contains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nexports.error = {\n message: ({ params: { property, depsCount, deps } }) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n },\n params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error: exports.error,\n code(cxt) {\n const [propDeps, schDeps] = splitDependencies(cxt);\n validatePropertyDeps(cxt, propDeps);\n validateSchemaDeps(cxt, schDeps);\n },\n};\nfunction splitDependencies({ schema }) {\n const propertyDeps = {};\n const schemaDeps = {};\n for (const key in schema) {\n if (key === \"__proto__\")\n continue;\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n deps[key] = schema[key];\n }\n return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n const { gen, data, it } = cxt;\n if (Object.keys(propertyDeps).length === 0)\n return;\n const missing = gen.let(\"missing\");\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop];\n if (deps.length === 0)\n continue;\n const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n });\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n (0, code_1.checkReportMissingProp)(cxt, depProp);\n }\n });\n }\n else {\n gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n for (const prop in schemaDeps) {\n if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n continue;\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n cxt.mergeValidEvaluated(schCxt, valid);\n }, () => gen.var(valid, true) // TODO var\n );\n cxt.ok(valid);\n }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports.default = def;\n//# sourceMappingURL=dependencies.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"property name must be valid\",\n params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt) {\n const { gen, schema, data, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n const valid = gen.name(\"valid\");\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({ propertyName: key });\n cxt.subschema({\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n }, valid);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error(true);\n if (!it.allErrors)\n gen.break();\n });\n });\n cxt.ok(valid);\n },\n};\nexports.default = def;\n//# sourceMappingURL=propertyNames.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must NOT have additional properties\",\n params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n /* istanbul ignore if */\n if (!errsCount)\n throw new Error(\"ajv implementation error\");\n const { allErrors, opts } = it;\n it.props = true;\n if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n return;\n const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n checkAdditionalProperties();\n cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n function checkAdditionalProperties() {\n gen.forIn(\"key\", data, (key) => {\n if (!props.length && !patProps.length)\n additionalPropertyCode(key);\n else\n gen.if(isAdditional(key), () => additionalPropertyCode(key));\n });\n }\n function isAdditional(key) {\n let definedProp;\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n }\n else if (props.length) {\n definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n }\n else {\n definedProp = codegen_1.nil;\n }\n if (patProps.length) {\n definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n }\n return (0, codegen_1.not)(definedProp);\n }\n function deleteAdditional(key) {\n gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n }\n function additionalPropertyCode(key) {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key);\n return;\n }\n if (schema === false) {\n cxt.setParams({ additionalProperty: key });\n cxt.error();\n if (!allErrors)\n gen.break();\n return;\n }\n if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.name(\"valid\");\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.reset();\n deleteAdditional(key);\n });\n }\n else {\n applyAdditionalSchema(key, valid);\n if (!allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n }\n }\n function applyAdditionalSchema(key, valid, errors) {\n const subschema = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: util_1.Type.Str,\n };\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n });\n }\n cxt.subschema(subschema, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=additionalProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_1 = require(\"../../compile/validate\");\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst def = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n }\n const allProps = (0, code_1.allSchemaProperties)(schema);\n for (const prop of allProps) {\n it.definedProperties.add(prop);\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n }\n const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n if (properties.length === 0)\n return;\n const valid = gen.name(\"valid\");\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop);\n }\n else {\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n applyPropertySchema(prop);\n if (!it.allErrors)\n gen.else().var(valid, true);\n gen.endIf();\n }\n cxt.it.definedProperties.add(prop);\n cxt.ok(valid);\n }\n function hasDefault(prop) {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n }\n function applyPropertySchema(prop) {\n cxt.subschema({\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n }, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=properties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst util_2 = require(\"../../compile/util\");\nconst def = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, data, parentSchema, it } = cxt;\n const { opts } = it;\n const patterns = (0, code_1.allSchemaProperties)(schema);\n const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n if (patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))) {\n return;\n }\n const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n const valid = gen.name(\"valid\");\n if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n }\n const { props } = it;\n validatePatternProperties();\n function validatePatternProperties() {\n for (const pat of patterns) {\n if (checkProperties)\n checkMatchingProperties(pat);\n if (it.allErrors) {\n validateProperties(pat);\n }\n else {\n gen.var(valid, true); // TODO var\n validateProperties(pat);\n gen.if(valid);\n }\n }\n }\n function checkMatchingProperties(pat) {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n }\n }\n }\n function validateProperties(pat) {\n gen.forIn(\"key\", data, (key) => {\n gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat);\n if (!alwaysValid) {\n cxt.subschema({\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: util_2.Type.Str,\n }, valid);\n }\n if (it.opts.unevaluated && props !== true) {\n gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n }\n else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=patternProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt) {\n const { gen, schema, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n cxt.fail();\n return;\n }\n const valid = gen.name(\"valid\");\n cxt.subschema({\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, valid);\n cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n },\n error: { message: \"must NOT be valid\" },\n};\nexports.default = def;\n//# sourceMappingURL=not.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: code_1.validateUnion,\n error: { message: \"must match a schema in anyOf\" },\n};\nexports.default = def;\n//# sourceMappingURL=anyOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must match exactly one schema in oneOf\",\n params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n if (it.opts.discriminator && parentSchema.discriminator)\n return;\n const schArr = schema;\n const valid = gen.let(\"valid\", false);\n const passing = gen.let(\"passing\", null);\n const schValid = gen.name(\"_valid\");\n cxt.setParams({ passing });\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n gen.block(validateOneOf);\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n function validateOneOf() {\n schArr.forEach((sch, i) => {\n let schCxt;\n if ((0, util_1.alwaysValidSchema)(it, sch)) {\n gen.var(schValid, true);\n }\n else {\n schCxt = cxt.subschema({\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n }\n if (i > 0) {\n gen\n .if((0, codegen_1._) `${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n .else();\n }\n gen.if(schValid, () => {\n gen.assign(valid, true);\n gen.assign(passing, i);\n if (schCxt)\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=oneOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt) {\n const { gen, schema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const valid = gen.name(\"valid\");\n schema.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n cxt.ok(valid);\n cxt.mergeEvaluated(schCxt);\n });\n },\n};\nexports.default = def;\n//# sourceMappingURL=allOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, parentSchema, it } = cxt;\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n }\n const hasThen = hasSchema(it, \"then\");\n const hasElse = hasSchema(it, \"else\");\n if (!hasThen && !hasElse)\n return;\n const valid = gen.let(\"valid\", true);\n const schValid = gen.name(\"_valid\");\n validateIf();\n cxt.reset();\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\");\n cxt.setParams({ ifClause });\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n }\n else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"));\n }\n else {\n gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n }\n cxt.pass(valid, () => cxt.error(true));\n function validateIf() {\n const schCxt = cxt.subschema({\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, schValid);\n cxt.mergeEvaluated(schCxt);\n }\n function validateClause(keyword, ifClause) {\n return () => {\n const schCxt = cxt.subschema({ keyword }, schValid);\n gen.assign(valid, schValid);\n cxt.mergeValidEvaluated(schCxt, valid);\n if (ifClause)\n gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n else\n cxt.setParams({ ifClause: keyword });\n };\n }\n },\n};\nfunction hasSchema(it, keyword) {\n const schema = it.schema[keyword];\n return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports.default = def;\n//# sourceMappingURL=if.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({ keyword, parentSchema, it }) {\n if (parentSchema.if === undefined)\n (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=thenElse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst additionalItems_1 = require(\"./additionalItems\");\nconst prefixItems_1 = require(\"./prefixItems\");\nconst items_1 = require(\"./items\");\nconst items2020_1 = require(\"./items2020\");\nconst contains_1 = require(\"./contains\");\nconst dependencies_1 = require(\"./dependencies\");\nconst propertyNames_1 = require(\"./propertyNames\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst properties_1 = require(\"./properties\");\nconst patternProperties_1 = require(\"./patternProperties\");\nconst not_1 = require(\"./not\");\nconst anyOf_1 = require(\"./anyOf\");\nconst oneOf_1 = require(\"./oneOf\");\nconst allOf_1 = require(\"./allOf\");\nconst if_1 = require(\"./if\");\nconst thenElse_1 = require(\"./thenElse\");\nfunction getApplicator(draft2020 = false) {\n const applicator = [\n // any\n not_1.default,\n anyOf_1.default,\n oneOf_1.default,\n allOf_1.default,\n if_1.default,\n thenElse_1.default,\n // object\n propertyNames_1.default,\n additionalProperties_1.default,\n dependencies_1.default,\n properties_1.default,\n patternProperties_1.default,\n ];\n // array\n if (draft2020)\n applicator.push(prefixItems_1.default, items2020_1.default);\n else\n applicator.push(additionalItems_1.default, items_1.default);\n applicator.push(contains_1.default);\n return applicator;\n}\nexports.default = getApplicator;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt, ruleType) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const { opts, errSchemaPath, schemaEnv, self } = it;\n if (!opts.validateFormats)\n return;\n if ($data)\n validate$DataFormat();\n else\n validateFormat();\n function validate$DataFormat() {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n });\n const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n const fType = gen.let(\"fType\");\n const format = gen.let(\"format\");\n // TODO simplify\n gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n function unknownFmt() {\n if (opts.strictSchema === false)\n return codegen_1.nil;\n return (0, codegen_1._) `${schemaCode} && !${format}`;\n }\n function invalidFmt() {\n const callFormat = schemaEnv.$async\n ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : (0, codegen_1._) `${format}(${data})`;\n const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n }\n }\n function validateFormat() {\n const formatDef = self.formats[schema];\n if (!formatDef) {\n unknownFormat();\n return;\n }\n if (formatDef === true)\n return;\n const [fmtType, format, fmtRef] = getFormat(formatDef);\n if (fmtType === ruleType)\n cxt.pass(validCondition());\n function unknownFormat() {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg());\n return;\n }\n throw new Error(unknownMsg());\n function unknownMsg() {\n return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n }\n }\n function getFormat(fmtDef) {\n const code = fmtDef instanceof RegExp\n ? (0, codegen_1.regexpCode)(fmtDef)\n : opts.code.formats\n ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n : undefined;\n const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n }\n return [\"string\", fmtDef, fmt];\n }\n function validCondition() {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async)\n throw new Error(\"async format in sync schema\");\n return (0, codegen_1._) `await ${fmtRef}(${data})`;\n }\n return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst format_1 = require(\"./format\");\nconst format = [format_1.default];\nexports.default = format;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n];\nexports.contentVocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft7Vocabularies = [\n core_1.default,\n validation_1.default,\n (0, applicator_1.default)(),\n format_1.default,\n metadata_1.metadataVocabulary,\n metadata_1.contentVocabulary,\n];\nexports.default = draft7Vocabularies;\n//# sourceMappingURL=draft7.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n DiscrError[\"Tag\"] = \"tag\";\n DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError || (exports.DiscrError = DiscrError = {}));\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst types_1 = require(\"../discriminator/types\");\nconst compile_1 = require(\"../../compile\");\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt) {\n const { gen, data, schema, parentSchema, it } = cxt;\n const { oneOf } = parentSchema;\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\");\n }\n const tagName = schema.propertyName;\n if (typeof tagName != \"string\")\n throw new Error(\"discriminator: requires propertyName\");\n if (schema.mapping)\n throw new Error(\"discriminator: mapping is not supported\");\n if (!oneOf)\n throw new Error(\"discriminator: requires oneOf keyword\");\n const valid = gen.let(\"valid\", false);\n const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n cxt.ok(valid);\n function validateMapping() {\n const mapping = getMapping();\n gen.if(false);\n for (const tagValue in mapping) {\n gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n gen.assign(valid, applyTagSchema(mapping[tagValue]));\n }\n gen.else();\n cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n gen.endIf();\n }\n function applyTagSchema(schemaProp) {\n const _valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n return _valid;\n }\n function getMapping() {\n var _a;\n const oneOfMapping = {};\n const topRequired = hasRequired(parentSchema);\n let tagRequired = true;\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i];\n if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n const ref = sch.$ref;\n sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);\n if (sch instanceof compile_1.SchemaEnv)\n sch = sch.schema;\n if (sch === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);\n }\n const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n if (typeof propSch != \"object\") {\n throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch));\n addMappings(propSch, i);\n }\n if (!tagRequired)\n throw new Error(`discriminator: \"${tagName}\" must be required`);\n return oneOfMapping;\n function hasRequired({ required }) {\n return Array.isArray(required) && required.includes(tagName);\n }\n function addMappings(sch, i) {\n if (sch.const) {\n addMapping(sch.const, i);\n }\n else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i);\n }\n }\n else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n }\n }\n function addMapping(tagValue, i) {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n }\n oneOfMapping[tagValue] = i;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst draft7MetaSchema = require(\"./refs/json-schema-draft-07.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\";\nclass Ajv extends core_1.default {\n _addVocabularies() {\n super._addVocabularies();\n draft7_1.default.forEach((v) => this.addVocabulary(v));\n if (this.opts.discriminator)\n this.addKeyword(discriminator_1.default);\n }\n _addDefaultMetaSchema() {\n super._addDefaultMetaSchema();\n if (!this.opts.meta)\n return;\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema;\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n }\n defaultMeta() {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n }\n}\nexports.Ajv = Ajv;\nmodule.exports = exports = Ajv;\nmodule.exports.Ajv = Ajv;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=ajv.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatLimitDefinition = void 0;\nconst ajv_1 = require(\"ajv\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n formatMaximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n formatMinimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n formatExclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n formatExclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n message: ({ keyword, schemaCode }) => codegen_1.str `should be ${KWDs[keyword].okStr} ${schemaCode}`,\n params: ({ keyword, schemaCode }) => codegen_1._ `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nexports.formatLimitDefinition = {\n keyword: Object.keys(KWDs),\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, schemaCode, keyword, it } = cxt;\n const { opts, self } = it;\n if (!opts.validateFormats)\n return;\n const fCxt = new ajv_1.KeywordCxt(it, self.RULES.all.format.definition, \"format\");\n if (fCxt.$data)\n validate$DataFormat();\n else\n validateFormat();\n function validate$DataFormat() {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n });\n const fmt = gen.const(\"fmt\", codegen_1._ `${fmts}[${fCxt.schemaCode}]`);\n cxt.fail$data(codegen_1.or(codegen_1._ `typeof ${fmt} != \"object\"`, codegen_1._ `${fmt} instanceof RegExp`, codegen_1._ `typeof ${fmt}.compare != \"function\"`, compareCode(fmt)));\n }\n function validateFormat() {\n const format = fCxt.schema;\n const fmtDef = self.formats[format];\n if (!fmtDef || fmtDef === true)\n return;\n if (typeof fmtDef != \"object\" ||\n fmtDef instanceof RegExp ||\n typeof fmtDef.compare != \"function\") {\n throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`);\n }\n const fmt = gen.scopeValue(\"formats\", {\n key: format,\n ref: fmtDef,\n code: opts.code.formats ? codegen_1._ `${opts.code.formats}${codegen_1.getProperty(format)}` : undefined,\n });\n cxt.fail$data(compareCode(fmt));\n }\n function compareCode(fmt) {\n return codegen_1._ `${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`;\n }\n },\n dependencies: [\"format\"],\n};\nconst formatLimitPlugin = (ajv) => {\n ajv.addKeyword(exports.formatLimitDefinition);\n return ajv;\n};\nexports.default = formatLimitPlugin;\n//# sourceMappingURL=limit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst formats_1 = require(\"./formats\");\nconst limit_1 = require(\"./limit\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst fullName = new codegen_1.Name(\"fullFormats\");\nconst fastName = new codegen_1.Name(\"fastFormats\");\nconst formatsPlugin = (ajv, opts = { keywords: true }) => {\n if (Array.isArray(opts)) {\n addFormats(ajv, opts, formats_1.fullFormats, fullName);\n return ajv;\n }\n const [formats, exportName] = opts.mode === \"fast\" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName];\n const list = opts.formats || formats_1.formatNames;\n addFormats(ajv, list, formats, exportName);\n if (opts.keywords)\n limit_1.default(ajv);\n return ajv;\n};\nformatsPlugin.get = (name, mode = \"full\") => {\n const formats = mode === \"fast\" ? formats_1.fastFormats : formats_1.fullFormats;\n const f = formats[name];\n if (!f)\n throw new Error(`Unknown format \"${name}\"`);\n return f;\n};\nfunction addFormats(ajv, list, fs, exportName) {\n var _a;\n var _b;\n (_a = (_b = ajv.opts.code).formats) !== null && _a !== void 0 ? _a : (_b.formats = codegen_1._ `require(\"ajv-formats/dist/formats\").${exportName}`);\n for (const f of list)\n ajv.addFormat(f, fs[f]);\n}\nmodule.exports = exports = formatsPlugin;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = formatsPlugin;\n//# sourceMappingURL=index.js.map","import { isObject, RJSF_ADDITIONAL_PROPERTIES_FLAG } from '@rjsf/utils';\nimport Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nexport const AJV_CONFIG = {\n allErrors: true,\n multipleOfPrecision: 8,\n strict: false,\n verbose: true,\n discriminator: false, // TODO enable this in V6\n};\nexport const COLOR_FORMAT_REGEX = /^(#?([0-9A-Fa-f]{3}){1,2}\\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\)))$/;\nexport const DATA_URL_FORMAT_REGEX = /^data:([a-z]+\\/[a-z0-9-+.]+)?;(?:name=(.*);)?base64,(.*)$/;\n/** Creates an Ajv version 8 implementation object with standard support for the 'color` and `data-url` custom formats.\n * If `additionalMetaSchemas` are provided then the Ajv instance is modified to add each of the meta schemas in the\n * list. If `customFormats` are provided then those additional formats are added to the list of supported formats. If\n * `ajvOptionsOverrides` are provided then they are spread on top of the default `AJV_CONFIG` options when constructing\n * the `Ajv` instance. With Ajv v8, the JSON Schema formats are not provided by default, but can be plugged in. By\n * default, all formats from the `ajv-formats` library are added. To disable this capability, set the `ajvFormatOptions`\n * parameter to `false`. Additionally, you can configure the `ajv-formats` by providing a custom set of\n * [format options](https://github.com/ajv-validator/ajv-formats) to the `ajvFormatOptions` parameter.\n *\n * @param [additionalMetaSchemas] - The list of additional meta schemas that the validator can access\n * @param [customFormats] - The set of additional custom formats that the validator will support\n * @param [ajvOptionsOverrides={}] - The set of validator config override options\n * @param [ajvFormatOptions] - The `ajv-format` options to use when adding formats to `ajv`; pass `false` to disable it\n * @param [AjvClass] - The `Ajv` class to use when creating the validator instance\n * @param [extenderFn] - A function to call to extend AJV, such as `ajvErrors()`\n */\nexport default function createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides = {}, ajvFormatOptions, AjvClass = Ajv, extenderFn) {\n let ajv = new AjvClass({ ...AJV_CONFIG, ...ajvOptionsOverrides });\n if (ajvFormatOptions) {\n addFormats(ajv, ajvFormatOptions);\n }\n else if (ajvFormatOptions !== false) {\n addFormats(ajv);\n }\n // add custom formats\n ajv.addFormat('data-url', DATA_URL_FORMAT_REGEX);\n ajv.addFormat('color', COLOR_FORMAT_REGEX);\n // Register the remaining string-keyed RJSF property so AJV strict mode doesn't reject it.\n // ADDITIONAL_PROPERTY_FLAG, RJSF_REF_KEY, and RJSF_REF_CYCLE_KEY are now Symbols and\n // invisible to AJV, so they no longer need to be registered as keywords.\n ajv.addKeyword(RJSF_ADDITIONAL_PROPERTIES_FLAG);\n // add more schemas to validate against\n if (Array.isArray(additionalMetaSchemas)) {\n ajv.addMetaSchema(additionalMetaSchemas);\n }\n // add more custom formats to validate against\n if (isObject(customFormats)) {\n Object.keys(customFormats).forEach((formatName) => {\n ajv.addFormat(formatName, customFormats[formatName]);\n });\n }\n if (extenderFn) {\n ajv = extenderFn(ajv);\n }\n return ajv;\n}\n//# sourceMappingURL=createAjvInstance.js.map","import { deepEquals, ID_KEY, ROOT_SCHEMA_PREFIX, withIdRefPrefix, hashForSchema } from '@rjsf/utils';\nimport createAjvInstance from \"./createAjvInstance.js\";\nimport processRawValidationErrors from \"./processRawValidationErrors.js\";\n/** `ValidatorType` implementation that uses the AJV 8 validation mechanism.\n */\nexport default class AJV8Validator {\n /** The AJV instance to use for all validations\n *\n * @private\n */\n ajv;\n /** The Localizer function to use for localizing Ajv errors\n *\n * @private\n */\n localizer;\n /** Controls which duplicate error filtering is suppressed; see `filterDuplicateErrors`\n *\n * @private\n */\n suppressDuplicateFiltering;\n /** Most recent `rootSchema` reference processed by `handleSchemaUpdate`.\n *\n * @private\n */\n lastSeenRootSchema;\n /** True once a `rootSchema` has been registered with Ajv in this lifecycle.\n *\n * @private\n */\n hasRegisteredRootSchema = false;\n /** Constructs an `AJV8Validator` instance using the `options`\n *\n * @param options - The `CustomValidatorOptionsType` options that are used to create the AJV instance\n * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n */\n constructor(options, localizer) {\n const { additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn, suppressDuplicateFiltering, } = options;\n this.ajv = createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn);\n this.localizer = localizer;\n this.suppressDuplicateFiltering = suppressDuplicateFiltering;\n }\n /** Resets the internal AJV validator to clear schemas from it. Can be helpful for resetting the validator for tests.\n */\n reset() {\n this.ajv.removeSchema();\n this.lastSeenRootSchema = undefined;\n this.hasRegisteredRootSchema = false;\n }\n /** Runs the pure validation of the `schema` and `formData` without any of the RJSF functionality. Provided for use\n * by the playground. Returns the `errors` from the validation\n *\n * @param schema - The schema against which to validate the form data * @param schema\n * @param formData - The form data to validate\n */\n rawValidation(schema, formData) {\n let compilationError = undefined;\n let compiledValidator;\n try {\n if (schema[ID_KEY]) {\n compiledValidator = this.ajv.getSchema(schema[ID_KEY]);\n }\n if (compiledValidator === undefined) {\n compiledValidator = this.ajv.compile(schema);\n }\n compiledValidator(formData);\n }\n catch (err) {\n compilationError = err;\n // AJV registers a schema in its internal cache before running meta-schema\n // validation. When that check throws, the broken schema stays cached so\n // subsequent compile() calls skip revalidation and return silently. Remove\n // the entry so every call with an invalid schema consistently produces a\n // compilation error. For schemas with $id the cache key is the id string;\n // for anonymous schemas AJV uses the object reference as the key.\n // Guard with compiledValidator === undefined so that a runtime error thrown\n // by compiledValidator(formData) does not evict a correctly-compiled schema.\n if (compiledValidator === undefined) {\n this.ajv.removeSchema(schema[ID_KEY] !== undefined ? schema[ID_KEY] : schema);\n }\n }\n let errors;\n if (compiledValidator) {\n if (typeof this.localizer === 'function') {\n // Properties need to be enclosed with quotes so that\n // `AJV8Validator#transformRJSFValidationErrors` replaces property names\n // with `title` or `ui:title`. See #4348, #4349, #4387, and #4402.\n (compiledValidator.errors ?? []).forEach((error) => {\n ['missingProperty', 'property'].forEach((key) => {\n if (error.params?.[key]) {\n // oxlint-disable-next-line no-param-reassign\n error.params[key] = `'${error.params[key]}'`;\n }\n });\n if (error.params?.deps) {\n // As `error.params.deps` is the comma+space separated list of missing dependencies, enclose each dependency separately.\n // For example, `A, B` is converted into `'A', 'B'`.\n // oxlint-disable-next-line no-param-reassign\n error.params.deps = error.params.deps\n .split(', ')\n .map((v) => `'${v}'`)\n .join(', ');\n }\n });\n this.localizer(compiledValidator.errors);\n // Revert to originals\n (compiledValidator.errors ?? []).forEach((error) => {\n ['missingProperty', 'property'].forEach((key) => {\n if (error.params?.[key]) {\n // oxlint-disable-next-line no-param-reassign\n error.params[key] = error.params[key].slice(1, -1);\n }\n });\n if (error.params?.deps) {\n // Remove surrounding quotes from each missing dependency. For example, `'A', 'B'` is reverted to `A, B`.\n // oxlint-disable-next-line no-param-reassign\n error.params.deps = error.params.deps\n .split(', ')\n .map((v) => v.slice(1, -1))\n .join(', ');\n }\n });\n }\n errors = compiledValidator.errors || undefined;\n // Clear errors to prevent persistent errors, see #1104\n compiledValidator.errors = null;\n }\n return {\n errors: errors,\n validationError: compilationError,\n };\n }\n /** This function processes the `formData` with an optional user contributed `customValidate` function, which receives\n * the form data and a `errorHandler` function that will be used to add custom validation errors for each field. Also\n * supports a `transformErrors` function that will take the raw AJV validation errors, prior to custom validation and\n * transform them in what ever way it chooses.\n *\n * @param formData - The form data to validate\n * @param schema - The schema against which to validate the form data\n * @param [customValidate] - An optional function that is used to perform custom validation\n * @param [transformErrors] - An optional function that is used to transform errors after AJV validation\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n */\n validateFormData(formData, schema, customValidate, transformErrors, uiSchema) {\n const rawErrors = this.rawValidation(schema, formData);\n return processRawValidationErrors(this, rawErrors, formData, schema, customValidate, transformErrors, uiSchema, this.suppressDuplicateFiltering);\n }\n /**\n * This function checks if a schema needs to be added and if the root schemas don't match it removes the old root schema from the ajv instance and adds the new one.\n * When called repeatedly with the same `rootSchema` reference the deep-equality check is skipped.\n *\n * @param rootSchema - The root schema used to provide $ref resolutions\n */\n handleSchemaUpdate(rootSchema) {\n if (this.lastSeenRootSchema === rootSchema && this.hasRegisteredRootSchema) {\n return;\n }\n const rootSchemaId = rootSchema[ID_KEY] ?? ROOT_SCHEMA_PREFIX;\n // add the rootSchema ROOT_SCHEMA_PREFIX as id.\n // if schema validator instance doesn't exist, add it.\n // else if the root schemas don't match, we should remove and add the root schema so we don't have to remove and recompile the schema every run.\n if (this.ajv.getSchema(rootSchemaId) === undefined) {\n this.ajv.addSchema(rootSchema, rootSchemaId);\n }\n else if (!deepEquals(rootSchema, this.ajv.getSchema(rootSchemaId)?.schema)) {\n this.ajv.removeSchema(rootSchemaId);\n this.ajv.addSchema(rootSchema, rootSchemaId);\n }\n this.lastSeenRootSchema = rootSchema;\n this.hasRegisteredRootSchema = true;\n }\n /** Validates data against a schema, returning true if the data is valid, or\n * false otherwise. If the schema is invalid, then this function will return\n * false.\n *\n * @param schema - The schema against which to validate the form data\n * @param formData - The form data to validate\n * @param rootSchema - The root schema used to provide $ref resolutions\n */\n isValid(schema, formData, rootSchema) {\n // schemaId and compiled are declared outside the try so the catch block can\n // conditionally remove the broken schema from AJV's registry.\n let schemaId;\n let compiled = false;\n try {\n this.handleSchemaUpdate(rootSchema);\n // then rewrite the schema ref's to point to the rootSchema\n // this accounts for the case where schema have references to models\n // that lives in the rootSchema but not in the schema in question.\n const schemaWithIdRefPrefix = withIdRefPrefix(schema);\n schemaId = schemaWithIdRefPrefix[ID_KEY] ?? hashForSchema(schemaWithIdRefPrefix);\n let compiledValidator;\n compiledValidator = this.ajv.getSchema(schemaId);\n if (compiledValidator === undefined) {\n // Add schema by an explicit ID so it can be fetched later\n // Fall back to using compile if necessary\n // https://ajv.js.org/guide/managing-schemas.html#pre-adding-all-schemas-vs-adding-on-demand\n compiledValidator =\n this.ajv.addSchema(schemaWithIdRefPrefix, schemaId).getSchema(schemaId) ||\n this.ajv.compile(schemaWithIdRefPrefix);\n }\n compiled = true;\n const result = compiledValidator(formData);\n return result;\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.warn('Error encountered compiling schema:', e);\n // Remove the broken schema from AJV's registry so a subsequent rawValidation\n // or isValid call does not silently reuse a cached entry that bypassed\n // meta-schema validation. Guard with !compiled so that a runtime error thrown\n // by compiledValidator(formData) does not evict a correctly-compiled schema.\n if (!compiled && schemaId !== undefined) {\n this.ajv.removeSchema(schemaId);\n }\n return false;\n }\n }\n}\n//# sourceMappingURL=validator.js.map","import AJV8Validator from \"./validator.js\";\n/** Creates and returns a customized implementation of the `ValidatorType` with the given customization `options` if\n * provided. If a `localizer` is provided, it is used to translate the messages generated by the underlying AJV\n * validation.\n *\n * @param [options={}] - The `CustomValidatorOptionsType` options that are used to create the `ValidatorType` instance\n * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n * @returns - The custom validator implementation resulting from the set of parameters provided\n */\nexport default function customizeValidator(options = {}, localizer) {\n return new AJV8Validator(options, localizer);\n}\n//# sourceMappingURL=customizeValidator.js.map","import createPrecompiledValidator from \"./createPrecompiledValidator.js\";\nimport customizeValidator from \"./customizeValidator.js\";\nexport { customizeValidator, createPrecompiledValidator };\nexport default customizeValidator();\n//# sourceMappingURL=index.js.map","// Schema-Generated Configuration Form\n// Purpose: Renders the server-provided JSON Schema as an ordered, indented tree resembling the configuration's YAML structure.\n// Scope: Defines one generic RJSF presentation; it never names or special-cases an individual service or setting.\nimport { createContext, useContext, useMemo } from 'react';\nimport Form from '@rjsf/core';\nimport validator from '@rjsf/validator-ajv8';\nimport CardFrame from '../../components/CardFrame/index.jsx';\n\n/*\n Structural colors repeat only after six levels, which is deeper than the\n current configuration document but remains safe for future service-owned\n schemas. Depth is carried through React context because RJSF's array-item\n template does not receive a field path; context keeps objects, arrays, and\n array items in one generic hierarchy without attaching UI metadata to the\n server's schema.\n*/\nconst CONFIGURATION_LAYER_COLORS = [\n // Alternating warm and cool hues keep adjacent structural levels distinct\n // even after CardFrame applies its intentionally subtle translucent tint.\n '#0ea5e9', // blue\n '#f97316', // orange\n '#22c55e', // green\n '#a855f7', // purple\n '#ef4444', // red\n '#eab308', // yellow\n];\nconst ConfigurationLayerDepthContext = createContext(0);\n\nfunction useConfigurationLayer() {\n const depth = useContext(ConfigurationLayerDepthContext);\n return {\n color: CONFIGURATION_LAYER_COLORS[depth % CONFIGURATION_LAYER_COLORS.length],\n depth,\n };\n}\n\nfunction buildUiSchema(schema, path = '') {\n /*\n `writeOnly` is standard JSON Schema metadata and is the sole reason a field\n needs a special widget. The walk records its dotted path for the existing\n server secret-operation protocol; it contains no service or field names.\n */\n if (!schema || typeof schema !== 'object') return {};\n const firstExample = Array.isArray(schema.examples) ? schema.examples[0] : undefined;\n const placeholder = firstExample === undefined ? {} : { 'ui:placeholder': String(firstExample) };\n\n if (schema.writeOnly === true) {\n return {\n 'ui:widget': 'SecretWidget',\n 'ui:options': { secretPath: path },\n ...placeholder,\n };\n }\n\n if (schema.type === 'boolean') {\n /*\n RJSF's checkbox is unusual: unless it is explicitly selected, it renders\n the schema description and field name inside the widget as well as\n passing them to FieldTemplate. This generic option makes the surrounding\n YAML-like row the sole owner of that text, eliminating duplicates without\n maintaining a list of boolean setting names.\n */\n return {\n 'ui:widget': 'checkbox',\n 'ui:options': { label: false },\n };\n }\n\n if (schema.type === 'array' && schema.items) {\n /*\n Array item schemas need the same generic metadata walk as ordinary object\n properties. Otherwise fields created by Add item would lose their\n schema-owned placeholders even though the backend described them.\n */\n return {\n items: buildUiSchema(schema.items, path ? `${path}[]` : '[]'),\n };\n }\n\n if (schema.type !== 'object' || !schema.properties) return placeholder;\n return Object.fromEntries(Object.entries(schema.properties).map(([key, childSchema]) => [\n key,\n buildUiSchema(childSchema, path ? `${path}.${key}` : key),\n ]));\n}\n\nfunction SecretWidget({ id, disabled, readonly, options, placeholder, registry }) {\n const secretPath = options.secretPath;\n const context = registry.formContext || {};\n const operation = context.secretOperations?.[secretPath];\n const configured = Boolean(context.configuredSecrets?.[secretPath]);\n const replacing = operation?.action === 'replace';\n const clearing = operation?.action === 'clear';\n const unavailable = disabled || readonly;\n\n function setOperation(nextOperation) {\n if (!unavailable) context.setSecretOperation?.(secretPath, nextOperation);\n }\n\n return (\n
\n {/* Secret actions stay beside their status. A wide configuration card\n must not turn related controls into a trip across the screen. */}\n
\n \n {clearing ? 'Will be cleared when saved' : replacing ? 'Replacement pending' : configured ? 'Configured' : 'Not configured'}\n \n
\n \n \n
\n
\n {replacing ? (\n setOperation({ action: 'replace', value: event.target.value })}\n />\n ) : null}\n
\n );\n}\n\nfunction ConfigurationFieldTemplate({\n children,\n classNames,\n description,\n errors,\n help,\n hidden,\n id,\n label,\n required,\n schema,\n style,\n}) {\n if (hidden) return
{children}
;\n\n const containerField = schema?.type === 'object' || schema?.type === 'array';\n if (containerField) {\n // Objects and arrays own their visible boundaries and headings in the\n // templates below. Keeping this wrapper structural avoids duplicated\n // titles while retaining RJSF's useful field-type classes for layout.\n return
{children}{errors}{help}
;\n }\n\n return (\n
\n
\n {/* Boolean widgets deliberately hide their internal duplicate label, so\n every scalar can use this same key column and preserve YAML order. */}\n \n
\n
\n {/* Descriptions belong with the editable value rather than inside the\n narrow key column. This keeps long operational guidance readable\n without weakening the YAML-like key/value alignment. */}\n {description ?
{description}
: null}\n {children}\n {errors}\n {help}\n
\n
\n );\n}\n\nfunction ConfigurationObjectTemplate({ description, fieldPathId, properties, title }) {\n const visibleProperties = properties.filter((property) => !property.hidden);\n const propertyLines = visibleProperties.map((property) => property.content);\n const topLevel = fieldPathId.path.length === 1;\n const layer = useConfigurationLayer();\n\n if (fieldPathId.path.length === 0) {\n // The outer configuration card already names the root document. Rendering\n // its properties directly makes their schema order read like YAML lines.\n // The root description remains outside that stack so its introductory\n // text does not accidentally become another configuration section.\n return (\n
\n {description ?
{description}
: null}\n {/* The invisible schema root establishes depth zero. Every visible\n structural CardFrame below it advances the context by one level. */}\n \n
{propertyLines}
\n
\n
\n );\n }\n\n if (typeof fieldPathId.path.at(-1) === 'number') {\n // Array items receive their numbered heading and action row from the array\n // item CardFrame. Rendering only their description and ordered properties\n // prevents a redundant anonymous card inside that visible item boundary.\n return (\n
\n {description ?
{description}
: null}\n {propertyLines}\n
\n );\n }\n\n return (\n \n {description ?
{description}
: null}\n \n
{propertyLines}
\n
\n \n );\n}\n\nfunction ConfigurationArrayItemTemplate({ buttonsProps, children, hasToolbar, index }) {\n const unavailable = buttonsProps.disabled || buttonsProps.readonly;\n const layer = useConfigurationLayer();\n\n return (\n \n {hasToolbar ? (\n // Actions remain at the beginning of the card body instead of using\n // CardFrame's right-aligned action slot. Even on a wide editor, item\n // controls therefore stay next to the content they affect.\n
\n {(buttonsProps.hasMoveUp || buttonsProps.hasMoveDown) ? (\n \n ) : null}\n {(buttonsProps.hasMoveUp || buttonsProps.hasMoveDown) ? (\n \n ) : null}\n {buttonsProps.hasCopy ? (\n \n ) : null}\n {buttonsProps.hasRemove ? (\n \n ) : null}\n
\n ) : null}\n \n
{children}
\n
\n \n );\n}\n\nfunction ConfigurationArrayTemplate({ canAdd, disabled, fieldPathId, items, onAddClick, readonly, schema, title }) {\n const topLevel = fieldPathId.path.length === 1;\n const layer = useConfigurationLayer();\n\n return (\n \n {schema.description ?
{schema.description}
: null}\n {canAdd ? (\n // Adding belongs to the collection as a whole, but stays left-aligned\n // with that collection's contents rather than at the viewport edge.\n
\n \n
\n ) : null}\n \n
\n {items.length ? items :

No items configured.

}\n
\n
\n \n );\n}\n\nexport default function SchemaConfigurationForm({ schema, value, onChange, configuredSecrets, secretOperations, setSecretOperation }) {\n const uiSchema = useMemo(() => buildUiSchema(schema), [schema]);\n const widgets = useMemo(() => ({ SecretWidget }), []);\n const templates = useMemo(() => ({\n ArrayFieldItemTemplate: ConfigurationArrayItemTemplate,\n ArrayFieldTemplate: ConfigurationArrayTemplate,\n FieldTemplate: ConfigurationFieldTemplate,\n ObjectFieldTemplate: ConfigurationObjectTemplate,\n }), []);\n const formContext = useMemo(() => ({\n configuredSecrets,\n secretOperations,\n setSecretOperation,\n }), [configuredSecrets, secretOperations, setSecretOperation]);\n\n return (\n
\n onChange(formData)}\n >\n {/* Saving is owned by the sticky revision-aware toolbar above the form. */}\n <>\n \n
\n );\n}\n","// Complete Configuration Editor\n// Purpose: Connects the one hierarchical configuration form to revision, secret, validation, and save behavior.\n// Scope: Edits and saves one complete configuration document as one immutable revision.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport { importAdminConfigurationFile, updateConfiguration } from '../api.js';\nimport SchemaConfigurationForm from './SchemaConfigurationForm.jsx';\n\nfunction clone(value) {\n return JSON.parse(JSON.stringify(value));\n}\n\nexport default function ConfigurationEditor({ snapshot, socket, runSensitive, onSnapshot, onReload }) {\n const serverValue = snapshot?.configuration?.config;\n const schema = snapshot?.configuration?.schema;\n const revision = snapshot?.configuration?.revision;\n const [draft, setDraft] = useState(() => clone(serverValue));\n const [secretOperations, setSecretOperations] = useState({});\n const [saving, setSaving] = useState(false);\n const [importing, setImporting] = useState(false);\n const [configurationFile, setConfigurationFile] = useState(null);\n const [notice, setNotice] = useState('');\n const [error, setError] = useState('');\n const [validationErrors, setValidationErrors] = useState([]);\n const editorRef = useRef(null);\n const toolbarRef = useRef(null);\n\n useEffect(() => {\n setDraft(clone(serverValue));\n setSecretOperations({});\n setError('');\n setConfigurationFile(null);\n setValidationErrors([]);\n }, [revision, serverValue]);\n\n useEffect(() => {\n const editor = editorRef.current;\n const toolbar = toolbarRef.current;\n if (!editor || !toolbar) return undefined;\n\n /*\n The action toolbar can wrap differently at each viewport width, so a\n fixed CSS offset would eventually let section headings overlap it. Feed\n its real rendered height into one local CSS variable instead; every\n sticky configuration CardFrame can then meet the toolbar exactly.\n */\n const updateStickyOffset = () => {\n editor.style.setProperty('--configuration-sticky-top', `${toolbar.offsetHeight}px`);\n };\n updateStickyOffset();\n\n const observer = typeof ResizeObserver === 'function'\n ? new ResizeObserver(updateStickyOffset)\n : null;\n observer?.observe(toolbar);\n window.addEventListener('resize', updateStickyOffset);\n\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', updateStickyOffset);\n editor.style.removeProperty('--configuration-sticky-top');\n };\n }, [serverValue, schema]);\n\n const dirty = useMemo(\n () => JSON.stringify(draft) !== JSON.stringify(serverValue) || Object.keys(secretOperations).length > 0,\n [draft, secretOperations, serverValue],\n );\n const busy = saving || importing;\n\n if (!serverValue || !schema) {\n return

The configuration document is unavailable.

;\n }\n\n const setSecretOperation = (path, operation) => setSecretOperations((current) => {\n const next = { ...current };\n if (operation) next[path] = operation;\n else delete next[path];\n return next;\n });\n\n async function save() {\n setSaving(true);\n setError('');\n setValidationErrors([]);\n try {\n const response = await runSensitive(() => updateConfiguration(socket, {\n value: draft,\n expectedRevision: revision,\n secretOperations,\n }));\n onSnapshot(response.snapshot);\n } catch (saveError) {\n setError(saveError.message);\n setValidationErrors(saveError.validationErrors || []);\n } finally {\n setSaving(false);\n }\n }\n\n async function importSelectedConfiguration() {\n if (!configurationFile) return;\n /*\n Import replaces the complete draft and applies it immediately, so the\n confirmation names both consequences before reading or transmitting the\n operator-selected file. Administrator accounts remain owned by the\n initialized database and are never imported from this screen.\n */\n const confirmed = window.confirm(\n 'Replace the current configuration with this YAML file and apply it now? Any unsaved edits will be discarded. Administrator accounts in the file will be ignored.',\n );\n if (!confirmed) return;\n\n setImporting(true);\n setError('');\n setNotice('');\n setValidationErrors([]);\n try {\n const yamlText = await configurationFile.text();\n const response = await runSensitive(() => importAdminConfigurationFile(socket, {\n fileName: configurationFile.name,\n yaml: yamlText,\n expectedRevision: revision,\n }));\n onSnapshot(response.snapshot);\n setNotice(response.ignoredAdministratorCount > 0\n ? `Configuration imported and applied. ${response.ignoredAdministratorCount} administrator entr${response.ignoredAdministratorCount === 1 ? 'y was' : 'ies were'} ignored.`\n : 'Configuration imported and applied.');\n } catch (importError) {\n setError(importError.message);\n setValidationErrors(importError.validationErrors || []);\n } finally {\n setImporting(false);\n }\n }\n\n return (\n
\n \n
\n

Saving applies the complete revision immediately and reloads each affected service.

\n {/* All document actions stay together at the start of the toolbar. The\n editor may use a wide canvas, but width is never used to separate a\n control from the content that explains it. */}\n
\n \n \n \n
\n
\n \n

Replace this configuration from an explicitly selected legacy file. Unknown old settings and administrator accounts are ignored; current settings are validated and applied immediately.

\n {/* Keep the picker and its action beside each other at the start of the\n card. The configuration canvas can be wide, but this local action\n should never be separated from the file it operates on. */}\n
\n setConfigurationFile(event.target.files?.[0] || null)}\n />\n \n
\n
\n {snapshot.configurationApplication?.services?.some((service) => service.status === 'failed') ? (\n
\n

Configuration was saved, but some services could not reload

\n
    \n {snapshot.configurationApplication.services\n .filter((service) => service.status === 'failed')\n .map((service, index) =>
  • {service.section}: {service.error}
  • )}\n
\n
\n ) : null}\n {error ?

{error}

: null}\n {notice ?

{notice}

: null}\n {validationErrors.length ? (\n
\n

Configuration could not be saved

\n
    \n {validationErrors.map((validationError, index) => (\n
  • {validationError.path}: {validationError.message}
  • \n ))}\n
\n
\n ) : null}\n \n
\n
\n );\n}\n","// Password Confirmation Dialog\n// Purpose: Collects recent password proof for sensitive administrative mutations without storing it in page state longer than necessary.\n// Scope: Handles confirmation presentation only; retry ownership remains in AdminApp.\nimport { useState } from 'react';\n\nexport default function PasswordConfirmationDialog({ open, busy, error, onCancel, onConfirm }) {\n const [password, setPassword] = useState('');\n if (!open) return null;\n\n async function submit(event) {\n event.preventDefault();\n await onConfirm(password);\n setPassword('');\n }\n\n function cancel() {\n // Clear the credential before closing because this component remains\n // mounted beneath the admin shell and would otherwise retain it in memory.\n setPassword('');\n onCancel();\n }\n\n return (\n
\n
\n

Confirm password

\n

This sensitive action requires recent confirmation of your administrator password.

\n setPassword(event.target.value)}\n />\n {error ?

{error}

: null}\n
\n \n \n
\n \n
\n );\n}\n","// Central Administration Application\n// Purpose: Composes authentication, operational controls, users, and one complete configuration editor under /admin.\n// Scope: Reuses existing admin/identity components while shared infrastructure owns revisions and sensitive-action behavior.\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport AuthPanel from '../components/AuthPanel/index.jsx';\nimport AdminPanelContent from '../components/AdminPanel/AdminPanelContent.jsx';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport Tabs, { Tab, TabList, TabPanels } from '../components/Tabs/index.jsx';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport IdentityDatabasePanel from '../database/IdentityDatabasePanel.jsx';\nimport useUserIdentitySync from '../hooks/useUserIdentitySync.js';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { DEFAULT_PAGE_THEME_KEY, usePageThemeClass } from '../themes/index.js';\nimport { confirmAdminPassword, getAdminSnapshot } from './api.js';\nimport AdministratorAccounts from './components/AdministratorAccounts.jsx';\nimport AdminOverview from './components/AdminOverview.jsx';\nimport BackupRestorePanel from './components/BackupRestorePanel.jsx';\nimport ConfigurationEditor from './components/ConfigurationEditor.jsx';\nimport PasswordConfirmationDialog from './components/PasswordConfirmationDialog.jsx';\nimport './styles.css';\n\nconst TOP_LEVEL_SECTIONS = [\n { key: 'overview', label: 'Overview' },\n { key: 'fleet', label: 'Fleet operations' },\n { key: 'users', label: 'Users and administrators', lockdownOnly: true },\n { key: 'configuration', label: 'Configuration', lockdownOnly: true },\n { key: 'backup-restore', label: 'Backup and restore', lockdownOnly: true },\n];\n\nexport default function AdminApp() {\n useUserIdentitySync({ identitySurface: 'passive' });\n const socket = useSocket();\n const role = useSessionSelector((state) => state.session?.role || 'user');\n const connected = useSessionSelector((state) => state.connected);\n const [searchParams, setSearchParams] = useSearchParams();\n const selected = searchParams.get('section') || 'overview';\n const [snapshot, setSnapshot] = useState(null);\n const [loadingError, setLoadingError] = useState('');\n const pendingSensitiveAction = useRef(null);\n const [confirmationOpen, setConfirmationOpen] = useState(false);\n const [confirmationBusy, setConfirmationBusy] = useState(false);\n const [confirmationError, setConfirmationError] = useState('');\n const { value: pageSettings } = useSettingsNamespace('page', { backgroundTheme: DEFAULT_PAGE_THEME_KEY });\n const pageBackgroundClass = usePageThemeClass(pageSettings?.backgroundTheme);\n const isAdmin = role === 'admin' || role === 'lockdown';\n const isLockdown = role === 'lockdown';\n\n const loadSnapshot = useCallback(async () => {\n if (!isLockdown) {\n setSnapshot(null);\n return;\n }\n setLoadingError('');\n try {\n setSnapshot(await getAdminSnapshot(socket));\n } catch (error) {\n setLoadingError(error.message);\n }\n }, [isLockdown, socket]);\n\n useEffect(() => {\n loadSnapshot();\n }, [loadSnapshot, connected]);\n\n const runSensitive = useCallback(async (operation) => {\n try {\n return await operation();\n } catch (error) {\n if (error.code !== 'PASSWORD_CONFIRMATION_REQUIRED') throw error;\n /*\n Suspend exactly the rejected operation. After password confirmation the\n same closure reruns with its original revision and payload, so normal\n conflict detection still protects against changes made while waiting.\n */\n return new Promise((resolve, reject) => {\n pendingSensitiveAction.current = { operation, resolve, reject };\n setConfirmationError('');\n setConfirmationOpen(true);\n });\n }\n }, []);\n\n async function submitPasswordConfirmation(password) {\n setConfirmationBusy(true);\n setConfirmationError('');\n try {\n await confirmAdminPassword(socket, password);\n const pending = pendingSensitiveAction.current;\n pendingSensitiveAction.current = null;\n setConfirmationOpen(false);\n if (pending) {\n try {\n pending.resolve(await pending.operation());\n } catch (error) {\n pending.reject(error);\n }\n }\n } catch (error) {\n setConfirmationError(error.message);\n } finally {\n setConfirmationBusy(false);\n }\n }\n\n function cancelPasswordConfirmation() {\n const pending = pendingSensitiveAction.current;\n pendingSensitiveAction.current = null;\n setConfirmationOpen(false);\n if (pending) pending.reject(new Error('Sensitive action cancelled.'));\n }\n\n function selectSection(key) {\n setSearchParams(key === 'overview' ? {} : { section: key });\n }\n\n const navigationOptions = TOP_LEVEL_SECTIONS.filter((entry) => !entry.lockdownOnly || isLockdown);\n const activeSection = navigationOptions.some((entry) => entry.key === selected) ? selected : 'overview';\n\n let content;\n if (!isAdmin) {\n content =
;\n } else if (activeSection === 'fleet') {\n content = ;\n } else if (!isLockdown) {\n content = (\n \n

Routine fleet operations are available. Configuration, users, secrets, and system administration require a lockdown administrator.

\n
\n );\n } else if (!snapshot) {\n content =

{loadingError || 'Loading configuration and audit state…'}

;\n } else if (activeSection === 'users') {\n content = (\n
\n \n \n
\n );\n } else if (activeSection === 'configuration') {\n content = ;\n } else if (activeSection === 'backup-restore') {\n content = ;\n } else {\n content = ;\n }\n\n return (\n
\n \n \n
\n \n

{snapshot ? `Active configuration revision ${snapshot.configuration.revision}. The running application has applied revision ${snapshot.appliedRevision}.` : 'Central server administration and configuration.'}

\n
\n {isAdmin ? (\n \n {/* Reusing the same responsive tab surface as the driver page makes\n administration feel like another MultiRover workspace instead\n of a separate desktop-oriented application. */}\n \n
{content}
\n
\n ) :
{content}
}\n
\n
\n );\n}\n"],"names":["emitIdentityAdmin","socket","eventName","payload","resolve","reject","resp","listUsers","query","filter","getUser","userId","addSignal","type","value","removeSignal","setVerified","enabled","setDeterrence","reason","setMuted","setPermission","permissionKey","updateFeatureState","namespace","deleteFeatureState","SIGNAL_LABELS","SIGNAL_FIELDS","maskValue","text","formatDateTime","ts","stringifyJson","parseEditableJson","parsed","FILTERS","StatusPill","active","children","jsx","UserListCard","users","truncated","selectedUserId","loading","onQuery","onFilter","onRefresh","onSearch","onSelect","actions","jsxs","CardFrame","event","entry","user","UserDetailsCard","SignalEditor","onAdd","onRemove","draft","setDraft","useState","values","submit","SignalsCard","onAddSignal","onRemoveSignal","StatusCard","onVerified","onDeterrence","onMuted","setReason","FeatureStateCard","onSaveFeature","onDeleteFeature","namespaces","initialNamespace","setNamespace","setText","error","setError","save","ns","err","remove","next","RawRecordCard","PermissionsCard","permissions","onPermission","grantedKeys","permission","IdentityDatabasePanel","useSocket","setUsers","setPermissions","selectedUser","setSelectedUser","setQuery","setFilter","setTruncated","setLoading","message","setMessage","refreshUsers","useCallback","updated","selectUser","applyUserUpdate","prev","runMutation","operation","successMessage","useEffect","submitSearch","handleAddSignal","handleRemoveSignal","handleVerified","handleDeterrence","handleMuted","handlePermission","handleSaveFeature","handleDeleteFeature","Fragment","Tabs","TabList","Tab","TabPanels","TabPanel","AdministratorRow","administrator","runSensitive","onSnapshot","busy","setBusy","perform","work","response","actionError","deleteAdministrator","updateAdministrator","AdministratorAccounts","administrators","create","createAdministrator","formatDate","AdminOverview","snapshot","config","restartRequested","setRestartRequested","lifecycle","setLifecycle","lifecycleError","setLifecycleError","mounted","refreshLifecycle","getApplicationLifecycleStatus","timer","handleReconnect","restore","revision","restoreConfigurationRevision","restart","restartApplication","checkForUpdate","checkForApplicationUpdate","update","updateApplication","lifecycleBusy","lifecycleAvailable","updateSummary","Link","formatBytes","bytes","units","amount","unitIndex","BackupRestorePanel","backupBusy","setBackupBusy","restoreBusy","setRestoreBusy","backupFile","setBackupFile","validatedRestore","setValidatedRestore","lastRestore","setLastRestore","getBackupRestoreStatus","downloadBackup","createFullBackup","link","skipped","validateRestore","authorization","createRestoreUpload","uploadResponse","result","confirmFullRestore","isObject","thing","allowAdditionalItems","schema","getDecimalSeparator","languages","locales","part","asNumber","separator","standardValue","ADDITIONAL_PROPERTY_FLAG","ADDITIONAL_PROPERTIES_KEY","ALL_OF_KEY","ANY_OF_KEY","CONST_KEY","DEFAULT_KEY","DEPENDENCIES_KEY","ENUM_KEY","ERRORS_KEY","ID_KEY","IF_KEY","ITEMS_KEY","JUNK_OPTION_ID","NAME_KEY","ONE_OF_KEY","PATTERN_PROPERTIES_KEY","PROPERTIES_KEY","READONLY_KEY","REQUIRED_KEY","SUBMIT_BTN_OPTIONS_KEY","REF_KEY","RJSF_REF_KEY","RJSF_REF_CYCLE_KEY","SCHEMA_KEY","DEFAULT_ID_PREFIX","DEFAULT_ID_SEPARATOR","DISCRIMINATOR_PATH","FORM_CONTEXT_NAME","LOOKUP_MAP_NAME","RJSF_PREFIX_KEY","RJSF_ADDITIONAL_PROPERTIES_FLAG","ROOT_SCHEMA_PREFIX","UI_FIELD_KEY","UI_WIDGET_KEY","UI_OPTIONS_KEY","UI_GLOBAL_OPTIONS_KEY","UI_DEFINITIONS_KEY","JSON_SCHEMA_DRAFT_2019_09","JSON_SCHEMA_DRAFT_2020_12","getUiOptions","uiSchema","globalOptions","key","options","canExpand","formData","expandable","isPlainObject","proto","createErrorHandler","handler","acc","getOwnPropertyNames","getOwnPropertySymbols","hasOwnProperty","combineComparators","comparatorA","comparatorB","a","b","state","createIsCircular","areItemsEqual","cache","cachedA","cachedB","getStrictProperties","object","symbols","hasOwn","property","PREACT_VNODE","PREACT_OWNER","REACT_OWNER","HAS_FLOAT_16_ARRAY","getOwnPropertyDescriptor","keys","sameValueEqual","strictEqual","areArrayBuffersEqual","areTypedArraysEqual","areArraysEqual","index","areDataViewsEqual","areDatesEqual","areErrorsEqual","areMapsEqual","size","matchedIndices","aIterable","aResult","bResult","bIterable","hasMatch","matchIndex","aEntry","bEntry","areObjectsEqual","properties","isPropertyEqual","areObjectsEqualStrict","descriptorA","descriptorB","arePrimitiveWrappersEqual","areRegExpsEqual","areSetsEqual","areUrlsEqual","areSearchParamsEqual","serializedA","serializedB","sortSearchParams","serialized","toString","createEqualityComparator","supportedComparatorMap","createSupportedComparatorMap","areFunctionsEqual","areNumbersEqual","getUnsupportedCustomComparator","constructor","tag","supportedComparator","unsupportedCustomComparator","createEqualityComparatorConfig","circular","createCustomConfig","strict","createInternalEqualityComparator","compare","_indexOrKeyA","_indexOrKeyB","_parentA","_parentB","createIsEqual","comparator","createState","equals","meta","createCustomEqual","createCustomInternalComparator","deepEquals","_a","isUUID","isIPv4","isPort","isHexPair","isUnreserved","isPathCharacter","isQueryFragmentCharacter","isUserinfoCharacter","stringArrayToHexStripped","input","code","i","isHextet","isIPvFuture","isZoneCharacter","nonSimpleDomain","nonSimpleDomainChars","numericLastLabel","nonSimpleMailtoDomain","domain","isZoneIdentifier","zone","compressIPv6ZeroRun","hextets","bestStart","bestLength","runStart","runLength","head","tail","normalizeIPv6Address","compression","left","right","parts","hextetCount","expanded","normalizeIPv6","host","bracketed","findToken","zoneIdentifier","zoneSeparator","separatorLength","address","str","token","ind","removeDotSegments","path","output","nextSlash","len","HOST_DELIMS","HOST_DELIM_RE","HOST_DELIM_NO_COLON_RE","reescapeHostDelimiters","isIP","re","ch","normalizePercentEncoding","decodeUnreserved","hex","normalizedHex","decoded","BYTE_HEX","HEX_DIGITS","isEscapeSafe","cp","percentEncodeNonAscii","normalizePathEncoding","low","serializePathEncoding","pathNoScheme","firstSegment","normalizeQueryFragmentEncoding","encodeComponent","isAllowed","encodeUserinfo","encodeQuery","encodeFragment","escapePreservingEscapes","recomposeAuthority","component","uriTokens","ipV6res","port","utils","require$$0","URN_REG","supportedSchemeNames","isValidSchemeName","name","wsIsSecure","wsComponent","httpParse","httpSerialize","secure","wsParse","wsSerialize","queryIndex","urnParse","urnComponent","matches","scheme","urnScheme","schemeHandler","getSchemeHandler","urnSerialize","nid","uriComponent","nss","urnuuidParse","uuidComponent","urnuuidSerialize","http","https","ws","wss","urn","urnuuid","LOCAL_PART_ALLOWED","HFNAME_ALLOWED","DTEXT_ALLOWED","allowSet","chars","allowNonAscii","table","escaped","cls","LOCAL_PART","HFNAME","DTEXT","DTEXT_IRI","HEX_PAIR","MAILTO_DOMAIN_LITERAL","MAILTO_DOMAIN_ERROR","HAS_SURROGATE","decodeHex","replaceLoneSurrogates","encodeWithAllow","set","mailtoNormalizeDomain","normalizedDomain","parsedDomain","mailtoEncodeDomain","mailtoParse","mailtoComponent","rawPath","rawQuery","to","headers","start","end","eqIdx","addrs","j","rawAddr","atIdx","local","mailtoSerialize","addr","rawLocal","rawDomain","decodedDomain","count","SCHEMES","schemes","require$$1","VALID_SCHEME","MALFORMED_SCHEME_ERROR","decodeValidScheme","decodedScheme","normalize","uri","normalizeString","parse","serialize","baseURI","relativeURI","schemelessOptions","baseParsed","baseMalformed","baseMalformedPercentEncoding","baseMalformedSchemeSpecific","baseMalformedHost","baseMalformedScheme","parseWithStatus","relativeParsed","relativeMalformed","relativeMalformedPercentEncoding","relativeMalformedSchemeSpecific","relativeMalformedHost","relativeMalformedScheme","resolved","resolveComponent","resolvedSchemeHandler","resolvedHost","resolvedHostIsIP","canonicalizeHost","encodedASCIIHost","base","relative","skipNormalization","target","equal","uriA","uriB","normalizedA","normalizeComparableURI","normalizedB","cmpts","opts","hasAuthority","authority","s","URI_PARSE","AUTHORITY_PREFIX","AUTHORITY_INTRODUCER_REGION","getParseError","hasMalformedPercentEncoding","percent","isIPLiteral","hasMalformedComponentPercentEncoding","bracketedIPLiteral","e","malformedAuthorityOrPort","malformedPercentEncoding","malformedSchemeSpecific","malformedHost","malformedIPLiteral","malformedScheme","authorityMatch","introducerMatch","region","normalizedRegion","parseError","hasIPLiteralBracket","ipv6result","normalizeStringWithStatus","normalized","fastUri","fastUriModule","hasExcape","escapeMatcher","escapeReplacer","m","untilde","setter","obj","pointer","hasNextPart","p","oldValue","compilePointer","get","compile","compiled","jsonpointer","findEmbeddedSchemaRecursive","ref","UriResolver","subSchema","item","makeAllReferencesAbsolute","currentURI","splitKeyElementFromObject","remaining","findSchemaDefinitionRecursive","$ref","rootSchema","recurseList","current","currentBaseURI","decodedRef","resolvedRef","refId","refAnchor","nextRef","firstRef","restRefs","circularPath","theRef","findSchemaDefinition","reIsIndex","toPath","normalizePath","isUnsafeSegment","segment","isIndex","isSettable","getByPath","defaultValue","setByPath","createIntermediateObjects","segments","existing","hasByPath","unsetByPath","parent","getDiscriminatorFieldFromSchema","discriminator","maybeString","guessType","getSchemaType","t","mergeSchemas","obj1","obj2","accumulator","sym","getPropertySchema","getOptionMatchingSimpleDiscriminator","discriminatorField","option","getFirstMatchingOption","validator","simpleDiscriminatorMatch","requiresAnyOf","augmentedSchema","shallowClone","objProto","isRecordEmpty","rec","JSON_SCHEMA_TYPE_NAMES","RECORDS_OF_SUB_SCHEMAS","ARRAYS_OF_SUB_SCHEMAS","SUB_SCHEMAS","isSchemaObject","schemaDef","isAllowAnySchema","def","ascComparator","union","larger","smaller","ll","sl","tmp","data","intersection","setB","val","isArrayEmpty","arr","createArrayComparator","d","createDeduplicator","threshold","al","rl","outer","sorted","wIndex","rIndex","createIntersector","bl","tmpArr","tmpL","aSorted","bSorted","cmp","memoize","func","arg","ret","weakMemoize","zero","isUndefined","v","isSchemaPrimitiveExceptNull","PRIMITIVE_TYPE_ORDER","compareSchemaPrimitive","ta","tb","insertUniqueValues","mutableTarget","mutableSource","tl","seen","l","createCmpMatcher","isEmpty","compareEmpty","createOptionalComparator","createNarrowingOptionalComparator","createArrayOrItemComparator","compareArray","compareOptionalSameTypeSchemaPrimitives","compareNumbersWithZeroDefault","createComparator","deduplicationCache","sortedKeysCache","getSortedKeys","createRecordsComparator","aKeys","bKeys","createArrayComparatorWithDeduplication","deduplicate","compareArrayOfSameTypePrimitivesWithDeduplication","compareSchemaDefinitions","allKeys","COMPARATORS","compareOptionalSchemaValues","compareSchemaValues","compareNonNullSchemaValue","compareOptionalSchemaDefinitions","compareRecordOfOptionalSchemasWithEmptyRecordDefault","compareOptionalArrayOfSchemasWithDeduplication","compareSchemaDefinitionsWithEmptyDefinitionDefault","isAArr","isBArr","identity","gcd","lcm","simplePatternsMerger","createPairCombinations","r","action","lv","mergeBooleans","createRecordsMerge","merge","createMap","items","map","pair","assignSchemaDefinitionOrRecordOfSchemaDefinitions","PROPERTIES_ASSIGNER_KEYS","compilePatterns","patterns","source","EMPTY_PATTERNS_AND_KEYS","appendKeyConstraints","ITEMS_ASSIGNER_KEYS","CONDITION_ASSIGNER_KEYS","assignCondition","intersectSchemaTypes","check","createChecksMap","checks","fn","k","DEFAULT_CHECKS","createMerger","mergePatterns","isSubRegExp","intersectJson","deduplicateJsonSchemaDef","defaultMerger","assigners","mergers","mergeArrayOfSchemaDefinitions","schemas","mergeSchemaDefinitions","createProperty","constraints","oppositeValue","oppositePatterns","oppositeAdditional","isNotYetAllowed","assignPatternPropertiesAndAdditionalPropertiesMerge","patternKeys","matchedPatterns","isOppositeTruthy","pattern","propertiesAssigner","lProps","lPatterns","lAdditional","rProps","rPatterns","rAdditional","isLAddTruthy","isRAddTruthy","mergeRecordsOfSchemaDefinitions","additionalProperties","lKeys","lKeysLen","lCompiledPatterns","lPatternKeys","rCompiledPatterns","rPatternKeys","lKeysSet","mappedRAdditional","prop","rKeys","rKeysLen","mappedLAdditional","lKey","rKey","itemsAssigner","lItems","rItems","isLArr","isRArr","itemsArray","additional","isAdditionalTruthy","conditionAssigner","cond","mergeArraysOfSchemaDefinition","definitions","ASSIGNERS_MAP","CHECKS_MAP","rv","checkData","assign","MERGERS","x","y","el","factor","getAllOfSchemas","stack","allOf","rest","createShallowAllOfMerge","shallowAllOfMerge","retrieveSchema","rawFormData","experimental_customMergeAllOf","resolveAnyOfOrOneOfRefs","retrieveSchemaInternal","normalizeBooleanSchema","resolveCondition","expandAllBranches","expression","then","otherwise","resolvedSchemaLessConditional","conditionValue","resolvedSchemas","thenSchema","otherwiseSchema","conditionalBranch","conditionalSchema","getAllPermutationsOfXxxOf","listOfLists","permutations","list","element","permutation","getMatchingPatternProperties","patternProperties","resolveSchema","updatedSchemas","resolveReference","resolveDependencies","allOfSchemaElements","allOfSubschema","updatedSchema","resolveAllReferences","markCycleOnDetection","resolvedSchema","localSchema","childrenLists","updatedProps","childList","stubExistingAdditionalProperties","theSchema","aFormData","matchingProperties","mergeAllOf","restOfSchema","withContainsSchemas","withoutContainsSchemas","allOfSymbols","allOfItem","resolvedSchemaWithoutAllOf","resolveAnyOrOneOfSchemas","anyOrOneOf","oneOf","anyOf","relaxed","relaxOptionsForScoring","resolveRefs","dependencies","remainingSchema","processDependencies","dependencyKey","remainingDependencies","dependencyValue","withDependentProperties","withDependentSchema","additionallyRequired","required","dependent","dependentSchema","mergedSchema","resolvedOneOfs","subschema","resolvedOneOf","withExactlyOneSubschema","validSubschemas","conditionPropertySchema","conditionSchema","dependentSubschema","resolvedSubschema","findSelectedOptionInXxxOf","fallbackField","xxx","selectorField","xxxOfs","xxxOf","xxxOfOption","getFromSchemaInternal","fieldSchema","pathList","nestedPath","getFromSchema","NOT_FOUND_SCHEMA","findFieldInSchema","parentField","fieldName","fieldNameKey","subPath","field","requiredArray","isRequired","JUNK_OPTION","calculateIndexScore","totalScore","score","formValue","newSchema","xxxOfKey","getClosestMatchingOption","newScore","selectedOption","resolvedOptions","allValidIndexes","validList","scoreCount","bestIndex","scoreData","bestScore","constIsAjvDataReference","schemaConst","schemaType","isConstant","isFixedItems","mergeDefaultsWithFormData","defaults","mergeExtraArrayDefaults","defaultSupercedesUndefined","overrideFormDataWithDefaults","defaultsArray","overrideArray","overrideOppositeArray","mapped","idx","formDataObj","defaultsObj","keyValue","keyExistsInDefaults","keyExistsInFormData","keyDefault","defaultValueNeedsDeepMerge","keyDefaultIsObject","keyHasFormDataObject","mergeObjects","concatArrays","toMerge","toConstant","applyEnumOrder","order","optionsByValue","opt","orderedKeys","optionsList","enumNames","enumOrder","uiEnumNames","uiEnumOrder","altSchemas","altUiSchemas","optionsSchemaSelector","aSchemaDef","title","aSchema","label","innerSchema","isSelect","altSchema","isMultiSelect","PRIMITIVE_TYPES","AdditionalItemsHandling","getInnerSchemaForArrayItem","additionalItems","hasContent","computeDefaultBasedOnSchemaTypeAndDefaults","computedDefault","schemaDefault","maybeAddDefaultToObject","includeUndefinedValues","isParentRequired","requiredFields","experimental_defaultFormStateBehavior","isConst","isNullType","emptyObjectFields","isSelfOrParentRequired","computeDefaults","rawSchema","computeDefaultsProps","parentDefaults","_recurseList","shouldMergeDefaultsIntoFormData","initialDefaultsGenerated","preferParentDefaults","schemaToCompute","experimental_dfsb_to_compute","updatedRecurseList","refName","hasNoExistingData","defaultFormData","getDefaultBasedOnSchemaType","itemSchema","defaultsWithFormData","arrayMinItems","mergeExtraDefaults","matchingFormData","ensureFormDataMatchingSchema","shouldRetrieveAllOf","schemaToMatch","isSelectField","validFormData","propertySchema","getObjectDefaults","retrievedSchema","parentConst","objectDefaults","hasParentConst","hasConst","additionalPropertiesSchema","formDataRequired","getArrayDefaults","requiredAsRoot","initialDefaults","arrayMinItemsStateBehavior","arrayMinItemsPopulate","arrayMergeExtraDefaults","neverPopulate","ignoreMinItemsFlagSet","isPopulateAll","computeSkipPopulate","emptyDefault","schemaItem","itemFormData","itemDefaults","defaultsLength","arrayDefault","defaultEntries","fillerSchema","fillerDefault","fillerEntries","getDefaultFormState","mergeDefaultsIntoFormData","isCustomWidget","isFilesArray","itemsSchema","getDisplayLabel","uiOptions","displayLabel","addedByAdditionalProperty","getUsedFormData","fields","getFieldNames","pathSchema","formValueHasData","isLeaf","getAllPaths","_obj","paths","objKeys","newPaths","isValueEmpty","doMergeAllOf","omitExtraData","isObjectValue","isSchemaObj","handleObject","childSchema","requiredSet","setProperty","omit","sd","innerRequired","patternPropertiesRest","knownProperties","matched","addlSchema","handleArray","tupleLength","handleConditions","condition","branch","handleOneOf","scoringOptions","winning","handleAnyOf","handleDependencies","deps","useSourceAsFallback","remainingAllOf","filtered","afterConditions","knownKeys","NO_VALUE","enumValuesForSchema","replacementForInvalidEnumValue","enumValues","sanitizeDataForNewSchema","oldSchema","newFormData","newProperties","removeOldSchemaData","oldProperties","nestedData","isNewProperty","oldKeyedSchema","newKeyedSchema","oldSchemaTypeForKey","newSchemaTypeForKey","itemData","newOptionDefault","oldOptionDefault","newOptionConst","oldOptionConst","enumReplacement","oldSchemaItems","newSchemaItems","oldSchemaType","newSchemaType","maxItems","newValue","aValue","itemValue","newItemEnumValues","filteredData","toPathSchemaInternal","additionalSchema","definedProperties","schemaItems","schemaAdditionalItems","toPathSchema","SchemaUtils","createSchemaUtils","dataURItoBlob","dataURILike","splitted","media","base64","mime","mediaparams","param","binary","array","pad","num","width","dateRangeOptions","stop","bothRelative","eitherNegative","currentYear","resolvedStart","resolvedStop","replaceStringParameters","inputString","params","partIndex","englishStringTranslator","stringToTranslate","enumOptionsValueForIndex","valueIndex","allEnumOptions","emptyValue","enumOptionsDeselectValue","selected","enumOptionsIsSelected","sel","enumOptionsIndexForValue","multiple","selectedIndexes","enumOptionSelectedValue","enumOptions","format","indexes","enumOptionsSelectValue","all","decodeSingle","match","enumOptionValueDecoder","enumOptionValueEncoder","ErrorSchemaBuilder","initialSchema","pathOfError","errorBlock","errorOrList","errorsList","listToAdd","getChangedDescendants","getChangedFields","descendants","deep","aKeySet","unequalFields","diffFields","getDateElementProps","date","time","yearRange","day","month","year","hour","minute","second","dayObj","monthObj","yearObj","dateElementProp","rangeSpec","spec","getInputProps","defaultType","autoDefaultStepAny","inputProps","getOptionValueFormat","DEFAULT_OPTIONS","getSubmitButtonOptions","getTemplate","registry","templates","testIdCounter","getTestIds","ids","c","f","g","h","n","q","u","reactIs_production_min","reactIsModule","widgetMap","mergeWidgetOptions","AWidget","MergedWidget","defaultOptions","props","_jsx","getWidget","widget","registeredWidgets","ReactIs","createElement","registeredWidget","hashString","string","hash","chr","sortedJSONStringify","shouldIncludeValue","record","hashObject","hashForSchema","hasWidget","idGenerator","id","suffix","descriptionId","errorId","examplesId","helpId","titleId","ariaDescribedByIds","includeExamples","examples","optionId","optionIndex","buttonId","btn","optionalControlsId","isFormDataAvailable","isRootSchema","schemaToCompare","schemaUtils","labelValue","hideLabel","fallback","localToUTC","dateString","logUnsupportedDefaultForEnum","lookupFromFormContext","regOrFc","toLookup","lookupPath","noop","orderProperties","arrayToHash","curr","errorPropList","propertyHash","orderFiltered","orderHash","restIndex","complete","parseDateString","includeTime","resolveUiSchema","localUiSchema","definitionUiSchema","keyword","schemaOptions","currentUiSchemaArray","uiSchemaArray","hasExpanded","optionRef","optionUiSchema","schemaRequiresTrueValue","schemaSome","SelectedOptionDescription","enumValue","description","DescriptionFieldTemplate","shallowEquals","keysA","keysB","shouldRender","nextProps","nextState","updateStrategy","getSchemaTypesForXxxOf","allTypes","shouldRenderOptionalField","enableOptionalDataFieldForType","toDateString","dateObject","utcTime","datetime","toErrorList","errorSchema","fieldPath","errorsFrom","errors","errorList","currentList","toErrorSchema","builder","toFieldPathId","globalFormOptions","parentPath","isMultiValue","basePath","childPath","unwrapErrorHandler","errorHandler","unwrapErrors","readyForChange","DateElement","className","range","select","rootId","disabled","readonly","autofocus","onBlur","onFocus","SelectWidget","onChange","useAltDateWidgetProps","setState","handleChange","handleClear","handleSetNow","useMemo","useDeepCompareMemo","valueRef","useRef","addNameToDataURL","dataURL","processFile","file","reader","processFiles","files","extractFileInfo","dataURLs","blob","useFileWidgetProps","filesInfo","fileInfo","handleRemove","_","utcToLocal","jsonDate","yyyy","MM","dd","hh","mm","ss","SSS","validationDataMerge","validationData","additionalErrorSchema","preventDuplicates","oldErrors","oldErrorSchema","withIdRefPrefixObject","node","realObj","withIdRefPrefix","withIdRefPrefixArray","schemaNode","TranslatableString","rowIdCounter","generateRowId","generateKeyedFormData","keyedToPlainFormData","keyedFormData","keyedItem","isItemRequired","canAddItem","formItems","addable","computeItemUiSchema","formContext","getNewFormDataRow","ArrayAsMultiSelect","fieldPathId","placeholder","rawErrors","onSelectChange","widgets","globalUiOptions","itemsUiSchema","uiTitle","Widget","multiValueFieldPathId","ArrayAsCustomWidget","hideError","ArrayAsFiles","ArrayFieldItemInner","itemKey","parentUiSchema","canAdd","canRemove","canMoveUp","canMoveDown","rawItemSchema","itemUiSchema","parentFieldPathId","itemErrorSchema","totalItems","handleAddItem","handleCopyItem","handleRemoveItem","handleReorderItems","ArraySchemaField","SchemaField","ItemSchemaField","ArrayFieldItemTemplate","hasDescription","orderable","removable","copyable","has","onAddItem","onCopyItem","onRemoveItem","onMoveUpItem","onMoveDownItem","templateProps","ArrayFieldItem","memo","NormalArray","formDataFromProps","fieldTitle","OptionalDataControlsField","renderOptionalField","hasFormData","actualFormData","extraClass","childFieldPathId","optionalDataControl","arrayProps","itemCast","itemProps","Template","FixedArray","hasAdditionalItems","useKeyedFormData","newHash","formDataHash","nextFormData","previousKeyedFormData","previousKeyedFormDatum","updateKeyedFormData","newData","plainFormData","updatedHash","ArrayField","translateString","keyedFormDataRef","errorSchemaRef","newErrorSchema","newKeyedFormDataRow","newKeyedFormData","newIndex","reOrderArray","lastPathIsItemIndex","arrayAsMultiProps","UnsupportedFieldTemplate","fallbackSchema","BooleanField","schemaTitle","yes","no","o","enums","onWidgetChange","CyclicSchemaField","setExpanded","CyclicSchemaExpandTemplate","getFallbackTypeSelectionSchema","getTypeOfFormData","dataType","castToNewType","newType","castedNumber","FallbackField","setType","typeSelectorInnerFieldPathId","typesOptionSchema","onTypeChange","FallbackFieldTemplate","GridType","Operators","LOOKUP_REGEX","LAYOUT_GRID_UI_OPTION","getNonNullishValue","isNumericIndex","LAYOUT_GRID_FIELD_TEST_IDS","computeFieldUiSchema","uiProps","schemaReadonly","forceReadonly","localUiOptions","fieldUiSchema","uiReadonly","fieldUiOptions","conditionMatches","operator","datum","findChildrenAndProps","layoutGridSchema","schemaKey","gridProps","elements","toMapClassNames","otherProps","ele","computeArraySchemasIfPresent","potentialIndex","resultPathId","getSchemaDetailsForField","dottedPath","initialFieldIdPath","leafPath","innerData","isReadonly","schemaProperties","selectedSchema","optionsInfo","getCustomRenderComponent","render","customRenderer","computeUIComponentPropsFromGridSchema","gridSchema","UIComponent","rendered","innerName","innerProps","lookupName","LayoutGridFieldChildren","childrenLayoutGridSchemaId","layoutGridFieldProps","_createElement","LayoutGridField","LayoutGridCondition","fieldData","LayoutGridCol","GridTemplate","LayoutGridColumns","child","LayoutGridRow","LayoutGridFieldComponent","LayoutMultiSchemaField","uiComponentProps","fieldIdSchema","memoFieldPathId","Field","namePath","LayoutHeaderField","TitleFieldTemplate","getSelectedOption","selector","computeEnumOptions","realOptions","tempSchema","baseType","setEnumOptions","FieldErrorTemplate","FieldTemplate","schemaHash","optionsHash","uiSchemaHash","uiSchemaHideError","optionSchema","hideFieldError","fieldErrorSchema","onOptionChange","newOption","oldOption","widgetOptions","AnyOfField","retrievedOptions","setSelectedOption","skipNextOptionRecalculation","prevFormDataRef","prevFieldIdRef","prevFormData","prevFieldId","matchingOption","fieldId","intOption","SchemaFieldComponent","MultiSchemaFieldTemplate","isOptionalRender","autocomplete","schemaRequired","parentProps","optionsUiSchema","translateEnum","translateParams","optionsSchemaField","NullField","trailingCharMatcherWithPrefix","trailingCharMatcher","NumberField","initialValue","lastValue","setLastValue","StringField","escapedSeparator","normalizedValue","processed","displayValue","defaultWidget","B","z","I","w","v5","Z0","b0","A0","W5","V5","M9","K5","T0","P0","O0","Y0","k9","J5","c0","O9","m0","D9","L5","A9","C5","s5","x9","Y$","c$","l$","r$","j9","t5","Q5","j0","f5","T5","y5","E0","S5","E9","z5","F5","o$","i$","a$","n$","V$","K$","g9","V0","q0","U9","U5","I6","X4","$","t$","Q","Z","X","Y","V","L6","K","P6","w6","R6","U$","Y4","I5","N6","s$","H5","o0","t0","g0","N5","e$","Q9","h5","$4","$9","Z4","b6","M5","k5","V4","K4","J4","e5","U4","G4","f9","q4","T6","W4","Z9","G$","J","z4","G","U","W","y6","Q4","q$","H","F","F4","m5","H4","S6","M4","h9","O4","k6","C9","W$","D4","z$","I9","h4","m4","D$","N9","x6","j4","F$","B4","u4","_4","p4","d4","c4","E6","g6","C6","f6","h6","A$","v4","w5","M","D","A","N","L","O","P","T","G5","m6","l4","p9","C","q9","X5","B9","I4","R$","j$","B$","d9","G0","v9","N4","e0","l5","U0","Q0","L0","u6","p6","W9","d6","d5","P4","w4","R4","c6","b4","l6","r6","S","X0","I0","c5","r4","u5","G9","L4","T4","E","u0","B0","W0","H0","D0","K0","y0","S0","_0","w0","z0","F0","M0","f0","v0","k0","h0","p0","N0","x0","R","J0","a0","q5","$0","C0","d0","n0","$5","l0","s0","r5","x5","R0","o5","w9","b5","i5","E5","j5","Z5","B5","V9","a5","A5","l9","P5","p5","o6","r9","_$","o4","i6","s4","t4","K9","Y5","J9","e4","$6","Z6","Q6","S$","k$","a9","X6","Y6","x$","V6","K6","J6","z9","_5","E$","g$","R9","n9","C$","s9","f$","h$","b9","U6","t9","e9","m$","u$","L9","$$","r0","g5","Z$","p$","T9","n5","F9","G6","y9","S9","q6","W6","z6","F6","H6","M6","O6","D6","Q$","d$","H9","A6","X$","j6","B6","_6","v6","y4","S4","a6","n6","s6","R5","t6","b$","e6","$Z","ZZ","k4","x4","QZ","XZ","m9","E4","v$","g4","I$","C4","N$","H$","O5","YZ","c9","M$","u9","O$","f4","i4","o9","P$","VZ","KZ","JZ","w$","X9","UZ","GZ","qZ","_9","WZ","a4","P9","L$","Y9","i0.createElement","T$","D5","i9","i0.createContext","n4","i0.Fragment","HZ","MZ","OZ","y$","DZ","i0.useRef","AZ","i0.useContext","i0.useMemo","ADDITIONAL_PROPERTY_KEY_REMOVE","IS_RESET","getDefaultValue","isAdditionalPropertySchema","getAdditionalPropertyOrder","ObjectFieldPropertyFn","propertyName","handleKeyRename","handleRemoveProperty","addedByAdditionalProperties","wasPropertyKeyModified","setWasPropertyKeyModified","innerFieldIdPathId","onPropertyChange","onKeyRename","onKeyRenameBlur","onRemoveProperty","ObjectFieldProperty","ObjectField","formDataRef","lastRenamedProperty","additionalPropertyOrder","setAdditionalPropertyOrder","definedPropertyOrder","additionalPropertySet","templateTitle","orderedProperties","getAvailableKey","preferredKey","existingFormData","duplicateKeySuffixSeparator","newKey","onAddProperty","constValue","apSchema","oldKey","currentFormData","actualNewKey","newKeys","keyValues","renamedObj","getStableKey","definedPropertySet","currentAdditionalProperties","_jsxs","Markdown","hidden","OptionalDataControlsTemplate","onAddClick","onRemoveClick","labelEnum","COMPONENT_TYPES","getFieldComponent","schemaId","componentName","SchemaFieldRender","_schema","_uiSchema","_AnyOfField","_OneOfField","handleFieldComponentChange","FieldHelpTemplate","FieldComponent","deprecatedHandling","isReplacingAnyOrOneOf","XxxOfField","XxxOfOptions","fieldPathIdProps","xxxOfSchema","__errors","consumedUiClassNames","consumedClassNames","consumedUiStyle","consumedOptionClassNames","consumedOptionStyle","help","classNames","helpComponent","errorsComponent","fieldProps","_Fragment","prevProps","experimental_componentUpdateStrategy","MultiSchemaField","ArrayFieldDescriptionTemplate","ArrayFieldItemButtonsTemplate","hasCopy","hasMoveDown","hasMoveUp","hasRemove","CopyButton","MoveDownButton","MoveUpButton","RemoveButton","buttonsProps","hasToolbar","btnStyle","margin","containerStyle","toolbarStyle","ArrayFieldTemplate","ArrayFieldTitleTemplate","showOptionalDataControlInTitle","AddButton","SchemaExamples","example","BaseInputTemplate","htmlName","onChangeOverride","ClearButton","inputValue","handleBlur","handleFocus","IconButtonFn","iconType","icon","IconButton","CopyButtonFn","MoveDownButtonFn","MoveUpButtonFn","RemoveButtonFn","ClearButtonFn","onClick","SubmitButton","submitText","norender","submitButtonProps","buttonTemplates","onExpand","TEST_IDS","RichDescription","DescriptionField","ErrorList","typeSelector","schemaField","elem","RichHelp","REQUIRED_FIELD_SYMBOL","Label","WrapIfAdditionalTemplate","isCheckbox","column","optionSchemaField","ObjectFieldTemplate","TitleField","UnsupportedField","style","rawDescription","keyLabel","classNamesList","uiClassNames","ButtonTemplates","AltDateTimeWidget","AltDateWidget","elemProps","CheckboxesWidget","inline","enumDisabled","optionValueFormat","checkboxesValues","checked","itemDisabled","disabledCls","checkbox","CheckboxWidget","trueValueRequired","ColorWidget","DateTimeWidget","DateWidget","EmailWidget","FileInfoPreview","previewLabel","FilesInfo","preview","FileWidget","handleOnChangeEvent","HiddenWidget","PasswordWidget","RadioWidget","radio","RangeWidget","RatingWidget","stars","shape","numStars","min","handleStarClick","starValue","getSymbol","isFilled","getValue","optEmptyVal","selectValue","showPlaceholderOption","enumLabel","isDisabled","TextareaWidget","TextWidget","TimeWidget","hasSecondPrecision","UpDownWidget","URLWidget","getDefaultRegistry","toIChangeEvent","status","edit","Form","Component","baseErrors","propsFormData","initialFormData","createRef","prevState","formDataChangedFields","stateDataChangedFields","isSchemaChanged","isFormDataChanged","isStateDataChanged","shouldUpdate","nextStateDiffersFromProps","wasProcessingUserChange","inputFormData","getFormDataChangedFields","skipLiveValidate","shouldSanitize","isUncontrolled","liveValidate","mustValidate","defaultsFormData","computedRetrievedSchema","wasSanitized","preventInfiniteSanitize","formHash","sanitizedFormData","sanitizedFormHash","getCurrentErrors","schemaValidationErrors","schemaValidationErrorSchema","liveValidation","currentErrors","pathOfField","mergedErrors","newRegistry","altSchemaUtils","customValidate","transformErrors","validationSchema","validationFormData","ErrorListTemplate","schemaValidation","extraErrors","customErrors","merged","originalErrorSchema","mergeIntoOriginalErrorSchema","liveOmit","noValidate","oldFormData","mergeBaseErrorSchema","rootPathId","isRootPath","hasOnlyUndefinedValues","wasPreviouslyNull","inputForDefaults","plainLeafWasCleared","valueForPath","leaf","newState","oldValidationError","pathErrors","hasChanges","oldData","onSubmit","idSeparator","idPrefix","nameGenerator","useFallbackUiForUnsupportedType","customTranslateString","submitCustomEvent","elementId","extraErrorsBlockSubmit","focusOnFirstError","onError","prevErrors","hasError","tagName","method","autoComplete","enctype","acceptCharset","noHtml5Validate","showErrorList","_internalFormWrapper","as","FormTag","submitOptions","submitUiSchema","filterDuplicateErrors","suppressDuplicateFiltering","schemaPath","anyOfIndex","oneOfIndex","schemaPrefix","transformRJSFValidationErrors","instancePath","parentSchema","rawPropertyNames","currentProperty","uiSchemaTitle","uiSchemaPath","propParts","parentSchemaTitle","aSchemaPath","rootSchemaTitle","processRawValidationErrors","invalidSchemaError","userErrorSchema","exports","_CodeOrName","Name","_Code","names","strs","args","addCodeArg","plus","expr","safeStringify","optimize","interpolate","res","mergeExprItems","strConcat","c1","c2","stringify","getProperty","getEsmExportName","regexpCode","rx","code_1","ValueError","UsedValueState","Scope","prefixes","nameOrPrefix","prefix","ng","_b","ValueScopeName","nameStr","itemIndex","line","ValueScope","valueKey","vs","_name","keyOrRef","scopeName","usedValues","getCode","valueCode","nameSet","scope_1","code_2","scope_2","Node","_names","_constants","Def","varKind","rhs","es5","_n","constants","optimizeExpr","Assign","lhs","sideEffects","addExprNames","AssignOp","op","Break","Throw","AnyCode","ParentNode","nodes","subtractNames","addNames","BlockNode","Root","Else","If","not","For","ForLoop","iteration","ForRange","from","ForIter","loop","iterable","Func","async","Return","Try","Catch","Finally","CodeGen","extScope","prefixOrName","constant","_constant","thenBody","elseBody","forBody","tryBody","catchCode","finallyCode","body","nodeCount","toClose","funcBody","N1","N2","replaceName","canOptimize","par","andCode","mappend","and","orCode","or","util","codegen_1","toHash","alwaysValidSchema","it","checkUnknownRules","schemaHasRules","self","rules","checkStrictMode","schemaHasRulesButRef","RULES","schemaRefOrVal","topSchemaRef","$data","unescapeFragment","unescapeJsonPointer","escapeFragment","escapeJsonPointer","eachItem","xs","makeMergeEvaluated","mergeNames","mergeToName","mergeValues","resultToName","gen","toName","setEvaluated","evaluatedPropsToName","ps","snippets","useFunc","Type","getErrorPath","dataProp","dataPropType","jsPropertySyntax","isNumber","msg","mode","names_1","util_1","require$$2","reportError","cxt","errorPaths","overrideAllErrors","compositeRule","allErrors","errObj","errorObjectCode","addError","returnErrors","reportExtraError","resetErrorsCount","errsCount","extendErrors","schemaValue","errs","validateName","schemaEnv","createErrors","errorObject","errorInstancePath","errorSchemaPath","extraErrorProps","errorPath","instPath","errSchemaPath","schPath","boolSchema","errors_1","boolError","topBoolOrEmptySchema","falseSchemaError","boolOrEmptySchema","valid","_jsonTypes","jsonTypes","isJSONType","getRules","groups","applicability","schemaHasRulesForType","group","shouldUseGroup","rule","shouldUseRule","kwd","rules_1","applicability_1","require$$3","require$$4","DataType","getSchemaTypes","types","getJSONTypes","coerceAndCheckDataType","coerceTo","coerceToTypes","checkTypes","wrongType","checkDataTypes","coerceData","reportTypeError","COERCIBLE","coerceTypes","coerced","coerceSpecificType","assignParentData","parentData","parentDataProperty","checkDataType","strictNums","correct","EQ","numCond","_cond","dataTypes","notObj","typeError","getTypeErrorContext","schemaCode","assignDefaults","ty","assignDefault","sch","childData","util_2","checkReportMissingProp","noPropertyInData","checkMissingProp","missing","reportMissingProp","hasPropFunc","isOwnProperty","propertyInData","ownProperties","allSchemaProperties","schemaMap","callValidateCode","context","passSchema","dataAndSchema","valCxt","newRegExp","usePattern","regExp","validateArray","validArr","validateItems","notValid","validateUnion","schValid","_sch","schCxt","macroKeywordCode","macroSchema","schemaRef","useKeyword","funcKeywordCode","checkAsyncKeyword","validate","validateRef","validateKeyword","assignValid","modifyData","reportErrs","ruleErrs","validateAsync","validateSync","addErrs","validateErrs","_await","passCxt","validSchemaType","allowUndefined","st","validateKeywordUsage","getSubschema","schemaProp","extendSubschemaData","dpType","dataPathArr","nextData","dataContextProps","_nextData","extendSubschemaMode","jtdDiscriminator","jtdMetadata","fastDeepEqual","length","traverse","jsonSchemaTraverseModule","cb","pre","post","_traverse","jsonPtr","parentJsonPtr","parentKeyword","keyIndex","escapeJsonPtr","SIMPLE_INLINED","inlineRef","limit","hasRef","countKeys","REF_KEYWORDS","getFullPath","resolver","normalizeId","_getFullPath","TRAILING_SLASH_HASH","resolveUrl","baseId","ANCHOR","getSchemaRefs","uriResolver","schId","baseIds","pathPrefix","localRefs","schemaRefs","fullPath","innerBaseId","addRef","addAnchor","_resolve","ambiguos","schOrRef","checkAmbiguosRef","anchor","sch1","sch2","boolSchema_1","dataType_1","dataType_2","defaults_1","keyword_1","subschema_1","require$$5","require$$6","require$$7","resolve_1","require$$8","require$$9","require$$10","validateFunctionCode","checkKeywords","schemaCxtHasRules","topSchemaObjCode","validateFunction","funcSourceUrl","destructureValCxtES5","destructureValCxt","commentKeyword","checkNoDefault","resetEvaluated","typeAndKeywords","returnResults","subschemaCode","subSchemaObjCode","updateContext","checkAsyncSchema","checkRefsAndKeywords","schemaKeywords","checkedTypes","rootName","ValidationError","assignEvaluated","evaluated","typeErrors","keywordCode","checkStrictTypes","groupKeywords","iterateKeywords","useDefaults","checkContextTypes","checkMultipleTypes","checkKeywordTypes","includesType","strictTypesError","narrowSchemaTypes","hasApplicableType","schTs","kwdT","withTypes","KeywordCxt","getData","successAction","failAction","append","errorParams","codeBlock","$dataValid","wrong$DataType","invalid$DataSchema","validateSchemaRef","appl","nextContext","schemaCxt","ruleType","JSON_POINTER","RELATIVE_JSON_POINTER","dataLevel","dataNames","jsonPointer","up","errorMsg","pointerType","validation_error","ref_error","MissingRefError","validation_error_1","validate_1","SchemaEnv","env","compileSchema","getCompilingSchema","lines","_ValidationError","sourceCode","validateCode","resolveRef","root","schOrFunc","inlineOrCompile","schEnv","sameSchemaEnv","s1","s2","refPath","getJsonPointer","PREVENT_SCOPE_CHANGE","parsedRef","partSchema","uri_1","ref_error_1","compile_1","codegen_2","$dataRefSchema","defaultRegExp","flags","META_IGNORE_OPTIONS","EXT_SCOPE_NAMES","removedOptions","deprecatedOptions","MAX_EXPRESSION","requiredOptions","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_optz","Ajv","getLogger","formatOpt","checkOptions","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addInitialSchemas","_dataRefSchema","schemaKeyRef","_meta","loadSchema","runCompileAsync","loadMetaSchema","_compileAsync","checkLoaded","loadMissingSchema","missingRef","_loadSchema","_validateSchema","throwOrLogError","$schema","keyRef","getSchEnv","cacheKey","kwdOrDef","checkKeyword","addRule","keywordMetaschema","definition","dataVar","metaSchema","keywordsJsonPointers","keywords","seg","schemaOrData","regex","validateSchema","addSchema","currentOpts","checkOpts","log","optsSchemas","defs","metaOpts","noLogs","logger","KEYWORD_NAME","ruleGroup","addBeforeRule","before","_rule","$dataRef","callRootRef","schOrEnv","callValidate","inlineRefSchema","callRef","getValidate","schName","$async","callAsyncRef","callSyncRef","addEvaluatedFrom","addErrorsFrom","schEvaluated","core_1","id_1","ref_1","core","limitNumber","ops","KWDs","multipleOf","prec","invalid","ucs2length_1","ucs2length","pos","limitLength","comp","regExpCode","limitProperties","missingProperty","useLoop","allErrorsMode","exitOnErrorMode","requiredKey","loopAllRequired","loopUntilMissing","limitItems","equal_1","uniqueItems","itemTypes","validateUniqueItems","loopN","loopN2","indices","eql","_const","_enum","getEql","loopEnum","vSchema","equalCode","validation_1","limitNumber_1","multipleOf_1","limitLength_1","pattern_1","limitProperties_1","required_1","limitItems_1","uniqueItems_1","const_1","enum_1","validation","validateAdditionalItems","validateTuple","extraItems","schArr","checkStrictTuple","fullTuple","prefixItems","items_1","items2020","additionalItems_1","contains","max","minContains","maxContains","validateItemsWithCount","checkLimits","_valid","block","depsCount","property_ies","propDeps","schDeps","splitDependencies","validatePropertyDeps","validateSchemaDeps","propertyDeps","schemaDeps","hasProperty","depProp","propertyNames","patProps","checkAdditionalProperties","additionalPropertyCode","isAdditional","definedProp","propsSchema","deleteAdditional","applyAdditionalSchema","additionalProperties_1","allProps","hasDefault","applyPropertySchema","alwaysValidPatterns","checkProperties","validatePatternProperties","pat","checkMatchingProperties","validateProperties","alwaysValid","passing","validateOneOf","_if","hasThen","hasSchema","hasElse","validateIf","ifClause","validateClause","thenElse","applicator","prefixItems_1","items2020_1","contains_1","dependencies_1","propertyNames_1","properties_1","patternProperties_1","not_1","anyOf_1","require$$11","oneOf_1","require$$12","allOf_1","require$$13","if_1","require$$14","thenElse_1","require$$15","getApplicator","draft2020","validate$DataFormat","validateFormat","fmts","fDef","fType","unknownFmt","invalidFmt","callFormat","validData","formatDef","unknownFormat","fmtType","fmtRef","getFormat","validCondition","unknownMsg","fmtDef","fmt","format_2","metadata","draft7","applicator_1","format_1","metadata_1","draft7Vocabularies","DiscrError","types_1","discrError","validateMapping","mapping","getMapping","tagValue","applyTagSchema","oneOfMapping","topRequired","hasRequired","tagRequired","propSch","addMappings","addMapping","draft7_1","discriminator_1","draft7MetaSchema","META_SUPPORT_DATA","META_SCHEMA_ID","module","compareDate","compareTime","date_time","compareDateTime","byte","validateInt32","validateInt64","validateNumber","isLeapYear","DATE","DAYS","d1","d2","TIME","withTimeZone","timeZone","t1","t2","a1","a2","DATE_TIME_SEPARATOR","dateTime","dt1","dt2","NOT_URI_FRAGMENT","URI","BYTE","MIN_INT32","MAX_INT32","Z_ANCHOR","ajv_1","fCxt","compareCode","formatLimitPlugin","ajv","formats_1","limit_1","fullName","fastName","formatsPlugin","addFormats","formats","exportName","fs","AJV_CONFIG","COLOR_FORMAT_REGEX","DATA_URL_FORMAT_REGEX","createAjvInstance","additionalMetaSchemas","customFormats","ajvOptionsOverrides","ajvFormatOptions","AjvClass","extenderFn","formatName","AJV8Validator","localizer","compilationError","compiledValidator","rootSchemaId","schemaWithIdRefPrefix","customizeValidator","CONFIGURATION_LAYER_COLORS","ConfigurationLayerDepthContext","createContext","useConfigurationLayer","depth","useContext","buildUiSchema","firstExample","SecretWidget","secretPath","configured","replacing","clearing","unavailable","setOperation","nextOperation","ConfigurationFieldTemplate","ConfigurationObjectTemplate","propertyLines","topLevel","layer","ConfigurationArrayItemTemplate","ConfigurationArrayTemplate","SchemaConfigurationForm","configuredSecrets","secretOperations","setSecretOperation","clone","ConfigurationEditor","onReload","serverValue","setSecretOperations","saving","setSaving","importing","setImporting","configurationFile","setConfigurationFile","notice","setNotice","validationErrors","setValidationErrors","editorRef","toolbarRef","editor","toolbar","updateStickyOffset","observer","dirty","updateConfiguration","saveError","importSelectedConfiguration","yamlText","importAdminConfigurationFile","importError","service","validationError","PasswordConfirmationDialog","open","onCancel","onConfirm","password","setPassword","cancel","TOP_LEVEL_SECTIONS","AdminApp","useUserIdentitySync","role","useSessionSelector","connected","searchParams","setSearchParams","useSearchParams","setSnapshot","loadingError","setLoadingError","pendingSensitiveAction","confirmationOpen","setConfirmationOpen","confirmationBusy","setConfirmationBusy","confirmationError","setConfirmationError","pageSettings","useSettingsNamespace","DEFAULT_PAGE_THEME_KEY","pageBackgroundClass","usePageThemeClass","isAdmin","isLockdown","loadSnapshot","getAdminSnapshot","submitPasswordConfirmation","confirmAdminPassword","pending","cancelPasswordConfirmation","selectSection","navigationOptions","activeSection","content","AdminPanelContent","AuthPanel","SocketConnectionPill"],"mappings":"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","x_google_ignoreList":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327]} \ No newline at end of file diff --git a/server/public/assets/AdminApp-C3AkcekK.css b/server/public/assets/AdminApp-C3AkcekK.css new file mode 100644 index 00000000..aa8ffef1 --- /dev/null +++ b/server/public/assets/AdminApp-C3AkcekK.css @@ -0,0 +1 @@ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-leading:initial;--tw-font-weight:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.configuration-tree{margin-top:var(--spacing,.25rem)}:where(.configuration-tree>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing,.25rem) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing,.25rem) * 6) * calc(1 - var(--tw-space-y-reverse)))}.configuration-card{min-width:0}.configuration-card-header{top:var(--configuration-sticky-top,0px)}.configuration-card .configuration-card{width:calc(100% - 1rem);margin-left:1rem}:where(.configuration-card-body>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing,.25rem) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing,.25rem) * .5) * calc(1 - var(--tw-space-y-reverse)))}.configuration-card-body{padding:calc(var(--spacing,.25rem) * .5)}:where(.configuration-children>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing,.25rem) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing,.25rem) * .5) * calc(1 - var(--tw-space-y-reverse)))}.configuration-line{align-items:flex-start;gap:calc(var(--spacing,.25rem) * .5);border-radius:var(--radius-md,.375rem);background-color:var(--color-neutral-800,oklch(26.9% 0 none));min-width:0;padding-inline:calc(var(--spacing,.25rem) * .5);padding-block:calc(var(--spacing,.25rem) * .5);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}@media(min-width:40rem){.configuration-line{grid-template-columns:minmax(9rem,16rem) minmax(12rem,40rem)}}.configuration-line{justify-content:start}.configuration-key,.configuration-value{min-width:0}.configuration-key-label{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height, 1.5 ));--tw-leading:var(--leading-snug,1.375);line-height:var(--leading-snug,1.375);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-slate-100,oklch(96.8% .007 247.896))}.configuration-root-description,.configuration-branch-description,.configuration-item-description,.configuration-value-description{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-leading:var(--leading-snug,1.375);line-height:var(--leading-snug,1.375);color:var(--color-slate-300,oklch(86.9% .022 252.894));margin-top:.125rem;display:block}.configuration-root-description{margin-bottom:var(--spacing,.25rem)}.configuration-branch-description,.configuration-item-description{max-width:56rem}.configuration-value-description{margin-bottom:calc(var(--spacing,.25rem) * .5);max-width:40rem}.configuration-value input:not([type=checkbox]),.configuration-value select,.configuration-value textarea{border-radius:var(--radius-md,.375rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-600,oklch(43.9% 0 none));background-color:var(--color-neutral-700,oklch(37.1% 0 none));width:100%;padding-inline:calc(var(--spacing,.25rem) * .5);padding-block:calc(var(--spacing,.25rem) * .5);color:var(--color-white,#fff)}:is(.configuration-value input:not([type=checkbox]),.configuration-value select,.configuration-value textarea)::placeholder{color:var(--color-slate-400,oklch(70.4% .04 256.788))}:is(.configuration-value input:not([type=checkbox]),.configuration-value select,.configuration-value textarea):focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-sky-500,oklch(68.5% .169 237.323));--tw-outline-style:none;outline-style:none}@media(forced-colors:active){:is(.configuration-value input:not([type=checkbox]),.configuration-value select,.configuration-value textarea):focus{outline-offset:2px;outline:2px solid #0000}}.configuration-value input[type=checkbox]{height:calc(var(--spacing,.25rem) * 4);width:calc(var(--spacing,.25rem) * 4);vertical-align:middle;accent-color:var(--color-sky-500,oklch(68.5% .169 237.323))}.configuration-value .checkbox label{min-height:calc(var(--spacing,.25rem) * 7);color:var(--color-slate-100,oklch(96.8% .007 247.896));align-items:center;display:flex}.configuration-value .error-detail{margin-top:calc(var(--spacing,.25rem) * .5);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)));color:var(--color-red-300,oklch(80.8% .114 19.571))}.configuration-value .help-block{margin-top:calc(var(--spacing,.25rem) * .5);color:var(--color-slate-500,oklch(55.4% .046 257.417));font-size:.7rem;display:block}.configuration-secret{min-width:0}.configuration-item-actions,.configuration-array-actions{gap:calc(var(--spacing,.25rem) * .5);flex-wrap:wrap;display:flex}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000} diff --git a/server/public/assets/AdminApp-CIfEu47p.js b/server/public/assets/AdminApp-CIfEu47p.js deleted file mode 100644 index c5927bc3..00000000 --- a/server/public/assets/AdminApp-CIfEu47p.js +++ /dev/null @@ -1,59 +0,0 @@ -import{e as Qu,r as G,j as w,C as We,T as Xu,f as ed,h as jn,k as td,l as Jn,L as ol,g as mi,u as Yf,a as ll,m as Zf,b as Qf,D as Xf,c as eh,S as th,A as rh,n as nh}from"./index-B0P8L1jr.js";import{c as ih,d as sh,u as ah,g as oh,r as lh,a as ch,b as uh,e as dh,f as fh,h as hh,i as mh,j as ph,k as yh,l as gh,m as vh,n as bh}from"./api-B8GGCEeo.js";function ur(e,t,r={}){return new Promise((n,i)=>{e.emit(t,r,(s={})=>{if(s.error){i(new Error(s.error));return}n(s)})})}function Sh(e,{query:t="",filter:r="all"}={}){return ur(e,"identityAdmin:listUsers",{query:t,filter:r})}function cl(e,t){return ur(e,"identityAdmin:getUser",{userId:t})}function xh(e,t,r,n){return ur(e,"identityAdmin:addSignal",{userId:t,type:r,value:n})}function Ch(e,t,r,n){return ur(e,"identityAdmin:removeSignal",{userId:t,type:r,value:n})}function Ah(e,t,r){return ur(e,"identityAdmin:setVerified",{userId:t,enabled:r})}function wh(e,t,r,n){return ur(e,"identityAdmin:setDeterrence",{userId:t,enabled:r,reason:n})}function $h(e,t,r){return ur(e,"identityAdmin:setMuted",{userId:t,enabled:r})}function _h(e,t,r,n){return ur(e,"identityAdmin:setPermission",{userId:t,permissionKey:r,enabled:n})}function Eh(e,t,r,n){return ur(e,"identityAdmin:updateFeatureState",{userId:t,namespace:r,value:n})}function jh(e,t,r){return ur(e,"identityAdmin:deleteFeatureState",{userId:t,namespace:r})}const Ha={cookieUserId:"Cookie keys",fingerprintId:"Fingerprints",nickname:"Nicknames",knownIp:"Known IPs"},Oh={cookieUserId:"cookieUserIds",fingerprintId:"fingerprintIds",nickname:"nicknames",knownIp:"knownIps"};function ul(e){const t=String(e||"").trim();return t?t.length<=14?t:`${t.slice(0,8)}...${t.slice(-6)}`:"n/a"}function ws(e){const t=Number(e||0);if(!Number.isFinite(t)||t<=0)return"never";try{return new Intl.DateTimeFormat("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}).format(new Date(t))}catch{return new Date(t).toLocaleString()}}function Wa(e){return JSON.stringify(e??{},null,2)}function kh(e){const t=JSON.parse(String(e||"").trim()||"{}");if(!t||typeof t!="object")throw new Error("JSON must be an object or array.");return t}const Ph=[{key:"all",label:"All"},{key:"verified",label:"Verified"},{key:"deterred",label:"Deterred"},{key:"muted",label:"Muted"},{key:"unverified",label:"Unverified"}];function oa({active:e,children:t}){return w.jsx("span",{className:`rounded px-1 py-0.25 text-[0.68rem] font-semibold ${e?"bg-emerald-700 text-emerald-50":"bg-neutral-800 text-neutral-300"}`,children:t})}function Nh({users:e,truncated:t,selectedUserId:r,query:n,filter:i,loading:s,onQuery:a,onFilter:o,onRefresh:l,onSearch:c,onSelect:u}){const d=w.jsx("button",{type:"button",className:"button-dark text-xs",onClick:()=>l(),disabled:s,children:s?"Loading":"Refresh"});return w.jsxs(We,{title:"Identity database",meta:t?`${e.length}+`:e.length,actions:d,bodyClassName:"flex min-h-0 flex-col gap-0.5 p-0.5 text-sm",children:[w.jsxs("form",{className:"grid gap-0.5 md:grid-cols-[minmax(0,1fr)_10rem_auto]",onSubmit:c,children:[w.jsx("input",{className:"field-input text-sm",type:"search",placeholder:"Search users, keys, fingerprints, IPs",value:n,onChange:h=>a(h.target.value)}),w.jsx("select",{className:"field-input text-sm",value:i,onChange:h=>o(h.target.value),children:Ph.map(h=>w.jsx("option",{value:h.key,children:h.label},h.key))}),w.jsx("button",{type:"submit",className:"button-dark text-xs",disabled:s,children:"Search"})]}),t?w.jsx("p",{className:"surface-muted px-1 py-0.5 text-xs text-slate-400",children:"Showing the first 100 matches. Narrow the search to find older users."}):null,w.jsx("div",{className:"min-h-[18rem] flex-1 overflow-y-auto",children:e.length?e.map(h=>w.jsxs("button",{type:"button",className:`surface mb-0.5 grid w-full grid-cols-[minmax(0,1fr)_auto] gap-0.5 px-1 py-0.75 text-left text-xs ${r===h.id?"border border-sky-400/70":""}`,onClick:()=>u(h.id),children:[w.jsxs("span",{className:"min-w-0",children:[w.jsx("span",{className:"block truncate text-sm font-semibold text-slate-100",children:h.nickname||"unknown user"}),w.jsx("span",{className:"block truncate font-mono text-[0.68rem] text-slate-400",children:h.id}),w.jsxs("span",{className:"block truncate text-[0.68rem] text-slate-400",children:[ul(h.cookieUserIds?.[0])," / ",ul(h.fingerprintIds?.[0])]})]}),w.jsxs("span",{className:"flex flex-col items-end gap-0.25",children:[w.jsx(oa,{active:h.verified?.enabled,children:"verified"}),w.jsx(oa,{active:h.deterrence?.enabled,children:"deterred"}),w.jsx(oa,{active:h.deterrence?.muted,children:"muted"})]})]},h.id)):w.jsx("p",{className:"surface p-1 text-center text-xs text-slate-400",children:"No users match this view."})})]})}function Fh({user:e}){return w.jsxs(We,{title:"User details",bodyClassName:"grid gap-0.5 p-0.5 text-sm md:grid-cols-2",children:[w.jsxs("div",{className:"surface px-1 py-0.75",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Canonical user id"}),w.jsx("p",{className:"break-all font-mono text-xs text-lime-300",children:e.id})]}),w.jsxs("div",{className:"surface px-1 py-0.75",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Primary nickname"}),w.jsx("p",{className:"font-semibold text-slate-100",children:e.nickname||"unknown user"})]}),w.jsxs("div",{className:"surface px-1 py-0.75",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Created"}),w.jsx("p",{children:ws(e.createdAt)})]}),w.jsxs("div",{className:"surface px-1 py-0.75",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Last seen"}),w.jsx("p",{children:ws(e.lastSeenAt)})]})]})}function Ih({user:e,type:t,onAdd:r,onRemove:n}){const[i,s]=G.useState(""),a=e?.[Oh[t]]||[],o=async l=>{l.preventDefault();const c=i.trim();c&&(await r(t,c),s(""))};return w.jsxs("div",{className:"surface space-y-0.5 px-1 py-0.75",children:[w.jsx("p",{className:"text-xs font-semibold text-slate-200",children:Ha[t]}),w.jsx("div",{className:"space-y-0.5",children:a.length?a.map(l=>w.jsxs("div",{className:"surface-muted grid grid-cols-[minmax(0,1fr)_auto] items-center gap-0.5 px-1 py-0.5",children:[w.jsx("span",{className:"min-w-0 break-all font-mono text-[0.7rem] text-slate-200",children:l}),w.jsx("button",{type:"button",className:"button-dark text-xs",onClick:()=>n(t,l),children:"Remove"})]},l)):w.jsx("p",{className:"text-xs text-slate-500",children:"No values."})}),w.jsxs("form",{className:"grid gap-0.5 md:grid-cols-[minmax(0,1fr)_auto]",onSubmit:o,children:[w.jsx("input",{className:"field-input text-xs",value:i,placeholder:`Add ${Ha[t].toLowerCase()}`,onChange:l=>s(l.target.value)}),w.jsx("button",{type:"submit",className:"button-dark text-xs",disabled:!i.trim(),children:"Add"})]})]})}function Rh({user:e,onAddSignal:t,onRemoveSignal:r}){return w.jsx(We,{title:"Identity signals",bodyClassName:"grid gap-0.5 p-0.5 text-sm xl:grid-cols-2",children:Object.keys(Ha).map(n=>w.jsx(Ih,{user:e,type:n,onAdd:t,onRemove:r},n))})}function Dh({user:e,onVerified:t,onDeterrence:r,onMuted:n}){const[i,s]=G.useState(e?.deterrence?.reason||"");return w.jsxs(We,{title:"Status",bodyClassName:"grid gap-0.5 p-0.5 text-sm md:grid-cols-2",children:[w.jsxs("div",{className:"surface space-y-0.5 px-1 py-0.75",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Verification"}),w.jsxs("label",{className:"flex items-center gap-0.5 text-slate-100",children:[w.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-emerald-500",checked:!!e?.verified?.enabled,onChange:a=>t(a.target.checked)}),w.jsx("span",{children:"Verified"})]}),w.jsxs("p",{className:"text-xs text-slate-500",children:["Updated ",ws(e?.verified?.at)]})]}),w.jsxs("div",{className:"surface space-y-0.5 px-1 py-0.75",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Deterrence"}),w.jsxs("label",{className:"flex items-center gap-0.5 text-slate-100",children:[w.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-red-500",checked:!!e?.deterrence?.enabled,onChange:a=>r(a.target.checked,i)}),w.jsx("span",{children:"Deterred"})]}),w.jsx("textarea",{className:"field-input min-h-[4rem] w-full text-xs",value:i,placeholder:"Deterrence reason",onChange:a=>s(a.target.value)}),w.jsx("button",{type:"button",className:"button-dark text-xs",onClick:()=>r(!!e?.deterrence?.enabled,i),children:"Save Reason"}),w.jsxs("div",{className:"border-t border-slate-700/70 pt-0.5",children:[w.jsxs("label",{className:"flex items-center gap-0.5 text-slate-100",children:[w.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-amber-500",checked:!!e?.deterrence?.muted,onChange:a=>n(a.target.checked)}),w.jsx("span",{children:"Muted"})]}),w.jsxs("p",{className:"text-xs text-slate-500",children:["Updated ",ws(e?.deterrence?.mutedAt)]})]})]})]})}function Th({user:e,onSaveFeature:t,onDeleteFeature:r}){const n=Object.keys(e?.features||{}).sort(),i=n[0]||"",[s,a]=G.useState(i),[o,l]=G.useState(Wa(i?e.features[i]:{})),[c,u]=G.useState(""),d=async()=>{const m=s.trim();if(!m){u("Namespace required.");return}try{const g=kh(o);await t(m,g),u("")}catch(g){u(g.message||"Invalid JSON.")}},h=async()=>{const m=s.trim();m&&window.confirm(`Delete feature state "${m}" from ${e.id}?`)&&(await r(m),a(""),l("{}"),u(""))};return w.jsxs(We,{title:"Feature state",bodyClassName:"space-y-0.5 p-0.5 text-sm",children:[w.jsxs("div",{className:"grid gap-0.5 md:grid-cols-[minmax(0,1fr)_auto_auto]",children:[w.jsx("input",{className:"field-input text-sm",value:s,placeholder:"Namespace",list:"identity-feature-namespaces",onChange:m=>{const g=m.target.value;a(g),l(Wa(e.features?.[g]||{}))}}),w.jsx("datalist",{id:"identity-feature-namespaces",children:n.map(m=>w.jsx("option",{value:m},m))}),w.jsx("button",{type:"button",className:"button-dark text-xs",onClick:d,children:"Save"}),w.jsx("button",{type:"button",className:"button-dark text-xs",onClick:h,disabled:!s.trim(),children:"Delete"})]}),w.jsx("textarea",{className:"field-input min-h-[18rem] w-full font-mono text-xs",value:o,spellCheck:!1,onChange:m=>l(m.target.value)}),c?w.jsx("p",{className:"surface text-xs text-red-300",children:c}):null]})}function Mh({user:e}){return w.jsx(We,{title:"Raw record",bodyClassName:"p-0.5 text-xs",children:w.jsx("pre",{className:"surface max-h-[36rem] overflow-auto whitespace-pre-wrap break-words font-mono text-[0.7rem] text-lime-300",children:Wa(e)})})}function Uh({user:e,permissions:t,onPermission:r}){const n=new Set((e?.permissions||[]).map(i=>i.key));return w.jsx(We,{title:"Permissions",bodyClassName:"grid gap-0.5 p-0.5 text-sm md:grid-cols-2",children:t.map(i=>w.jsxs("label",{className:"surface space-y-0.5 px-1 py-0.75 text-slate-100",children:[w.jsxs("span",{className:"flex items-center gap-0.5 font-semibold",children:[w.jsx("input",{type:"checkbox",className:"h-3.5 w-3.5 accent-emerald-500",checked:n.has(i.key),onChange:s=>r(i.key,s.target.checked)}),i.label]}),w.jsx("span",{className:"block text-xs text-slate-400",children:i.description}),w.jsx("code",{className:"block text-[0.68rem] text-lime-300",children:i.key})]},i.key))})}function qh(){const e=Qu(),[t,r]=G.useState([]),[n,i]=G.useState([]),[s,a]=G.useState(null),[o,l]=G.useState(""),[c,u]=G.useState("all"),[d,h]=G.useState(!1),[m,g]=G.useState(!1),[b,v]=G.useState(""),y=G.useCallback(async()=>{g(!0);try{const L=await Sh(e,{query:o,filter:c});if(r(L.users||[]),h(!!L.truncated),i(L.permissions||[]),s?.id){const K=await cl(e,s.id);a(K.user||null)}v("")}catch(L){v(L.message||"Failed to load users.")}finally{g(!1)}},[c,o,s?.id,e]),f=G.useCallback(async L=>{g(!0);try{const K=await cl(e,L);a(K.user||null),v("")}catch(K){v(K.message||"Failed to load user.")}finally{g(!1)}},[e]),A=G.useCallback(L=>{a(L||null),L?.id&&r(K=>K.map(B=>B.id===L.id?{...B,...L}:B))},[]),O=G.useCallback(async(L,K)=>{if(s?.id){g(!0);try{const B=await L(s.id);A(B.user),v(K||"Saved.")}catch(B){v(B.message||"Save failed.")}finally{g(!1)}}},[A,s?.id]);G.useEffect(()=>{y()},[]);const p=L=>{L.preventDefault(),y()},x=(L,K)=>O(B=>xh(e,B,L,K),"Signal added."),$=(L,K)=>O(B=>Ch(e,B,L,K),"Signal removed."),k=L=>O(K=>Ah(e,K,L),"Verification updated."),N=(L,K)=>O(B=>wh(e,B,L,K),"Deterrence updated."),I=L=>O(K=>$h(e,K,L),"Mute updated."),U=(L,K)=>O(B=>_h(e,B,L,K),"Permission updated."),q=(L,K)=>O(B=>Eh(e,B,L,K),"Feature state saved."),M=L=>O(K=>jh(e,K,L),"Feature state deleted.");return w.jsxs("div",{className:"grid min-h-0 flex-1 gap-0.5 lg:grid-cols-[24rem_minmax(0,1fr)]",children:[w.jsx(Nh,{users:t,truncated:d,selectedUserId:s?.id||null,query:o,filter:c,loading:m,onQuery:l,onFilter:u,onRefresh:y,onSearch:p,onSelect:f}),w.jsxs("div",{className:"min-h-0 space-y-0.5 overflow-y-auto",children:[b?w.jsx(We,{title:"Status",bodyClassName:"p-0.5 text-sm text-slate-200",children:w.jsx("p",{children:b})}):null,s?w.jsxs(w.Fragment,{children:[w.jsx(Fh,{user:s}),w.jsxs(Xu,{defaultTab:"signals",children:[w.jsxs(ed,{children:[w.jsx(jn,{id:"signals",children:"Signals"}),w.jsx(jn,{id:"status",children:"Status"}),w.jsx(jn,{id:"permissions",children:"Permissions"}),w.jsx(jn,{id:"features",children:"Feature state"}),w.jsx(jn,{id:"raw",children:"Raw JSON"})]}),w.jsxs(td,{children:[w.jsx(Jn,{id:"signals",children:w.jsx(Rh,{user:s,onAddSignal:x,onRemoveSignal:$})}),w.jsx(Jn,{id:"status",children:w.jsx(Dh,{user:s,onVerified:k,onDeterrence:N,onMuted:I},`status-${s.id}`)}),w.jsx(Jn,{id:"permissions",children:w.jsx(Uh,{user:s,permissions:n,onPermission:U})}),w.jsx(Jn,{id:"features",children:w.jsx(Th,{user:s,onSaveFeature:q,onDeleteFeature:M},`features-${s.id}`)}),w.jsx(Jn,{id:"raw",children:w.jsx(Mh,{user:s})})]})]})]}):w.jsx(We,{title:"User details",bodyClassName:"p-1 text-center text-sm text-slate-400",children:"Select a user to inspect and edit the identity record."})]})]})}function Lh({administrator:e,socket:t,runSensitive:r,onSnapshot:n}){const[i,s]=G.useState({username:e.username,discordId:e.discordId,role:e.role,password:""}),[a,o]=G.useState(!1),[l,c]=G.useState("");G.useEffect(()=>{s({username:e.username,discordId:e.discordId,role:e.role,password:""})},[e]);async function u(d){o(!0),c("");try{const h=await r(d);n(h.snapshot)}catch(h){c(h.message)}finally{o(!1)}}return w.jsxs("div",{className:"surface space-y-0.5 p-0.5",children:[w.jsxs("div",{className:"grid gap-0.5 md:grid-cols-4",children:[w.jsx("input",{className:"field-input",value:i.username,onChange:d=>s({...i,username:d.target.value})}),w.jsx("input",{className:"field-input",placeholder:"Discord id",value:i.discordId,onChange:d=>s({...i,discordId:d.target.value})}),w.jsxs("select",{className:"field-input",value:i.role,onChange:d=>s({...i,role:d.target.value}),children:[w.jsx("option",{value:"admin",children:"Administrator"}),w.jsx("option",{value:"lockdown",children:"Lockdown administrator"})]}),w.jsx("input",{className:"field-input",type:"password",autoComplete:"new-password",placeholder:"New password (optional)",value:i.password,onChange:d=>s({...i,password:d.target.value})})]}),l?w.jsx("p",{className:"text-xs text-red-300",children:l}):null,w.jsxs("div",{className:"flex justify-end gap-0.5",children:[w.jsx("button",{type:"button",className:"button-danger text-xs",disabled:a,onClick:()=>u(()=>sh(t,e.id)),children:"Delete"}),w.jsx("button",{type:"button",className:"button-dark text-xs",disabled:a,onClick:()=>u(()=>ah(t,{id:e.id,...i})),children:"Save account"})]})]})}function Vh({administrators:e,socket:t,runSensitive:r,onSnapshot:n}){const[i,s]=G.useState({username:"",discordId:"",role:"admin",password:""}),[a,o]=G.useState(!1),[l,c]=G.useState("");async function u(d){d.preventDefault(),o(!0),c("");try{const h=await r(()=>ih(t,i));n(h.snapshot),s({username:"",discordId:"",role:"admin",password:""})}catch(h){c(h.message)}finally{o(!1)}}return w.jsxs(We,{title:"Administrator accounts",meta:e.length,bodyClassName:"space-y-0.5 p-0.5 text-sm",children:[w.jsxs("form",{className:"surface grid gap-0.5 p-0.5 md:grid-cols-4",onSubmit:u,children:[w.jsx("input",{className:"field-input",placeholder:"Username",value:i.username,onChange:d=>s({...i,username:d.target.value})}),w.jsx("input",{className:"field-input",placeholder:"Discord id (optional)",value:i.discordId,onChange:d=>s({...i,discordId:d.target.value})}),w.jsxs("select",{className:"field-input",value:i.role,onChange:d=>s({...i,role:d.target.value}),children:[w.jsx("option",{value:"admin",children:"Administrator"}),w.jsx("option",{value:"lockdown",children:"Lockdown administrator"})]}),w.jsx("input",{className:"field-input",type:"password",autoComplete:"new-password",placeholder:"Password",value:i.password,onChange:d=>s({...i,password:d.target.value})}),l?w.jsx("p",{className:"text-xs text-red-300 md:col-span-3",children:l}):w.jsx("span",{className:"md:col-span-3"}),w.jsx("button",{className:"button-dark",type:"submit",disabled:a||!i.username||!i.password,children:a?"Creating…":"Create account"})]}),(e||[]).map(d=>w.jsx(Lh,{administrator:d,socket:t,runSensitive:r,onSnapshot:n},d.id))]})}function la(e){return Number.isFinite(Number(e))?new Date(Number(e)).toLocaleString():"unknown"}function zh({snapshot:e,socket:t,runSensitive:r,onSnapshot:n}){const i=e.configuration,[s,a]=G.useState(!1),[o,l]=G.useState(null),[c,u]=G.useState("");G.useEffect(()=>{let f=!0;async function A(){if(t.connected)try{const p=await oh(t);if(!f)return;l(p.lifecycle),u("")}catch(p){f&&u(p.message)}}A();const O=window.setInterval(A,2500);return()=>{f=!1,window.clearInterval(O)}},[t]),G.useEffect(()=>{if(!s)return;const f=()=>a(!1);return t.once("connect",f),()=>t.off("connect",f)},[s,t]);async function d(f){if(window.confirm(`Restore configuration revision ${f}? This creates and immediately applies a new active revision.`))try{const A=await r(()=>lh(t,{revision:f,expectedRevision:i.revision}));n(A.snapshot)}catch(A){window.alert(A.message)}}async function h(){if(window.confirm("Restart the MultiRover application now? Connected rovers and browsers will disconnect briefly; the server host will not reboot.")){a(!0);try{await r(()=>ch(t))}catch(f){a(!1),window.alert(f.message)}}}async function m(){try{const f=await r(()=>uh(t));l(f.lifecycle)}catch(f){u(f.message)}}async function g(){if(window.confirm("Pull the configured MultiRover image and replace the application container now? The page will reconnect automatically."))try{const f=await r(()=>dh(t));l(f.lifecycle)}catch(f){u(f.message)}}const b=o?.state==="running",v=!!o?.available,y=o?.updateAvailable===!0?"An update is available.":o?.updateAvailable===!1?"The running application matches the latest checked image.":"Check for updates to compare the running container with the configured image.";return w.jsxs("div",{className:"space-y-0.5",children:[w.jsxs(We,{title:"Administration overview",meta:`revision ${i.revision}`,bodyClassName:"grid gap-0.5 p-0.5 md:grid-cols-3",children:[w.jsxs("div",{className:"surface p-1",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Active revision"}),w.jsx("p",{className:"text-xl font-semibold",children:i.revision})]}),w.jsxs("div",{className:"surface p-1",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Administrators"}),w.jsx("p",{className:"text-xl font-semibold",children:e.administrators.length})]}),w.jsxs("div",{className:"surface p-1",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Last configuration save"}),w.jsx("p",{className:"text-sm font-semibold",children:la(i.createdAt)})]})]}),w.jsxs(We,{title:"Existing administration surfaces",bodyClassName:"flex flex-wrap gap-0.5 p-0.5 text-sm",children:[w.jsx(ol,{className:"button-dark",to:"/reports",children:"Open fleet reports"}),w.jsx(ol,{className:"button-dark",to:"/",children:"Open driver application"})]}),w.jsxs(We,{title:"Application container",meta:v?o?.state:"controller unavailable",bodyClassName:"space-y-1 p-1 text-sm",children:[w.jsxs("div",{className:"surface max-w-4xl space-y-0.5 p-1 text-slate-300",children:[w.jsx("p",{children:v?y:"Container updates are unavailable until the lifecycle service is running."}),o?.message?w.jsx("p",{className:"text-slate-400",children:o.message}):null,o?.rollback?w.jsxs("p",{children:["Rollback: ",o.rollback.status,o.rollback.error?` — ${o.rollback.error}`:""]}):null,c?w.jsx("p",{className:"text-red-300",children:c}):null]}),w.jsxs("div",{className:"flex flex-wrap gap-0.5",children:[w.jsx("button",{type:"button",className:"button-dark",disabled:!v||b,onClick:m,children:o?.operation==="check"&&b?"Checking for update…":"Check for update"}),w.jsx("button",{type:"button",className:"button-danger",disabled:!v||b,onClick:g,children:o?.operation==="update"&&b?"Updating application…":"Update and restart"}),w.jsx("button",{type:"button",className:"button-danger",disabled:s||b,onClick:h,children:s?"Waiting for application…":"Restart application"})]})]}),w.jsx(We,{title:"Configuration revisions",meta:e.revisions.length,bodyClassName:"max-h-64 overflow-y-auto p-0.5 text-xs",children:e.revisions.map(f=>w.jsxs("div",{className:"surface mb-0.5 grid items-center gap-0.5 p-0.5 md:grid-cols-[5rem_1fr_1fr_1fr_auto]",children:[w.jsxs("span",{children:["#",f.revision]}),w.jsx("span",{children:la(f.createdAt)}),w.jsx("span",{children:f.actor}),w.jsx("span",{children:f.source}),w.jsx("button",{type:"button",className:"button-dark text-xs",disabled:f.revision===i.revision,onClick:()=>d(f.revision),children:"Restore"})]},f.revision))}),w.jsx(We,{title:"Persistent audit history",meta:e.auditEvents.length,bodyClassName:"max-h-96 overflow-y-auto p-0.5 text-xs",children:e.auditEvents.map(f=>w.jsxs("div",{className:"surface mb-0.5 grid gap-0.5 p-0.5 md:grid-cols-[10rem_10rem_1fr]",children:[w.jsx("span",{children:la(f.createdAt)}),w.jsx("span",{children:f.actor}),w.jsx("span",{children:f.action})]},f.id))})]})}function Bh(e){const t=Number(e)||0;if(t<1024)return`${t} B`;const r=["KiB","MiB","GiB","TiB"];let n=t/1024,i=0;for(;n>=1024&&i=10?1:2)} ${r[i]}`}function Kh({socket:e,runSensitive:t}){const[r,n]=G.useState(!1),[i,s]=G.useState(!1),[a,o]=G.useState(null),[l,c]=G.useState(null),[u,d]=G.useState(null),[h,m]=G.useState("");G.useEffect(()=>{fh(e).then(y=>d(y.lastRestore)).catch(y=>m(y.message))},[e]);async function g(){n(!0),m("Creating consistent database snapshots and copying server data…");try{const y=await t(()=>hh(e)),f=document.createElement("a");f.href=y.downloadUrl,f.download="",document.body.appendChild(f),f.click(),f.remove();const A=y.skippedUnstableFiles?.length||0;m(`Backup download started with ${y.fileCount} files.${A?` ${A} actively changing file(s) were skipped.`:""}`)}catch(y){m(y.message)}finally{n(!1)}}async function b(){if(a){s(!0),c(null),m("Uploading and validating the selected backup…");try{const y=await t(()=>mh(e)),f=await fetch(y.uploadUrl,{method:"PUT",headers:{"Content-Type":"application/gzip"},body:a}),A=await f.json();if(!f.ok||A.error)throw new Error(A.error||"Restore upload failed.");c(A),m("Backup validated. Review the summary before replacing server data.")}catch(y){m(y.message)}finally{s(!1)}}}async function v(){if(!(!l||!window.confirm("Replace the complete server data folder with this backup and restart the application? Configuration, administrators, identities, history, and media will all be replaced."))){s(!0);try{await t(()=>ph(e,l.restoreId)),m("Restore accepted. Waiting for the application to restart…")}catch(f){s(!1),m(f.message)}}}return w.jsxs("div",{className:"space-y-0.5",children:[w.jsxs(We,{title:"Full backup",bodyClassName:"space-y-0.5 p-1 text-sm",children:[w.jsx("p",{className:"text-slate-300",children:"Downloads configuration, administrator accounts, secrets, identities, history, snapshots, replays, and other durable server data. Keep the archive private because it contains credentials."}),w.jsx("button",{type:"button",className:"button-dark",disabled:r||i,onClick:g,children:r?"Creating backup…":"Download full backup"})]}),w.jsxs(We,{title:"Full restore",bodyClassName:"space-y-0.5 p-1 text-sm",children:[w.jsx("p",{className:"text-slate-300",children:"Upload a MultiRover full backup for validation. Nothing changes until the validated restore is confirmed."}),w.jsxs("div",{className:"flex max-w-3xl flex-col gap-0.5 md:flex-row",children:[w.jsx("input",{className:"field-input min-w-0 flex-1",type:"file",accept:".gz,.tgz,application/gzip",disabled:i||r,onChange:y=>{o(y.target.files?.[0]||null),c(null)}}),w.jsx("button",{type:"button",className:"button-dark",disabled:!a||i||r,onClick:b,children:i&&!l?"Validating…":"Validate backup"})]}),l?w.jsxs("div",{className:"surface max-w-3xl space-y-0.5 p-1",children:[w.jsxs("p",{children:[l.summary.fileCount," files, ",Bh(l.summary.totalBytes)]}),w.jsxs("p",{children:["Created ",new Date(l.summary.createdAt).toLocaleString()," by application version ",l.summary.applicationVersion]}),w.jsx("button",{type:"button",className:"button-danger",disabled:i,onClick:v,children:"Replace data and restart"})]}):null]}),h?w.jsx(We,{title:"Backup and restore status",bodyClassName:"p-1 text-sm text-slate-200",children:w.jsx("p",{children:h})}):null,u?w.jsx(We,{title:"Last restore",meta:u.status,bodyClassName:"p-1 text-sm text-slate-300",children:w.jsxs("p",{children:[u.completedAt?new Date(u.completedAt).toLocaleString():"Completion time unavailable",u.error?` — ${u.error}`:""]})}):null]})}function le(e){return typeof e!="object"||e===null||"lastModified"in e&&typeof e.lastModified=="number"&&typeof File<"u"&&e instanceof File||"getMonth"in e&&typeof e.getMonth=="function"&&typeof Date<"u"&&e instanceof Date?!1:!Array.isArray(e)}function Hh(e){return e.additionalItems===!0&&console.warn("additionalItems=true is currently not supported"),le(e.additionalItems)}function xo(e){const t=typeof navigator<"u"?navigator.languages:void 0;if(t)try{return new Intl.NumberFormat(t).formatToParts(1.1).find(i=>i.type==="decimal")?.value||"."}catch{}return"."}function dl(e){if(e==="")return;if(e===null)return null;const t=xo(),r=typeof e=="string"&&t!=="."?e.replace(t,"."):e;if(/\.$/.test(r)||/\.0$/.test(r)||/\.\d*0$/.test(r))return e;const n=Number(r);return typeof n=="number"&&!Number.isNaN(n)?n:e}const sn=Symbol("__additional_property"),rn="additionalProperties",or="allOf",Oe="anyOf",Et="const",cn="default",ci="dependencies",Wh="else",Gh="enum",pt="__errors",Te="$id",Us="if",un="items",Jh="_$junk_option_schema_id$_",ms="$name",ve="oneOf",$s="patternProperties",Qe="properties",ca="readonly",rd="required",_s="submitButtonOptions",Ke="$ref",Yh="then",ps=Symbol("__rjsf_ref"),Co=Symbol("__rjsf_ref_cycle"),ni="$schema",nd="root",id="_",Zh=["discriminator","propertyName"],fl="formContext",Qh="layoutGridLookupMap",sd="__rjsf",Ao=`${sd}_additionalProperties`,ad=`${sd}_rootSchema`,Xh="ui:field",wo="ui:widget",Pr="ui:options",Ga="ui:globalOptions",em="ui:definitions",tm="https://json-schema.org/draft/2019-09/schema",ys="https://json-schema.org/draft/2020-12/schema";function me(e={},t={}){return e?Object.keys(e).filter(r=>r.startsWith("ui:")).reduce((r,n)=>{const i=e[n];return n===wo&&le(i)?(console.error("Setting options via ui:widget object is no longer supported, use ui:options instead"),r):n===Pr&&le(i)?{...r,...i}:{...r,[n.substring(3)]:i}},{...t}):{...t}}function rm(e,t={},r){if(!(e.additionalProperties||e.patternProperties))return!1;const{expandable:n=!0}=me(t);return n===!1?n:e.maxProperties!==void 0&&r?Object.keys(r).length({...r,[i]:Ja(n)}),t):yr(e)?Object.keys(e).reduce((r,n)=>({...r,[n]:Ja(e[n])}),t):t}const{getOwnPropertyNames:hl,getOwnPropertySymbols:nm}=Object,{hasOwnProperty:im}=Object.prototype;function Yn(e,t){return function(n,i,s){return e(n,i,s)&&t(n,i,s)}}function Zn(e){return function(r,n,i){if(!r||!n||typeof r!="object"||typeof n!="object")return e(r,n,i);const{cache:s}=i,a=s.get(r),o=s.get(n);if(a&&o)return a===n&&o===r;s.set(r,n),s.set(n,r);const l=e(r,n,i);return s.delete(r),s.delete(n),l}}function ml(e){const t=nm(e);return t.length?hl(e).concat(t):hl(e)}const sm=Object.hasOwn||((e,t)=>im.call(e,t)),am="__v",om="__o",lm="_owner",cm=typeof Float16Array<"u",{getOwnPropertyDescriptor:pl,keys:yl}=Object,yn=Object.is||function(t,r){return t===r?t!==0||1/t===1/r:t!==t&&r!==r};function um(e,t){return e===t}function dm(e,t){return e.byteLength===t.byteLength&&Es(new Uint8Array(e),new Uint8Array(t))}function fm(e,t,r){let n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(!r.equals(e[n],t[n],n,n,e,t,r))return!1;return!0}function hm(e,t){return e.byteLength===t.byteLength&&Es(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function mm(e,t){return yn(e.getTime(),t.getTime())}function gl(e,t,r){return e.name===t.name&&e.message===t.message&&e.stack===t.stack&&r.equals(e.cause,t.cause,"cause","cause",e,t,r)}function vl(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Uint8Array(n),s=e.entries();let a,o,l=0;for(;(a=s.next())&&!a.done;){const c=t.entries();let u=0,d=0;for(;(o=c.next())&&!o.done;){if(i[d]){d++;continue}const h=a.value,m=o.value;if(r.equals(h[0],m[0],l,d,e,t,r)&&r.equals(h[1],m[1],h[0],m[0],e,t,r)){u=i[d]=1;break}d++}if(!u)return!1;l++}return!0}function bl(e,t,r){const n=yl(e);let i=n.length;if(yl(t).length!==i)return!1;for(;i-- >0;)if(!od(e,t,r,n[i]))return!1;return!0}function An(e,t,r){const n=ml(e);let i=n.length;if(ml(t).length!==i)return!1;let s,a,o;for(;i-- >0;)if(s=n[i],!od(e,t,r,s)||(a=pl(e,s),o=pl(t,s),(a||o)&&(!a||!o||a.configurable!==o.configurable||a.enumerable!==o.enumerable||a.writable!==o.writable)))return!1;return!0}function pm(e,t){return yn(e.valueOf(),t.valueOf())}function ym(e,t){return e.source===t.source&&e.flags===t.flags}function Sl(e,t,r){const n=e.size;if(n!==t.size)return!1;if(!n)return!0;const i=new Uint8Array(n),s=e.values();let a,o;for(;(a=s.next())&&!a.done;){const l=t.values();let c=0,u=0;for(;(o=l.next())&&!o.done;){if(!i[u]&&r.equals(a.value,o.value,a.value,o.value,e,t,r)){c=i[u]=1;break}u++}if(!c)return!1}return!0}function Es(e,t){let r=e.length;if(t.length!==r||e.byteOffset!==t.byteOffset)return!1;if(e instanceof Float64Array||e instanceof Float32Array||cm&&e instanceof Float16Array){for(;r-- >0;)if(e[r]!==t[r]&&(e[r]===e[r]||t[r]===t[r]))return!1;return!0}for(;r-- >0;)if(e[r]!==t[r])return!1;return!0}function gm(e,t){return e.href===t.href?!0:e.protocol===t.protocol&&e.username===t.username&&e.password===t.password&&e.host===t.host&&e.pathname===t.pathname&&e.hash===t.hash&&vm(e.searchParams,t.searchParams)}function vm(e,t){const r=e.toString(),n=t.toString();return r===n||xl(r)===xl(n)}function xl(e){return e.split("&").sort().join("&")}function od(e,t,r,n){return(n===lm||n===om||n===am)&&(e.$$typeof||t.$$typeof)?!0:sm(t,n)&&r.equals(e[n],t[n],n,n,e,t,r)}const bm=Object.prototype.toString;function Sm(e){const t=wm(e),{areArraysEqual:r,areDatesEqual:n,areFunctionsEqual:i,areMapsEqual:s,areNumbersEqual:a,areObjectsEqual:o,areRegExpsEqual:l,areSetsEqual:c,getUnsupportedCustomComparator:u}=e;return function(h,m,g){if(h===m)return!0;if(h==null||m==null)return!1;const b=typeof h;if(b!==typeof m)return!1;if(b!=="object")return b==="number"||b==="bigint"?a(h,m,g):b==="function"?i(h,m,g):!1;const v=h.constructor;if(v!==m.constructor)return!1;if(v===Object)return o(h,m,g);if(v===Array)return r(h,m,g);if(v===Date)return n(h,m,g);if(v===RegExp)return l(h,m,g);if(v===Map)return s(h,m,g);if(v===Set)return c(h,m,g);if(v===Promise)return!1;if(Array.isArray(h))return r(h,m,g);const y=bm.call(h),f=t[y];if(f)return f(h,m,g);const A=u&&u(h,m,g,y);return A?A(h,m,g):!1}}function xm({circular:e,createCustomConfig:t,strict:r}){let n={areArrayBuffersEqual:dm,areArraysEqual:r?An:fm,areDataViewsEqual:hm,areDatesEqual:mm,areErrorsEqual:r?Yn(gl,An):Yn(gl,bl),areFunctionsEqual:um,areMapsEqual:r?Yn(vl,An):vl,areNumbersEqual:yn,areObjectsEqual:r?An:bl,arePrimitiveWrappersEqual:pm,areRegExpsEqual:ym,areSetsEqual:r?Yn(Sl,An):Sl,areTypedArraysEqual:r?Yn(Es,An):Es,areUrlsEqual:gm,getUnsupportedCustomComparator:void 0};if(t&&(n=Object.assign({},n,t(n))),e){const i=Zn(n.areArraysEqual),s=Zn(n.areErrorsEqual),a=Zn(n.areMapsEqual),o=Zn(n.areObjectsEqual),l=Zn(n.areSetsEqual);n=Object.assign({},n,{areArraysEqual:i,areErrorsEqual:s,areMapsEqual:a,areObjectsEqual:o,areSetsEqual:l})}return n}function Cm(e){return function(t,r,n,i,s,a,o){return e(t,r,o)}}function Am({circular:e,comparator:t,createState:r,equals:n,strict:i}){if(r)return function(o,l){const{cache:c=e?new WeakMap:void 0,meta:u}=r();return t(o,l,{cache:c,equals:n,meta:u,strict:i})};if(e)return function(o,l){return t(o,l,{cache:new WeakMap,equals:n,meta:void 0,strict:i})};const s={cache:void 0,equals:n,meta:void 0,strict:i};return function(o,l){return t(o,l,s)}}function wm({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:r,areDatesEqual:n,areErrorsEqual:i,areFunctionsEqual:s,areMapsEqual:a,areObjectsEqual:o,arePrimitiveWrappersEqual:l,areRegExpsEqual:c,areSetsEqual:u,areTypedArraysEqual:d,areUrlsEqual:h}){return{"[object Arguments]":o,"[object Array]":t,"[object ArrayBuffer]":e,"[object AsyncGeneratorFunction]":s,"[object BigInt]":l,"[object BigInt64Array]":d,"[object BigUint64Array]":d,"[object Boolean]":l,"[object DataView]":r,"[object Date]":n,"[object Error]":i,"[object Float16Array]":d,"[object Float32Array]":d,"[object Float64Array]":d,"[object Function]":s,"[object GeneratorFunction]":s,"[object Int8Array]":d,"[object Int16Array]":d,"[object Int32Array]":d,"[object Map]":a,"[object Number]":l,"[object Object]":(m,g,b)=>typeof m.then!="function"&&typeof g.then!="function"&&o(m,g,b),"[object RegExp]":c,"[object Set]":u,"[object String]":l,"[object URL]":h,"[object Uint8Array]":d,"[object Uint8ClampedArray]":d,"[object Uint16Array]":d,"[object Uint32Array]":d}}vr();vr({strict:!0});vr({circular:!0});vr({circular:!0,strict:!0});vr({createInternalComparator:()=>yn});vr({strict:!0,createInternalComparator:()=>yn});vr({circular:!0,createInternalComparator:()=>yn});vr({circular:!0,createInternalComparator:()=>yn,strict:!0});function vr(e={}){const{circular:t=!1,createInternalComparator:r,createState:n,strict:i=!1}=e,s=xm(e),a=Sm(s),o=r?r(a):Cm(a);return Am({circular:t,comparator:a,createState:n,equals:o,strict:i})}const Ae=vr({circular:!0,createCustomConfig:()=>({areFunctionsEqual(e,t){return typeof t=="function"}})});var Qn={exports:{}},ua,Cl;function ld(){if(Cl)return ua;Cl=1;const e=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),t=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),r=RegExp.prototype.test.bind(/^\d*$/u),n=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),i=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),s=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u),a=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u),o=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u);function l(C){let S="",j=0,R=0;for(R=0;R=48&&j<=57||j>=65&&j<=70||j>=97&&j<=102))return"";S+=C[R];break}for(R+=1;R=48&&j<=57||j>=65&&j<=70||j>=97&&j<=102))return"";S+=C[R]}return S}const c=RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/),u=RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/),d=RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/),h=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u),m=RegExp.prototype.test.bind(/[^\d!"$&'()*+,\-.;=_`a-z{}~]/u),g=RegExp.prototype.test.bind(/(?:^|\.)\d+$/u);function b(C){return m(C)||g(C)}function v(C){if(C.length===0)return!1;for(let S=0;Sj&&(j=D,S=R)):(R=-1,D=0);if(j<2)return C.join(":");const H=C.slice(0,S).join(":"),T=C.slice(S+j).join(":");return H+"::"+T}function f(C){const S=C.indexOf("::");if(S!==-1&&C.indexOf("::",S+1)!==-1)return;const j=S===-1?C.split(":"):C.slice(0,S).split(":"),R=S===-1?[]:C.slice(S+2).split(":");S!==-1&&(j.length===1&&j[0]===""&&(j.length=0),R.length===1&&R[0]===""&&(R.length=0));const D=j.concat(R);let H=0;for(let W=0;W=8)return;const T=D.slice(0,j.length);for(let W=H;W<8;W++)T.push("0");for(let W=j.length;Wx[R])}function I(C,S=!1){if(C.indexOf("%")===-1)return C;let j="";for(let R=0;R>4]+C[S&15]}function q(C){return C>=48&&C<=57||C>=65&&C<=90||C>=97&&C<=122||C===42||C===43||C===45||C===46||C===47||C===64||C===95}function M(C){return C<2048?U[192|C>>6]+U[128|C&63]:C<65536?U[224|C>>12]+U[128|C>>6&63]+U[128|C&63]:U[240|C>>18]+U[128|C>>12&63]+U[128|C>>6&63]+U[128|C&63]}function L(C){let S="";for(let j=0;j57343)S+=M(D);else if(D<=56319&&j+1=56320&&H<=57343?(S+=M(65536+(D-55296<<10)+(H-56320)),j++):S+=M(65533)}else S+=M(65533)}}return S}function K(C,S=!1){let j="",R=S&&C[0]!=="/";for(let D=0;D57343)j+=M(T);else if(T<=56319&&D+1=56320&&W<=57343?(j+=M(65536+(T-55296<<10)+(W-56320)),D++):j+=M(65533)}else j+=M(65533)}}return j}function B(C){let S="";for(let j=0;j57343)S+=M(D);else if(D<=56319&&j+1=56320&&H<=57343?(S+=M(65536+(D-55296<<10)+(H-56320)),j++):S+=M(65533)}else S+=M(65533)}}return S}function Q(C,S){let j="";for(let R=0;R57343)j+=M(H);else if(H<=56319&&R+1=56320&&T<=57343?(j+=M(65536+(H-55296<<10)+(T-56320)),R++):j+=M(65533)}else j+=M(65533)}}return j}function X(C){return Q(C,o)}function re(C){return Q(C,a)}function E(C){return Q(C,a)}function _(C){let S="";for(let j=0;j57343)S+=M(D);else if(D<=56319&&j+1=56320&&H<=57343?(S+=M(65536+(D-55296<<10)+(H-56320)),j++):S+=M(65533)}else S+=M(65533)}return S}function P(C){const S=[];if(C.userinfo!==void 0&&(S.push(X(C.userinfo)),S.push("@")),C.host!==void 0){let j=C.host;if(!t(j)){let R=A(j);R.isIPV6!==!0&&R.isIPVFuture!==!0&&(j=I(j,!0),R=A(j)),R.isIPV6===!0||R.isIPVFuture===!0?j=`[${R.escapedHost}]`:j=N(j,!1)}S.push(j)}if(typeof C.port=="number"||typeof C.port=="string"){const j=String(C.port);if(!r(j))throw new TypeError("URI port is malformed.");S.push(":"),S.push(j)}return S.length?S.join(""):void 0}return ua={BYTE_HEX:U,percentEncodeNonAscii:M,nonSimpleDomain:h,nonSimpleMailtoDomain:b,recomposeAuthority:P,reescapeHostDelimiters:N,normalizePercentEncoding:I,normalizePathEncoding:L,serializePathEncoding:K,normalizeQueryFragmentEncoding:B,encodeUserinfo:X,encodeQuery:re,encodeFragment:E,escapePreservingEscapes:_,removeDotSegments:p,isIPv4:t,isUUID:e,normalizeIPv6:A,stringArrayToHexStripped:l},ua}var da,Al;function $m(){if(Al)return da;Al=1;const{isUUID:e,BYTE_HEX:t,percentEncodeNonAscii:r,nonSimpleMailtoDomain:n}=ld(),i=/^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu,s=["http","https","ws","wss","urn","urn:uuid","mailto"];function a(T){return s.indexOf(T)!==-1}function o(T){return T.secure===!0?!0:T.secure===!1?!1:T.scheme?T.scheme.length===3&&(T.scheme[0]==="w"||T.scheme[0]==="W")&&(T.scheme[1]==="s"||T.scheme[1]==="S")&&(T.scheme[2]==="s"||T.scheme[2]==="S"):!1}function l(T){return T.host||(T.error=T.error||"HTTP URIs must have a host."),T}function c(T){const W=String(T.scheme).toLowerCase()==="https";return(T.port===(W?443:80)||T.port==="")&&(T.port=void 0),T.path||(T.path="/"),T}function u(T){return T.secure=o(T),T.resourceName=(T.path||"/")+(T.query?"?"+T.query:""),T.path=void 0,T.query=void 0,T}function d(T){if((T.port===(o(T)?443:80)||T.port==="")&&(T.port=void 0),typeof T.secure=="boolean"&&(T.scheme=T.secure?"wss":"ws",T.secure=void 0),T.resourceName){const W=T.resourceName.indexOf("?"),F=W===-1?T.resourceName:T.resourceName.slice(0,W);T.path=F&&F!=="/"?F:void 0,T.query=W===-1?void 0:T.resourceName.slice(W+1),T.resourceName=void 0}return T.fragment=void 0,T}function h(T,W){if(!T.path)return T.error="URN can not be parsed",T;const F=T.path.match(i);if(F&&F[0]===T.path){const V=W.scheme||T.scheme||"urn";T.nid=F[1].toLowerCase(),T.nss=F[2];const z=`${V}:${W.nid||T.nid}`,J=H(z);T.path=void 0,J&&(T=J.parse(T,W))}else T.error=T.error||"URN can not be parsed.";return T}function m(T,W){if(T.nid===void 0)throw new Error("URN without nid cannot be serialized");const F=W.scheme||T.scheme||"urn",V=T.nid.toLowerCase(),z=`${F}:${W.nid||V}`,J=H(z);J&&(T=J.serialize(T,W));const Y=T,Z=T.nss;return Y.path=`${V||W.nid}:${Z}`,W.skipEscape=!0,Y}function g(T,W){const F=T;return F.uuid=F.nss,F.nss=void 0,!W.tolerant&&(!F.uuid||!e(F.uuid))&&(F.error=F.error||"UUID is not valid."),F}function b(T){const W=T;return W.nss=(T.uuid||"").toLowerCase(),W}const v={scheme:"http",domainHost:!0,parse:l,serialize:c},y={scheme:"https",domainHost:v.domainHost,parse:l,serialize:c},f={scheme:"ws",domainHost:!0,parse:u,serialize:d},A={scheme:"wss",domainHost:f.domainHost,parse:f.parse,serialize:f.serialize},O={scheme:"urn",parse:h,serialize:m,skipNormalize:!0},p={scheme:"urn:uuid",parse:g,serialize:b,skipNormalize:!0},x="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+=",$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+,;:@",k="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+;:";function N(T,W=!1){const F=new Uint8Array(128);for(let J=0;J=55296&&V<=56319&&F+1=56320&&z<=57343){W+=T[F]+T[F+1],F++;continue}}W+=V>=55296&&V<=57343?"�":T[F]}return W}function E(T,W){if(W.all.test(T))return T;const F=W.table;let V="";for(let z=0;z57343){V+=W.allowNonAscii?T[z]:r(J);continue}if(J<=56319&&z+1=56320&&Y<=57343){V+=W.allowNonAscii?T[z]+T[z+1]:r(65536+(J-55296<<10)+(Y-56320)),z++;continue}}V+=W.allowNonAscii?"�":r(65533)}return V}function _(T,W,F){const V=String(T).toLowerCase();if(K.test(V)||V!==""&&!n(V))return V;try{const z=new URL("http://"+V);if(z.username||z.password||z.port||z.pathname!=="/"||z.search||z.hash||!z.hostname)throw new Error(B);return W&&W.unicodeSupport?V:z.hostname}catch{return F&&(F.error=F.error||B),V}}function P(T,W){const F=W&&W.unicodeSupport?M:q;return T.length>1&&T[0]==="["&&T[T.length-1]==="]"?"["+E(T.slice(1,-1),F)+"]":E(T,F)}function C(T,W){const F=T;let V=F.path,z=F.query;V&&Q.test(V)&&(V=re(V)),z&&Q.test(z)&&(z=re(z));const J=V?V.indexOf(",")===-1?[V]:V.split(","):[];if(F.path=void 0,z){let Y=null,Z=0;for(;Z<=z.length;){let te=z.indexOf("&",Z);te===-1&&(te=z.length);const ie=z.slice(Z,te);Z=te+1;const ae=ie.indexOf("=");if(ae!==ie.lastIndexOf("=")){F.error=F.error||"URI mailto has malformed header fields.";continue}const de=X(ae===-1?ie:ie.slice(0,ae)),ge=de.toLowerCase(),ue=ae===-1?"":ie.slice(ae+1);if(ge==="to"){const Ce=ue.split(",");for(let Pe=0;Pe=0?ie.slice(0,ae):ie,ge=ae>=0?ie.slice(ae+1):"",ue=E(de,I),Ce=X(ge),Pe=_(Ce,W);V[te]=ue+"@"+P(Pe,W)}F.path=V.join(","),W.skipEscape=!0}else F.path=void 0;let Y="",Z=0;for(const te in J)Z++!==0&&(Y+="&"),Y+=S(te)+"="+E(String(J[te]),U);return Z!==0?F.query=Y:F.headers=void 0,F}const D={http:v,https:y,ws:f,wss:A,urn:O,"urn:uuid":p,mailto:{scheme:"mailto",parse:C,serialize:j,domainHost:!1,unicodeSupport:!0,skipNormalize:!0,absolutePath:!0}};Object.setPrototypeOf(D,null);function H(T){return T&&(D[T]||D[T.toLowerCase()])||void 0}return da={wsIsSecure:o,SCHEMES:D,isValidSchemeName:a,getSchemeHandler:H},da}var wl;function _m(){if(wl)return Qn.exports;wl=1;const{normalizeIPv6:e,removeDotSegments:t,recomposeAuthority:r,normalizePercentEncoding:n,normalizePathEncoding:i,serializePathEncoding:s,normalizeQueryFragmentEncoding:a,encodeQuery:o,encodeFragment:l,reescapeHostDelimiters:c,isIPv4:u,nonSimpleDomain:d}=ld(),{SCHEMES:h,getSchemeHandler:m}=$m(),g=/^[A-Za-z][A-Za-z0-9+.-]*$/u,b="URI scheme is malformed.";function v(E){const _=unescape(String(E));if(!g.test(_))throw new TypeError(b);return _}function y(E,_){return typeof E=="string"?E=B(E,_):typeof E=="object"&&(E=K(p(E,_),_)),E}function f(E,_,P){const C=P?Object.assign({scheme:"null"},P):{scheme:"null"},{parsed:S,malformedAuthorityOrPort:j,malformedPercentEncoding:R,malformedSchemeSpecific:D,malformedHost:H,malformedScheme:T}=L(E,C),{parsed:W,malformedAuthorityOrPort:F,malformedPercentEncoding:V,malformedSchemeSpecific:z,malformedHost:J,malformedScheme:Y}=L(_,C);if(j||F||R||V||D||z||H||J||T||Y)throw new Error(S.error||W.error||"URI is malformed.");const Z=A(S,W,C,!0),te=m(P&&P.scheme||Z.scheme),ie=Z.host,ae=ie!==void 0&&ie!==""&&(u(ie)||e(ie).isIPV6);M(Z,P||{},te,ae);const de=ie&&ie.indexOf("%")!==-1&&!new RegExp("\\P{ASCII}","u").test(ie);if(Z.error&&!de)throw new Error(Z.error);return C.skipEscape=!0,p(Z,C)}function A(E,_,P,C){const S={};return C||(E=K(p(E,P),P),_=K(p(_,P),P)),P=P||{},!P.tolerant&&_.scheme?(S.scheme=_.scheme,S.userinfo=_.userinfo,S.host=_.host,S.port=_.port,S.path=t(_.path||""),S.query=_.query):(_.userinfo!==void 0||_.host!==void 0||_.port!==void 0?(S.userinfo=_.userinfo,S.host=_.host,S.port=_.port,S.path=t(_.path||""),S.query=_.query):(_.path?(_.path[0]==="/"?S.path=t(_.path):((E.userinfo!==void 0||E.host!==void 0||E.port!==void 0)&&!E.path?S.path="/"+_.path:E.path?S.path=E.path.slice(0,E.path.lastIndexOf("/")+1)+_.path:S.path=_.path,S.path=t(S.path)),S.query=_.query):(S.path=E.path,_.query!==void 0?S.query=_.query:S.query=E.query),S.userinfo=E.userinfo,S.host=E.host,S.port=E.port),S.scheme=E.scheme),S.fragment=_.fragment,S}function O(E,_,P){const C=X(E,P),S=X(_,P);return C!==void 0&&S!==void 0&&C===S}function p(E,_){const P={host:E.host,scheme:E.scheme,userinfo:E.userinfo,port:E.port,path:E.path,query:E.query,nid:E.nid,nss:E.nss,uuid:E.uuid,fragment:E.fragment,reference:E.reference,resourceName:E.resourceName,secure:E.secure,to:E.to,subject:E.subject,body:E.body,headers:E.headers,error:""},C=Object.assign({},_),S=[];P.scheme&&(P.scheme=v(P.scheme));const j=m(C.scheme||P.scheme);j&&j.serialize&&j.serialize(P,C);const R=P.userinfo!==void 0||P.host!==void 0||P.port!==void 0,D=!C.skipEscape&&P.scheme===void 0&&!R;P.path!==void 0&&(C.skipEscape?P.path=n(P.path):P.path=s(P.path,D)),C.reference!=="suffix"&&P.scheme&&(P.scheme=v(P.scheme),S.push(P.scheme,":"));const H=r(P);if(H!==void 0&&(C.reference!=="suffix"&&S.push("//"),S.push(H),P.path&&P.path[0]!=="/"&&S.push("/")),P.path!==void 0){let T=P.path;!C.absolutePath&&(!j||!j.absolutePath)&&(T=t(T)),D&&(T=s(T,!0)),H===void 0&&T[0]==="/"&&T[1]==="/"&&(T="/%2F"+T.slice(2)),S.push(T)}return P.query!==void 0&&S.push("?",o(P.query)),P.fragment!==void 0&&S.push("#",l(P.fragment)),S.join("")}const x=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u,$=/^(?:[^#/:?]+:)?\/\/([^/?#]*)/,k=/^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;function N(E,_){if(_[2]!==void 0&&E.path&&E.path[0]!=="/")return'URI path must start with "/" when authority is present.';if(typeof E.port=="number"&&(E.port<0||E.port>65535))return"URI port is malformed."}function I(E){if(E===void 0)return!1;let _=E.indexOf("%");for(;_!==-1;){if(_+2>=E.length||!/^[\da-f]{2}$/iu.test(E.slice(_+1,_+3)))return!0;_=E.indexOf("%",_+3)}return!1}function U(E){return E[0]==="["&&E[E.length-1]==="]"}function q(E){const _=E[4];return I(E[3])||_!==void 0&&!U(_)&&I(_)||I(E[6])||I(E[7])||I(E[8])}function M(E,_,P,C){const S=E.host&&E.host[0]==="["&&E.host[E.host.length-1]==="]";if(!_.unicodeSupport&&(!P||!P.unicodeSupport)&&E.host&&!U(E.host)&&(_.domainHost||P&&P.domainHost)&&C===!1&&!S&&d(E.host))try{E.host=new URL("http://"+E.host).hostname}catch(j){return E.error=E.error||"Host's domain name can not be converted to ASCII: "+j,!0}return!1}function L(E,_){const P=Object.assign({},_),C={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0};let S=!1,j=!1,R=!1,D=!1,H=!1,T=!1,W=!1;P.reference==="suffix"&&(P.scheme?E=P.scheme+":"+E:E="//"+E);const F=E.match($);F!==null&&F[1].indexOf("\\")!==-1&&(C.error="URI authority must not contain a literal backslash.",S=!0);const V=E.match(k);if(V!==null){const J=V[1],Y=J.replace(/[\t\n\r]/g,"");Y.length>=2&&(Y.slice(0,2)!=="//"?(C.error=C.error||"URI authority must not contain a literal backslash.",S=!0):J.length!==Y.length&&(C.error=C.error||"URI authority introducer must not contain whitespace.",S=!0))}const z=E.match(x);if(z){if(C.scheme=z[1],C.userinfo=z[3],C.host=z[4],C.port=parseInt(z[5],10),C.path=z[6]||"",C.query=z[7],C.fragment=z[8],C.scheme!==void 0){const Z=unescape(C.scheme);g.test(Z)?C.scheme=Z.toLowerCase():(C.error=C.error||b,T=!0)}j=q(z),j&&(C.error=C.error||"URI contains malformed percent-encoding."),isNaN(C.port)&&(C.port=z[5]);const J=N(C,z);if(J!==void 0&&(C.error=C.error||J,S=!0),C.host)if(u(C.host)===!1){const te=U(C.host),ie=C.host.indexOf("[")!==-1||C.host.indexOf("]")!==-1,ae=e(C.host);W=ae.isIPV6||ae.isIPVFuture===!0,H=ie&&(!te||ae.error===!0),C.host=W?ae.host:ae.host.toLowerCase(),H&&(C.error=C.error||"URI host is malformed.",S=!0)}else W=!0;C.scheme===void 0&&C.userinfo===void 0&&C.host===void 0&&C.port===void 0&&C.query===void 0&&!C.path?C.reference="same-document":C.scheme===void 0?C.reference="relative":C.fragment===void 0?C.reference="absolute":C.reference="uri",P.reference&&P.reference!=="suffix"&&P.reference!==C.reference&&(C.error=C.error||"URI is not a "+P.reference+" reference.");const Y=m(P.scheme||C.scheme);if(H||(D=M(C,P,Y,W)),E.indexOf("%")!==-1&&C.host!==void 0&&!H){let Z=W?C.host:n(C.host,!0);W||(Z=n(Z.toLowerCase())),C.host=c(Z,W)}(!Y||Y&&!Y.skipNormalize)&&(C.path&&(C.path=i(C.path)),C.query&&(C.query=a(C.query)),C.fragment&&(C.fragment=a(C.fragment))),Y&&Y.parse&&(Y.parse(C,P),Y===h.urn&&C.nid===void 0&&(R=!0))}else C.error=C.error||"URI can not be parsed.";return{parsed:C,malformedAuthorityOrPort:S,malformedPercentEncoding:j,malformedSchemeSpecific:R,malformedHost:D,malformedScheme:T}}function K(E,_){return L(E,_).parsed}function B(E,_){return Q(E,_).normalized}function Q(E,_){const{parsed:P,malformedAuthorityOrPort:C,malformedPercentEncoding:S,malformedSchemeSpecific:j,malformedHost:R,malformedScheme:D}=L(E,_);return{normalized:C||S||j||R||D?E:p(P,_),malformedAuthorityOrPort:C,malformedPercentEncoding:S,malformedSchemeSpecific:j,malformedHost:R,malformedScheme:D}}function X(E,_){if(typeof E!="string"&&typeof E!="object")return;let P;try{P=typeof E=="string"?E:p(E,_)}catch{return}const{normalized:C,malformedAuthorityOrPort:S,malformedPercentEncoding:j,malformedSchemeSpecific:R,malformedHost:D,malformedScheme:H}=Q(P,_);return S||j||R||D||H?void 0:C}const re={SCHEMES:h,normalize:y,resolve:f,resolveComponent:A,equal:O,serialize:p,parse:K};return Qn.exports=re,Qn.exports.default=re,Qn.exports.fastUri=re,Qn.exports}var Em=_m();const $o=mi(Em);var Xn={},$l;function jm(){if($l)return Xn;$l=1;var e=/~/,t=/~[01]/g;function r(c){switch(c){case"~1":return"/";case"~0":return"~"}throw new Error("Invalid tilde escape: "+c)}function n(c){return e.test(c)?c.replace(t,r):c}function i(c,u,d){for(var h,m,g=1,b=u.length;gg,typeof c[h]>"u"&&(Array.isArray(c)&&h==="-"&&(h=c.length),m&&(u[g]!==""&&u[g]<1/0||u[g]==="-"?c[h]=[]:c[h]={})),!m)break;c=c[h]}var v=c[h];return d===void 0?delete c[h]:c[h]=d,v}function s(c){if(typeof c=="string"){if(c=c.split("/"),c[0]==="")return c;throw new Error("Invalid JSON pointer.")}else if(Array.isArray(c)){for(const u of c)if(typeof u!="string"&&typeof u!="number")throw new Error("Invalid JSON pointer. Must be of type string or number.");return c}throw new Error("Invalid JSON pointer.")}function a(c,u){if(typeof c!="object")throw new Error("Invalid input object.");u=s(u);var d=u.length;if(d===1)return c;for(var h=1;hle(a)?Ya(a,r):a)}:le(s)&&(n={...n,[i]:Ya(s,r)});return n}function _o(e,t){const{[e]:r,...n}=t;return[n,r]}function cd(e,t={},r=[],n=t[Te]){const i=e||"";let s,a=n;if(i.startsWith("#")){const l=decodeURIComponent(i.substring(1));a===void 0||Te in t&&t[Te]===a?s=fa.get(t,l):t[ni]===ys&&(s=js(t,a.replace(/\/$/,"")),s!==void 0&&(s=fa.get(s,l)))}else if(t[ni]===ys){const l=a?$o.resolve(a,i):i,[c,...u]=l.replace(/#\/?$/,"").split("#");s=js(t,c.replace(/\/$/,"")),s!==void 0&&(a=s[Te],u.length>0&&(s=fa.get(s,decodeURIComponent(u.join("#")))))}if(s===void 0)throw new Error(`Could not find a definition for ${e}.`);const o=s[Ke];if(o){if(r.includes(o)){if(r.length===1)throw new Error(`Definition for ${e} is a circular reference`);const[d,...h]=r,m=[...h,i,d].join(" -> ");throw new Error(`Definition for ${d} contains a circular reference through ${m}`)}const[l,c]=_o(Ke,s),u=cd(c,t,[...r,i],a);return Object.keys(l).length>0?t[ni]===tm||t[ni]===ys?{[or]:[l,u]}:{...l,...u}:u}return s}function Mn(e,t={},r=t[Te]){return cd(e,t,[],r)}const km=/^(?:0|[1-9]\d*)$/;function Zt(e){return e.split(/[.[\]]+/).filter(Boolean)}function Pm(e){return Array.isArray(e)?e:[e]}function _l(e){return e==="__proto__"}function Nm(e){return typeof e=="number"?Number.isInteger(e)&&e>=0:km.test(e)}function an(e){return e!=null&&(typeof e=="object"||typeof e=="function")}function he(e,t,r){let n;if(!Array.isArray(t))n=an(e)&&Object.hasOwn(e,t)?e[t]:void 0;else if(t.length===0)n=void 0;else{n=e;for(let i=0;i0}function Fm(e,t){const r=Pm(t);if(r.length===0)return!0;const n=r.length>1?he(e,r.slice(0,-1)):e;if(n==null)return!0;try{return Reflect.deleteProperty(n,r[r.length-1])}catch{return!1}}function Kt(e){let t;const r=he(e,Zh);return typeof r=="string"?t=r:r!==void 0&&console.warn(`Expecting discriminator to be a string, got "${typeof r}" instead`),t}function ui(e){return Array.isArray(e)?"array":typeof e=="string"?"string":e==null?"null":typeof e=="boolean"?"boolean":typeof e=="number"&&!Number.isNaN(e)?"number":typeof e=="object"?"object":"string"}function It(e){let{type:t}=e;return!t&&e.const?ui(e.const):!t&&e.enum?"string":!t&&(e.properties||e.additionalProperties||e.patternProperties)?"object":(Array.isArray(t)&&(t.length===2&&t.includes("null")?t=t.find(r=>r!=="null"):t=t[0]),t)}function gr(e,t){const r={...e},n=Object.keys(t).reduce((i,s)=>{const a=e?e[s]:{},o=t[s];return e&&s in e&&le(o)?i[s]=gr(a,o):e&&t&&(It(e)==="object"||It(t)==="object")&&s===rd&&Array.isArray(a)&&Array.isArray(o)?i[s]=[...new Set([...a,...o])]:i[s]=o,i},r);for(const i of Object.getOwnPropertySymbols(t))n[i]=t[i];return n}function lr(e,t){return e?.[Qe]?.[t]??{}}function ud(e,t,r){if(e&&r){const n=he(e,r);if(n===void 0)return;for(let i=0;i({required:[d]}))};let u;if(o.anyOf){const{...d}=o;d.allOf?d.allOf=d.allOf.slice():d.allOf=[],d.allOf.push(c),u=d}else u={...o,...c};if(delete u.required,e.isValid(u,t,n))return a}else if(e.isValid(o,t,n))return a}return 0}const Im=Object.prototype;function ii(e){for(const t in e)if(Im.hasOwnProperty.call(e,t))return!1;return!0}const Rm=["array","boolean","integer","null","number","object","string"];new Set(Rm);const Dm=["$defs","definitions","properties","patternProperties","dependencies"];new Set(Dm);const Tm=["items","allOf","oneOf","anyOf"];new Set(Tm);const Mm=["items","additionalItems","additionalProperties","propertyNames","contains","if","then","else","not"];new Set(Mm);function gs(e){return typeof e=="object"}function Tt(e){return gs(e)?ii(e):e===!0}function Pn(e,t){return et?1:0}function ha(e,t){const r=e.length;if(r===0)return t;let n=t.length;if(n===0)return e;if(rt.length){const i=e;e=t,t=i}const n=new Set(t);for(let i=0;i0;i++){const s=e[i];n.delete(s)&&r.push(s)}return r}function El(e){return e.length===0}function ma(e){return(t,r)=>{const n=t.length-r.length;if(n!==0)return n;for(let i=0;i{const n=r.length;if(n===0)return r;if(n<=t){const a=[];let o=0;e:for(let l=0;l{const n=[];let i=t.length,s=r.length;if(i===0||s===0)return n;if(i>s){const u=t;t=r,r=u;const d=i;i=s,s=d}const a=[...t].sort(e),o=[...r].sort(e);let l=0,c=0;for(;l{if(e.has(r))return e.get(r);const n=t(r);return e.set(r,n),n}}const jl=Lm,fd=()=>0,Vm=e=>e===void 0,zm=e=>typeof e!="object",Ol={boolean:0,number:1,string:2};function Bm(e,t){const r=typeof e,n=typeof t;return r===n?Pn(e,t):Ol[r]-Ol[n]}function Km(e,t){const r=e.length;if(r===0)return t;const n=t.length;if(n===0)return e;if(n>r){const a=e;e=t,t=a}const i=new Set(e),s=t.length;for(let a=0;ae(n)?e(i)?r(n,i):-1:e(i)?1:t(n,i)}function On(e){return qs(Vm,e)}function _r(e,t){return qs(r=>r===void 0||e(r),t)}function pa(e,t){return qs(Array.isArray,e,t)}const at=On(Pn),ya=_r(e=>e===0,(e,t)=>e-t);function Hm({deduplicationCache:e=new WeakMap,sortedKeysCache:t=new WeakMap}={}){const r=jl(t,b=>Object.keys(b).sort());function n(b){return(v,y)=>{const f=r(v),A=r(y),O=Math.min(f.length,A.length);for(let p=0;pv(y(f),y(A))}const s=i(Pn);function a(b,v){if(gs(b)){if(gs(v)){const y=Object.keys(b),f=Object.keys(v),A=Km(y,f),O=A.length;for(let p=0;pb===!1,fd),minLength:ya,minItems:ya,minProperties:ya,required:_r(El,s),enum:_r(El,i(c)),type:On((b,v)=>{const y=Array.isArray(b),f=Array.isArray(v);return!y&&!f?Pn(b,v):s(y?b:[b],f?v:[v])}),items:_r(b=>!Array.isArray(b)&&Tt(b),pa(a,ma(a))),anyOf:h,allOf:h,oneOf:h,properties:d,patternProperties:d,additionalProperties:m,additionalItems:m,dependencies:_r(ii,n(On(pa(a,s))))};return{compareSchemaValues:c,compareSchemaDefinitions:a}}function kl(e){return e}const hd=(e,t)=>e?hd(t%e,e):t,Wm=(e,t)=>Math.abs(e*t)/hd(e,t);function Gm(e,t){return e===t?e:`(?=.*(?:${e}))(?=.*(?:${t}))`}function ga(e,t,r){const n=e.length,i=t.length;if(n>0&&i>0)for(let s=0;s{const n={...t},i=Object.keys(r),s=i.length;for(let a=0;a{if(!i(a))throw new Error(`Schema keys '${r}' and '${n}' are conflicting (${r}: ${JSON.stringify(a[r])}, ${n}: ${JSON.stringify(a[n])})`)};for(const a of[[r,n],[n,r]]){let o=t.get(a[0]);o===void 0&&(o=[],t.set(a[0],o)),o.push({oppositeKey:a[1],check:s})}}return t}const tp=[Jr("minimum","maximum",e=>e.maximum>=e.minimum),Jr("exclusiveMinimum","maximum",e=>e.maximum>e.exclusiveMinimum),Jr("minimum","exclusiveMaximum",e=>e.exclusiveMaximum>e.minimum),Jr("exclusiveMinimum","exclusiveMaximum",e=>e.exclusiveMaximum>e.exclusiveMinimum),Jr("minLength","maxLength",e=>e.maxLength>=e.minLength),Jr("minItems","maxItems",e=>e.maxItems>=e.minItems),Jr("minProperties","maxProperties",e=>e.maxProperties>=e.minProperties)];function rp({mergePatterns:e=Gm,isSubRegExp:t=Object.is,intersectJson:r=Um,deduplicateJsonSchemaDef:n=kl,defaultMerger:i=kl,assigners:s=[],checks:a=tp,mergers:o}={}){function l(p){const x=p.length;let $=p[0];for(let k=1;k0&&N!==!1)if(I)Object.assign(p,x);else for(let q=0;q{const q=Tt(k),M=Tt(U);if(q&&M)return Gr(p,"properties",A(x,N)),Gr(p,"patternProperties",$&&I?A($,I):$??I),delete p.additionalProperties,p;const L=f(k,U);Gr(p,"additionalProperties",L);const K={},B=Object.keys(x),Q=B.length,[X,re]=$?Nl($):Fl,[E,_]=I?Nl(I):Fl,P=[],C=new Set,S=M?void 0:U;for(let W=0;W0&&_.length>0&&ga(re,_,(W,F)=>{t(W,F)&&T.add(W),t(F,W)&&T.add(F),H[e(W,F)]=f($[W],I[F])}),H=u(H,$,re,T,U,M),H=u(H,I,_,T,k,q),Gr(p,"patternProperties",H),p},h=(p,{items:x=[],additionalItems:$},{items:k=[],additionalItems:N})=>{const I=Array.isArray(x),U=Array.isArray(k),q=[];if(p.items=q,I&&U){const[M,L,K]=x.length{Rl(p,x);const k=Rl({},$);return p.allOf===void 0?p.allOf=[k]:p.allOf=p.allOf.concat(k),p},g=(p,x,$)=>{const k=x.contains,N=$.contains;if(k===N)return p;if(k===!1||N===!1)return p.contains=!1,p;if(Tt(k))return p.contains=N,p;if(Tt(N))return p.contains=k,p;if(n([k,N]).length===1)return p;const I={contains:N};return p.allOf=p.allOf===void 0?[I]:n(p.allOf.concat(I)),p};function b(p,x){const $=[];if(ga(p,x,(k,N)=>{try{$.push(f(k,N))}catch{}}),$.length===0)throw new Error(`No valid schema combinations could be produced for "${JSON.stringify(p)}" and "${JSON.stringify(x)}"; the merged result is empty`);return n($)}const v=Jm([[Ym,d],[Zm,h],[Qm,m],[Xm,g],...s]),y=ep(a);function f(p,x){if(p===!1||x===!1)return!1;if(Tt(p))return Tt(x)?!0:x;if(Tt(x))return p;let $={...p};const k=new Set,N=new Set,I=Reflect.ownKeys(x),U=I.length;for(let q=0;q{if(p===x)return p;const $=Array.isArray(p),k=Array.isArray(x);if(!$&&!k){const N=ba(p,x);if(N!==void 0)return N}else if($||k){const N=new Set;if($&&k)ga(p,x,(U,q)=>{const M=ba(U,q);M!==void 0&&N.add(M)});else{const U=$?p:x,q=$?x:p,M=U.length;for(let L=0;L1)return Array.from(N)}throw new Error(`It is not possible to create an intersection of the following incompatible types: ${p.toString()}, ${x.toString()}`)},default:i,description:i,title:i,const:i,format:i,contentEncoding:i,contentMediaType:i,not:(p,x)=>{const $=n([p,x]);return $.length===1?$[0]:{anyOf:$}},pattern:e,readOnly:va,writeOnly:va,enum:(p,x)=>{const $=r(p,x);if($.length===0)throw new Error(`Intersection of the following enums is empty: "${JSON.stringify(p)}", "${JSON.stringify(x)}"`);return $},anyOf:b,oneOf:b,allOf:(p,x)=>n(p.concat(x)),propertyNames:f,dependencies:Pl((p,x)=>Array.isArray(p)?Array.isArray(x)?ha(p,x):f(x,{required:p}):Array.isArray(x)?f(p,{required:x}):f(p,x)),examples:(p,x)=>{if(!Array.isArray(p)||!Array.isArray(x))throw new Error(`Value of the 'examples' field should be an array, but got "${JSON.stringify(p)}" and "${JSON.stringify(x)}"`);return ha(p,x)},multipleOf:(p,x)=>{let $=1;for(;!Number.isInteger(p)||!Number.isInteger(x);)$*=10,p*=10,x*=10;return Wm(p,x)/$},exclusiveMaximum:Math.min,maximum:Math.min,maxItems:Math.min,maxLength:Math.min,maxProperties:Math.min,exclusiveMinimum:Math.max,minimum:Math.max,minItems:Math.max,minLength:Math.max,minProperties:Math.max,uniqueItems:va,required:ha,...o};return{mergeSchemaDefinitions:f,mergeArrayOfSchemaDefinitions:l}}function np(e){const t=[],r=[e];for(;r.length>0;){const n=r.pop();if(typeof n=="boolean"||n.allOf===void 0){t.push(n);continue}const{allOf:i,...s}=n;t.push(s);for(let a=i.length-1;a>=0;a--)r.push(i[a])}return t}function ip(e){return t=>e(np(t))}const{compareSchemaDefinitions:sp,compareSchemaValues:ap}=Hm(),{mergeArrayOfSchemaDefinitions:op}=rp({intersectJson:qm(ap),deduplicateJsonSchemaDef:dd(sp)}),md=ip(op);function ht(e,t,r={},n,i,s=!1){return qt(e,t,r,n,void 0,void 0,i,s)[0]}function pd(e){return typeof e!="boolean"?e:e?{}:{not:{}}}function lp(e,t,r,n,i,s,a,o=!1){const{if:l,then:c,else:u,...d}=t,h=e.isValid(l,s||{},r);let m=[d],g=[];if(n){if(c&&typeof c!="boolean"){const b=c;g=g.concat(qt(e,b,r,s,n,i,a,void 0,o))}if(u&&typeof u!="boolean"){const b=u;g=g.concat(qt(e,b,r,s,n,i,a,void 0,o))}}else{const b=h?c:u;if(b!==void 0){const v=pd(b);g=g.concat(qt(e,v,r,s,n,i,a,void 0,o))}}return g.length&&(m=g.map(b=>gr(d,b))),m.flatMap(b=>qt(e,b,r,s,n,i,a,void 0,o))}function yd(e){return e.reduce((r,n)=>n.length>1?n.flatMap(i=>r.map(s=>[...s,i])):(r.forEach(i=>i.push(n[0])),r),[[]])}function gd(e,t){const r=e.patternProperties??{};return Object.fromEntries(Object.entries(r).filter(([n])=>RegExp(n).test(t)))}function cp(e,t,r,n,i,s,a,o,l=!1){const c=vd(e,t,r,n,i,s,a,o,l);if(c.length>1||c[0]!==t)return c;if(ci in t&&!l)return Sd(e,t,r,n,i,s,a).flatMap(d=>qt(e,d,r,s,n,i,a));if(or in t&&Array.isArray(t[or])){const u=t.allOf.map(h=>qt(e,h,r,s,n,i,a,void 0,l));return yd(u).map(h=>({...t,allOf:h}))}return[t]}function vd(e,t,r,n,i,s,a,o,l=!1){const c=Nr(t,r,i,void 0,o);return c!==t?qt(e,c,r,s,n,i,a,o,l):[t]}function Nr(e,t,r,n,i,s=!1){if(!le(e))return e;let a=e,o=n;if(Ke in a){const{$ref:l,...c}=a;if(r.includes(l))return s?{...a,[Co]:!0}:a;r.push(l),a={...Mn(l,t,o),...c,[ps]:l},Te in a&&(o=a[Te])}if(Qe in a){const l=[],c={};for(const[u,d]of Object.entries(a[Qe]??{})){const h=[...r];c[u]=Nr(d,t,h,o,i,!i),l.push(h)}for(const u of new Set(l.flat()))r.includes(u)||r.push(u);a={...a,[Qe]:c}}if(un in a&&!Array.isArray(a.items)&&typeof a.items!="boolean"&&(a={...a,items:Nr(a.items,t,r,o,i)}),i){let l,c;Oe in e&&Array.isArray(e[Oe])?(l=Oe,c=a[Oe]):ve in e&&Array.isArray(e[ve])&&(l=ve,c=a[ve]),l&&c&&(a={...a,[l]:c.map(u=>Nr(u,t,r,o,i))})}return Ae(e,a)?e:a}function up(e,t,r,n,i){const s={...t,properties:{...t.properties}},a=n&&le(n)?n:{};return Object.keys(a).forEach(o=>{if(!(o in s.properties)){if($s in s){const l=gd(s,o);if(Object.keys(l).length>0){s.properties[o]=ht(e,{[or]:Object.values(l)},r,a[o],i),s.properties[o][sn]=!0;return}}if(rn in s&&s.additionalProperties!==!1){let l;typeof s.additionalProperties!="boolean"?Ke in s.additionalProperties?l=ht(e,{[Ke]:s.additionalProperties[Ke]},r,a[o],i):"type"in s.additionalProperties?l={...s.additionalProperties}:Oe in s.additionalProperties||ve in s.additionalProperties?l={type:"object",...s.additionalProperties}:l={type:ui(a[o])}:l={type:ui(a[o])},s.properties[o]=l,s.properties[o][sn]=!0}else s.properties[o]={type:"null"},s.properties[o][sn]=!0}}),s}function dp(e){return md(e)}function qt(e,t,r,n,i=!1,s=[],a,o,l=!1){return le(t)?cp(e,t,r,i,s,n,a,o,l).flatMap(u=>{let d=u;if(Us in d)return lp(e,d,r,i,s,n,a,l);if(or in d){if(i){const{allOf:m,...g}=d;return[...m,g]}try{d=a?a(d):dp(d)}catch(m){console.warn(`could not merge subschemas in allOf: -`,m);const{allOf:g,...b}=d;return b}}return Qe in d&&$s in d&&(d=Object.keys(d.properties).reduce((m,g)=>{const b=gd(m,g);return Object.keys(b).length>0&&([m.properties[g]]=qt(e,{allOf:[m.properties[g],...Object.values(b)]},r,he(n,g),void 0,void 0,a,void 0,l)),m},{...d,properties:{...d.properties}})),$s in d||rn in d&&d.additionalProperties!==!1?up(e,d,r,n,a):d}):[{}]}function fp(e,t,r,n,i){let s;const{oneOf:a,anyOf:o,...l}=t;if(Array.isArray(a)?s=a:Array.isArray(o)&&(s=o),s){const c=i===void 0&&n?{}:i,u=Kt(t);s=s.map(h=>Nr(h,r,[]));const d=Os(e,c,s,r,u);if(n){const h=bd(s,!1,r);return Os(e,c,h,r,u),s.map(m=>gr(l,m))}return[gr(l,s[d])]}return[t]}function bd(e,t=!1,r){return e.map(n=>{if(!le(n))return pd(n);const i=t&&r?Nr(n,r,[]):n;return i.additionalProperties===!1?{...i,additionalProperties:!0}:i})}function Sd(e,t,r,n,i,s,a){const{dependencies:o,...l}=t;return fp(e,l,r,n,s).flatMap(u=>xd(e,o,u,r,n,i,s,a))}function xd(e,t,r,n,i,s,a,o){let l=[r];for(const c in t)if((i||he(a,c)!==void 0)&&(!r.properties||c in r.properties)){const[u,d]=_o(c,t);return Array.isArray(d)?l[0]=hp(r,d):le(d)&&(l=mp(e,r,n,c,d,i,s,a,o)),l.flatMap(h=>xd(e,u,h,n,i,s,a,o))}return l}function hp(e,t){if(!t)return e;const r=Array.isArray(e.required)?Array.from(new Set([...e.required,...t])):t;return{...e,required:r}}function mp(e,t,r,n,i,s,a,o,l){return qt(e,i,r,o,s,a,l).flatMap(u=>{const{oneOf:d,...h}=u,m=gr(t,h);if(d===void 0)return m;const g=d.map(v=>typeof v=="boolean"||!(Ke in v)?[v]:vd(e,v,r,s,a,o));return yd(g).flatMap(v=>pp(e,m,r,n,v,s,a,o,l))})}function pp(e,t,r,n,i,s,a,o,l){const c=i.filter(u=>{if(typeof u=="boolean"||!u?.properties)return!1;const{[n]:d}=u.properties;if(d){const h={type:"object",properties:{[n]:d}};return e.isValid(h,o,r)||s}return!1});return!s&&c.length!==1?(console.warn("ignoring oneOf in dependencies because there isn't exactly one subschema that is valid"),[t]):c.flatMap(u=>{const d=u,[h]=_o(n,d.properties),m={...d,properties:h};return qt(e,m,r,o,s,a,l).map(b=>gr(t,b))})}function si(e,t,r,n,i,s={},a){if(Array.isArray(r[i])){const l=Kt(r)||n,c=r[i].map(d=>ht(e,d,t,s,a)),u=he(s,l);if(u!==void 0)return c.find(d=>Ae(he(d,[Qe,l,cn],he(d,[Qe,l,Et])),u))}}function Cd(e,t,r,n,i){let s=r;if(bt(r,Ke)&&(s=ht(e,r,t,void 0,i)),n.length===0)return s;const a=Array.isArray(n)?[...n]:Zt(n),[o,...l]=a;if(o!==void 0&&o!==""&&bt(s,o))return s=he(s,o),Cd(e,t,s,l,i)}function vs(e,t,r,n,i,s){const a=Cd(e,t,r,n,s);return a===void 0?i:a}const Dl={title:"!@#$_UNKNOWN_$#@!"};function yp(e,t,r,n,i={},s){const a=Array.isArray(n)?[...n]:n.split(".");let o=r;const l=a.pop(),c=String(l);a.length&&a.forEach(m=>{o=vs(e,t,o,[Qe,m],{},s),bt(o,ve)?o=si(e,t,o,c,ve,he(i,m),s):bt(o,Oe)&&(o=si(e,t,o,c,Oe,he(i,m),s))}),bt(o,ve)?o=si(e,t,o,c,ve,i,s):bt(o,Oe)&&(o=si(e,t,o,c,Oe,i,s));let u=vs(e,t,o,[Qe,l],Dl,s);u===Dl&&(u=void 0);const d=vs(e,t,o,rd,[],s);let h;return u&&Array.isArray(d)&&(h=d.includes(c)),{field:u,isRequired:h}}const gp={type:"object",$id:Jh,properties:{__not_really_there__:{type:"number"}}};function Za(e,t,r,n,i){let s=0;return r&&(le(r.properties)?s+=Object.entries(r.properties).reduce((a,[o,l])=>{const c=n?.[o];if(typeof l=="boolean")return a;if(bt(l,Ke)){const u=ht(e,l,t,c,i);return a+Za(e,t,u,c||{},i)}if((bt(l,ve)||bt(l,Oe))&&c){const u=bt(l,ve)?ve:Oe,d=Kt(l);return a+Un(e,t,c,he(l,u),-1,d,i)}if(l.type==="object")return a+(typeof c=="object"&&c!==null?1:0)+Za(e,t,l,c,i);if(l.type===ui(c)){let u=a+1;return l.default?u+=c===l.default?1:-1:l.const&&(u+=c===l.const?1:-1),u}return a},0):typeof r.type=="string"&&r.type===ui(n)&&(s+=1)),s}function Un(e,t,r,n,i=-1,s,a){const o=n.map(h=>Nr(h,t,[])),l=ud(r,n,s);if(typeof l=="number")return l;const c=o.reduce((h,m,g)=>(Os(e,r,[gp,m],t,s)===1&&h.push(g),h),[]);if(c.length===1)return c[0];c.length||c.push(...o.keys());const u=new Set,{bestIndex:d}=c.reduce((h,m)=>{const{bestScore:g}=h,b=o[m],v=Za(e,t,b,r,a);return u.add(v),v>g?{bestIndex:m,bestScore:v}:h},{bestIndex:i,bestScore:0});return u.size===1&&i>=0?i:d}function Ad(e){const t=e[Et],r=It(e);return le(t)&&typeof t?.$data=="string"&&r!=="object"&&r!=="array"}function wd(e){return Array.isArray(e.enum)&&e.enum.length===1||Et in e}function Eo(e){return Array.isArray(e.items)&&e.items.every(t=>le(t))}function di(e,t,r=!1,n=!1,i=!1){if(Array.isArray(t)){const s=Array.isArray(e)?e:[],a=i?s:t,o=i?t:s,l=a.map((c,u)=>o[u]!==void 0?di(s[u],t[u],r,n,i):c);return(r||i)&&l.length{const u=a[c],d=o!==void 0&&c in o,h=c in a,m=o?.[c]??{},g=d&&le(m)&&Object.values(m).some(y=>le(y)||Array.isArray(y)),b=d&&le(o?.[c]),v=h&&le(u);return b&&v&&!g?(l[c]={...o?.[c],...u},l):(l[c]=di(o?.[c],u,r,n,i&&(d||!h)),s)},s)}return n&&(e!==void 0&&t==null||typeof t=="number"&&Number.isNaN(t))||i&&t!=null?e:t}function Mr(e,t,r=!1){return Object.keys(t).reduce((n,i)=>{const s=e?e[i]:{},a=t[i];if(e&&i in e&&le(a))n[i]=Mr(s,a,r);else if(r&&Array.isArray(s)&&Array.isArray(a)){let o=a;r==="preventDuplicates"&&(o=a.reduce((l,c)=>(s.includes(c)||l.push(c),l),[])),n[i]=s.concat(o)}else n[i]=a;return n},{...e})}function vp(e){if(Gh in e&&Array.isArray(e.enum)&&e.enum.length===1)return e.enum[0];if(Et in e)return e.const;throw new Error("schema cannot be inferred as a constant")}function bp(e,t){const r=new Map(e.map(s=>[String(s.value),s])),n=new Set(t.filter(s=>s!=="*").map(String)),i=e.filter(s=>!n.has(String(s.value)));return t.flatMap(s=>{if(s==="*")return i;const a=r.get(String(s));return a?[a]:[]})}function qn(e,t){if(e.enum){let s,a;if(t){const{enumNames:l,enumOrder:c}=me(t);s=l,a=c}let o=e.enum.map((l,c)=>({label:Array.isArray(s)?s[c]||String(l):s?.[String(l)]||String(l),value:l}));return a&&(o=bp(o,a)),o}let r,n;e.anyOf?(r=e.anyOf,n=t?.anyOf):e.oneOf&&(r=e.oneOf,n=t?.oneOf);let i=Kt(e);if(t){const{optionsSchemaSelector:s=i}=me(t);i=s}return r?.map((s,a)=>{const{title:o}=me(n?.[a]),l=s;let c,u=o;if(i){const d=lr(l,i);c=he(d,cn,he(d,Et)),u=u??d?.title??l.title??String(c)}else c=vp(l),u=u??l.title??String(c);return{schema:l,label:u,value:c}})}function Ls(e,t,r={},n){const i=ht(e,t,r,void 0,n),s=i.oneOf||i.anyOf;return Array.isArray(i.enum)?!0:Array.isArray(s)?s.every(a=>typeof a!="boolean"&&wd(a)):!1}function jo(e,t,r,n){return!t.uniqueItems||!t.items||typeof t.items=="boolean"?!1:Ls(e,t.items,r,n)}const Sp=["string","number","integer","boolean","null"];var Ln;(function(e){e[e.Ignore=0]="Ignore",e[e.Invert=1]="Invert",e[e.Fallback=2]="Fallback"})(Ln||(Ln={}));function Oo(e,t){return t?.allOf==="populateDefaults"&&or in e}function Sa(e,t=Ln.Ignore,r=-1){if(r>=0){if(Array.isArray(e.items)&&r0:typeof e=="object"&&e!==null?Object.keys(e).length>0:!1}function $d(e){return e===void 0||le(e)&&Object.keys(e).length===0}function _d(e,t){const{default:r,type:n}=e;return Array.isArray(n)&&n.includes("null")&&!xp(t)&&r===null?null:t}function Tl(e,t,r,n,i,s=[],a={},o=!1,l=!1){const{emptyObjectFields:c="populateAllDefaults"}=a;if(n===!0||o)e[t]=r;else if(n==="excludeObjectChildren")(l&&r!==void 0||!le(r)||Object.keys(r).length>0)&&(e[t]=r);else if(c!=="skipDefaults"){const u=i===void 0?s.includes(t):i;le(r)?c==="skipEmptyDefaults"?Object.keys(r).length>0&&(e[t]=r):(Object.keys(r).length>0||s.includes(t))&&(u||c!=="populateRequiredDefaults")&&(e[t]=r):r!==void 0&&(c==="populateAllDefaults"||c==="skipEmptyDefaults"||u&&s.includes(t))&&(e[t]=r)}}function Fr(e,t,r={}){const{parentDefaults:n,rawFormData:i,rootSchema:s={},includeUndefinedValues:a=!1,_recurseList:o=[],experimental_defaultFormStateBehavior:l,experimental_customMergeAllOf:c,required:u,shouldMergeDefaultsIntoFormData:d=!1,initialDefaultsGenerated:h}=r;let m=le(i)?i:{};const g=le(t)?t:{};let b=n;const v=b&&l?.nestedDefaultsPrecedence==="ancestorWins";let y=null,f=l,A=o;if(g[Et]!==void 0&&l?.constAsDefaults!=="never"&&!Ad(g))b=g[Et];else if(le(b)&&le(g.default)&&!g[Oe]&&!g[ve]&&!g[Ke])v?b=Mr(g.default,b):b=Mr(b,g.default);else if(cn in g&&!v&&!g[Oe]&&!g[ve]&&!g[Ke])b=g.default;else if(Ke in g){const x=g[Ke];o.includes(x)||(A=o.concat(x),y=Mn(x,s)),y&&!b&&$d(i)&&(b=g.default),d&&y&&!le(i)&&(m=i)}else if(ci in g){const x={...Ml(e,g,r,b),...m};[y]=Sd(e,g,s,!1,[],x,c)}else if(Eo(g)&&!v)b=g.items.map((x,$)=>Fr(e,x,{rootSchema:s,includeUndefinedValues:a,_recurseList:o,experimental_defaultFormStateBehavior:l,experimental_customMergeAllOf:c,parentDefaults:Array.isArray(n)?n[$]:void 0,rawFormData:m,required:u,shouldMergeDefaultsIntoFormData:d}));else if(ve in g){const{oneOf:x,...$}=g;if(x.length===0)return;const k=Kt(g),{type:N="null"}=$;!Array.isArray(N)&&Sp.includes(N)&&f?.constAsDefaults==="skipOneOf"&&(f={...f,constAsDefaults:"never"}),y=x[Un(e,s,i??g.default,x,0,k,c)],y=gr($,y)}else if(Oe in g){const{anyOf:x,...$}=g;if(x.length===0)return;const k=Kt(g);y=x[Un(e,s,i??g.default,x,0,k,c)],y=gr($,y)}else Oo(g,l)&&It(g)!=="object"&&(y=ht(e,g,s,i,c));if(y)return Fr(e,y,{rootSchema:s,includeUndefinedValues:a,_recurseList:A,experimental_defaultFormStateBehavior:f,experimental_customMergeAllOf:c,parentDefaults:b,rawFormData:i??m,required:u,shouldMergeDefaultsIntoFormData:d,initialDefaultsGenerated:h});b===void 0&&(b=g.default);let p=Ml(e,g,r,b)??b;if(d){const{arrayMinItems:x={}}=l||{},{mergeExtraDefaults:$}=x,k=ko(e,g,s,i,l,c);(!le(i)||or in g)&&(p=di(p,k,$,!0))}return p}function ko(e,t,r,n,i,s){const a=Oo(t,i),o=a?ht(e,t,r,n,s):t,l=!wd(o)&&Ls(e,o,r,s);let c=n;return l&&(c=qn(o)?.some(m=>Ae(m.value,n))?n:void 0),o[Et]&&i?.constAsDefaults==="always"?c=o.const:le(c)&&le(o.properties)&&(c=Object.keys(o.properties).reduce((d,h)=>{const m=lr(o,h);return h in d&&(a||le(m)&&or in m)&&(d[h]=ko(e,m,r,d[h],i,s)),d},{...c})),c}function Cp(e,t,{rawFormData:r,rootSchema:n={},includeUndefinedValues:i=!1,_recurseList:s=[],experimental_defaultFormStateBehavior:a,experimental_customMergeAllOf:o,required:l,shouldMergeDefaultsIntoFormData:c,initialDefaultsGenerated:u}={},d){{const h=le(r)?r:{},m=t,b=Oo(m,a)||a?.emptyObjectFields!=="skipEmptyDefaults"&&Us in m?ht(e,m,n,h,o):m,v=b[Et],y=Object.keys(b.properties||{}).reduce((f,A)=>{const O=lr(b,A),p=le(v)&&v[A]!==void 0,x=(le(O)&&Et in O||p)&&a?.constAsDefaults!=="never"&&!Ad(O),$=Fr(e,O,{rootSchema:n,_recurseList:s,experimental_defaultFormStateBehavior:a,experimental_customMergeAllOf:o,includeUndefinedValues:i===!0,parentDefaults:he(d,A),rawFormData:he(h,A),required:b.required?.includes(A),shouldMergeDefaultsIntoFormData:c,initialDefaultsGenerated:u});return Tl(f,A,$,i,l,b.required,a,x,O?.type==="null"),f},{});if(b.additionalProperties&&!u){const f=le(b.additionalProperties)?b.additionalProperties:{},A=new Set,O=[];Object.keys(h).filter(p=>!b.properties||!b.properties[p]).forEach(p=>{A.add(p),O.push(p)}),le(d)&&O.length===0&&Object.keys(d).filter(p=>!b.properties||!b.properties[p]).forEach(p=>A.add(p)),A.forEach(p=>{const x=Fr(e,f,{rootSchema:n,_recurseList:s,experimental_defaultFormStateBehavior:a,experimental_customMergeAllOf:o,includeUndefinedValues:i===!0,parentDefaults:he(d,p),rawFormData:he(h,p),required:b.required?.includes(p),shouldMergeDefaultsIntoFormData:c,initialDefaultsGenerated:u});Tl(y,p,x,i,l,O)})}return _d(t,y)}}function Ap(e,t,{rawFormData:r,rootSchema:n={},_recurseList:i=[],experimental_defaultFormStateBehavior:s,experimental_customMergeAllOf:a,required:o,requiredAsRoot:l=!1,shouldMergeDefaultsIntoFormData:c,initialDefaultsGenerated:u}={},d){let h=d;const m=t,g=s?.arrayMinItems??{},{populate:b,mergeExtraDefaults:v}=g,y=b==="never",f=b==="requiredOnly",A=b==="all"||!y&&!f,O=g?.computeSkipPopulate??(()=>!1),x=s?.emptyObjectFields==="skipEmptyDefaults"?void 0:[];if(Array.isArray(h)&&(h=h.map((N,I)=>{const U=Sa(m,Ln.Fallback,I),q=Array.isArray(r)?r[I]:void 0;return Fr(e,U,{rootSchema:n,_recurseList:i,experimental_defaultFormStateBehavior:s,experimental_customMergeAllOf:a,parentDefaults:N,rawFormData:q,required:o,shouldMergeDefaultsIntoFormData:c,initialDefaultsGenerated:u})})),Array.isArray(r)){const N=Sa(m);if(y)h=r;else{const I=r.map((q,M)=>Fr(e,N,{rootSchema:n,_recurseList:i,experimental_defaultFormStateBehavior:s,experimental_customMergeAllOf:a,rawFormData:q,parentDefaults:he(h,M),required:o,shouldMergeDefaultsIntoFormData:c,initialDefaultsGenerated:u}));h=di(h,I,(f&&o||A)&&v)}}const $=Array.isArray(h)?h.length:0;if(y)return c&&!o?h:h??x;if(f&&!o)return h||void 0;let k;if(!m.minItems||jo(e,m,n,a)||O(e,m,n)||m.minItems<=$)k=h||!o&&!l?h:x;else{const N=h||[],I=Sa(m,Ln.Invert),U=I.default,q=Array.from({length:m.minItems-$},()=>Fr(e,I,{parentDefaults:U,rootSchema:n,_recurseList:i,experimental_defaultFormStateBehavior:s,experimental_customMergeAllOf:a,required:o,shouldMergeDefaultsIntoFormData:c}));k=N.concat(q)}return _d(t,k)}function Ml(e,t,r={},n){switch(It(t)){case"object":return Cp(e,t,r,n);case"array":return Ap(e,t,r,n);case"boolean":return r.required&&n===void 0?!1:void 0;default:return}}function Ed(e,t,r,n,i=!1,s,a,o){if(!le(t))throw new Error(`Invalid schema: ${t}`);const l=$d(r),[c]=qt(e,t,n??{},r,void 0,void 0,a,void 0,l),u=Fr(e,c,{rootSchema:n??(l?t:void 0),includeUndefinedValues:i,experimental_defaultFormStateBehavior:s,experimental_customMergeAllOf:a,rawFormData:r,shouldMergeDefaultsIntoFormData:!0,initialDefaultsGenerated:o,requiredAsRoot:!0});if(c.type!=="object"&&le(c.default))return{...u,...r};if(le(r)||Array.isArray(r)){const{mergeDefaultsIntoFormData:d}=s||{},h=d==="useDefaultIfFormDataUndefined",m=ko(e,c,n??c,r,s,a);return di(u,m,!0,h,!0)}return u}function jd(e={}){return"widget"in me(e)&&me(e).widget!=="hidden"}function Od(e,t,r={},n,i){if(r[wo]==="files")return!0;if(t.items){const s=ht(e,t.items,n,void 0,i);return s.type==="string"&&s.format==="data-url"}return!1}function wp(e,t,r={},n,i,s){const a=me(r,i),{label:o=!0}=a;let l=!!o;if(l){const c=It(t),u=!!t[sn];c==="array"&&(l=u||jo(e,t,n,s)||Od(e,t,r,n,s)||jd(r)),c==="object"&&(l=u),c==="boolean"&&r&&!r[wo]&&(l=!1),r?.[Xh]&&(l=!1)}return l}function $p(e,t){if(t.length===0&&typeof e!="object")return e;const r={};return t.forEach(n=>{const i=Array.isArray(n)?n:Zt(n);bt(e,i)&&rt(r,i,he(e,i))}),Array.isArray(e)?Object.keys(r).map(n=>r[n]):r}function _p(e,t){const r=(i,s)=>typeof i!="object"||i===null?!0:(Array.isArray(i)?i.length===0:Object.keys(i).length===0)||s,n=(i,s=[],a=[[]])=>{const o=Object.keys(i);return o.forEach(l=>{const c=i[l];if(typeof c=="object"){const u=a.map(d=>[...d,l]);c[Ao]&&c[ms]!==""?s.push(c[ms]):n(c,s,u)}else l===ms&&c!==""&&a.forEach(u=>{const d=he(t,u),h=o.length===1;(r(d,h)||Array.isArray(d)&&d.every(m=>r(m,h)))&&s.push(u)})}),s};return n(e)}function kd(e){return e==null||e===""?!0:Array.isArray(e)?e.length===0:le(e)?Object.values(e).every(kd):!1}function Ep(e,t){return t?t(e):md(e)}function jp(e,t,r={},n,i){function s(g){return le(g)}function a(g){return le(g)}function o(g,b,v){const{properties:y,additionalProperties:f,patternProperties:A}=g,O=new Set(g.required??[]);function p($,k,N,I=!1){const U=m(k,N,v[$]);if(!I&&le(U)){let q=a(k)?k:{};q.$ref!==void 0&&(q=Mn(q.$ref,r));const M=new Set(q.required??[]);if(Object.entries(U).every(([K,B])=>!M.has(K)&&kd(B)))return}U!==void 0&&(v[$]=U)}if(y!==void 0)for(const[$,k]of Object.entries(y))p($,k,b[$],O.has($));let x;if(A!==void 0){x=[];const $=Object.entries(A).map(([N,I])=>[new RegExp(N),I]),k=new Set(Object.keys(y??{}));for(const[N,I]of Object.entries(b))if(!k.has(N)){const U=$.find(([q])=>q.test(N));U===void 0?x.push(N):p(N,U[1],I)}}if(f!==void 0&&f!==!1){const $=f;if(x!==void 0)for(const k of x)p(k,$,b[k]);else{const k=new Set(Object.keys(y??{}));for(const[N,I]of Object.entries(b))k.has(N)||p(N,$,I)}}return v}function l(g,b,v){const{items:y,additionalItems:f}=g;if(Array.isArray(y)){const A=Math.min(y.length,b.length);let O=0;for(;Onew RegExp(U)):[];for(const U of Object.keys($))!N.has(U)&&!I.some(q=>q.test(U))&&delete $[U]}return h(f,b,$)??(y?b:void 0)}return m(t,n)}const Mt=Symbol("no Value");function Pd(e){if(Array.isArray(e.enum))return e.enum;const t=e.oneOf||e.anyOf;if(!Array.isArray(t))return;const r=t.map(n=>Et in n?n[Et]:Array.isArray(n.enum)&&n.enum.length===1?n.enum[0]:Mt).filter(n=>n!==Mt);return r.length>0?r:void 0}function Op(e,t){const r=Pd(e);if(!r||r.some(i=>Ae(i,t)))return Mt;const n=he(e,cn,Mt);return n!==Mt&&r.some(i=>Ae(i,n))?n:r.length===1?r[0]:void 0}function Qa(e,t,r,n,i={},s){let a;const o=r?.[Qe];if(o){const l={},c=n?.[Qe];c&&Object.keys(c).forEach(h=>{bt(i,h)&&(l[h]=void 0)});const u=Object.keys(o),d={};u.forEach(h=>{const m=i?.[h],g=!bt(n,[Qe,h]),b=lr(n,h),v=lr(r,h),y=ht(e,b,t,m,s),f=Ae(b,v)?y:ht(e,v,t,m,s),A=y.type,O=f.type;if(!A||A===O)if(h in l&&delete l[h],O==="object"||O==="array"&&Array.isArray(m)){const p=Qa(e,t,f,g&&O==="array"?f:y,m,s);(p!==void 0||O==="array")&&(d[h]=p)}else{const p=he(f,cn,Mt),x=he(y,cn,Mt);p!==Mt&&p!==m&&(g&&m===void 0||x===m?l[h]=p:f.readOnly===!0&&(l[h]=void 0));const $=he(f,Et,Mt),k=he(y,Et,Mt);if($!==Mt&&$!==m&&(l[h]=k===m?$:void 0),bt(i,h)){const N=Op(f,m);N!==Mt&&(l[h]=N)}}}),a={...typeof i=="string"||Array.isArray(i)?void 0:i,...l,...d}}else if(n?.type==="array"&&r?.type==="array"&&Array.isArray(i)){let l=n.items,c=r.items;if(typeof l=="object"&&typeof c=="object"&&!Array.isArray(l)&&!Array.isArray(c)){const u=l,d=c;l=ht(e,u,t,i,s),c=Ae(u,d)?l:ht(e,d,t,i,s);const h=he(l,"type"),m=he(c,"type");if(!h||h===m){const g=r.maxItems??-1;if(m==="object")a=i.reduce((b,v)=>{const y=ht(e,u,t,v,s),f=Ae(u,d)?y:ht(e,d,t,v,s),A=Qa(e,t,f,y,v,s);return A!==void 0&&(g<0||b.lengthb.some(f=>Ae(f,y))):i;a=g>0&&v.length>g?v.slice(0,g):v}}}else typeof l=="boolean"&&typeof c=="boolean"&&l===c&&(a=i)}return a}function Er(e,t,r,n,i,s=[],a){if(Ke in t||ci in t||or in t||Us in t){const l=ht(e,t,n,i,a);if(s.findIndex(u=>Ae(u,l))===-1)return Er(e,l,r,n,i,s.concat(l),a)}let o={[ms]:r.replace(/^\./,"")};if(ve in t||Oe in t){const l=ve in t?t.oneOf:t.anyOf,c=Kt(t),u=Un(e,n,i,l,0,c,a),d=l[u];o={...o,...Er(e,d,r,n,i,s,a)}}if(rn in t&&t[rn]!==!1){rt(o,Ao,!0);const l=le(t[rn])?t[rn]:{},c=t[Qe]??{};for(const u of Object.keys(i??{}))u in c||(o[u]=Er(e,l,`${r}.${u}`,n,he(i,u),s,a))}if(un in t&&Array.isArray(i)){const{items:l,additionalItems:c}=t;Array.isArray(l)?i.forEach((u,d)=>{l[d]?o[d]=Er(e,l[d],`${r}.${d}`,n,u,s,a):c?o[d]=Er(e,c,`${r}.${d}`,n,u,s,a):console.warn(`Unable to generate path schema for "${r}.${d}". No schema defined for it`)}):i.forEach((u,d)=>{o[d]=Er(e,l,`${r}.${d}`,n,u,s,a)})}else if(Qe in t)for(const l in t.properties){const c=lr(t,l);o[l]=Er(e,c,`${r}.${l}`,n,he(i,l),s,a)}return o}function kp(e,t,r="",n,i,s){return Er(e,t,r,n,i,void 0,s)}class Pp{rootSchema;validator;experimental_defaultFormStateBehavior;experimental_customMergeAllOf;constructor(t,r,n,i){r?.[ni]===ys?this.rootSchema=Ya(r,r[Te]??"#"):this.rootSchema=r,this.validator=t,this.experimental_defaultFormStateBehavior=n,this.experimental_customMergeAllOf=i}getRootSchema(){return this.rootSchema}getValidator(){return this.validator}doesSchemaUtilsDiffer(t,r,n={},i){return!t||!r?!1:this.validator!==t||!Ae(this.rootSchema,r)||!Ae(this.experimental_defaultFormStateBehavior,n)||this.experimental_customMergeAllOf!==i}findFieldInSchema(t,r,n){return yp(this.validator,this.rootSchema,t,r,n,this.experimental_customMergeAllOf)}findSelectedOptionInXxxOf(t,r,n,i){return si(this.validator,this.rootSchema,t,r,n,i,this.experimental_customMergeAllOf)}getDefaultFormState(t,r,n=!1,i){return Ed(this.validator,t,r,this.rootSchema,n,this.experimental_defaultFormStateBehavior,this.experimental_customMergeAllOf,i)}getDisplayLabel(t,r,n){return wp(this.validator,t,r,this.rootSchema,n,this.experimental_customMergeAllOf)}getClosestMatchingOption(t,r,n,i){return Un(this.validator,this.rootSchema,t,r,n,i,this.experimental_customMergeAllOf)}getFirstMatchingOption(t,r,n){return Os(this.validator,t,r,this.rootSchema,n)}getFromSchema(t,r,n){return vs(this.validator,this.rootSchema,t,r,n,this.experimental_customMergeAllOf)}isFilesArray(t,r){return Od(this.validator,t,r,this.rootSchema,this.experimental_customMergeAllOf)}isMultiSelect(t){return jo(this.validator,t,this.rootSchema,this.experimental_customMergeAllOf)}isSelect(t){return Ls(this.validator,t,this.rootSchema,this.experimental_customMergeAllOf)}omitExtraData(t,r){return jp(this.validator,t,this.rootSchema,r)}retrieveSchema(t,r,n){return ht(this.validator,t,this.rootSchema,r,this.experimental_customMergeAllOf,n)}sanitizeDataForNewSchema(t,r,n){return Qa(this.validator,this.rootSchema,t,r,n,this.experimental_customMergeAllOf)}toPathSchema(t,r,n){return kp(this.validator,t,r,this.rootSchema,n,this.experimental_customMergeAllOf)}}function Np(e,t,r={},n){return new Pp(e,t,r,n)}function Fp(e){if(!e.includes("data:"))throw new Error("File is invalid: URI must be a dataURI");const r=e.slice(5).split(";base64,");if(r.length!==2)throw new Error("File is invalid: dataURI must be base64");const[n,i]=r,[s,...a]=n.split(";"),o=s||"",l=decodeURI(a.map(c=>c.split("=")).find(([c])=>c==="name")?.[1]||"unknown");try{const c=atob(i),u=new Array(c.length);for(let h=0;h 0, got one of each`);const i=new Date().getFullYear(),s=r?i+e:e,a=r?i+t:t;if(s>a)return Nd(t,e).reverse();const o=[];for(let l=s;l<=a;l+=1)o.push({value:l,label:jr(l,2)});return o}function Ip(e,t){let r=e;if(Array.isArray(t)){const n=r.split(/(%\d)/);t.forEach((i,s)=>{const a=n.findIndex(o=>o===`%${s+1}`);a>=0&&(n[a]=i)}),r=n.join("")}return r}function Rp(e,t){return Ip(e,t)}function Vs(e,t=[],r){if(Array.isArray(e))return e.map(s=>Vs(s,t)).filter(s=>s!==void 0);const n=e===""||e===null?-1:Number(e),i=t[n];return i?i.value:r}function Dp(e,t,r=[]){const n=Vs(e,r);return Array.isArray(t)?t.filter(i=>!Ae(i,n)):Ae(n,t)?void 0:t}function zs(e,t){return Array.isArray(t)?t.some(r=>Ae(r,e)):Ae(t,e)}function Fd(e,t=[],r=!1){const n=t.map((i,s)=>zs(i.value,e)?String(s):void 0).filter(i=>typeof i<"u");return r?n:n[0]}function Tp(e,t,r,n="indexed",i){if(typeof e>"u"||r&&Array.isArray(e)&&e.length<1||!r&&e===i)return i;if(n==="realValue")return r?e.map(String):String(e);const a=Fd(e,t,r);return typeof a>"u"?i:a}function Mp(e,t,r=[]){const n=Vs(e,r);if(n!=null){const i=r.findIndex(o=>n===o.value),s=r.map(({value:o})=>o);return t.slice(0,i).concat(n,t.slice(i)).sort((o,l)=>+(s.indexOf(o)>s.indexOf(l)))}return t}function Ul(e,t,r){if(e===""||!Array.isArray(t))return r;const n=t.find(s=>String(s.value)===e);if(n)return n.value;const i=Number(e);return!Number.isNaN(i)&&i>=0&&iUl(i,t,n)):Ul(e,t,n)}function Po(e,t,r="indexed"){return r!=="realValue"?String(t):e==null?"":String(typeof e=="object"?t:e)}class Id{errorSchema={};constructor(t){this.resetAllErrors(t)}get ErrorSchema(){return this.errorSchema}getOrCreateErrorBlock(t){const r=typeof t=="string"?Zt(t):t??[];if(r.length===0)return this.errorSchema;let n=he(this.errorSchema,r);return n||(n={},rt(this.errorSchema,r,n,!0)),n}resetAllErrors(t){return this.errorSchema=t?structuredClone(t):{},this}addErrors(t,r){const n=this.getOrCreateErrorBlock(r);let i=n[pt];return Array.isArray(i)||(i=[],n[pt]=i),Array.isArray(t)?n[pt]=[...new Set([...i,...t])]:n[pt]=[...new Set([...i,t])],this}setErrors(t,r){const n=this.getOrCreateErrorBlock(r),i=Array.isArray(t)?[...new Set([...t])]:[t];return n[pt]=i,this}clearErrors(t){const r=this.getOrCreateErrorBlock(t);return r[pt]=[],this}}function Rd(e,t){return yr(e)&&yr(t)?bs(e,t,!0):Array.isArray(e)&&Array.isArray(t)&&e.length===t.length?e.flatMap((r,n)=>{if(Ae(r,t[n]))return[];const i=Rd(r,t[n]);return i.length?i.map(s=>`${n}.${s}`):[String(n)]}):[]}function bs(e,t,r=!1){if(e===t)return[];if(!yr(e))return yr(t)?Object.keys(t):[];if(!yr(t))return Object.keys(e);const n=Object.keys(e),i=new Set(n),s=n.filter(o=>!Ae(e[o],he(t,o))).flatMap(o=>{if(!r)return[o];const l=Rd(e[o],he(t,o));return l.length?l.map(c=>`${o}.${c}`):[o]}),a=Object.keys(t).filter(o=>!i.has(o));return[...s,...a]}function Up(e,t,r=[1900,new Date().getFullYear()+2],n="YMD"){const{day:i,month:s,year:a,hour:o,minute:l,second:c}=e,u={type:"day",range:[1,31],value:i},d={type:"month",range:[1,12],value:s},h={type:"year",range:r,value:a},m=[];switch(n){case"MDY":m.push(d,u,h);break;case"DMY":m.push(u,d,h);break;default:m.push(h,d,u)}return t&&m.push({type:"hour",range:[0,23],value:o},{type:"minute",range:[0,59],value:l},{type:"second",range:[0,59],value:c}),m}function qp(e){const t={};return e.multipleOf&&(t.step=e.multipleOf),(e.minimum||e.minimum===0)&&(t.min=e.minimum),(e.maximum||e.maximum===0)&&(t.max=e.maximum),t}function Lp(e,t,r={},n=!0){const i={type:t||"text",...qp(e)};return r.inputType?i.type=r.inputType:t||(e.type==="number"?xo()==="."?(i.type="number",n&&i.step===void 0&&(i.step="any")):i.type="text":e.type==="integer"&&(i.type="number",i.step===void 0&&(i.step=1))),["date","datetime-local","time","week","month"].includes(i.type)&&(e.formatMinimum!==void 0&&(i.min=e.formatMinimum),e.formatMaximum!==void 0&&(i.max=e.formatMaximum)),r.autocomplete&&(i.autoComplete=r.autocomplete),r.autocapitalize&&(i.autoCapitalize=r.autocapitalize),r.accept&&(i.accept=r.accept),i}function No(e){return e?.optionValueFormat??"indexed"}const ql={props:{disabled:!1},submitText:"Submit",norender:!1};function Vp(e={}){const t=me(e);if(t?.[_s]){const r=t[_s];return{...ql,...r}}return ql}function be(e,t,r={}){const{templates:n}=t;if(e==="ButtonTemplates")return n[e];if(Object.hasOwn(r,e)&&typeof r[e]=="string"&&Object.hasOwn(n,r[e])){const i=r[e];return n[i]}return r[e]||n[e]}let Ll=0;function Fo(){if(he(globalThis,["process","env","NODE_ENV"])!=="test")return{};const e=new Map;return new Proxy({},{get(t,r){return e.has(r)||(Ll+=1,e.set(r,`test-id-${Ll}`)),e.get(r)}})}var xa={exports:{}},Le={};var Vl;function zp(){if(Vl)return Le;Vl=1;var e=Symbol.for("react.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),a=Symbol.for("react.context"),o=Symbol.for("react.server_context"),l=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),u=Symbol.for("react.suspense_list"),d=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen"),g;g=Symbol.for("react.module.reference");function b(v){if(typeof v=="object"&&v!==null){var y=v.$$typeof;switch(y){case e:switch(v=v.type,v){case r:case i:case n:case c:case u:return v;default:switch(v=v&&v.$$typeof,v){case o:case a:case l:case h:case d:case s:return v;default:return y}}case t:return y}}}return Le.ContextConsumer=a,Le.ContextProvider=s,Le.Element=e,Le.ForwardRef=l,Le.Fragment=r,Le.Lazy=h,Le.Memo=d,Le.Portal=t,Le.Profiler=i,Le.StrictMode=n,Le.Suspense=c,Le.SuspenseList=u,Le.isAsyncMode=function(){return!1},Le.isConcurrentMode=function(){return!1},Le.isContextConsumer=function(v){return b(v)===a},Le.isContextProvider=function(v){return b(v)===s},Le.isElement=function(v){return typeof v=="object"&&v!==null&&v.$$typeof===e},Le.isForwardRef=function(v){return b(v)===l},Le.isFragment=function(v){return b(v)===r},Le.isLazy=function(v){return b(v)===h},Le.isMemo=function(v){return b(v)===d},Le.isPortal=function(v){return b(v)===t},Le.isProfiler=function(v){return b(v)===i},Le.isStrictMode=function(v){return b(v)===n},Le.isSuspense=function(v){return b(v)===c},Le.isSuspenseList=function(v){return b(v)===u},Le.isValidElementType=function(v){return typeof v=="string"||typeof v=="function"||v===r||v===i||v===n||v===c||v===u||v===m||typeof v=="object"&&v!==null&&(v.$$typeof===h||v.$$typeof===d||v.$$typeof===s||v.$$typeof===a||v.$$typeof===l||v.$$typeof===g||v.getModuleId!==void 0)},Le.typeOf=b,Le}var zl;function Bp(){return zl||(zl=1,xa.exports=zp()),xa.exports}var Kp=Bp();const Bl=mi(Kp),Ca={boolean:{checkbox:"CheckboxWidget",radio:"RadioWidget",select:"SelectWidget",hidden:"HiddenWidget"},string:{text:"TextWidget",password:"PasswordWidget",email:"EmailWidget",hostname:"TextWidget",ipv4:"TextWidget",ipv6:"TextWidget",uri:"URLWidget","data-url":"FileWidget",radio:"RadioWidget",select:"SelectWidget",textarea:"TextareaWidget",hidden:"HiddenWidget",date:"DateWidget",datetime:"DateTimeWidget","date-time":"DateTimeWidget","alt-date":"AltDateWidget","alt-datetime":"AltDateTimeWidget",time:"TimeWidget",color:"ColorWidget",file:"FileWidget"},number:{text:"TextWidget",select:"SelectWidget",updown:"UpDownWidget",range:"RangeWidget",radio:"RadioWidget",hidden:"HiddenWidget"},integer:{text:"TextWidget",select:"SelectWidget",updown:"UpDownWidget",range:"RangeWidget",radio:"RadioWidget",hidden:"HiddenWidget"},array:{select:"SelectWidget",checkboxes:"CheckboxesWidget",files:"FileWidget",hidden:"HiddenWidget"}};function Hp(e){let{MergedWidget:t}=e;if(!t){const r=e.defaultProps?.options||{};t=({options:n,...i})=>w.jsx(e,{options:{...r,...n},...i}),e.MergedWidget=t}return t}function cr(e,t,r={}){const n=It(e);if(typeof t=="function"||t&&Bl.isForwardRef(G.createElement(t))||Bl.isMemo(t))return Hp(t);if(typeof t!="string")throw new Error(`Unsupported widget definition: ${typeof t} in schema: ${JSON.stringify(e)}`);if(t in r){const i=r[t];return cr(e,i,r)}if(typeof n=="string"){if(!(n in Ca))throw new Error(`No widget for type '${n}' in schema: ${JSON.stringify(e)}`);if(t in Ca[n]){const i=r[Ca[n][t]];return cr(e,i,r)}}throw new Error(`No widget '${t}' for type '${n}' in schema: ${JSON.stringify(e)}`)}function Dd(e){let t=0;for(let r=0;ri===void 0?"undefined":ks(i)).join(",")}]`;if(e===null||typeof e!="object")return JSON.stringify(typeof e=="function"?null:e);const r=e;return`{${Object.keys(r).sort().filter(i=>t(r[i])).map(i=>`${JSON.stringify(i)}:${ks(r[i])}`).join(",")}}`}function Lt(e){return Dd(ks(e))}function Wp(e){return Dd(ks(e))}function Gp(e,t,r={}){try{return cr(e,t,r),!0}catch(n){const i=n;if(i.message&&(i.message.startsWith("No widget")||i.message.startsWith("Unsupported widget")))return!1;throw n}}function gn(e,t){return`${typeof e=="string"?e:e[Te]}__${t}`}function Vn(e){return gn(e,"description")}function Td(e){return gn(e,"error")}function Io(e){return gn(e,"examples")}function Md(e){return gn(e,"help")}function Ro(e){return gn(e,"title")}function vn(e,t=!1){const r=t?` ${Io(e)}`:"";return`${Td(e)} ${Vn(e)} ${Md(e)}${r}`}function Ud(e,t){return`${e}-${t}`}function nn(e,t){return gn(e,t)}function Aa(e,t){return gn(e,`optional${t}`)}function zn(e){return e==null?!1:typeof e!="object"||Array.isArray(e)?!0:Object.keys(e).length>0}function Jp(e,t){const{rootSchema:r,schemaUtils:n}=e;if(Ae(t,r))return!0;if(Ke in r){const i=n.retrieveSchema(r);return Ae(t,i)}return!1}function Yp(e,t,r){return t?r:e}function Zp(e){return e?new Date(e).toJSON():void 0}function Qp(e,t,r,n=!1){!n&&Array.isArray(r)&&t.default!==void 0&&Fd(t.default,r,n)===void 0&&console.error(`The schema default value "${t.default}" is not one of the values in the enum options for "${e}"`)}function Do(e,t,r){const n=[Qh];return bt(e,fl)&&n.unshift(fl),he(e,[...n,t],r)}function wa(){}function Xp(e,t){if(!Array.isArray(t))return e;const r=u=>u.reduce((d,h)=>(d[h]=!0,d),{}),n=u=>u.length>1?`properties '${u.join("', '")}'`:`property '${u[0]}'`,i=r(e),s=t.filter(u=>u==="*"||i[u]),a=r(s),o=e.filter(u=>!a[u]),l=s.indexOf("*");if(l===-1){if(o.length)throw new Error(`uiSchema order list does not contain ${n(o)}`);return s}if(l!==s.lastIndexOf("*"))throw new Error("uiSchema order list contains more than one wildcard item");const c=[...s];return c.splice(l,1,...o),c}function $a(e,t=!0){if(!e)return{year:-1,month:-1,day:-1,hour:t?-1:0,minute:t?-1:0,second:t?-1:0};const r=new Date(e);if(Number.isNaN(r.getTime()))throw new Error(`Unable to parse date ${e}`);return{year:r.getUTCFullYear(),month:r.getUTCMonth()+1,day:r.getUTCDate(),hour:t?r.getUTCHours():0,minute:t?r.getUTCMinutes():0,second:t?r.getUTCSeconds():0}}function qd(e,t,r,n={}){const{format:i}=e,s=r.isSelect(e)?qn(e,t):void 0;let a=s?"select":"text";return i&&Gp(e,i,n)&&(a=i),{defaultWidget:a,enumOptions:s}}function ey(e,t,r){const n=e[ps]??e[Ke],i=r.uiSchemaDefinitions,s=n&&i?i[n]:void 0;let a;if(s?!t||Object.keys(t).length===0?a={...s}:a=Mr(s,t):a=t||{},i){let o=e;if(n&&e[Ke]&&!e[ps])try{o=Mn(n,r.rootSchema)}catch(l){return console.warn(`could not resolve $ref in resolveUiSchema: -`,l),a}for(const l of[ve,Oe]){const c=o[l];if(Array.isArray(c)&&c.length>0){const u=a[l],d=Array.isArray(u)?[...u]:[];let h=!1;for(let m=0;mLd(h,t,!1,s))}function Ss(e){if(e.const||e.enum?.length===1&&e.enum[0]===!0)return!0;if(e.anyOf?.length===1)return Ss(e.anyOf[0]);if(e.oneOf?.length===1)return Ss(e.oneOf[0]);if(e.allOf){const t=r=>Ss(r);return e.allOf.some(t)}return!1}function ty({hideLabel:e,id:t,multiple:r,options:n,registry:i,uiSchema:s,value:a}){if(r||e)return null;const{label:o=!0}=me(s,i.globalUiOptions);if(!o)return null;const l=n.enumOptions?.find(({value:d})=>zs(d,a)),c=l?.schema?.description;if(!c)return null;const u=be("DescriptionFieldTemplate",i,n);return w.jsx(u,{id:Vn(t),description:c,schema:l.schema,uiSchema:s,registry:i})}function Xa(e,t){if(Object.is(e,t))return!0;if(e==null||t==null||typeof e!="object"||typeof t!="object")return!1;const r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(let i=0;ile(r)?It(r):void 0).flat().filter(r=>r!==void 0))];return t.length===1?t[0]:t}function pi(e,t,r,n){const{enableOptionalDataFieldForType:i=[]}=me(n,e.globalUiOptions);let s;return Oe in t&&Array.isArray(t[Oe])?s=Kl(t[Oe]):ve in t&&Array.isArray(t[ve])?s=Kl(t[ve]):s=It(t),!Jp(e,t)&&!r&&!!s&&!Array.isArray(s)&&!!i.find(a=>a===s)}function Hl(e,t=!0){const{year:r,month:n,day:i,hour:s=0,minute:a=0,second:o=0}=e,l=Date.UTC(r,n-1,i,s,a,o),c=new Date(l).toJSON();return t?c:c.slice(0,10)}function Vd(e,t=[]){return e?zd(e,t):[]}function zd(e,t){const r=e[pt],n=`.${t.join(".")}`,i=Array.isArray(r)?r.map(s=>({property:n,message:s,stack:`${n} ${s}`})):[];return Object.keys(e).reduce((s,a)=>{const o=e[a];return a!==pt&&yr(o)?s.concat(zd(o,[...t,a])):s},i)}function ny(e){const t=new Id;return e.length&&e.forEach(r=>{const{property:n,message:i}=r,s=n?Zt(n):[];i&&t.addErrors(i,s)}),t.ErrorSchema}function Qt(e,t,r,n){const i=Array.isArray(r)?r:r?.path,s=e===""?[]:[e],a=i?i.concat(...s):s,o=[t.idPrefix,...a].join(t.idSeparator);let l;return t.nameGenerator&&a.length>0&&(l=t.nameGenerator(a,t.idPrefix,n)),{path:a,[Te]:o,...l!==void 0&&{name:l}}}function iy(e){return Bd(e)}function Bd(e){return Object.keys(e).reduce((t,r)=>{if(r==="addError")return t;const n=e[r];return yr(n)?{...t,[r]:Bd(n)}:{...t,[r]:n}},{})}function sy(e){return Object.values(e).every(t=>t!==-1)}function ay(e){const{className:t="form-control",type:r,range:n,value:i,select:s,rootId:a,name:o,disabled:l,readonly:c,autofocus:u,registry:d,onBlur:h,onFocus:m}=e,g=`${a}_${r}`,{SelectWidget:b}=d.widgets,v=G.useCallback(y=>s(r,y),[s,r]);return w.jsx(b,{schema:{type:"integer"},id:g,name:o,className:t,options:{enumOptions:Nd(n[0],n[1])},placeholder:r,value:i,disabled:l,readonly:c,autofocus:u,onChange:v,onBlur:h,onFocus:m,registry:d,label:"","aria-describedby":vn(a)})}function oy(e){const{time:t=!1,disabled:r=!1,readonly:n=!1,options:i,onChange:s,value:a}=e,[o,l]=G.useState($a(a,t));G.useEffect(()=>{l($a(a,t))},[t,a]);const c=G.useCallback((m,g)=>{const b={...o,[m]:typeof g>"u"?-1:g};sy(b)?s(Hl(b,t)):l(b)},[o,s,t]),u=G.useCallback(m=>{m.preventDefault(),!(r||n)&&s(void 0)},[r,n,s]),d=G.useCallback(m=>{if(m.preventDefault(),r||n)return;const g=$a(new Date().toJSON(),t);s(Hl(g,t))},[r,n,t,s]);return{elements:G.useMemo(()=>Up(o,t,i.yearsRange,i.format),[o,t,i.yearsRange,i.format]),handleChange:c,handleClear:u,handleSetNow:d}}function Bn(e){const t=G.useRef(e);return Ae(e,t.current)||(t.current=e),t.current}function ly(e,t){return e.replace(";base64",`;name=${encodeURIComponent(t)};base64`)}async function cy(e){const{name:t,size:r,type:n}=e;return new Promise((i,s)=>{const a=new window.FileReader;a.onerror=s,a.onload=o=>{typeof o.target?.result=="string"?i({dataURL:ly(o.target.result,t),name:t,size:r,type:n}):i({dataURL:null,name:t,size:r,type:n})},a.readAsDataURL(e)})}async function uy(e){return Promise.all(Array.from(e).map(cy))}function Wl(e){return e.reduce((t,r)=>{if(!r)return t;try{const{blob:n,name:i}=Fp(r);return[...t,{dataURL:r,name:i,size:n.size,type:n.type}]}catch{return t}},[])}function dy(e,t,r=!1){const n=G.useMemo(()=>r&&e?Array.isArray(e)?e:[e]:[],[e,r]),i=G.useMemo(()=>Array.isArray(e)?Wl(e):Wl([e||""]),[e]),s=G.useCallback(async o=>{const c=(await uy(o)).map(u=>u.dataURL||null);t(r?n.concat(...c):c[0])},[n,r,t]),a=G.useCallback(o=>{if(r){const l=n.filter((c,u)=>u!==o);t(l)}else t(void 0)},[n,r,t]);return{filesInfo:i,handleChange:s,handleRemove:a}}function fy(e){if(!e)return"";const t=new Date(e),r=jr(t.getFullYear(),4),n=jr(t.getMonth()+1,2),i=jr(t.getDate(),2),s=jr(t.getHours(),2),a=jr(t.getMinutes(),2),o=jr(t.getSeconds(),2),l=jr(t.getMilliseconds(),3);return`${r}-${n}-${i}T${s}:${a}:${o}.${l}`}function ai(e,t,r=!1){if(!t)return e;const{errors:n,errorSchema:i}=e;let s=Vd(t),a=t;return i&&Object.keys(i).length>0&&(a=Mr(i,t,r?"preventDuplicates":!0),s=[...n].concat(s)),{errorSchema:a,errors:s}}function hy(e){const t=e;for(const r in t)if(Object.hasOwn(t,r)){const n=t[r];r===Ke&&typeof n=="string"&&n.startsWith("#")?t[r]=ad+n:t[r]=To(n)}return e}function my(e){return e.map(t=>To(t))}function To(e){return Array.isArray(e)?my([...e]):le(e)?hy({...e}):e}var Fe;(function(e){e.ArrayItemTitle="Item",e.MissingItems="Missing items definition",e.EmptyArray="No items yet. Use the button below to add some.",e.YesLabel="Yes",e.NoLabel="No",e.CloseLabel="Close",e.ErrorsLabel="Errors",e.NewStringDefault="New Value",e.AddButton="Add",e.AddItemButton="Add Item",e.CopyButton="Copy",e.ExpandButton="Expand Cycle",e.MoveDownButton="Move down",e.MoveUpButton="Move up",e.RemoveButton="Remove",e.NowLabel="Now",e.ClearLabel="Clear",e.AriaDateLabel="Select a date",e.PreviewLabel="Preview",e.DecrementAriaLabel="Decrease value by 1",e.IncrementAriaLabel="Increase value by 1",e.OptionalObjectAdd="Add data for optional field",e.OptionalObjectRemove="Remove data for optional field",e.OptionalObjectEmptyMsg="No data for optional field",e.Type="Type",e.Value="Value",e.ClearButton="clear input",e.UnknownFieldType="Unknown field type %1",e.OptionPrefix="Option %1",e.TitleOptionPrefix="%1 option %2",e.KeyLabel="%1 Key",e.DeprecatedLabel="%1 (deprecated)",e.CycleDetected='Circular reference ($ref cycle) detected for field "%1". You may choose to expand to the next cycle break',e.InvalidObjectField='Invalid "%1" object field configuration: _%2_.',e.UnsupportedField="Unsupported field schema.",e.UnsupportedFieldWithId="Unsupported field schema for field `%1`.",e.UnsupportedFieldWithReason="Unsupported field schema: _%1_.",e.UnsupportedFieldWithIdAndReason="Unsupported field schema for field `%1`: _%2_.",e.FilesInfo="**%1** (%2, %3 bytes)"})(Fe||(Fe={}));let Gl=0;function eo(){return Gl+=1,`rjsf-array-item-${Gl}`}function Jl(e){return Array.isArray(e)?e.map(t=>({key:eo(),item:t})):[]}function Kd(e){return Array.isArray(e)?e.map(t=>t.item):[]}function py(e){return Array.isArray(e.type)?!e.type.includes("null"):e.type!=="null"}function Hd(e,t,r,n){let{addable:i}=me(n,e.globalUiOptions);return i!==!1&&(t.maxItems!==void 0?i=r.lengthL.retrieveSchema(g,b),[L,g,b]),E=G.useMemo(()=>Qt(r,X,y),[r,X,y]),_=K||B,P=be("ArrayFieldItemTemplate",o,l),C=L.getDisplayLabel(re,v,Q),{description:S}=me(v),j=!!S||!!re.description,{orderable:R=!0,removable:D=!0,copyable:H=!1}=l,T={moveUp:R&&h,moveDown:R&&m,copy:H&&u,remove:D&&d,toolbar:!1};T.toolbar=Object.keys(T).some(Z=>T[Z]);const W=G.useCallback(Z=>{I(Z,r+1)},[I,r]),F=G.useCallback(Z=>{U(Z,r)},[U,r]),V=G.useCallback(Z=>{q(Z,r)},[q,r]),z=G.useCallback(Z=>{M(Z,r,r-1)},[M,r]),J=G.useCallback(Z=>{M(Z,r,r+1)},[M,r]),Y={children:w.jsx(_,{name:n,title:N,index:r,schema:re,uiSchema:v,formData:b,errorSchema:f,fieldPathId:E,required:py(re),onChange:x,onBlur:O,onFocus:p,registry:o,disabled:i,readonly:a,hideError:s,autofocus:A,rawErrors:$}),buttonsProps:{fieldPathId:E,disabled:i,readonly:a,canAdd:u,hasCopy:T.copy,hasMoveUp:T.moveUp,hasMoveDown:T.moveDown,hasRemove:T.remove,index:r,totalItems:k,onAddItem:W,onCopyItem:F,onRemoveItem:V,onMoveUpItem:z,onMoveDownItem:J,registry:o,schema:re,uiSchema:v},itemKey:t,className:"rjsf-array-item",disabled:i,hasToolbar:T.toolbar,index:r,totalItems:k,readonly:a,registry:o,schema:re,uiSchema:v,parentUiSchema:c,displayLabel:C,hasDescription:j};return w.jsx(P,{...Y})}const Gd=G.memo(Sy);function xy(e){const{schema:t,uiSchema:r={},errorSchema:n,fieldPathId:i,formData:s,name:a,title:o,disabled:l=!1,readonly:c=!1,autofocus:u=!1,required:d=!1,hideError:h=!1,registry:m,onBlur:g,onFocus:b,rawErrors:v,onChange:y,keyedFormData:f,handleAddItem:A,handleCopyItem:O,handleRemoveItem:p,handleReorderItems:x}=e,$=t.title||o||a,{schemaUtils:k,fields:N,formContext:I,globalUiOptions:U}=m,{OptionalDataControlsField:q}=N,M=G.useMemo(()=>me(r,U),[r,U]),L=G.useMemo(()=>le(t.items)?t.items:{},[t.items]),K=G.useMemo(()=>k.retrieveSchema(L),[k,L]),B=G.useMemo(()=>Kd(f),[f]),Q=pi(m,t,d,r),X=zn(s),re=G.useMemo(()=>Hd(m,t,B,r)&&(!Q||X),[m,t,B,r,Q,X]),E=X?f:[],_=Q?" rjsf-optional-array-field":"",P=e.childFieldPathId??i,C=Q?w.jsx(q,{...e,fieldPathId:P}):void 0,S={canAdd:re,items:E.map((R,D)=>{const{key:H,item:T}=R,W=T,F=n?n[D]:void 0,V=Wd(r,T,D,I),z={itemKey:H,index:D,name:a&&`${a}-${D}`,registry:m,uiOptions:M,parentUiSchema:r,hideError:h,readonly:c,disabled:l,required:d,title:$?`${$}-${D+1}`:void 0,canAdd:re,canMoveUp:D>0,canMoveDown:Dme(r,U),[r,U]),{OptionalDataControlsField:M}=N,L=pi(m,t,d,r),K=zn(n),B=G.useMemo(()=>Array.isArray(t.items)?t.items:[],[t.items]),Q=le(t.additionalItems),X=e.childFieldPathId??s;$.length{const{key:D,item:H}=j,T=H,W=R>=B.length,F=(W&&le(t.additionalItems)?t.additionalItems:B[R])||{};let V;W?V=r.additionalItems:Array.isArray(r.items)?V=r.items[R]:V=Wd(r,H,R,I);const z=i?i[R]:void 0,J={index:R,itemKey:D,name:a&&`${a}-${R}`,registry:m,uiOptions:q,parentUiSchema:r,hideError:h,readonly:c,disabled:l,required:d,title:k?`${k}-${R+1}`:void 0,canAdd:P,canRemove:W,canMoveUp:R>=B.length+1,canMoveDown:W&&R<$.length-1,rawItemSchema:F,itemData:T,itemUiSchema:V,parentFieldPathId:X,itemErrorSchema:z,autofocus:u&&R===0,onBlur:g,onFocus:b,rawErrors:v,totalItems:y.length,onChange:f,handleAddItem:A,handleCopyItem:O,handleRemoveItem:p,handleReorderItems:x};return w.jsx(Gd,{...J},D)}),onAddClick:A,readonly:c,required:d,registry:m,schema:t,uiSchema:r,title:k,errorSchema:i,rawErrors:v,optionalDataControl:_},S=be("ArrayFieldTemplate",m,q);return w.jsx(S,{...C})}function Ay(e=[]){const t=G.useMemo(()=>Lt(e),[e]),[r,n]=G.useState(()=>({formDataHash:t,keyedFormData:Jl(e)}));let{keyedFormData:i,formDataHash:s}=r;if(t!==s){const o=Array.isArray(e)?e:[],l=i||[];i=o.length===l.length?l.map((c,u)=>({key:c.key,item:o[u]})):Jl(o),s=t,n({formDataHash:s,keyedFormData:i})}const a=G.useCallback(o=>{const l=Kd(o),c=Lt(l);return n({formDataHash:c,keyedFormData:o}),l},[]);return{keyedFormData:i,updateKeyedFormData:a}}function wy(e){const{schema:t,uiSchema:r,errorSchema:n,fieldPathId:i,registry:s,formData:a,onChange:o}=e,{globalFormOptions:l,schemaUtils:c,translateString:u}=s,{keyedFormData:d,updateKeyedFormData:h}=Ay(a),m=G.useRef(d);m.current=d;const g=G.useRef(n);g.current=n;const b=e.childFieldPathId??i,v=G.useCallback((k,N)=>{k&&k.preventDefault();let I;if(g.current){I={};for(const M of Object.keys(g.current)){const L=parseInt(M,10);N===void 0||L=N&&rt(I,L+1,g.current[L])}}const U={key:eo(),item:yy(s,t)},q=[...m.current];N!==void 0?q.splice(N,0,U):q.push(U),o(h(q),b.path,I)},[s,t,o,h,b]),y=G.useCallback((k,N)=>{k&&k.preventDefault();let I;if(g.current){I={};for(const M of Object.keys(g.current)){const L=parseInt(M,10);L<=N?rt(I,L,g.current[L]):L>N&&rt(I,L+1,g.current[L])}}const U={key:eo(),item:structuredClone(m.current[N].item)},q=[...m.current];N!==void 0?q.splice(N+1,0,U):q.push(U),o(h(q),b.path,I)},[o,h,b]),f=G.useCallback((k,N)=>{k&&k.preventDefault();let I;if(g.current){I={};for(const q of Object.keys(g.current)){const M=parseInt(q,10);MN&&rt(I,M-1,g.current[M])}}const U=m.current.filter((q,M)=>M!==N);o(h(U),b.path,I)},[o,h,b]),A=G.useCallback((k,N,I)=>{k&&(k.preventDefault(),k.currentTarget.blur());let U;if(g.current){U={};for(const L of Object.keys(g.current)){const K=parseInt(L,10);K===N?rt(U,I,g.current[N]):K===I?rt(U,N,g.current[I]):rt(U,L,g.current[K])}}function q(){const L=m.current.slice();return L.splice(N,1),L.splice(I,0,m.current[N]),L}const M=q();o(h(M),b.path,U)},[o,h,b]),O=G.useCallback((k,N,I,U)=>{const q=typeof N.at(-1)=="number";o(q&&k===void 0?null:k,N,I,U)},[o]),p=G.useCallback(k=>{o(k,b.path,void 0,b?.[Te])},[o,b]),x={...e,formData:a,fieldPathId:b,onSelectChange:p},$={...e,handleAddItem:v,handleCopyItem:y,handleRemoveItem:f,handleReorderItems:A,keyedFormData:d,onChange:O};if(!(un in t)){if(!l.useFallbackUiForUnsupportedType){const N=me(r),I=be("UnsupportedFieldTemplate",s,N);return w.jsx(I,{schema:t,fieldPathId:i,reason:u(Fe.MissingItems),registry:s})}const k={...t,[un]:{type:void 0}};x.schema=k,$.schema=k}return c.isMultiSelect(x.schema)?w.jsx(gy,{...x}):jd(r)?w.jsx(vy,{...x}):Eo(x.schema)?w.jsx(Cy,{...$}):c.isFilesArray(x.schema,r)?w.jsx(by,{...x}):w.jsx(xy,{...$})}function $y(e){const{schema:t,name:r,uiSchema:n,fieldPathId:i,formData:s,registry:a,required:o,disabled:l,readonly:c,hideError:u,autofocus:d,title:h,onChange:m,onFocus:g,onBlur:b,rawErrors:v}=e,{title:y}=t,{widgets:f,translateString:A,globalUiOptions:O}=a,{widget:p="checkbox",title:x,label:$=!0,enumNames:k,...N}=me(n,O),I=cr(t,p,f),U=A(Fe.YesLabel),q=A(Fe.NoLabel);let M;const L=x??y??h??r;if(Array.isArray(t.oneOf))M=qn({oneOf:t.oneOf.map(B=>{if(le(B))return{...B,title:B.title||(B.const===!0?U:q)}}).filter(B=>B)},n);else{const B=t.enum??[!0,!1];!k&&B.length===2&&B.every(Q=>typeof Q=="boolean")?M=[{value:B[0],label:B[0]?U:q},{value:B[1],label:B[1]?U:q}]:M=qn({enum:B},n)}const K=G.useCallback((B,Q,X)=>m(B,i.path,Q,X),[m,i]);return w.jsx(I,{options:{...N,enumOptions:M},schema:t,uiSchema:n,id:i.$id,name:r,onChange:K,onFocus:g,onBlur:b,label:L,hideLabel:!$,value:s,required:o,disabled:l,readonly:c,hideError:u,registry:a,autofocus:d,rawErrors:v,htmlName:i.name})}function _y(e){const[t,r]=G.useState(!1),{name:n,registry:i,schema:s,uiSchema:a,fieldPathId:o}=e,{globalUiOptions:l}=i,c=me(a,l),u=be("CyclicSchemaExpandTemplate",i,c);if(!t)return w.jsx(u,{registry:i,schema:s,uiSchema:a,name:n,fieldPathId:o,onExpand:()=>r(!0)});const{fields:d}=i,{SchemaField:h}=d;return w.jsx(h,{...e,schema:{...s,[Co]:!1}})}function Ey(e){return{type:"string",enum:["string","number","boolean","object","array"],default:"string",title:e}}function jy(e){const t=typeof e;return t==="string"||t==="number"||t==="boolean"?t:t==="object"?Array.isArray(e)?"array":"object":"string"}function Oy(e,t){switch(t){case"string":return String(e);case"number":{const r=Number(e);return Number.isNaN(r)?0:r}case"boolean":return!!e;default:return e}}function ky(e){const{id:t,formData:r,displayLabel:n=!0,schema:i,name:s,uiSchema:a,required:o,disabled:l=!1,readonly:c=!1,onBlur:u,onFocus:d,registry:h,fieldPathId:m,onChange:g,errorSchema:b}=e,{translateString:v,fields:y,globalFormOptions:f}=h,[A,O]=G.useState(jy(r)),p=me(a),x=Bn(Qt("__internal_type_selector",f,m)),$=v(Fe.Type),k=G.useMemo(()=>Ey($),[$]),N=q=>{q!=null&&(O(q),g(Oy(r,q),m.path,b,t))};if(!f.useFallbackUiForUnsupportedType){const{reason:q=v(Fe.UnknownFieldType,[String(i.type)])}=e,M=be("UnsupportedFieldTemplate",h,p);return w.jsx(M,{schema:i,fieldPathId:m,reason:q,registry:h})}const I=be("FallbackFieldTemplate",h,p),{SchemaField:U}=y;return w.jsx(I,{schema:i,registry:h,typeSelector:w.jsx(U,{fieldPathId:x,name:`${s}__fallback_type`,schema:k,formData:A,onChange:N,onBlur:u,onFocus:d,registry:h,hideLabel:!n,disabled:l,readonly:c,required:o},r?Lt(r):"__empty__"),schemaField:w.jsx(U,{...e,schema:{type:A,title:v(Fe.Value),...A==="object"&&{additionalProperties:!0}}})})}var sr;(function(e){e.ROW="ui:row",e.COLUMN="ui:col",e.COLUMNS="ui:columns",e.CONDITION="ui:condition"})(sr||(sr={}));var li;(function(e){e.ALL="all",e.SOME="some",e.NONE="none"})(li||(li={}));const Py=/^\$lookup=(.+)/,_a="layoutGrid";function Yl(e,t){return e??t}function Ny(e){return/^\d+?$/.test(e)}const Ir=Fo();function Fy(e,t,r,n,i){const s=r?.[Ga]??{},a=he(r,Zt(e)),o={...a?.[Pr]??{},...t,...s},l={...a};Object.keys(o).length>0&&(l[Pr]=o),Object.keys(s).length>0&&(l[Ga]=s);let{readonly:c}=me(l);if(i===!0||c===void 0&&n===!0){c=!0;const u=l[Pr];u&&ca in u?u[ca]=!0:l[`ui:${ca}`]=!0}return{fieldUiSchema:l,uiReadonly:c}}function Iy(e,t,r="$0m3tH1nG Un3xP3cT3d"){const n=[t].flat().sort(),i=[r].flat().sort();switch(e){case li.ALL:return Ae(n,i);case li.SOME:return n.some(s=>i.includes(s));case li.NONE:return!n.some(s=>i.includes(s));default:return!1}}function Bs(e,t,r){let n={},i=e[t];if(yr(i)){const{children:s,className:a,...o}=i;if(i=s,a){const c=a.split(" ").map(u=>Do(r,u,u)).join(" ");n={...o,className:c}}else n=o}if(!Array.isArray(i))throw new TypeError(`Expected array for "${t}" in ${JSON.stringify(e)}`);return{children:i,gridProps:n}}function Zl(e,t,r){let n,i=t;if(Ny(r)&&e&&e?.type==="array"&&un in e){const s=Number(r),a=e[un];Array.isArray(a)?s>a.length?n=a.at(-1):n=a[s]:n=a,i={[Te]:t[Te],path:[...t.path.slice(0,t.path.length-1),s]}}return{rawSchema:n,fieldPathId:i}}function Ry(e,t,r,n,i){const{schemaUtils:s,globalFormOptions:a}=e;let o=r,l=i;const c=t.split("."),u=c.pop();let d=s.retrieveSchema(o,n),h=n,m=d.readOnly;c.forEach(v=>{l=Qt(v,a,l);const y=d?.[Qe];if(y)o=y[v]??{};else if(d&&(ve in d||Oe in d)){const f=ve in d?ve:Oe,A=s.findSelectedOptionInXxxOf(d,v,f,h);o=lr(A,v)}else{const f=Zl(d,l,v);o=f.rawSchema??{},l=f.fieldPathId}h=he(h,v,{}),d=s.retrieveSchema(o,h),m=Yl(d.readOnly,m)});let g,b=!1;if((!d||Object.keys(d).length===0)&&(d=void 0),d&&u){if(d&&(ve in d||Oe in d)){const y=ve in d?ve:Oe;d=s.findSelectedOptionInXxxOf(d,u,y,h)}l=Qt(u,a,l),b=d!==void 0&&Array.isArray(d.required)&&d.required.includes(u);const v=Zl(d,l,u);if(v.rawSchema?(d=v.rawSchema,l=v.fieldPathId):(d=d?.[Qe]?.[u],d=d&&s.retrieveSchema(d)),m=Yl(d?.readOnly,m),d&&(ve in d||Oe in d)){const y=ve in d?ve:Oe,f=Kt(d);g={options:d[y],hasDiscriminator:!!f}}}return{schema:d,isRequired:b,isReadonly:m,optionsInfo:g,fieldPathId:l}}function Dy(e,t){let r=e;return typeof r=="string"&&(r=Do(t,r)),typeof r=="function"?r:null}function Ty(e,t){let r,n=null,i={},s;if(typeof t=="string"||t===void 0)r=t??"";else{const{name:a="",render:o,...l}=t;r=a,i=l,Object.entries(i).forEach(([c,u])=>{if(typeof u=="string"){const d=Py.exec(u);if(Array.isArray(d)&&d.length>1){const h=d[1];i[c]=Do(e,h,h)}}}),n=Dy(o,e),!a&&n&&(s=w.jsx(n,{...l,"data-testid":Ir.uiComponent}))}return{name:r,UIComponent:n,uiProps:i,rendered:s}}function Ks(e){const{childrenLayoutGridSchemaId:t,...r}=e,{registry:n,schema:i,formData:s}=r,{schemaUtils:a}=n,o=a.retrieveSchema(i,s);return t.map(l=>G.createElement(Mo,{...r,key:`layoutGrid-${Lt(l)}`,schema:o,layoutGridSchema:l}))}function My(e){const{layoutGridSchema:t,...r}=e,{formData:n,registry:i}=r,{children:s,gridProps:a}=Bs(t,sr.CONDITION,i),{operator:o,field:l="",value:c}=a,u=he(n,Zt(l),null);return Iy(o,u,c)?w.jsx(Ks,{...r,childrenLayoutGridSchemaId:s}):null}function Uy(e){const{layoutGridSchema:t,...r}=e,{registry:n,uiSchema:i}=r,{children:s,gridProps:a}=Bs(t,sr.COLUMN,n),o=me(i),l=be("GridTemplate",n,o);return w.jsx(l,{column:!0,"data-testid":Ir.col,...a,children:w.jsx(Ks,{...r,childrenLayoutGridSchemaId:s})})}function qy(e){const{layoutGridSchema:t,...r}=e,{registry:n,uiSchema:i}=r,{children:s,gridProps:a}=Bs(t,sr.COLUMNS,n),o=me(i),l=be("GridTemplate",n,o);return s.map(c=>w.jsx(l,{column:!0,"data-testid":Ir.col,...a,children:w.jsx(Ks,{...r,childrenLayoutGridSchemaId:[c]})},`column-${Lt(c)}`))}function Ly(e){const{layoutGridSchema:t,...r}=e,{registry:n,uiSchema:i}=r,{children:s,gridProps:a}=Bs(t,sr.ROW,n),o=me(i),l=be("GridTemplate",n,o);return w.jsx(l,{...a,"data-testid":Ir.row,children:w.jsx(Ks,{...r,childrenLayoutGridSchemaId:s})})}function Vy(e){const{gridSchema:t,schema:r,uiSchema:n,errorSchema:i,fieldPathId:s,onBlur:a,onFocus:o,formData:l,readonly:c,registry:u,layoutGridSchema:d,...h}=e,{onChange:m}=h,{fields:g}=u,{SchemaField:b,LayoutMultiSchemaField:v}=g,y=Ty(u,t),{name:f,UIComponent:A,uiProps:O}=y,{schema:p,isRequired:x,isReadonly:$,optionsInfo:k,fieldPathId:N}=Ry(u,f,r,l,s),I=Bn(N);if(y.rendered)return y.rendered;if(p){const U=k?.hasDiscriminator?v:b,{fieldUiSchema:q,uiReadonly:M}=Fy(f,O,n,$,c),L=Zt(f);return w.jsx(U,{"data-testid":k?.hasDiscriminator?Ir.layoutMultiSchemaField:Ir.field,...h,name:f,required:x,readonly:M,schema:p,uiSchema:q,errorSchema:he(i,L),fieldPathId:I,formData:he(l,L),onChange:m,onBlur:a,onFocus:o,options:k?.options,registry:u})}return A?w.jsx(A,{"data-testid":Ir.uiComponent,...h,name:f,required:x,formData:l,readOnly:!!$||c,errorSchema:i,uiSchema:n,schema:r,fieldPathId:s,onBlur:a,onFocus:o,registry:u,...O}):null}function Mo(e){const{uiSchema:t}=e;let{layoutGridSchema:r}=e;const n=me(t);if(!r&&_a in n&&le(n[_a])&&(r=n[_a]),le(r)){if(sr.ROW in r)return w.jsx(Ly,{...e,layoutGridSchema:r});if(sr.COLUMN in r)return w.jsx(Uy,{...e,layoutGridSchema:r});if(sr.COLUMNS in r)return w.jsx(qy,{...e,layoutGridSchema:r});if(sr.CONDITION in r)return w.jsx(My,{...e,layoutGridSchema:r})}return w.jsx(Vy,{...e,gridSchema:r})}Mo.TEST_IDS=Ir;function zy(e){const{fieldPathId:t,title:r,schema:n,uiSchema:i,required:s,registry:a,name:o}=e,l=me(i,a.globalUiOptions),{title:c}=l,{title:u}=n,d=c||r||u||o;if(!d)return null;const h=be("TitleFieldTemplate",a,l);return w.jsx(h,{id:Ro(t),title:d,required:s,schema:n,uiSchema:i,registry:a})}function Ea(e,t,r){const n="!@#!@$@#$!@$#";return e.map(({schema:s})=>s).find(s=>{const a=s[Qe]?.[t];return he(a,cn,he(a,Et,n))===r})}function Ql(e,t,r,n,i){const s=t.map(l=>r.retrieveSchema(l,i));let a=e;ve in e?a={...e,[ve]:s}:Oe in e&&(a={...e,[Oe]:s});const o=qn(a,n);if(!o)throw new Error(`No enumOptions were computed from the schema ${JSON.stringify(a)}`);return o}function By(e){const{name:t,baseType:r,disabled:n=!1,formData:i,fieldPathId:s,onBlur:a,onChange:o,options:l,onFocus:c,registry:u,uiSchema:d,schema:h,autofocus:m,readonly:g,required:b,errorSchema:v,hideError:y=!1}=e,{widgets:f,schemaUtils:A,globalUiOptions:O}=u,[p,x]=G.useState(Ql(h,l,A,d,i)),$=s[Te],k=Kt(h),N=be("FieldErrorTemplate",u,l),I=be("FieldTemplate",u,l),U=Lt(h),q=Lt(l),M=d?Lt(d):"",L=i?Lt(i):"";G.useEffect(()=>{x(Ql(h,l,A,d,i))},[U,q,A,M,L]);const{widget:K=k?"radio":"select",title:B="",placeholder:Q="",optionsSchemaSelector:X=k,hideError:re,...E}=me(d);if(!X)throw new Error("No selector field provided for the LayoutMultiSchemaField");const _=he(i,X);let P=lr(p[0]?.schema,X);const C=Ea(p,X,_);P=P?.type?P:{...P,type:C?.type||r};const S=cr(P,K,f),j=re===void 0?y:!!re,R=v?.[pt]??[],D={...v};delete D[pt];const H=A.getDisplayLabel(h,d,O),T=V=>{if(n||g)return;const z=Ea(p,X,V),J=Ea(p,X,_);let Y=A.sanitizeDataForNewSchema(z,J,i);Y&&z&&(Y=A.getDefaultFormState(z,Y,"excludeObjectChildren")),Y&&rt(Y,X,V),o(Y,s.path,void 0,$)},W={enumOptions:p,...E},F=!j&&R.length>0?w.jsx(N,{fieldPathId:s,schema:h,errors:R,registry:u}):void 0;return w.jsx(I,{fieldPathId:s,id:$,schema:h,label:(B||h.title)??"",disabled:n||Array.isArray(p)&&p.length===0,uiSchema:d,required:b,readonly:!!g,registry:u,displayLabel:H,errors:F,onChange:o,onKeyRename:wa,onKeyRenameBlur:wa,onRemoveProperty:wa,children:w.jsx(S,{id:$,name:t,schema:h,label:(B||h.title)??"",disabled:n||Array.isArray(p)&&p.length===0,uiSchema:d,autofocus:m,readonly:g,required:b,registry:u,multiple:!1,rawErrors:R,hideError:j,hideLabel:!H,errorSchema:D,placeholder:Q,onChange:T,onBlur:a,onFocus:c,value:_,options:W,htmlName:s.name})})}function Xl(e){const{name:t,disabled:r=!1,errorSchema:n,formData:i,fieldPathId:s,onBlur:a,onChange:o,onFocus:l,options:c,readonly:u,registry:d,required:h=!1,schema:m,uiSchema:g}=e,{schemaUtils:b}=d,v=Lt(i??null),y=G.useMemo(()=>c.map(Z=>b.retrieveSchema(Z,i)),[c,b,v]),[f,A]=G.useState(()=>{const Z=Kt(m);return b.getClosestMatchingOption(i,y,0,Z)}),O=G.useRef(!1),p=G.useRef(i),x=G.useRef(s.$id);G.useEffect(()=>{const Z=p.current,te=x.current;if(p.current=i,x.current=s.$id,!Ae(i,Z)&&s.$id===te){if(O.current){O.current=!1;return}const ie=Kt(m),ae=b.getClosestMatchingOption(i,y,f,ie);ae!==f&&A(ae)}});const $=`${s.$id}${m.oneOf?"__oneof_select":"__anyof_select"}`,k=G.useCallback(Z=>{if(r||u)return;const te=Z!==void 0?parseInt(Z,10):-1;if(te===f)return;const ie=te>=0?y[te]:void 0,ae=f>=0?y[f]:void 0;let de=b.sanitizeDataForNewSchema(ie,ae,i);ie&&(de=b.getDefaultFormState(ie,de,"excludeObjectChildren")),A(te),O.current=!0,o(de,s.path,void 0,$)},[f,y,r,u,b,i,s,o,$]),{widgets:N,fields:I,translateString:U,globalUiOptions:q}=d,{SchemaField:M}=I,L=be("MultiSchemaFieldTemplate",d,q),K=pi(d,m,h,g),B=zn(i),{widget:Q="select",placeholder:X,autofocus:re,autocomplete:E,title:_=m.title,...P}=me(g,q),C=cr({type:"number"},Q,N),S=n?.[pt]??[],j={...n};delete j[pt];const R=b.getDisplayLabel(m,g,q),D=f>=0&&y[f]||null;let H;if(D){const{required:Z,type:te}=m,ie={};Z&&(ie.required=Z),te!==void 0&&!("type"in D)&&(ie.type=te),H=Object.keys(ie).length>0?gr(ie,D):D}let T=[];ve in m&&g&&ve in g?Array.isArray(g[ve])?T=g[ve]:console.warn(`uiSchema.oneOf is not an array for "${_||t}"`):Oe in m&&g&&Oe in g&&(Array.isArray(g[Oe])?T=g[Oe]:console.warn(`uiSchema.anyOf is not an array for "${_||t}"`));let W=g;f>=0&&T.length>f&&(W=T[f]);const F=_?Fe.TitleOptionPrefix:Fe.OptionPrefix,V=_?[_]:[],z=y.map((Z,te)=>{const{title:ie=Z.title}=me(T[te]);return{label:ie||U(F,V.concat(String(te+1))),value:te}}),J=!K||B?w.jsx(C,{id:$,name:`${t}${m.oneOf?"__oneof_select":"__anyof_select"}`,schema:{type:"number",default:0},onChange:k,onBlur:a,onFocus:l,disabled:r||z.length===0,multiple:!1,rawErrors:S,errorSchema:j,value:f>=0?f:void 0,options:{enumOptions:z,...P},registry:d,placeholder:X,autocomplete:E,autofocus:re,label:_??t,hideLabel:!R,readonly:u}):void 0,Y=H&&H.type!=="null"&&w.jsx(M,{...e,schema:H,uiSchema:W})||null;return w.jsx(L,{schema:m,registry:d,uiSchema:g,selector:J,optionSchemaField:Y})}function Ky(e){const{formData:t,onChange:r,fieldPathId:n}=e;return G.useEffect(()=>{t===void 0&&r(null,n.path)},[n,t,r]),null}const Hy=/\.([0-9]*0)*$/,Wy=/[0.]0*$/;function Gy(e){const{registry:t,onChange:r,formData:n,value:i}=e,[s,a]=G.useState(i),{StringField:o}=t.fields,l=xo();let c=n;const u=G.useCallback((h,m,g,b)=>{a(h);const v=typeof h=="string"?h.replace(l,"."):h,y=`${v}`.startsWith(".")?`0${v}`:v,f=typeof y=="string"&&Hy.exec(y)?dl(y.replace(Wy,"")):dl(y);r(f,m,g,b)},[r,l]);if(typeof s=="string"&&typeof c=="number"){const h=s.replace(l,"."),m=String(c).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),g=new RegExp(`^(${m})?\\.?0*$`);h.match(g)&&(c=s)}let d=c;if(typeof c=="number"&&l!=="."){const{schema:h,uiSchema:m}=e,{schemaUtils:g,widgets:b}=t,{defaultWidget:v}=qd(h,m,g,b),{widget:y=v,inputType:f}=me(m);y==="text"&&f!=="number"&&(d=String(c).replace(".",l))}return w.jsx(o,{...e,formData:d,onChange:u})}var $i;function Jy(e){if(!$i){if(typeof document>"u")return;$i=document.createElement("textarea")}var t=`&${e};`;$i.innerHTML=t;var r=$i.value;return r===t?void 0:r}var ne=32,se=9,Ur=13,ce=10,Me=96,ot=126,Be=91,br=94,Ee=62,Ht=35,to=37,xe=45,Vt=61,st=92,Xe=42,Je=95,Ve=60,Jd=64,Rt=93,xt=33,Hs=38,St=58,ro=70,dn=102,Ps=104,ln=119,Rn=116,no=112,Yd=115,Yy=160,Zy=12,Qy=44,Ns=59,Kn=63,zt=46,Ze=47,fn=39,hn=34,qr=43,ct=124,mn=123,Uo=125,Ft=40,Bt=41,Xy=78,eg=110,tg=79,rg=111,Zd=120,Qd=88,io=30,$e=48,_e=57,pe=65,ye=90,qe=97,He=122,Ws=128,Yt=32,ng={blockQuote:0,breakLine:1,breakThematic:2,codeBlock:3,codeInline:4,footnote:5,footnoteReference:6,frontmatter:7,gfmTask:8,heading:9,htmlBlock:10,htmlComment:11,htmlSelfClosing:12,image:13,link:14,orderedList:15,paragraph:16,ref:17,refCollection:18,table:19,text:20,textFormatted:21,unorderedList:22},ee=ng;function ig(e){if(!tc(e,"---"))return null;let t=3;for(;t=e.length||e[t]!==` -`)return null;t++;let r=!1;for(;t=e.length)break;let i=t;if(e[t]==="\r"&&t++,t=qe&&a<=He||a>=pe&&a<=ye||a>=$e&&a<=_e||a===Je){for(s++;s=qe&&a<=He||a>=pe&&a<=ye||a>=$e&&a<=_e||a===Je||a===xe||a===zt);)s++;s=i?r=!0:(a=e.charCodeAt(s),(a===ne||a===se)&&(r=!0)))}}}}return null}var sg=/&([a-zA-Z0-9]+|#[0-9]{1,7}|#x[0-9a-fA-F]{1,6});/gi,ag={class:"className",for:"htmlFor",allowfullscreen:"allowFullScreen",allowtransparency:"allowTransparency",autocomplete:"autoComplete",autofocus:"autoFocus",autoplay:"autoPlay",cellpadding:"cellPadding",cellspacing:"cellSpacing",charset:"charSet",classid:"classId",colspan:"colSpan",contenteditable:"contentEditable",contextmenu:"contextMenu",crossorigin:"crossOrigin",enctype:"encType",formaction:"formAction",formenctype:"formEncType",formmethod:"formMethod",formnovalidate:"formNoValidate",formtarget:"formTarget",frameborder:"frameBorder",hreflang:"hrefLang",inputmode:"inputMode",keyparams:"keyParams",keytype:"keyType",marginheight:"marginHeight",marginwidth:"marginWidth",maxlength:"maxLength",mediagroup:"mediaGroup",minlength:"minLength",novalidate:"noValidate",radiogroup:"radioGroup",readonly:"readOnly",rowspan:"rowSpan",spellcheck:"spellCheck",srcdoc:"srcDoc",srclang:"srcLang",srcset:"srcSet",tabindex:"tabIndex",usemap:"useMap",viewbox:"viewBox"},og={};function Xd(e){if(!e)return og;var t={};for(var r in e){var n=r.toLowerCase(),i=ag[n];if(i)t[i]=e[r];else{var s=r.indexOf(":");s===-1?t[r]=e[r]:t[r.slice(0,s)+r[s+1].toUpperCase()+r.slice(s+2)]=e[r]}}return t}var lg=/(\n|^[-*]\s|^#|^ {2,}|^-{2,}|^>\s|^<(div|p|h[1-6]|ul|ol|li|blockquote|pre|table|thead|tbody|tr|td|th|dl|dt|dd|hr|address|article|aside|details|dialog|figure|figcaption|footer|form|header|main|menu|nav|section|summary|textarea|fieldset|legend|center|dir|hgroup|marquee|search|output|template)\b)/i;function Rr(e){return e.indexOf("&")===-1?e:e.replace(sg,(t,r)=>{var n=Jy(r);if(n)return n;if(r[0]==="#"){var i=r[1]==="x"||r[1]==="X"?Number.parseInt(r.slice(2),16):Number.parseInt(r.slice(1),10);return i===0||i>=55296&&i<=57343||i>1114111?"�":i<=65535?String.fromCharCode(i):String.fromCharCode(55296+(i-65536>>10),56320+(i-65536&1023))}return t})}var ec=/(javascript|vbscript|data(?!:image)):/i;function pr(e){if(ec.test(e))return null;if(e.indexOf("%")===-1)return e;try{let t=decodeURIComponent(e).replace(/[^A-Za-z0-9/:]/g,"");if(ec.test(t))return null}catch{return null}return e}var vt={},$t,lt;for($t=[192,193,194,195,196,197,224,225,226,227,228,229,230,198],lt=0;lt<$t.length;lt++)vt[$t[lt]]="a";for(vt[231]=vt[199]="c",vt[240]=vt[208]="d",$t=[200,201,202,203,233,232,234,235],lt=0;lt<$t.length;lt++)vt[$t[lt]]="e";for($t=[207,239,206,238,205,237,204,236],lt=0;lt<$t.length;lt++)vt[$t[lt]]="i";for(vt[209]=vt[241]="n",$t=[248,216,339,338,213,245,212,244,211,243,210,242],lt=0;lt<$t.length;lt++)vt[$t[lt]]="o";for($t=[220,252,219,251,218,250,217,249],lt=0;lt<$t.length;lt++)vt[$t[lt]]="u";vt[376]=vt[255]=vt[221]=vt[253]="y";function pn(e){for(var t="",r=-1,n=e.length,i=0;i=qe&&s<=He||s>=$e&&s<=_e){r<0&&(r=i);continue}if(s>=pe&&s<=ye){r>=0&&(t+=e.slice(r,i),r=-1),t+=String.fromCharCode(s+Yt);continue}if(s===ne||s===xe){r>=0&&(t+=e.slice(r,i),r=-1),t+="-";continue}r>=0&&(t+=e.slice(r,i),r=-1);var a=vt[s];a&&(t+=a)}return r>=0&&(t+=e.slice(r)),t}function tc(e,t,r){return e.startsWith(t,r)}var rc=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr","circle","ellipse","line","path","polygon","polyline","rect","use","stop","animate","set"]);function yi(e){let t=e.toLowerCase();if(rc.has(t))return!0;let r=t.indexOf(":");return r!==-1?(t=t.slice(r+1),rc.has(t)):!1}var tn=1,nc=2,Nn=4,ic=8,cg=16,Gt=32,Ar=64,ug=(()=>{var e=new Uint8Array(128),t;for(e[se]=tn,e[ce]=tn|nc,e[Zy]=tn,e[Ur]=tn|nc,e[ne]=tn,t=xt;t<=Ze;t++)e[t]=Nn;for(t=St;t<=Jd;t++)e[t]=Nn;for(t=Be;t<=Me;t++)e[t]=Nn;for(t=mn;t<=ot;t++)e[t]=Nn;for(t=$e;t<=_e;t++)e[t]=cg;for(t=pe;t<=ye;t++)e[t]=ic;for(t=qe;t<=He;t++)e[t]=ic;return e})(),dg=/[\p{P}\p{S}]/u,fg=new RegExp("\\p{Zs}","u"),Yr=[];function hg(e){var t=e.indexOf("\r"),r=e.indexOf("\0");if(t===-1&&r===-1)return e;var n=e.length;Yr.length=0;var i=0,s=0;for(t===-1?s=r:r===-1?s=t:s=t\s+<").replace(/\n+/g," ").trim()}function pg(e,t,r){let n=r??e.length;for(;t0&&(e[t-1]===` -`||e[t-1]==="\r");)t--;return`${e.slice(0,t).replace(gg,"")} - -`}function Fn(e){if((e.type===ee.htmlSelfClosing||e.type===ee.htmlBlock)&&e.a)return[];if(e.type===ee.paragraph){var t=e.children;return t?t.flatMap(Fn):[]}return e.type===ee.text?e.text?.trim()?[e]:[]:e.type===ee.htmlBlock&&e.children?[{...e,children:e.children?.flatMap(Fn)}]:[e]}function tf(e){for(var t=0;t`,a=i.toLowerCase().indexOf(s);if(a!==-1){var o=i.slice(a+s.length).replace(/<\/[a-z][a-z0-9-]*\s*>/gi,"");o.trim()&&(n=!0)}}n||(r.c=!1)}"children"in e[t]&&e[t].children&&tf(e[t].children)}}function bg(e,t){for(var r=0;r0&&o.push({type:ee.paragraph,children:i.slice(0,s)});var l=[];if(s+1!(u.type===ee.htmlSelfClosing&&u.a));c.length>0&&(l=c)}return l=l.concat(e.slice(r+1)),{found:!0,beforeClose:o,afterClose:l}}}if((n.type===ee.htmlSelfClosing||n.type===ee.htmlBlock)&&n.a&&n.tag.toLowerCase()===t)return{found:!0,beforeClose:e.slice(0,r),afterClose:e.slice(r+1)}}return{found:!1,beforeClose:e,afterClose:[]}}function Sg(e){var t="";for(var r in e){var n=e[r];n===!0?t+=` ${r}`:n!==void 0&&n!=null&&n!==!1&&(t+=` ${r}="${String(n)}"`)}return t}function sc(e,t,r,n){var i;return t===void 0?i=Sg(r):i=t.length>0&&t.charCodeAt(0)>ne?` ${t}`:t,`<${e}${i}${n}`}function ac(e){var t=e.tag,r=e.type===ee.htmlSelfClosing,n=e,i=n.b,s=``;if(!r&&n.a)return{kind:"literal",literal:(n.h||s)+(n.e||"")};if(r){var a=e;return a.a?{kind:"literal",literal:a.h||s}:a.m?{kind:"literal",literal:a.m}:{kind:"literal",literal:sc(t,i,e.attrs," />")}}var o=sc(t,i,e.attrs,">"),l=n.children,c=l!=null&&l.length>0;if(n.c&&n.j!==void 0)return c?{kind:"sandwich",open:o,close:s}:{kind:"literal",literal:n.j};if(n.c&&!c)return{kind:"literal",literal:o+(n.e||"")+(n.h||s)};if(l!=null&&l.length>0){for(var u="",d=0;d0&&typeof o.at(-1)=="string"?o[o.length-1]=o.at(-1)+c:o.push(c)}return o}function kn(e){return e==null||e.tagfilter!==!1}function Cg(e,t,r,n){var i=t(e,r,n);return i===null?null:wg(i)}function Ag(e){var t=[];if(!e)return t;for(var r in e)r.charCodeAt(0)===94&&t.push({identifier:r,footnote:e[r].target});return t}function oc(e){for(var t=0,r=e.length;t=pe&&n<=ye)return e.toLowerCase();t++}return e}function so(e,t,r){if(t.indexOf(".")===-1){var n=e?.[t];if(n)return n;if(e){var i=oc(t);if(i!==t){var s=e[i];if(s)return s}}return r}for(var a=e,o=t.split("."),l=0,c=!1;l=123){t=!0;break}}if(!t)return e;for(var i="",r=0;r=$e&&s<=_e||s>=pe&&s<=ro||s>=qe&&s<=dn)&&(a>=$e&&a<=_e||a>=pe&&a<=ro||a>=qe&&a<=dn)){i+=e[r]+e[r+1]+e[r+2],r+=2;continue}}if(n>=55296&&n<=57343){if(n<=56319&&r+1=56320&&o<=57343){i+=encodeURI(e[r]+e[r+1]),r++;continue}}i+=e[r];continue}i+=encodeURI(e[r])}return i}function $g(...e){return e.filter(Boolean).join(" ")}var _g=new Set(["title","textarea","style","xmp","iframe","noembed","noframes","script","plaintext"]),Fs=/<(\/?)(title|textarea|style|xmp|iframe|noembed|noframes|script|plaintext)(\s|>|\/)/gi;function lc(e){return _g.has(e.toLowerCase())}function Eg(e){return Fs.lastIndex=0,Fs.test(e)}function cc(e){return Fs.lastIndex=0,e.replace(Fs,(t,r,n,i)=>`<${r}${n}${i}`)}function qo(e,t){var r=e||{},n=r.slugify,i;if(n){var s=n;i=a=>s(a,pn)}else i=pn;return{disableAutoLink:r.disableAutoLink,disableFrontmatter:r.disableFrontmatter,disableParsingRawHTML:r.disableParsingRawHTML,enforceAtxHeadings:r.enforceAtxHeadings,evalUnserializableExpressions:r.evalUnserializableExpressions,forceBlock:r.forceBlock,forceInline:t===void 0?r.forceInline:t,ignoreHTMLBlocks:r.ignoreHTMLBlocks,optimizeForStreaming:r.optimizeForStreaming,preserveFrontmatter:r.preserveFrontmatter,sanitizer:r.sanitizer||pr,slugify:i,tagfilter:kn(r)}}var jg=/^<([a-zA-Z][a-zA-Z0-9-]*)\s[^>]*>/,Og=/^<[A-Z]/,ao=["script","pre","style","textarea"],gi=new Set(ao),kg=/<(?:pre|script|style|textarea)\b/i,uc=/<(?:pre|script|style|textarea)\b/iy,ja=/^(\s{0,3}#[#\s]|\s{0,3}[-*+]\s|\s{0,3}\d+\.\s|\s{0,3}>\s|\s{0,3}```)/m,dc=/^<([a-z][^ >/\n\r]*) ?([^>]*?)>/im,rf=new Uint8Array(128);(()=>{for(var e=[Me,Xe,Je,ot,Vt,Be,xt,Ve,st,Hs,ce,Ps,ln,dn],t=0;t=i)return!1;e.charCodeAt(n)===ct&&n++;for(var s=0;n=i)break;if(e.charCodeAt(n)===ct&&s>0){for(var a=n+1;a=i)return!0}if(e.charCodeAt(n)===St&&n++,n>=i||e.charCodeAt(n)!==xe)return!1;for(;n0}var Fg=/[\u0000-\u001F\u007F]/g,Ig={action:1,background:1,cite:1,data:1,formaction:1,href:1,longdesc:1,poster:1,src:1,"xlink:href":1},Rg=/&#(x[0-9a-f]+|[0-9]+);?/gi;function Dg(e){return e.indexOf("&#")===-1?e:e.replace(Rg,(t,r)=>{var n=r.charCodeAt(0)===Zd||r.charCodeAt(0)===Qd?Number.parseInt(r.slice(1),16):Number.parseInt(r,10);return n>0&&n<=1114111?String.fromCodePoint(n):t})}function Tg(e,t,r){if(r&&t.charCodeAt(0)===mn)return!1;var n=e.charCodeAt(0),i=e.charCodeAt(1);if((n===rg||n===tg)&&(i===eg||i===Xy))return!(r&&t==="");var s=e.toLowerCase();if(s==="srcdoc")return!0;if(s==="style")return/url\s*\(\s*(javascript|vbscript|data:(?!image\/))/i.test(t);if(Ig[s]===1){var a=Dg(Rr(t));if(pr(a)===null)return!0;var o=a.replace(Fg,"");return o!==a&&pr(o)===null}return!1}function oo(e){return"<"+(e.f?"/":"")+e.tag+e.g+e.b+(e.n?e.r?" />":"/>":">")}function hc(e,t,r,n){for(var i=[],s=t,a=0;as){var l=e.slice(s,o).trim();l&&i.push(l)}s=n[a+1]}if(s=qe&&a<=He||a>=pe&&a<=ye))return null;for(;r=qe&&e.charCodeAt(r)<=He||e.charCodeAt(r)>=pe&&e.charCodeAt(r)<=ye||e.charCodeAt(r)>=$e&&e.charCodeAt(r)<=_e||e.charCodeAt(r)===xe);)r++;let o=e.slice(s,r);if(!o)return null;let l=o.charCodeAt(0),c=l>=pe&&l<=ye||o.indexOf("-")!==-1,u=r;for(;rm&&e.charCodeAt(r-1)===ne;let L=v?hc(e,m,r,v):e.slice(m,r);return{r:b,u:c,f:i,b:L,q:v!=null,n:!0,g:d,attrs:g,end:r+2,tag:o}}var y=r,f=e.charCodeAt(r);if(!(f>=qe&&f<=He||f>=pe&&f<=ye||f===Je||f===St))return null;for(r++;r=qe&&A<=He||A>=pe&&A<=ye||A>=$e&&A<=_e||A===Je||A===zt||A===St||A===xe)r++;else break}for(var O=e.slice(y,r),p=r;r=n)return null;if(x=e.slice(N,r),r++,r0;){var A=e.charCodeAt(r);A===mn?U++:A===Uo&&U--,r++}x=e.slice(N,r),$=r}else{for(var N=r;r=l){s=!1,n=o<0?i:o+1;continue}if(u<4){var d=e.charCodeAt(c);if(d===Me||d===ot){for(var h=d,m=0,g=c;g=3){var b=!0;if(h===Me){for(var v=g;v=m){for(;f=i||e.charCodeAt(f)===ce){n=f>=i?i:f+1;break}}}for(;y=i&&(n=i,a=!0);continue}}}}for(var x=c;x=4)break;s=!1}if(!s&&u<4&&x=3&&I>=l)}else s=!0;n=o<0?i:o+1}return a}function sf(e,t,r){let n=e.length;if(e.charCodeAt(t)!==Be)return null;let i=t+1n||e.charCodeAt(s-1)!==Rt)return null;let o=e.slice(t+1,s-1);if(o.length>999)return null;let l=xs(o);if(!l||s>=n||e.charCodeAt(s)!==St)return null;s++;let c=!1;for(;s=n||e.charCodeAt(s)!==Ee)return null;u=e.slice(d,s),s++;for(var h=e.indexOf(` -`,s),m=h<0?n:h,g=s;g=n||e.charCodeAt(q)===ce)&&(A=e.slice(I,N),O=!0,p=q0,i=0;i126||s>=pe&&s<=ye){n=!1;break}else r=!1}if(n&&!r)return e;var a=e.replace(/\s+/g," ").trim();return a.indexOf("ẞ")!==-1?a.replace(/\u1E9E/g,"ss").toLowerCase():a.toLowerCase()}function Lo(e){return e?@[\\\]^_`{|}~])/g,"$1")}var lo=null,co=-1,Cs=-1;function Ue(e,t){if(t>=co&&t<=Cs&&e===lo)return Cs;var r=e.indexOf(` -`,t),n=r<0?e.length:r;return lo=e,co=t,Cs=n,n}function ke(e,t){let r=Ue(e,t);return r=r}function Ug(e,t){if(!e)return e;var r=t.v||(t.v=Object.create(null)),n=r[e];if(n===void 0)return r[e]=0,e;for(var i=n+1,s=`${e}-${i}`;r[s]!==void 0;)i++,s=`${e}-${i}`;return r[e]=i,r[s]=0,s}function qg(e,t,r,n){let i=Ue(e,t);if(nt(e,t,i),De>3)return null;let s=t+Ie;if(e.charCodeAt(s)!==Ht)return null;let a=Lr(e,s,i,35);if(a<1||a>6||(s+=a,ss&&e.charCodeAt(o-1)===ne;)o--;for(var l=o;o>s&&e.charCodeAt(o-1)===Ht;)o--;if(os&&e.charCodeAt(o-1)===ne;)o--;else o=l;let c=e.slice(s,o),u=Tn(c,!1,r,n);return{node:{type:ee.heading,level:a,children:u,id:""},end:ke(e,i)}}function Lg(e,t,r){var n=e.charCodeAt(t);if(n!==Vt&&n!==xe)return!1;for(var i=t;i=r}function Dr(e,t){let r=Ue(e,t);if(nt(e,t,r),De>3)return null;let n=t+Ie,i=e.charCodeAt(n);if(i!==xe&&i!==Xe&&i!==Je)return null;let s=0;for(;n3)return null;let i=De,s=t+Ie,a=e.charCodeAt(s);if(a!==Me&&a!==ot)return null;let o=Lr(e,s,n,a);if(o<3)return null;s+=o;let l=fi(e,s,n),c=n;if(a===Me){for(let L=l;Ll&&(e.charCodeAt(c-1)===ne||e.charCodeAt(c-1)===se);)c--;let u=e.slice(l,c),d="",h="",m=u.indexOf(" ");m===-1?d=u:(d=u.slice(0,m),h=u.slice(m+1).trim()),d=Dn(d);var g;if(h){fc.lastIndex=0;for(var b;(b=fc.exec(h))!=null;)g||(g={}),g[b[1]]=b[2]===void 0?b[3]:b[2]}let v=ke(e,n),{length:y,length:f}=e;var A;a===yc&&o===gc?A=vc:(A=String.fromCharCode(a).repeat(o),yc=a,gc=o,vc=A);for(var O=v;O0&&$<4&&e.charCodeAt(x-1)===ne;)x--,$++;if($<=3&&(x===0||e.charCodeAt(x-1)===ce)){for(var k=p+o;kv&&e.charCodeAt(y-1)===ce?e.slice(v,y-1):e.slice(v,y);else{I="";for(var U=v;U0&&I.charCodeAt(I.length-1)===ce&&(I=I.slice(0,-1))}return{node:{type:ee.codeBlock,lang:d||void 0,text:I,infoString:h||void 0,attrs:g},end:f}}function bc(e,t,r){for(var n=0,i=t;i=4&&(n+=s,i=a);break}if(i!==a)break;continue}if(De<4)break;let m=0,g=0;var l=0;for(let b=i;b4&&(l=g+c-4),g+=c}else g++;m++}var u="";if(l>0)for(var d=0;d0&&n.charCodeAt(n.length-1)===ce;)n=n.slice(0,-1);return n?{node:{type:ee.codeBlock,lang:void 0,text:n,infoString:void 0,attrs:void 0},end:i}:null}function Bg(e,t,r,n){let i=Ue(e,t);if(nt(e,t,i),De>3)return null;let s=t+Ie;if(e.charCodeAt(s)!==Ee)return null;let a="",o=t,l,c=!1,u=!1,d=!1;for(;o0,o=ke(e,B)}else if(a&&!_t(e,o,B)&&u){if(De<4){var N=o+Ie,I=N=$e&&I<=_e){for(var U=N;U=$e&&e.charCodeAt(U)<=_e;)U++;if(U3)return null;var n=t+Ie;if(n>=r)return null;var i=e.charCodeAt(n),s=De,a=n,o=n;if(i===xe||i===Xe||i===qr){if(a=n+1,a=$e&&i<=_e){for(;o_e)break;o++}if(o>n&&o=r)return{ordered:i>=$e&&i<=_e,marker:i>=$e&&i<=_e?e[o]:e[n],start:i>=$e&&i<=_e?Number.parseInt(e.slice(n,o),10):void 0,contentStart:u,contentCol:d+1,markerCol:s,isEmpty:!0};for(;m=r,y=g-d;return v||y>4?(g=d+1,m=u+1,h=1):h===0&&(g=d+1,m=u,h=1),{ordered:i>=$e&&i<=_e,marker:i>=$e&&i<=_e?e[o]:e[n],start:i>=$e&&i<=_e?Number.parseInt(e.slice(n,o),10):void 0,contentStart:m,contentCol:g,markerCol:s,isEmpty:v}}var In=0;function Sc(e,t,r,n){var i=0,s=t;for(In=0;sn){In=i+o-n,s++,i=n;break}i+=o}else if(a===ne)i++;else break;s++}return s}function xc(e,t,r,n){var i=Ue(e,t),s=wr(e,t,i);if(!s)return null;var a=[],o=t,l=s.contentCol,c="",u=s.isEmpty,d=!1,h=!1;if(!s.isEmpty){for(var m=!1,g=s.contentStart;g0)for(var f=0;f0||N=l){var E=Sc(e,o,x,l);if(In>0){for(var _="",P=l,C=0;C=$e&&F<=_e&&wr(e,o,x)!=null;if(!V){c+=`${e.slice(W,x)} -`,o=ke(e,x);continue}}break}if(a.push({contentCol:l,raw:c,hasBlankAfter:d,isEmpty:u}),a.length===0)return null;var z=h;if(!z)for(var J=0;J=Ce&&Ye.slice(it).trim()===""&&(ge=!1),te=fe=0?de=!0:ie&&(ae=!0),te=fe=0){if(De>=Pe){te=fe=3){if(ae&&ie){z=!0;break}ge=!0,ue=Ne,Ce=Ct,ie=!0,te=fe0&&ut.charCodeAt(dt-1)===ce;)dt--;var ft=dt=3&&ft.charCodeAt(0)===Be){var Sr=ft[1];(Sr===" "||Sr==="x"||Sr==="X")&&ft.charCodeAt(2)===Rt&&(Br={type:ee.gfmTask,completed:Sr==="x"||Sr==="X"},ft=ft.slice(3))}var tt;if(At.isEmpty&&ft.trim()==="")tt=[];else if(z){var Kr=r.inList;r.inList=!0;var bi=r.i;r.i=bi||Ge!==a.length-1,tt=Tr(ft,r,n),r.i=bi,r.inList=Kr}else{var dr=r.inList;r.inList=!0;var Hr=r.i;if(r.i=Hr||Ge!==a.length-1,tt=Tr(ft,r,n),r.i=Hr,r.inList=dr,tt.length===1&&tt[0].type===ee.paragraph)tt=tt[0].children;else if(r.p){var xr=[];r.p.push({src:tt,dest:xr,unwrap:!0}),tt=xr}else{for(var er=[],jt=0;jt{let b=g.indexOf(":");if(b===-1)return;let v=g.slice(0,b).trim(),y=g.slice(b+1).trim();if(v&&y){if(/url\s*\(\s*(javascript|vbscript|data:(?!image\/))/i.test(y)){m=!0;return}let f=v.indexOf("-")===-1?v:v.replace(/-([a-z])/g,(A,O)=>O.toUpperCase());c[f]=y}}),!m&&Object.keys(c).length>0&&(n[a]=c)}else if((l==="href"||l==="src")&&r?.sanitizer){let c=r.sanitizer(o,t,l);c!=null&&(n[a]=c)}else if(o==="")n[a]=!0;else if(o.length>=2&&o.charCodeAt(0)===mn&&o.charCodeAt(o.length-1)===Uo){var i=o.slice(1,-1);if(i.length>0){var s=i.charCodeAt(0);if(s===Be||s===mn)try{n[a]=JSON.parse(i);continue}catch{}}if(i==="true"){n[a]=!0;continue}if(i==="false"){n[a]=!1;continue}if(r?.evalUnserializableExpressions)try{n[a]=(0,eval)(`(${i})`);continue}catch{}n[a]=i}else n[a]=o}return n}function kr(e,t,r){let n=t.length;if(n===0)return r;var i=t.charCodeAt(0),s=i>=pe&&i<=ye||i>=qe&&i<=He;if(!s){for(var a=String.fromCharCode(i),o=e.length-n,l=r;l<=o;){var c=e.indexOf(a,l);if(c===-1||c>o)return-1;for(var u=!0,d=1;d=pe&&h<=ye&&(h+=Yt),m>=pe&&m<=ye&&(m+=Yt),h!==m){u=!1;break}}if(u)return c;l=c+1}return-1}i>=pe&&i<=ye&&(i+=Yt);for(let b=r;b<=e.length-n;b++){var g=e.charCodeAt(b);if(g>=pe&&g<=ye&&(g+=Yt),g!==i)continue;let v=!0;for(let y=1;y=pe&&f<=ye&&(f+=Yt),A>=pe&&A<=ye&&(A+=Yt),f!==A){v=!1;break}}if(v)return b}return-1}function Kg(e,t,r){let n=t.length;var i=t.charCodeAt(0);i>=pe&&i<=ye&&(i+=Yt);for(let a=Math.min(r,e.length-n);a>=0;a--){var s=e.charCodeAt(a);if(s>=pe&&s<=ye&&(s+=Yt),s!==i)continue;let o=!0;for(let l=1;l=pe&&c<=ye&&(c+=Yt),u>=pe&&u<=ye&&(u+=Yt),c!==u){o=!1;break}}if(o)return a}return-1}var Rs=-1;function uo(e,t,r){let n=r.toLowerCase(),i=`<${n}`,s=`0;){let d=kr(e,i,o),h=kr(e,s,o);if(h===-1)return-1;if(d!==-1&&d3&&!r.inHTML)return null;var s=t+Ie;if(e.charCodeAt(s)!==Ve)return null;var a=e.indexOf(">",s+1);if(a!==-1&&a=1&&l<=5){var c=e.length;if(l===1){for(var u=e.length,d=0;d`,s);h>=0&&h",u);c=m>=0?ke(e,m+1):e.length}}else{var g=l===2?"-->":l===3?"?>":l===4?">":"]]>",b=e.indexOf(g,s);b>=0&&(c=ke(e,b+g.length))}var v=e.slice(s,c);if(l>=2)return{node:{type:ee.htmlComment,text:v,s:!1,raw:!0},end:c};var y="div",f=v.match(/^<\/?([a-zA-Z][a-zA-Z0-9-]*)/);f&&(y=f[1]);var A=ir(e,s),O={},p;A&&!A.f&&(O=nr(A.attrs,y,n),p=A.g+A.b);var x=[],$=y.toLowerCase(),k=`0&&L.charCodeAt(L.length-1)===ce;)L=L.slice(0,-1);L&&(q=Nt(L))}else if(A&&!A.f){var K=A.end-s;if(N===-1){for(var B=v;B.length>0&&B.charCodeAt(B.length-1)===ce;)B=B.slice(0,-1);U=Nt(B)}else{var Q=K;v.charCodeAt(Q)===ce&&Q++;for(var X=N;X>Q;){var re=v.charCodeAt(X-1);if(re!==ne&&re!==se&&re!==ce&&re!==Ur)break;X--}var E=v.slice(Q,X);E&&(q=Nt(E));for(var _=v.slice(N);_.length>0&&_.charCodeAt(_.length-1)===ce;)_=_.slice(0,-1);M=Nt(_),I=v.slice(K,N).trim()}}var P=A?A.f:!1;return{node:{type:ee.htmlBlock,tag:y,attrs:O,b:p,children:x,e:q,h:M,j:U,text:I,c:!0,a:P},end:c}}if(l===6||l===7){var C=pc(e,t),S=C0;){var ge=kr(z,`<${T}`,de),ue=kr(z,te,de);if(ue===-1)break;if(ge!==-1&&ge=2&&ft===Ve)){yt=!0;break}if(ut=!1,ft===Ve){var Br=e.charCodeAt(dt+1)|32;if((Br===no||Br===Yd||Br===Rn)&&(uc.lastIndex=dt,uc.test(e))){et=!0;break}}dt++}}if(Ct&&!yt&&!et){var Sr=Ue(e,Se);S=Sr,R=ke(e,Sr),z=e.slice(s,S),j=e.slice(s,S),J=oe-s,Y=Se-s,Z=!0}}}}var tt=D.b.indexOf(` -`)!==-1||D.g.indexOf(` -`)!==-1,Kr=!1;if(J!==-1){var bi=z.slice(Y).trim();Kr=bi.length===0}var dr=!1,Hr=S,xr=R;if(J!==-1){var er=s+Y,jt=Ue(e,er-1);if(er=2&&kt.charCodeAt(0)===ce&&kt.charCodeAt(kt.length-1)===ce&&!Go;Pf&&!Jo&&!Qs?Sn=[{type:ee.text,text:xn}]:kf||Qs?(r.inline=!1,Sn=Tr(kt,r,n)):(r.inline=!0,Sn=Tn(xn,!1,r,n))}r.inline=_f,r.inHTML=Ef,r.d=jf}}var Yo=!1;if(l===6&&J!==-1&&!r.inHTML&&!tt){var Nf=/<[a-zA-Z][^>]*>/.test(kt),Ff=kt.indexOf(` - -`)!==-1||ja.test(kt);Nf&&!Ff&&(Yo=!0)}var If=!Z&&(r.inHTML||l===7||tt||!Kr||Yo);if(If){var Hn,rr,Zo=!1;if(J!==-1&&dr){var Qo=!1;if(r.inHTML&&Y1&&Xs.charCodeAt(0)===Ve&&Xs.charCodeAt(1)!==Ze}rr=Qo?z.slice(D.end-s):kt,Zo=!0}else(l===7||r.inHTML)&&J!==-1?(rr=z.slice(D.end-s),rr.charCodeAt(0)===ce&&(rr=rr.slice(1))):dr?Hn=e.slice(s,Hr):tt?Hn=j:(rr=z.slice(D.end-s),rr.charCodeAt(0)===ce&&(rr=rr.slice(1)));var Xo=Hn!==void 0,ea=Nt(Hn===void 0?rr||"":Hn),el={type:ee.htmlBlock,tag:H,attrs:nr(D.attrs,H,n),b:D.g+D.b,children:Sn,e:Xo?void 0:ea,j:Xo?ea:void 0,text:ea,c:!0,a:!1};return Zo&&(el.x=!0),{node:el,end:xr}}var tl=Nt(kt);return{node:{type:ee.htmlBlock,tag:H,attrs:nr(D.attrs,H,n),b:D.g+D.b,children:Sn,e:Z?void 0:tl,text:tl,c:!1,a:!1},end:xr}}var xi=j.match(/^<(\/?)([a-zA-Z][a-zA-Z0-9-]*)/),Rf=xi?xi[2]:"div",ta=xi?xi[1]==="/":!1,ra,rl,nl,Ci="";if(ta){var na=j.indexOf(">");na===-1?ra=j:(ra=j.slice(0,na+1),Ci=j.slice(na+1),Ci&&(rl=Nt(Ci)))}else nl=Nt(j);return{node:{type:ee.htmlBlock,tag:Rf,attrs:{},children:[],e:rl,h:ra,j:nl,text:ta?Ci:j,c:!0,a:ta},end:R}}var gt=ir(e,s);if(!gt)return null;var Cr=gt.tag,ia=Cr.toLowerCase(),il=Cr.charCodeAt(0),sa=il>=pe&&il<=ye;if(!(sa||Is.has(ia)||gi.has(ia)||ia.includes("-")))return null;if(gt.f)return{node:{type:ee.htmlSelfClosing,tag:Cr,attrs:{},h:e.slice(s,gt.end),a:!0},end:gt.end};var Cn=uo(e,gt.end,Cr),Wn=[];if(Cn!==-1){var Df=Rs,Ai=e.slice(gt.end,Df),wi=Ai.trim();if(wi){var Tf=Ai.indexOf(` - -`)!==-1,Mf=ja.test(wi),Uf=dc.test(wi),{inline:qf,inHTML:Lf,d:Vf}=r;r.inHTML=!0,r.d=(r.d||0)+1,Tf||Mf||Uf?(r.inline=!1,Wn=Tr(Ai,r,n)):(r.inline=!0,Wn=Tn(wi,!1,r,n)),r.inline=qf,r.inHTML=Lf,r.d=Vf}var zf=Ue(e,Cn),Bf=e.slice(Cn,zf).trim(),sl=Bf?Cn:ke(e,Cn),al=sa?e.slice(s,Cn):e.slice(s,sl);return{node:{type:ee.htmlBlock,tag:Cr,attrs:nr(gt.attrs,Cr,n),b:gt.g+gt.b,children:Wn,j:Nt(al),text:sa?Ai:al,c:!0,a:!1},end:sl}}var Gn=pc(e,gt.end),Kf=Gn=pe&&i<=ye)return 4;if(e.slice(r+1,r+8)==="[CDATA[")return 5}for(var s=e.charCodeAt(r)===Ze,a=s?r+1:r,o=a;o=pe&&l<=ye||l>=qe&&l<=He||l>=$e&&l<=_e||l===xe)o++;else break}if(o===a)return 0;var c=e.slice(a,o);if(gi.has(c.toLowerCase())){if(s)return 0;var u=e.charCodeAt(o);return u===ne||u===se||u===Ee||u===ce||o>=n?1:0}if(Is.has(c.toLowerCase())){if(s){for(var d=o;dn&&(e.charCodeAt(i-1)===ne||e.charCodeAt(i-1)===se);)i--;nn&&e.charCodeAt(i-1)===ct&&(i-2{var y=v.indexOf("\\|")===-1?v:v.replace(/\\\|/g,"|");return y?Tn(y,!1,t,r):[]})}function Ac(e,t,r,n){let i=Ue(e,t);var s=e.indexOf("|",t);if(s<0||s>=i)return null;let a=ke(e,i);if(a>=e.length)return null;let o=Ue(e,a);if(!nf(e,a,o))return null;let l=e.slice(t,i),c=e.slice(a,o);for(var u=[],d=0,h=c.length;d=h||c.charCodeAt(d)===ct)break;var m=c.charCodeAt(d)===St;for(m&&d++;d=3)break}}v.push(Cc(k,r,n)),y=ke(e,$)}if(n.optimizeForStreaming&&v.length===0)return null;for(var p=b.length,x=0;xp&&(v[x].length=p);return{node:{type:ee.table,header:b,cells:v,align:u},end:y}}function Wg(e,t,r){var n=Ue(e,t);if(nt(e,t,n),De>3)return null;var i=t+Ie;if(e.charCodeAt(i)!==Be)return null;if(i+1=n||e.charCodeAt(t+1)!==br)return null;for(var i=t+2,s=i;i=n)return null;var a=`^${e.slice(s,i)}`.toLowerCase();if(i++,i>=n||e.charCodeAt(i)!==St)return null;for(i++;i=2&&!_t(e,c,u))l+=` -${e.slice(c,u)}`,c=ke(e,u);else if(_t(e,c,u)){var d=ke(e,u);if(d=2){l+=` -`,c=ke(e,u);continue}}break}else break}var m=r.refs;return m&&!m[a]&&(m[a]={target:l,title:void 0}),{node:{type:ee.footnote},end:c}}function Jg(e,t,r,n){let i=t,s=0,a=0,o=-1;for(;i=0?o:Ue(e,i);if(o=-1,_t(e,i,M))break;if(nt(e,i,M),De<4&&a>0&&!r.l){let K=e.charCodeAt(i+Ie);if(K===Vt||K===xe){let B=i+Ie;for(;B=M){s=K===Vt?1:2,i=ke(e,M);break}}}a=M;let L=ke(e,M);if(L=1&&u<=6&&(c>=K||e.charCodeAt(c)===ne||e.charCodeAt(c)===se)){i=L;break}}if(B===Me||B===ot){for(var d=L+Ie,h=0;d=3){i=L;break}}if(B===Ve){var m=L+Ie+1,g=m=pe&&e.charCodeAt(y)<=ye||e.charCodeAt(y)>=qe&&e.charCodeAt(y)<=He||e.charCodeAt(y)>=$e&&e.charCodeAt(y)<=_e||e.charCodeAt(y)===xe);)y++;y>v&&(b=Is.has(e.slice(v,y).toLowerCase()))}else if(!b){for(var f=m;f=pe&&e.charCodeAt(f)<=ye||e.charCodeAt(f)>=qe&&e.charCodeAt(f)<=He||e.charCodeAt(f)>=$e&&e.charCodeAt(f)<=_e||e.charCodeAt(f)===xe);)f++;if(f>m){var A=e.slice(m,f).toLowerCase();b=Is.has(A)||gi.has(A)}}if(b&&of(e,L,r,n)){i=L;break}}if(B===xe||B===Xe||B===qr){let Q=L+Ie+1;if(Q=$e&&B<=_e){let Q=L+Ie;for(;Q=$e&&e.charCodeAt(Q)<=_e;)Q++;if(Qt&&(e.charCodeAt($-1)===ce||e.charCodeAt($-1)===Ur||e.charCodeAt($-1)===ne||e.charCodeAt($-1)===se);)$--;for(var k=t;k<$&&(e.charCodeAt(k)===ne||e.charCodeAt(k)===se);)k++;if(k>=$)return null;for(var N=!1,I=k;I<$;I++)if(e.charCodeAt(I)===io){N=!0;break}var U=N?e.slice(k,$).replace(/\u001E/g,""):e.slice(k,$);if(!U)return null;let q=Tn(U,!0,r,n);return s?{node:{type:ee.heading,level:s,children:q,id:""},end:i}:{node:{type:ee.paragraph,children:q},end:i}}function Tn(e,t,r,n){var i=r.t;if(!i){var s=r.k;r.k=t;var a=ar(e,0,e.length,r,n);return r.k=s,a}var o=[];return i.push({dest:o,text:e,breaks:t,inline:r.inline,inAnchor:r.inAnchor,inHTML:r.inHTML,htmlDepth:r.d,inList:r.inList,inBlockQuote:r.inBlockQuote,noSetext:r.l,depth:r.o}),o}function Yg(e,t,r){if(e.charCodeAt(t)!==Me)return null;let n=Lr(e,t,r,96),i=t+n;for(;i=r)return null;let a=Lr(e,s,r,96);if(a===n){let o=e.slice(t+n,s);return o.indexOf(` -`)!==-1&&(o=o.replace(/\n/g," ")),o.length>0&&o[0]===" "&&o.at(-1)===" "&&o.trim().length>0&&(o=o.slice(1,-1)),{node:{type:ee.codeInline,text:o},end:s+a}}i=s+a}return null}function Vo(e,t,r){if(e.charCodeAt(t)!==Me)return t;let n=Lr(e,t,r,96),i=t+n;for(;i=r)return t;let a=Lr(e,s,r,96);if(a===n)return s+a;i=s+a}return t}function Zg(e,t,r){if(e.charCodeAt(t)!==Ve)return t;if(t+1",t+4);return c>=0?c+3:t}let n=t+1,i=n;for(;n=pe&&c<=ye||c>=qe&&c<=He||c>=$e&&c<=_e||c===xe)n++;else break}if(n===i)return t;let s=e.slice(i,n).toLowerCase(),a=!1;for(;n0;)if(e.charCodeAt(n)===Ve)if(n+1=pe&&e.charCodeAt(u)<=ye||e.charCodeAt(u)>=qe&&e.charCodeAt(u)<=He);)u++;if(e.slice(c,u).toLowerCase()===s){for(;u=pe&&e.charCodeAt(u)<=ye||e.charCodeAt(u)>=qe&&e.charCodeAt(u)<=He);)u++;e.slice(c,u).toLowerCase()===s&&l++,n++}else n++;return n}function Qg(e,t,r){let n=e.charCodeAt(t)===xt?t+1:t;if(e.charCodeAt(n)!==Be)return t;let i=1,s=n+1;for(;s0;){let o=e.charCodeAt(s);if(o===st&&s+1=r)return t;let a=e.charCodeAt(s);if(a===Ft){let o=1;for(s++;s0;){let l=e.charCodeAt(s);if(l===st&&s+10;){let l=e.charCodeAt(s);l===Be?o++:l===Rt&&o--,s++}return o===0?s:t}return t}function Xg(e,t,r,n,i){if(e.charCodeAt(t)!==ot||t+1>=r||e.charCodeAt(t+1)!==ot)return null;let s=t+2;for(;s+1s){s=o;continue}}if(a===ot&&e.charCodeAt(s+1)===ot){let o=e.slice(t+2,s),l=ar(o,0,o.length,n,i);return{node:{type:ee.textFormatted,tag:"del",children:l},end:s+2}}a===st&&s+1=r||e.charCodeAt(t+1)!==Vt)return null;let s=t+2;for(;s+1s){s=o;continue}}if(a===Vt&&e.charCodeAt(s+1)===Vt&&s>t+2){let o=e.slice(t+2,s),l=ar(o,0,o.length,n,i);return{node:{type:ee.textFormatted,tag:"mark",children:l},end:s+2}}a===st&&s+10?e.charCodeAt(t-1):32,a=t+i0?wc(s,e,t-1):!1,u=t+if;O--){var p=t[O];if(!(!p.active||p.ch!==b.ch||!p.canOpen)&&!((b.canOpen||p.canClose)&&(p.len+b.len)%3===0&&p.len%3!==0)){A=O;break}}if(A<0){h[y]=g-1,!b.canOpen&&(b.active=!1),g++;continue}var x=t[A],$=x.len>=2&&b.len>=2,k=$?2:1;x.len-=k,b.len-=k;var N=u[A],I=u[g],U=N.node,q=I.node;U.text=U.text.slice(0,U.text.length-k),q.text=q.text.slice(k);for(var M=[],L=N.next;L&&L!==I;)M.push(L.node),L=L.next;var K={type:ee.textFormatted,tag:$?"strong":"em",children:M},B={node:K,prev:N,next:I};N.next=B,I.prev=B;for(var Q=A+1;Q0&&e[E-1].type===ee.text){e[E-1].text+=C.text,_=_.next;continue}}e[E++]=P,_=_.next}e.length=E}}function Ei(e,t,r,n){return t(e,r,n)===null?null:e}var _c=0,fo=0,Ec=0,ho=0,jc=0,mo=0,Oa=0,Ut=0;function n0(){return Oa===2147483647&&(fo=0,ho=0,mo=0,As=0,Oa=0),++Oa}var ka=null,As=0,ji=[],Pa=256;function Oc(e,t,r,n,i){let s=e.charCodeAt(t)===xt,a=s?t+1:t;if(e.charCodeAt(a)!==Be||ho===Ut&&a>=Ec)return null;var o=As===Ut?ka:null,l=o===null?0:o[a];if(l<0)return null;var c=l;if(l===0){var u=e.indexOf("]",a+1);if(u<0||u>=r)return Ec=a,ho=Ut,null;c=a+1;var d=0;ji[d++]=a;for(var h=r-a>=Pa;c0;){var m=e.charCodeAt(c);if(m===st&&c+1c){c=g;continue}}if(m===Ve){var b=lf(e,c,r);if(b){c=b.end;continue}var v=Zg(e,c,r);if(v>c){c=v;continue}}if(m===Be)ji[d++]=c;else if(m===Rt){var y=ji[--d];o===null&&h&&c-a>=Pa&&(o=ka=new Int32Array(r),As=Ut),o!==null&&(o[y]=c+1)}c++}if(d>0){if(o===null&&h&&c-a>=Pa&&(o=ka=new Int32Array(r),As=Ut),o!==null)for(;d>0;)o[ji[--d]]=-1;return null}}var f=c-1,A=e.slice(a+1,f),O=c=r||e.charCodeAt(k)!==Ee)&&(x=!1),x&&($=e.slice(c,k),k++)}else if(x){var N=fo===Ut?_c:-1;if(N>=0&&c>=N)x=!1;else{for(var I=0,U=!1;k=r&&!U&&(N<0||c=r?x=!1:(M=e.slice(B,c),c++)}}if(x){for(;c=r||e.charCodeAt(c)!==Bt)&&(x=!1)}}if(x){if(c++,$=Rr(Dn($)),M!==void 0&&(M=Rr(Dn(M))),s){var Q=ar(A,0,A.length,n,i),X=Ds(Q);return{node:{type:ee.image,target:Ei($,i?.sanitizer||pr,"img","src"),alt:X,title:M},end:c}}var re=n.inAnchor;n.inAnchor=!0;var D=re?[{type:ee.text,text:A}]:ar(A,0,A.length,n,i);return n.inAnchor=re,!n.inAnchor&&po(D)?null:{node:{type:ee.link,target:Ei($,i?.sanitizer||pr,"a","href"),title:M,children:D},end:c}}c=f+1,p=!0}var E="",_=c;if(!p&&O===Be){var P=c+1;_=P;for(var C=!1;_=r)return null;var S=e.slice(P,_);if(S.trim())E=xs(S);else{if(mc(A))return null;E=xs(A)}_+=1}else{if(mc(A))return null;E=xs(A)}var j=n.refs?.[E];if(!j)return null;if(s)return{node:{type:ee.image,target:Ei(j.target,i?.sanitizer||pr,"img","src"),alt:Ds(ar(A,0,A.length,n,i)),title:j.title},end:_};var R=n.inAnchor;n.inAnchor=!0;var D=R?[{type:ee.text,text:A}]:ar(A,0,A.length,n,i);return n.inAnchor=R,!n.inAnchor&&po(D)?null:{node:{type:ee.link,target:Ei(j.target,i?.sanitizer||pr,"a","href"),title:j.title,children:D},end:_}}function lf(e,t,r){if(e.charCodeAt(t)!==Ve)return null;for(var n=t+1;n=r||e.charCodeAt(n)!==Ee)return null;var s=e.slice(t+1,n),a=s.match(/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^\x00-\x20]*)$/);return a?{node:{type:ee.link,target:s,title:void 0,children:[{type:ee.text,text:s}]},end:n+1}:s.indexOf("@")!==-1&&/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(s)?{node:{type:ee.link,target:`mailto:${s}`,title:void 0,children:[{type:ee.text,text:s}]},end:n+1}:null}function i0(e,t,r,n){if(e.charCodeAt(t)!==Be||t+1>=r||e.charCodeAt(t+1)!==br||mo===Ut&&t>=jc)return null;let i=t+2;for(;i=r)return jc=t,mo=Ut,null;if(e.charCodeAt(i)!==Rt)return null;let s=e.slice(t+2,i);return s?{node:{type:ee.footnoteReference,target:`#${pn(s)}`,text:s},end:i+1}:null}function s0(e,t,r,n){if(n.disableBareUrls)return null;var i="",s=!1,a=e.charCodeAt(t);if(a===Ps||a===72?t+8<=r&&e.charCodeAt(t+1)===Rn&&e.charCodeAt(t+2)===Rn&&e.charCodeAt(t+3)===no&&(e.charCodeAt(t+4)===Yd&&e.charCodeAt(t+5)===St&&e.charCodeAt(t+6)===Ze&&e.charCodeAt(t+7)===Ze?i="https://":e.charCodeAt(t+4)===St&&e.charCodeAt(t+5)===Ze&&e.charCodeAt(t+6)===Ze&&(i="http://")):a===dn||a===70?t+6<=r&&e.charCodeAt(t+1)===Rn&&e.charCodeAt(t+2)===no&&e.charCodeAt(t+3)===St&&e.charCodeAt(t+4)===Ze&&e.charCodeAt(t+5)===Ze&&(i="ftp://"):(a===ln||a===87)&&t+4<=r&&e.charCodeAt(t+1)===ln&&e.charCodeAt(t+2)===ln&&e.charCodeAt(t+3)===zt&&(i="www.",s=!0),!i)return null;let o=t+i.length;for(;ot+i.length;){let x=e.charCodeAt(h-1);if(x===zt||x===Qy||x===St||x===xt||x===Kn||x===Bt||x===Xe||x===Je||x===ot){if(x===Bt){if(l>=c)break;c--}h--}else if(x===Ns){for(var m=h-2;m>t&&(e.charCodeAt(m)>=pe&&e.charCodeAt(m)<=ye||e.charCodeAt(m)>=qe&&e.charCodeAt(m)<=He||e.charCodeAt(m)>=$e&&e.charCodeAt(m)<=_e);)m--;m>=t&&e.charCodeAt(m)===Hs?h=m:h--}else break}if(h<=t+i.length)return null;var g=t+(s?4:i.length),b=e.indexOf("/",g);if((b<0||b>h)&&(b=h),s&&e.indexOf(".",g)===-1)return null;for(var v=-1,y=-1,f=b-1;f>=g;f--)if(e.charCodeAt(f)===zt)if(v<0)v=f;else{y=f;break}for(var A=y>=0?y+1:g,f=A;f=pe&&a<=ye||a>=qe&&a<=He||a>=$e&&a<=_e||a===zt||a===xt||a===Ht||a===36||a===to||a===Hs||a===fn||a===Xe||a===qr||a===Ze||a===Vt||a===Kn||a===br||a===Je||a===Me||a===mn||a===ct||a===Uo||a===ot||a===xe)i++;else break}if(i===s||i>=r||e.charCodeAt(i)!==Jd)return null;i++;for(var o=i,l=-1,c=i;i=pe&&a<=ye||a>=qe&&a<=He||a>=$e&&a<=_e)i++;else if((a===xe||a===Je)&&i>o)i++;else if(a===zt){if(i===o)break;var u=e.charCodeAt(i-1);if(u===xe||u===Je||i-c>63)break;if(i+1=pe&&d<=ye||d>=qe&&d<=He||d>=$e&&d<=_e)l=i,c=i+1,i++;else break}else break}else break}if(i-c>63||l<0)return null;var h=e.charCodeAt(i-1);if(!(h>=pe&&h<=ye||h>=qe&&h<=He||h>=$e&&h<=_e)||i<=l+1)return null;for(var m=-1,g=l-1;g>=o;g--)if(e.charCodeAt(g)===zt){m=g;break}for(var b=m>=0?m+1:o,g=b;g=r)return-1;if(e.charCodeAt(n)===Ht){n++;var i=n=$e&&o<=_e||i&&(o>=pe&&o<=ro||o>=qe&&o<=dn);if(!l)break;n++}return n===s||n-s>a?-1:n=pe&&u<=ye||u>=qe&&u<=He||u>=$e&&u<=_e){n++;continue}break}return n===c?-1:n=r)return null;var a=e.charCodeAt(s);if(a===xt&&s+1",o);return l!==-1&&l<=r-3?{node:{type:ee.htmlComment,text:e.slice(t+4,l),s:!1},end:l+3}:null}if(a===Kn){var c=e.indexOf("?>",s+1);return c!==-1&&c",s+8);return d!==-1&&d=pe&&u<=ye){var h=e.indexOf(">",s+2);return h!==-1&&h=r)return null;var g=e.charCodeAt(m);if(!(g>=pe&&g<=ye||g>=qe&&g<=He))return null;for(m++;m=pe&&b<=ye||b>=qe&&b<=He||b>=$e&&b<=_e||b===xe)m++;else break}for(;m=pe&&a<=ye||a>=qe&&a<=He))return null;var y=ir(e,t);if(!y)return null;var f=y.tag,A=f.toLowerCase(),O=y.n;if(O||yi(f))return{node:{type:ee.htmlSelfClosing,tag:f,attrs:nr(y.attrs,f,i),m:y.q?oo(y):e.slice(t,y.end),a:!1},end:y.end};var p=gi.has(A),x=uo(e.slice(0,r),y.end,f);if(x===-1)return{node:{type:ee.htmlSelfClosing,tag:f,attrs:nr(y.attrs,f,i),m:y.q?oo(y):e.slice(t,y.end),a:!1},end:y.end};var $=Kg(e,`c0)return oi--,[{type:ee.text,text:e.slice(t,r)}];var s=Ut;Ut=n0();let a=n;if(i.optimizeForStreaming){let Se=function(Ge,At){for(var ut=1,dt=At+1;dty){y=A-1;continue}}f===Xe?y+1=0&&O.push([v,2]),c%2===1&&g>=0&&O.push([g,2]),u%2===1&&b>=0&&O.push([b,1]),o%2===1&&h>=0&&O.push([h,2]),l%2===1&&m>=0&&O.push([m,1]),O.sort((Ge,At)=>At[0]-Ge[0]);for(var p=0;p0&&oe.charCodeAt(M-1)===xt,B=K?M-1:M,Q=Se(oe,M);if(Q===-1)N=B,q=K,I=M+1,U=oe.length;else{var X=Q+1;if(X>=oe.length)N=B,q=K,I=M+1,U=Q;else if(oe.charCodeAt(X)===Ft){var re=oe.indexOf(")",X+1);re===-1?(N=B,q=K,I=M+1,U=Q,M=oe.length):M=re}else if(oe.charCodeAt(X)===Be){var E=oe.indexOf("]",X+1);E===-1?(N=B,q=K,I=M+1,U=Q,M=oe.length):M=E}else M=Q}}}if(N>=0){var _=q?"":oe.slice(I,U);oe=oe.slice(0,N)+_,k=!0}}let yt=oe.match(/<([A-Z][A-Za-z0-9]*)(?:\s[^>]*)?>([^<]*)$/);if(yt&&yt.index!==void 0){var P=yt[0].length-yt[2].length,C=P>=2&&yt[0].charCodeAt(P-2)===Ze;if(!C){for(var S=!1,j=0,R=0;R=r&&(F=-1);tT)&&(D.push(Zr(W+e.slice(T,t))),W="");var J=e.slice(t,t+z.len),Y=Zr(J);H.push({idx:D.length,ch:Se,len:z.len,canOpen:z.canOpen,canClose:z.canClose,active:!0}),D.push(Y),t+=z.len,T=t;continue}t+=z.len-1}}else if(Se===ot)oe=Xg(e,t,r,a,i);else if(Se===Vt)oe=e0(e,t,r,a,i);else if(Se===Be)t+1=0&&F-t<=64&&!a.inAnchor&&!i.disableAutoLink&&!i.disableBareUrls&&(Se>=pe&&Se<=ye||Se>=qe&&Se<=He||Se>=$e&&Se<=_e)&&(oe=a0(e,t,r,i),!oe&&t>=F&&(F=e.indexOf("@",t+1),F>=r&&(F=-1))),Se===ce&&a.k){var de=!1,ge=0;if(t>T&&e.charCodeAt(t-1)===st)de=!0,ge=1;else{for(var ue=0,Ce=t-1;Ce>=T&&e.charCodeAt(Ce)===ne;)ue++,Ce--;ue>=2&&(de=!0,ge=ue)}if(de){for((W||t-ge>T)&&(D.push(Zr(W+e.slice(T,t-ge))),W=""),D.push({type:ee.breakLine}),t++;tT&&e.charCodeAt(t-1)===ne,fe=t+1T&&e.charCodeAt(Ye-1)===ne;)Ye--;for(W+=`${e.slice(T,Ye)} -`,t++;tT)&&(D.push(Zr(W+e.slice(T,t))),W=""),D.push(oe.node),t=oe.end,T=t;else{if(Se===st&&t+1T)&&(D.push(Zr(W+e.slice(T,t))),W=""),D.push(Zr(e[t+1])),t+=2,T=t;continue}}if(t++,F<0||F-t>64)for(;t=0&&F-t<=64);){var it=e.charCodeAt(t);if(itT)&&(D.push(Zr(W+e.slice(T,r))),W=""),H.length>0&&r0(D,H),Ut=s,oi--,D}var u0=500;function Tr(e,t,r){var n=t.o||0;if(n>u0)return[{type:ee.text,text:e}];if(t.o=n+1,r.optimizeForStreaming&&!(t.i||t.w)){for(var i=e.length;i>0&&e.charCodeAt(i-1)===ce;)i--;for(var s=i;s>0&&e.charCodeAt(s-1)!==ce;)s--;if(i>s&&e.charCodeAt(s)===ct){for(var a=!1,o=s+1;o0;){for(var g=m;g>0&&e.charCodeAt(g-1)!==ce;)g--;if(e.charCodeAt(g)!==ct)break;h=g;for(var b=!0,v=!1,y=g;y0?e.slice(0,s).trimEnd():e.slice(0,h).trimEnd()}for(var A=-1,O=-1,p=-1,x=!1,$=e.length-1;$>=0;$--)if(e.charCodeAt($)===Ve){for(var k=$+1=pe&&k<=ye||k>=qe&&k<=He,I=k===Ze&&$+2=pe&&e.charCodeAt($+2)<=ye||e.charCodeAt($+2)>=qe&&e.charCodeAt($+2)<=He),U=k===xt||k===Kn,q=e.length;q>$+1&&e.charCodeAt(q-1)===ce;)q--;var M=$+1>=q;if(N||I||U||M){var L=$+1;if((I||N)&&(L=$+2),N||I)for(;L=pe&&K<=ye||K>=qe&&K<=He||K>=$e&&K<=_e)L++;else break}for(var B=N||I?L:$+2;B=e.length)A=$,x=!0;else if((N||I)&&e.charCodeAt(B-1)!==Ze){for(var Q=!1,X=B+1;X=0){for(var re=0,E=0;E0&&e.charCodeAt(P-1)===ce;)P--;if(P>0){for(var C=P;C>0&&e.charCodeAt(C-1)!==ce;)C--;for(var S=C,j=0;S0&&S0&&e.charCodeAt(D-1)!==ce;)D--;_t(e,D,R)||(e=e.slice(0,C).trimEnd())}}var H=e.length;if(H>0){for(var T=e.lastIndexOf(` -`),W=T===-1?0:T+1,F=H,V=W,z=0;V=F||e.charCodeAt(Z)===ne||e.charCodeAt(Z)===se){for(var te=Z;te=F&&(Y=!0)}}else if(J>=$e&&J<=_e){for(var ie=V;ie=$e&&e.charCodeAt(ie)<=_e;)ie++;if(ie=F||e.charCodeAt(ae)===ne||e.charCodeAt(ae)===se){for(var de=ae;de=F&&(Y=!0)}}}Y&&(e=e.slice(0,W).trimEnd())}}}if(t.inline)return ar(e,0,e.length,t,r);let ge=[],ue=0,Ce=e.length;if(ue===0&&!r.disableFrontmatter&&e.startsWith("---")){let Ne=ig(e);if(Ne?.hasValidYaml){if(r.preserveFrontmatter!==!1){let Ct=e.slice(0,Ne.endPos).trimEnd();ge.push({type:ee.frontmatter,text:Ct})}ue=Ne.endPos}}for(;ue=Ce)break;var Ye=e.charCodeAt(ue)===io;nt(e,ue,fe);let Ne=null;if(lo=e,co=ue,Cs=fe,!Ye&&De>=4&&!t.inHTML)Ne=zg(e,ue);else if(!Ye){let Ct=ue+Ie,et=e.charCodeAt(Ct);et===Ht?Ne=qg(e,ue,t,r):et===Ee?Ne=Bg(e,ue,t,r):et===Me||et===ot?Ne=Vg(e,ue):et===xe||et===Xe||et===Je?(Ne=Dr(e,ue),!Ne&&(Ne=xc(e,ue,t,r))):et===qr||et>=$e&&et<=_e?Ne=xc(e,ue,t,r):et===Ve?Ne=of(e,ue,t,r):et===ct?Ne=Ac(e,ue,t,r):et===Be&&(Ne=Wg(e,ue,t))}if(!Ne){for(var it=!1,Se=ue;Se"u"?void 0:G.createContext(void 0);function Pc(e,t,r,n,i,s,a,o,l){switch(e.type){case ee.blockQuote:{let y={key:r.key};return e.alert&&(y.className=`markdown-alert-${s(e.alert.toLowerCase(),pn)}`,e.children.unshift(yg(e.alert))),n("blockquote",y,t(e.children,r))}case ee.breakLine:return n("br",{key:r.key});case ee.breakThematic:return n("hr",{key:r.key});case ee.frontmatter:return o.preserveFrontmatter?n("pre",{key:r.key},e.text):null;case ee.codeBlock:{let y=e.lang?Rr(e.lang):"";var c=e.attrs?Xd(e.attrs):{};return c.className=y?`language-${y} lang-${y}`:"",n("pre",{key:r.key},n("code",c,e.text))}case ee.codeInline:return n("code",{key:r.key},e.text);case ee.footnoteReference:return n("a",{key:r.key,href:i(e.target,"a","href")||void 0},n("sup",null,e.text));case ee.gfmTask:return n("input",{checked:e.completed,key:r.key,readOnly:!0,type:"checkbox"});case ee.heading:return n(`h${e.level}`,{id:e.id,key:r.key},t(e.children,r));case ee.htmlBlock:{let y=e;if(kn(o)&&lc(y.tag)){var u=ac(y);return u.kind==="literal"?n("span",{key:r.key},u.literal):n("span",{key:r.key},...xg(u.open,y.children?t(y.children,r):null,u.close))}let f=y.j,A=f!==void 0,O=A?f:y.a?y.e||"":(y.e||"")+(y.h||"");if(O&&y.c){let p=y.tag.toLowerCase(),x=Pg(p),$=y.children,k=$!=null&&$.length>0;if(x){let K=A?f:y.e||"",B=kn(o)?cc(K):K;if(/<[a-z][^>]{0,100}>/i.test(O)){var d=Dt(r.key,e.attrs);return d.dangerouslySetInnerHTML={__html:B},l(e.tag,d)}return l(e.tag,Dt(r.key,e.attrs),B)}let N=new RegExp(`^<${y.tag}(\\s|>)`,"i");if(k&&!N.test(O)&&kn(o)&&Eg(O))return l(e.tag,Dt(r.key,e.attrs),t($,r));if(Ng(O)){let K=kn(o)?cc(O):O;var h=Dt(r.key,e.attrs);return h.dangerouslySetInnerHTML={__html:K},l(e.tag,h)}let I=qo({slugify:o.slugify,sanitizer:i,tagfilter:!0}),U=mg(O);if(new RegExp(`^<${y.tag}(\\s[^>]*)?>(\\s*)?$`,"i").test(U))return y.children&&y.children.length>0?l(e.tag,Dt(r.key,e.attrs),t(y.children,r)):l(e.tag,Dt(r.key,e.attrs));let q=zo(U,{inline:!1,refs:a,inHTML:!1},I);tf(q);let M=y.tag.toLowerCase(),L=A;if(L&&k)return l(e.tag,Dt(r.key,e.attrs),t($,r));if(L)return t(q.flatMap(Fn),r);var m=bg(q,M);if(m.found&&m.afterClose.length>0){var g=m.beforeClose.flatMap(Fn),b=m.afterClose.flatMap(Fn);return vo(G.Fragment,{children:[l(e.tag,Dt(r.key,e.attrs),t(g,r)),t(b,r)]},r.key)}return l(e.tag,Dt(r.key,e.attrs),t(q.flatMap(Fn),r))}return yi(e.tag)?l(e.tag,Dt(r.key,e.attrs)):l(e.tag,Dt(r.key,e.attrs),e.children?t(e.children,r):"")}case ee.htmlSelfClosing:{let y=e;if(kn(o)&&lc(y.tag)){var v=ac(y);return n("span",{key:r.key},v.kind==="literal"?v.literal:v.open+(v.close||""))}return l(e.tag,Dt(r.key,e.attrs))}case ee.image:{let y=e.target===null?null:i(e.target,"img","src");return n("img",{key:r.key,alt:e.alt&&e.alt.length>0?e.alt:void 0,title:e.title||void 0,src:y||void 0})}case ee.link:{let y={key:r.key};if(e.target!=null){let f=Cg(e.target,i,"a","href");f!=null&&(y.href=f)}return e.title&&(y.title=e.title),n("a",y,t(e.children,r))}case ee.table:{let y=e;return n("table",{key:r.key},n("thead",{key:"thead"},n("tr",null,y.header.map(function(f,A){return n("th",{key:A,style:y.align[A]===null?{}:{textAlign:y.align[A]}},t(f,r))}))),y.cells.length>0&&n("tbody",{key:"tbody"},y.cells.map(function(f,A){return n("tr",{key:A},f.map(function(O,p){return n("td",{key:p,style:y.align[p]===null?{}:{textAlign:y.align[p]}},t(O,r))}))})))}case ee.text:return e.text;case ee.textFormatted:return n(e.tag,{key:r.key},t(e.children,r));case ee.orderedList:case ee.unorderedList:{let y=e.type===ee.orderedList?"ol":"ul";return n(y,{key:r.key,start:e.type===ee.orderedList?e.start:void 0},e.items.map(function(f,A){return n("li",{key:A},t(f,r))}))}case ee.paragraph:return n("p",{key:r.key},t(e.children,r));case ee.ref:return null;default:return null}}var f0=(e,t,r,n,i,s,a)=>{var o=c=>c.map(u=>"text"in u?u.text:""),l=(c,u={})=>{var d=Array.isArray(c)?c:[c],h=(u.renderDepth||0)+1;if(h>2500)return o(d);u.renderDepth=h;for(var m=u.key,g=[],b=!1,v=0;v{let r=so(t,e,void 0);return r?typeof r=="function"||typeof r=="object"&&"render"in r?r:so(t,`${e}.component`,e):e};function m0(e,t){let r={...t||{}};r.overrides=r.overrides||{};let n=r.slugify||pn,i=r.sanitizer||pr,s=r.createElement,a=ef(r.overrides),o=A=>bo(A,{...r,wrapper:null});function l(A){for(var O in A){var p=A[O];if(typeof p=="string"&&p.length>0&&p.charCodeAt(0)===Ve&&(jg.test(p)||Og.test(p)||d0(p,0))){var x=o(p.trim());A[O]=O==="innerHTML"&&Array.isArray(x)?x[0]:x}}}function c(A,O,...p){var x=O||{},$=A;if(a){var k=so(r.overrides,`${A}.props`,{});$=h0(A,r.overrides),x={...x,...k,className:$g(x.className,k.className)||void 0}}if(!s){var N=x.key;return N!=null&&delete x.key,p.length===1?x.children=p[0]:p.length>1&&(x.children=p),vo($,x,N)}return s($,x,...p)}function u(A,O,...p){return O&&l(O),c(A,O,...p)}let d=qo(r,r.forceInline),h=e[0]&&e[0].type===ee.refCollection?e[0].refs:Object.create(null),m=f0(r.renderRule,c,i,n,h,r,u),g=m(e,{inline:r.forceInline,refs:h}),b=Ag(h);if(b.length>0&&g.push(c("footer",{key:"footer"},b.map(function(A){let O=A.identifier.charCodeAt(0)===br?A.identifier.slice(1):A.identifier,p=zo(A.footnote,{inline:!0,refs:h},d);return c("div",{id:n(O,pn),key:A.identifier},`${O}: `,m(p,{inline:!0,refs:h}))}))),r.wrapper===null)return g;let v=r.wrapper||(r.forceInline?"span":"div"),y;if(g.length>1||r.forceWrapper)y=g;else return g.length===1?g[0]:null;var f=r.wrapperProps?{...r.wrapperProps}:{};return f.children=y,vo(v,f,"outer")}function bo(e="",t={}){let r={...t||{}};r.overrides=r.overrides||{},r.slugify,r.sanitizer;function n(s){let a=r.forceInline||!(r.forceBlock||lg.test(s)),o=qo(r,a),l=a?s:vg(s),c=zo(l,{inline:a,refs:i},o);return m0(c,{...r,forceInline:a})}let i=Object.create(null);return n(e)}function p0(e){let t=G.useRef(e),r=t.current;if(r!==e){var n=!0,i=0;for(var s in e)if(i++,!Object.is(r[s],e[s])){n=!1;break}if(n){var a=0;for(var o in r)a++;n=a===i}n||(t.current=e)}return t.current}var vi=({children:e,options:t,...r})=>{if(!(typeof G.useContext<"u")){let o={...t,overrides:{...t?.overrides},wrapperProps:{...t?.wrapperProps,...r}};return bo(e??"",o)}let n=kc?G.useContext(kc):void 0,i=p0(r),s=G.useMemo(()=>({...n,...t,overrides:{...n?.overrides,...t?.overrides},wrapperProps:{...n?.wrapperProps,...t?.wrapperProps,...i}}),[n,t,i]),a=e??"";return G.useMemo(()=>bo(a,s),[a,s])};const cf=Symbol("remove-this-key"),Nc=Symbol("reset");function y0(e,t){return Array.isArray(e.required)&&e.required.includes(t)}function g0(e,t){switch(t){case"array":return[];case"boolean":return!1;case"null":return null;case"number":return 0;case"object":return{};default:return e(Fe.NewStringDefault)}}function uf(e){return!!e?.[sn]}function Fc(e){return Object.keys(e).filter(t=>uf(e[t]))}function v0(e){const{fieldPathId:t,schema:r,registry:n,uiSchema:i,errorSchema:s,formData:a,onChange:o,onBlur:l,onFocus:c,disabled:u,readonly:d,required:h,hideError:m,propertyName:g,handleKeyRename:b,handleRemoveProperty:v,addedByAdditionalProperties:y}=e,[f,A]=G.useState(!1),{globalFormOptions:O,fields:p}=n,{SchemaField:x}=p,$=Bn(Qt(g,O,t.path)),k=G.useCallback((q,M,L,K)=>{let B=q;q===void 0&&y&&Ae(M,$.path)&&(B=""),o(B,M,L,K)},[o,y,$]),N=G.useCallback(q=>{g!==q&&A(!0),b(g,q)},[g,b]),I=G.useCallback(q=>{const{target:{value:M}}=q;N(M)},[N]),U=G.useCallback(()=>{v(g)},[g,v]);return w.jsx(x,{name:g,required:h,schema:r,uiSchema:i,errorSchema:s,fieldPathId:$,formData:a,wasPropertyKeyModified:f,onKeyRename:N,onKeyRenameBlur:I,onRemoveProperty:U,onChange:k,onBlur:l,onFocus:c,registry:n,disabled:u,readonly:d,hideError:m})}const b0=G.memo(v0);function S0(e){const{schema:t,uiSchema:r={},formData:n,errorSchema:i,fieldPathId:s,name:a,required:o=!1,disabled:l,readonly:c,hideError:u,onBlur:d,onFocus:h,onChange:m,registry:g,title:b}=e,{fields:v,schemaUtils:y,translateString:f,globalUiOptions:A}=g,{OptionalDataControlsField:O}=v,p=G.useRef(n);p.current=n;const x=G.useMemo(()=>y.retrieveSchema(t,n,!0),[y,t,n]),$=G.useMemo(()=>me(r,A),[r,A]),k=G.useMemo(()=>x.properties??{},[x.properties]),N=e.childFieldPathId??s,I=G.useRef({previousKey:"",currentKey:void 0}),[U,q]=G.useState(()=>Fc(k)),M=G.useMemo(()=>{const D=new Set(Fc(k));return Object.keys(k).filter(H=>!D.has(H))},[k]),L=$.title??x.title??b??a,K=$.description??x.description,B=pi(g,x,o,r),Q=zn(n);let X=[];const re=G.useCallback((D,H)=>{const{duplicateKeySuffixSeparator:T="-"}=me(r,A);let W=0,F=D;for(;bt(H,F);)W+=1,F=`${D}${T}${W}`;return F},[r,A]),E=G.useCallback(()=>{if(!(x.additionalProperties||x.patternProperties))return;const D={...n},H=re("newKey",D);if(x.patternProperties)rt(D,H,null);else{let T,W,F;if(le(x.additionalProperties)){T=x.additionalProperties.type,W=x.additionalProperties.const,F=x.additionalProperties.default;let z=x.additionalProperties;Ke in z&&(z=y.retrieveSchema({[Ke]:z[Ke]},n),T=z.type,W=z.const,F=y.getDefaultFormState(z,F)),!T&&(Oe in z||ve in z)&&(T="object")}const V=W??F??g0(f,T);rt(D,H,V)}I.current.previousKey===H&&(I.current.currentKey=H,I.current.previousKey=re(H,D)),q(T=>[...T,H]),m(D,N.path)},[n,m,f,y,N,re,x]),_=G.useCallback((D,H)=>{if(D!==H){const T=p.current,W=re(H,T),F={...T},V={[D]:W},z=Object.keys(F).map(Y=>({[Object.hasOwn(V,Y)?V[Y]:Y]:F[Y]})),J=Object.assign({},...z);p.current=J,D!==I.current.currentKey&&(I.current.previousKey=D),I.current.currentKey=W,q(Y=>Y.map(Z=>Z===D?W:Z)),m(J,N.path)}},[m,N,re]),P=G.useCallback(D=>{q(H=>H.filter(T=>T!==D)),m(cf,[...N.path,D])},[m,N]),C=G.useCallback(D=>I.current.currentKey===D?I.current.previousKey:D,[]);if(!B||Q)try{const D=new Set(M),H=U.filter(T=>Object.hasOwn(k,T)&&!D.has(T));X=Xp([...M,...H],$.order)}catch(D){return w.jsxs("div",{children:[w.jsx("p",{className:"rjsf-config-error",style:{color:"red"},children:w.jsx(vi,{options:{disableParsingRawHTML:!0},children:f(Fe.InvalidObjectField,[a||"root",D.message])})}),w.jsx("pre",{children:JSON.stringify(x)})]})}const S=be("ObjectFieldTemplate",g,$),j=B?w.jsx(O,{...e,fieldPathId:N,schema:x}):void 0,R={title:$.label===!1?"":L,description:$.label===!1?void 0:K,properties:X.map(D=>{const H=uf(x.properties?.[D]),T=H?r.additionalProperties:r[D],W=me(T).widget==="hidden";return{content:w.jsx(b0,{propertyName:D,required:y0(x,D),schema:lr(x,D),uiSchema:T,errorSchema:he(i,D),fieldPathId:N,formData:he(n,D),handleKeyRename:_,handleRemoveProperty:P,addedByAdditionalProperties:H,onChange:m,onBlur:d,onFocus:h,registry:g,disabled:l,readonly:c,hideError:u},C(D)),name:D,readonly:c,disabled:l,required:o,hidden:W}}),readonly:c,disabled:l,required:o,fieldPathId:s,uiSchema:r,errorSchema:i,schema:x,formData:n,registry:g,optionalDataControl:j,className:B?"rjsf-optional-object-field":void 0};return w.jsx(S,{...R,onAddProperty:E})}function x0(e){const{schema:t,uiSchema:r={},formData:n,disabled:i=!1,readonly:s=!1,onChange:a,errorSchema:o,fieldPathId:l,registry:c}=e,{globalUiOptions:u={},schemaUtils:d,translateString:h}=c,m=me(r,u),g=be("OptionalDataControlsTemplate",c,m),b=zn(n);let v,y,f,A;if(i||s)v=Aa(l,"Msg"),y=b?void 0:h(Fe.OptionalObjectEmptyMsg);else{const O=b?Fe.OptionalObjectRemove:Fe.OptionalObjectAdd;y=h(O),b?(v=Aa(l,"Remove"),A=()=>a(void 0,l.path,o)):(v=Aa(l,"Add"),f=()=>{let p=d.getDefaultFormState(t,n,"excludeObjectChildren");p===void 0&&(p=It(t)==="array"?[]:{}),a(p,l.path,o)})}return y&&w.jsx(g,{id:v,registry:c,schema:t,uiSchema:r,label:y,onAddClick:f,onRemoveClick:A})}const C0={array:"ArrayField",boolean:"BooleanField",integer:"NumberField",number:"NumberField",object:"ObjectField",string:"StringField",null:"NullField"};function A0(e,t,r){const{field:n}=t,{fields:i,schemaUtils:s}=r;if(typeof n=="function")return n;if(typeof n=="string"&&n in i)return i[n];const a=It(e),o=Array.isArray(a)?a[0]:a||"",l=e.$id;let c=C0[o];return l&&l in i&&(c=l),(e.anyOf||e.oneOf)&&!s.isSelect(e)&&c!=="ObjectField"?()=>null:c in i?i[c]:i.FallbackField}function w0(e){const{schema:t,fieldPathId:r,uiSchema:n,formData:i,errorSchema:s,name:a,onChange:o,onKeyRename:l,onKeyRenameBlur:c,onRemoveProperty:u,required:d=!1,registry:h,wasPropertyKeyModified:m=!1}=e,{schemaUtils:g,globalFormOptions:b,globalUiOptions:v,fields:y}=h,{AnyOfField:f,OneOfField:A,CyclicSchemaField:O}=y,p=r[Te],x=G.useCallback((Ce,Pe,fe,Ye)=>o(Ce,Pe,fe,Ye||p),[p,o]);if(t[Co])return w.jsx(O,{...e});const $=ey(t,n,h),k=me($,v),N=be("FieldTemplate",h,k),I=be("DescriptionFieldTemplate",h,k),U=be("FieldHelpTemplate",h,k),q=be("FieldErrorTemplate",h,k),M=g.retrieveSchema(t,i),L=A0(M,k,h),B=!!M.deprecated?k.deprecatedHandling??"label":void 0,Q=!!(k.disabled??e.disabled)||B==="disable",X=!!(k.readonly??(e.readonly||e.schema.readOnly||M.readOnly)),re=k.hideError,E=re===void 0?e.hideError:!!re,_=!!(k.autofocus??e.autofocus);if(Object.keys(M).length===0)return null;let P=g.getDisplayLabel(M,$,v);const C=k.field&&k.fieldReplacesAnyOrOneOf===!0;let S,j,R={fieldPathId:r};if((Oe in M||ve in M)&&!C&&!g.isSelect(M)){M[Oe]?(S=f,j=M[Oe].map(fe=>g.retrieveSchema(le(fe)?fe:{},i))):M[ve]&&(S=A,j=M[ve].map(fe=>g.retrieveSchema(le(fe)?fe:{},i)));const Ce=pi(h,M,d,$),Pe=zn(i);P=P&&(!Ce||Pe),R={childFieldPathId:r,fieldPathId:Qt("XxxOf",b,r)}}const{__errors:D,...H}=s||{},{"ui:classNames":T,classNames:W,"ui:style":F,...V}=$;if(Pr in V){const{classNames:Ce,style:Pe,...fe}=V[Pr];V[Pr]=fe}const z=w.jsx(L,{...e,onChange:x,...R,schema:M,uiSchema:V,disabled:Q,readonly:X,hideError:E,autofocus:_,errorSchema:H,rawErrors:D}),J=r[Te];let Y;m?Y=a:Y=sn in M?a:k.title||e.schema.title||M.title||e.title||a,B==="label"&&(Y=h.translateString(Fe.DeprecatedLabel,[Y]));const Z=k.description||e.schema.description||M.description||"",{help:te}=k,ie=k.widget==="hidden"||B==="hide",ae=["rjsf-field",`rjsf-field-${It(M)}`];!E&&D&&D.length>0&&ae.push("rjsf-field-error"),k.classNames&&ae.push(k.classNames);const de=w.jsx(U,{help:te,fieldPathId:r,schema:M,uiSchema:$,hasErrors:!E&&D&&D.length>0,registry:h}),ge=E||S&&!g.isSelect(M)?void 0:w.jsx(q,{errors:D,errorSchema:s,fieldPathId:r,schema:M,uiSchema:$,registry:h}),ue={description:w.jsx(I,{id:Vn(J),description:Z,schema:M,uiSchema:$,registry:h}),rawDescription:Z,help:de,rawHelp:typeof te=="string"?te:void 0,errors:ge,rawErrors:E?void 0:D,fieldPathId:r,id:J,label:Y,hidden:ie,onChange:o,onKeyRename:l,onKeyRenameBlur:c,onRemoveProperty:u,required:d,disabled:Q,readonly:X,hideError:E,displayLabel:P,classNames:ae.join(" ").trim(),style:k.style,formData:i,schema:M,uiSchema:$,registry:h};return w.jsx(N,{...ue,children:w.jsxs(w.Fragment,{children:[z,S&&w.jsx(S,{name:a,disabled:Q,readonly:X,hideError:E,errorSchema:s,formData:i,fieldPathId:r,onBlur:e.onBlur,onChange:e.onChange,onFocus:e.onFocus,options:j,registry:h,required:d,schema:M,uiSchema:$})]})})}const $0=G.memo(w0,(e,t)=>{const{experimental_componentUpdateStrategy:r="customDeep"}=t.registry.globalFormOptions;return r==="always"?!1:r==="shallow"?Xa(e,t):Ae(e,t)});function _0(e){const{schema:t,name:r,uiSchema:n,fieldPathId:i,formData:s,required:a,disabled:o=!1,readonly:l=!1,autofocus:c=!1,onChange:u,onBlur:d,onFocus:h,registry:m,rawErrors:g,hideError:b,title:v}=e,{title:y}=t,{widgets:f,schemaUtils:A,globalUiOptions:O}=m,{defaultWidget:p,enumOptions:x}=qd(t,n,A,f),{widget:$=p,placeholder:k="",title:N,...I}=me(n),U=A.getDisplayLabel(t,n,O),q=N??v??y??r,M=cr(t,$,f),L=G.useCallback((K,B,Q)=>u(K,i.path,B,Q),[u,i]);return w.jsx(M,{options:{...I,enumOptions:x},schema:t,uiSchema:n,id:i.$id,name:r,label:q,hideLabel:!U,hideError:b,value:s,onChange:L,onBlur:d,onFocus:h,required:a,disabled:o,readonly:l,autofocus:c,registry:m,placeholder:k,rawErrors:g,htmlName:i.name})}function E0(){return{AnyOfField:Xl,ArrayField:wy,BooleanField:$y,CyclicSchemaField:_y,FallbackField:ky,LayoutGridField:Mo,LayoutHeaderField:zy,LayoutMultiSchemaField:By,NumberField:Gy,ObjectField:S0,OneOfField:Xl,OptionalDataControlsField:x0,SchemaField:$0,StringField:_0,NullField:Ky}}function j0(e){const{fieldPathId:t,description:r,registry:n,schema:i,uiSchema:s}=e,a=me(s,n.globalUiOptions),{label:o=!0}=a;if(!r||!o)return null;const l=be("DescriptionFieldTemplate",n,a);return w.jsx(l,{id:Vn(t),description:r,schema:i,uiSchema:s,registry:n})}function O0(e){const{disabled:t,hasCopy:r,hasMoveDown:n,hasMoveUp:i,hasRemove:s,fieldPathId:a,onCopyItem:o,onRemoveItem:l,onMoveDownItem:c,onMoveUpItem:u,readonly:d,registry:h,uiSchema:m}=e,{CopyButton:g,MoveDownButton:b,MoveUpButton:v,RemoveButton:y}=h.templates.ButtonTemplates;return w.jsxs(w.Fragment,{children:[(i||n)&&w.jsx(v,{id:nn(a,"moveUp"),className:"rjsf-array-item-move-up",disabled:t||d||!i,onClick:u,uiSchema:m,registry:h}),(i||n)&&w.jsx(b,{id:nn(a,"moveDown"),className:"rjsf-array-item-move-down",disabled:t||d||!n,onClick:c,uiSchema:m,registry:h}),r&&w.jsx(g,{id:nn(a,"copy"),className:"rjsf-array-item-copy",disabled:t||d,onClick:o,uiSchema:m,registry:h}),s&&w.jsx(y,{id:nn(a,"remove"),className:"rjsf-array-item-remove",disabled:t||d,onClick:l,uiSchema:m,registry:h})]})}function k0(e){const{children:t,className:r,buttonsProps:n,displayLabel:i,hasDescription:s,hasToolbar:a,registry:o,uiSchema:l}=e,c=me(l),u=be("ArrayFieldItemButtonsTemplate",o,c),d={flex:1,paddingLeft:6,paddingRight:6,fontWeight:"bold"},h=s?31:9,m={display:"flex",alignItems:i?"center":"baseline"},g={display:"flex",justifyContent:"flex-end",marginTop:i?`${h}px`:0};return w.jsxs("div",{className:r,style:m,children:[w.jsx("div",{className:a?"col-xs-9 col-md-10 col-xl-11":"col-xs-12",children:t}),a&&w.jsx("div",{className:"col-xs-3 col-md-2 col-xl-1 array-item-toolbox",children:w.jsx("div",{className:"btn-group",style:g,children:w.jsx(u,{...n,style:d})})})]})}function P0(e){const{canAdd:t,className:r,disabled:n,fieldPathId:i,uiSchema:s,items:a,optionalDataControl:o,onAddClick:l,readonly:c,registry:u,required:d,schema:h,title:m}=e,g=me(s),b=be("ArrayFieldDescriptionTemplate",u,g),v=be("ArrayFieldTitleTemplate",u,g),y=!c&&!n,{ButtonTemplates:{AddButton:f}}=u.templates;return w.jsxs("fieldset",{className:r,id:i.$id,children:[w.jsx(v,{fieldPathId:i,title:g.title||m,required:d,schema:h,uiSchema:s,registry:u,optionalDataControl:y?o:void 0}),w.jsx(b,{fieldPathId:i,description:g.description||h.description,schema:h,uiSchema:s,registry:u}),y?void 0:o,w.jsx("div",{className:"row array-item-list",children:a}),t&&w.jsx(f,{id:nn(i,"add"),className:"rjsf-array-item-add",onClick:l,disabled:n||c,uiSchema:s,registry:u})]})}function N0(e){const{fieldPathId:t,title:r,schema:n,uiSchema:i,required:s,registry:a,optionalDataControl:o}=e,l=me(i,a.globalUiOptions),{label:c=!0}=l;if(!r||!c)return null;const u=be("TitleFieldTemplate",a,l);return w.jsx(u,{id:Ro(t),title:r,required:s,schema:n,uiSchema:i,registry:a,optionalDataControl:o})}function F0(e){const{id:t,schema:r}=e,{examples:n,default:i}=r;return Array.isArray(n)?w.jsx("datalist",{id:Io(t),children:n.concat(i!==void 0&&!n.map(String).includes(String(i))?[i]:[]).map(s=>w.jsx("option",{value:s},String(s)))},`datalist_${t}`):null}function I0(e){const{id:t,name:r,htmlName:n,value:i,readonly:s,disabled:a,autofocus:o,onBlur:l,onFocus:c,onChange:u,onChangeOverride:d,options:h,schema:m,uiSchema:g,registry:b,rawErrors:v,type:y,hideLabel:f,hideError:A,...O}=e,{ClearButton:p}=b.templates.ButtonTemplates;if(!t)throw console.log("No id for",e),new Error(`no id for props ${JSON.stringify(e)}`);const x={...O,...Lp(m,y,h)};let $;x.type==="number"||x.type==="integer"?$=i||i===0?i:"":$=i??"";const k=G.useCallback(({target:{value:q}})=>u(q===""?h.emptyValue:q),[u,h]),N=G.useCallback(({target:q})=>l(t,q?.value),[l,t]),I=G.useCallback(({target:q})=>c(t,q?.value),[c,t]),U=G.useCallback(q=>{q.preventDefault(),q.stopPropagation(),u(h.emptyValue)},[u,h.emptyValue]);return w.jsxs(w.Fragment,{children:[w.jsx("input",{id:t,name:n||t,className:"form-control",readOnly:s,disabled:a,autoFocus:o,value:$,...x,list:m.examples?Io(t):void 0,onChange:d||k,onBlur:N,onFocus:I,"aria-describedby":vn(t,!!m.examples)}),h.allowClearTextInputs&&!s&&!a&&$&&w.jsx(p,{registry:b,onClick:U}),w.jsx(F0,{id:t,schema:m})]})}function R0(e){const{iconType:t="default",icon:r,className:n,uiSchema:i,registry:s,...a}=e;return w.jsx("button",{type:"button",className:`btn btn-${t} ${n}`,...a,children:w.jsx("i",{className:`glyphicon glyphicon-${r}`})})}const Vr=G.memo(R0);function D0(e){const{registry:{translateString:t}}=e;return w.jsx(Vr,{title:t(Fe.CopyButton),...e,icon:"copy"})}const T0=G.memo(D0);function M0(e){const{registry:{translateString:t}}=e;return w.jsx(Vr,{title:t(Fe.MoveDownButton),...e,icon:"arrow-down"})}const U0=G.memo(M0);function q0(e){const{registry:{translateString:t}}=e;return w.jsx(Vr,{title:t(Fe.MoveUpButton),...e,icon:"arrow-up"})}const L0=G.memo(q0);function V0(e){const{registry:{translateString:t}}=e;return w.jsx(Vr,{title:t(Fe.RemoveButton),...e,iconType:"danger",icon:"remove"})}const z0=G.memo(V0);function B0({id:e,className:t,onClick:r,disabled:n,registry:i,...s}){const{translateString:a}=i;return w.jsx(Vr,{id:e,iconType:"default",icon:"remove",className:"btn-clear col-xs-12",title:a(Fe.ClearButton),onClick:r,disabled:n,registry:i,...s})}const K0=G.memo(B0);function H0({id:e,className:t,onClick:r,disabled:n,registry:i}){const{translateString:s}=i;return w.jsx("div",{className:"row",children:w.jsx("p",{className:`col-xs-4 col-sm-2 col-lg-1 col-xs-offset-8 col-sm-offset-10 col-lg-offset-11 text-right ${t}`,children:w.jsx(Vr,{id:e,iconType:"info",icon:"plus",className:"btn-add col-xs-12",title:s(Fe.AddButton),onClick:r,disabled:n,registry:i})})})}function W0({uiSchema:e}){const{submitText:t,norender:r,props:n={}}=Vp(e);return r?null:w.jsx("div",{children:w.jsx("button",{type:"submit",...n,className:`btn btn-info ${n.className||""}`,children:t})})}function G0(){return{SubmitButton:W0,AddButton:H0,CopyButton:T0,MoveDownButton:U0,MoveUpButton:L0,RemoveButton:z0,ClearButton:K0}}function J0(e){const{name:t,fieldPathId:r,registry:n,onExpand:i}=e,{translateString:s}=n,a=`${r[Te]}-button`;return w.jsxs("div",{style:{marginTop:"1rem"},children:[w.jsx("div",{className:"text-danger",children:s(Fe.CycleDetected,[t])}),w.jsxs("div",{children:[w.jsx("button",{id:a,type:"button",className:"btn btn-sm btn-warning",onClick:()=>i(r[Te]),children:s(Fe.ExpandButton)})," "]})]})}const df=Fo();function ff({description:e,registry:t,uiSchema:r={}}){const{globalUiOptions:n}=t;return me(r,n).enableMarkdownInDescription&&typeof e=="string"?w.jsx(vi,{options:{disableParsingRawHTML:!0},"data-testid":df.markdown,children:e}):e}ff.TEST_IDS=df;function Y0(e){const{id:t,description:r,registry:n,uiSchema:i}=e;return r?w.jsx("div",{id:t,className:"field-description",children:w.jsx(ff,{description:r,registry:n,uiSchema:i})}):null}function Z0({errors:e,registry:t}){const{translateString:r}=t;return w.jsxs("div",{className:"panel panel-danger errors",children:[w.jsx("div",{className:"panel-heading",children:w.jsx("h3",{className:"panel-title",children:r(Fe.ErrorsLabel)})}),w.jsx("ul",{className:"list-group",children:e.map((n,i)=>w.jsx("li",{className:"list-group-item text-danger",children:n.stack},i))})]})}function Q0(e){const{schema:t,registry:r,typeSelector:n,schemaField:i}=e,s=be("MultiSchemaFieldTemplate",r);return w.jsx(s,{selector:n,optionSchemaField:i,schema:t,registry:r})}function X0(e){const{errors:t=[],fieldPathId:r}=e;if(t.length===0)return null;const n=Td(r);return w.jsx("div",{children:w.jsx("ul",{id:n,className:"error-detail bs-callout bs-callout-info",children:t.filter(i=>!!i).map((i,s)=>w.jsx("li",{className:"text-danger",children:i},s))})})}const hf=Fo();function mf({help:e,registry:t,uiSchema:r={}}){const{globalUiOptions:n}=t;return me(r,n).enableMarkdownInHelp&&typeof e=="string"?w.jsx(vi,{options:{disableParsingRawHTML:!0},"data-testid":hf.markdown,children:e}):e}mf.TEST_IDS=hf;function ev(e){const{fieldPathId:t,help:r,uiSchema:n,registry:i}=e;return r?w.jsx("div",{id:Md(t),className:"help-block",children:w.jsx(mf,{help:r,registry:i,uiSchema:n})}):null}const tv="*";function pf(e){const{label:t,required:r,id:n}=e;return t?w.jsxs("label",{className:"control-label",htmlFor:n,children:[t,r&&w.jsx("span",{className:"required",children:tv})]}):null}function rv(e){const{id:t,label:r,children:n,errors:i,help:s,description:a,hidden:o,required:l,displayLabel:c,registry:u,uiSchema:d}=e,h=me(d),m=be("WrapIfAdditionalTemplate",u,h);if(o)return w.jsx("div",{className:"hidden",children:n});const g=h.widget==="checkbox";return w.jsxs(m,{...e,children:[c&&!g&&w.jsx(pf,{label:r,required:l,id:t}),c&&a?a:null,n,i,s]})}function nv(e){const{children:t,column:r,className:n,...i}=e;return w.jsx("div",{className:n,...i,children:t})}function iv(e){const{selector:t,optionSchemaField:r}=e;return w.jsxs("div",{className:"panel panel-default panel-body",children:[w.jsx("div",{className:"form-group",children:t}),r]})}function sv(e){const{className:t,description:r,disabled:n,formData:i,fieldPathId:s,onAddProperty:a,optionalDataControl:o,properties:l,readonly:c,registry:u,required:d,schema:h,title:m,uiSchema:g}=e,b=me(g),v=be("TitleFieldTemplate",u,b),y=be("DescriptionFieldTemplate",u,b);if((h.oneOf||h.anyOf)&&!h.properties&&l.length===0)return null;const A=!c&&!n,{ButtonTemplates:{AddButton:O}}=u.templates;return w.jsxs("fieldset",{className:t,id:s.$id,children:[m&&w.jsx(v,{id:Ro(s),title:m,required:d,schema:h,uiSchema:g,registry:u,optionalDataControl:A?o:void 0}),r&&w.jsx(y,{id:Vn(s),description:r,schema:h,uiSchema:g,registry:u}),A?void 0:o,l.map(p=>p.content),rm(h,g,i)&&w.jsx(O,{id:nn(s,"add"),className:"rjsf-object-property-expand",onClick:a,disabled:n||c,uiSchema:g,registry:u})]})}function av(e){const{id:t,registry:r,label:n,onAddClick:i,onRemoveClick:s}=e;return i?w.jsx(Vr,{id:t,registry:r,icon:"plus",className:"rjsf-add-optional-data btn-sm",onClick:i,title:n}):s?w.jsx(Vr,{id:t,registry:r,icon:"remove",className:"rjsf-remove-optional-data btn-sm",onClick:s,title:n}):w.jsx("em",{id:t,children:n})}const ov="*";function lv(e){const{id:t,title:r,required:n,optionalDataControl:i}=e;return w.jsxs("legend",{id:t,children:[r,n&&w.jsx("span",{className:"required",children:ov}),i&&w.jsx("span",{className:"pull-right",style:{marginBottom:"2px"},children:i})]})}function cv(e){const{schema:t,fieldPathId:r,reason:n,registry:i}=e,{translateString:s}=i;let a=Fe.UnsupportedField;const o=[];return r?.$id&&(a=Fe.UnsupportedFieldWithId,o.push(r.$id)),n&&(a=a===Fe.UnsupportedField?Fe.UnsupportedFieldWithReason:Fe.UnsupportedFieldWithIdAndReason,o.push(n)),w.jsxs("div",{className:"unsupported-field",children:[w.jsx("p",{children:w.jsx(vi,{options:{disableParsingRawHTML:!0},children:s(a,o)})}),t&&w.jsx("pre",{children:JSON.stringify(t,null,2)})]})}function uv(e){const{id:t,classNames:r,style:n,disabled:i,displayLabel:s,label:a,onKeyRenameBlur:o,onRemoveProperty:l,rawDescription:c,readonly:u,required:d,schema:h,hideError:m,rawErrors:g,children:b,uiSchema:v,registry:y}=e,{templates:f,translateString:A}=y,{RemoveButton:O}=f.ButtonTemplates,p=A(Fe.KeyLabel,[a]),x=sn in h,$=!!c,k=["form-group",r];!m&&g&&g.length>0&&k.push("has-error has-danger");const N=k.join(" ").trim();if(!x)return w.jsx("div",{className:N,style:n,children:b});const I=$?46:26;return w.jsx("div",{className:N,style:n,children:w.jsxs("div",{className:"row",children:[w.jsx("div",{className:"col-xs-5 form-additional",children:w.jsxs("div",{className:"form-group",children:[s&&w.jsx(pf,{label:p,required:d,id:`${t}-key`}),s&&c&&w.jsx("div",{children:" "}),w.jsx("input",{className:"form-control",type:"text",id:`${t}-key`,onBlur:o,defaultValue:a},a)]})}),w.jsx("div",{className:"form-additional form-group col-xs-5",children:b}),w.jsx("div",{className:"col-xs-2",style:{marginTop:s?`${I}px`:void 0},children:w.jsx(O,{id:nn(t,"remove"),className:"rjsf-object-property-remove btn-block",style:{border:"0"},disabled:i||u,onClick:l,uiSchema:v,registry:y})})]})})}function dv(){return{ArrayFieldDescriptionTemplate:j0,ArrayFieldItemTemplate:k0,ArrayFieldItemButtonsTemplate:O0,ArrayFieldTemplate:P0,ArrayFieldTitleTemplate:N0,ButtonTemplates:G0(),BaseInputTemplate:I0,CyclicSchemaExpandTemplate:J0,DescriptionFieldTemplate:Y0,ErrorListTemplate:Z0,FallbackFieldTemplate:Q0,FieldTemplate:rv,FieldErrorTemplate:X0,FieldHelpTemplate:ev,GridTemplate:nv,MultiSchemaFieldTemplate:iv,ObjectFieldTemplate:sv,OptionalDataControlsTemplate:av,TitleFieldTemplate:lv,UnsupportedFieldTemplate:cv,WrapIfAdditionalTemplate:uv}}function fv({time:e=!0,...t}){const{AltDateWidget:r}=t.registry.widgets;return w.jsx(r,{time:e,...t})}function hv(e){const{disabled:t=!1,readonly:r=!1,autofocus:n=!1,options:i,id:s,name:a,registry:o,onBlur:l,onFocus:c}=e,{translateString:u}=o,{elements:d,handleChange:h,handleClear:m,handleSetNow:g}=oy(e);return w.jsxs("ul",{className:"list-inline",children:[d.map((b,v)=>w.jsx("li",{className:"list-inline-item",children:w.jsx(ay,{rootId:s,name:a,select:h,...b,disabled:t,readonly:r,registry:o,onBlur:l,onFocus:c,autofocus:n&&v===0})},v)),(i.hideNowButton!=="undefined"?!i.hideNowButton:!0)&&w.jsx("li",{className:"list-inline-item",children:w.jsx("button",{type:"button",className:"btn btn-info btn-now",onClick:g,children:u(Fe.NowLabel)})}),(i.hideClearButton!=="undefined"?!i.hideClearButton:!0)&&w.jsx("li",{className:"list-inline-item",children:w.jsx("button",{type:"button",className:"btn btn-warning btn-clear",onClick:m,children:u(Fe.ClearLabel)})})]})}function mv({id:e,disabled:t,options:r,value:n,autofocus:i=!1,readonly:s,onChange:a,onBlur:o,onFocus:l,htmlName:c}){const{inline:u=!1,enumOptions:d,enumDisabled:h,emptyValue:m}=r,g=No(r),b=Array.isArray(n)?n:[n],v=G.useCallback(({target:f})=>o(e,on(f?.value,d,g,m)),[o,e,d,m,g]),y=G.useCallback(({target:f})=>l(e,on(f?.value,d,g,m)),[l,e,d,m,g]);return w.jsx("div",{className:"checkboxes",id:e,children:Array.isArray(d)&&d.map((f,A)=>{const O=zs(f.value,b),p=Array.isArray(h)&&h.includes(f.value),x=t||p||s?"disabled":"",$=N=>{N.target.checked?a(Mp(A,b,d)):a(Dp(A,b,d))},k=w.jsxs("span",{children:[w.jsx("input",{type:"checkbox",id:Ud(e,A),name:c||e,checked:O,value:Po(f.value,A,g),disabled:t||p||s,autoFocus:i&&A===0,onChange:$,onBlur:v,onFocus:y,"aria-describedby":vn(e)}),w.jsx("span",{children:f.label})]});return u?w.jsx("label",{className:`checkbox-inline ${x}`,children:k},String(f.value)):w.jsx("div",{className:`checkbox ${x}`,children:w.jsx("label",{children:k})},String(f.value))})})}function pv({schema:e,uiSchema:t,options:r,id:n,value:i,disabled:s,readonly:a,label:o,hideLabel:l,autofocus:c=!1,onBlur:u,onFocus:d,onChange:h,registry:m,htmlName:g,required:b}){const v=be("DescriptionFieldTemplate",m,r),y=Ss(e)&&b,f=G.useCallback(k=>h(k.target.checked),[h]),A=G.useCallback(k=>u(n,k.target.checked),[u,n]),O=G.useCallback(k=>d(n,k.target.checked),[d,n]),$=me(t).widget==="checkbox"?void 0:r.description??e.description;return w.jsxs("div",{className:`checkbox ${s||a?"disabled":""}`,children:[!l&&$&&w.jsx(v,{id:Vn(n),description:$,schema:e,uiSchema:t,registry:m}),w.jsxs("label",{children:[w.jsx("input",{type:"checkbox",id:n,name:g||n,checked:typeof i>"u"?!1:i,required:b,disabled:s||a,autoFocus:c,onChange:f,onBlur:A,onFocus:O,"aria-describedby":vn(n)}),Yp(w.jsxs("span",{children:[o,y&&w.jsx("span",{className:"required",children:"*"})]}),l)]})]})}function yv(e){const{disabled:t,readonly:r,options:n,registry:i}=e,s=be("BaseInputTemplate",i,n);return w.jsx(s,{type:"color",...e,disabled:t||r})}function gv(e){const{onChange:t,value:r,options:n,registry:i}=e,s=be("BaseInputTemplate",i,n);return w.jsx(s,{type:"datetime-local",...e,value:fy(r),onChange:a=>t(Zp(a))})}function vv(e){const{onChange:t,options:r,registry:n}=e,i=be("BaseInputTemplate",n,r),s=G.useCallback(a=>t(a||void 0),[t]);return w.jsx(i,{type:"date",...e,onChange:s})}function bv(e){const{options:t,registry:r}=e,n=be("BaseInputTemplate",r,t);return w.jsx(n,{type:"email",...e})}function Sv({fileInfo:e,registry:t}){const{translateString:r}=t,{dataURL:n,type:i,name:s}=e;if(!n)return null;const a=r(Fe.PreviewLabel);return["image/jpeg","image/png"].includes(i)?w.jsx("img",{src:n,alt:a,style:{maxWidth:"100%"},className:"file-preview"}):w.jsxs(w.Fragment,{children:[" ",w.jsx("a",{download:`preview-${s}`,href:n,className:"file-download",children:a})]})}function xv({filesInfo:e,registry:t,preview:r,onRemove:n,options:i}){if(e.length===0)return null;const{translateString:s}=t,{RemoveButton:a}=be("ButtonTemplates",t,i);return w.jsx("ul",{className:"file-info",children:e.map((o,l)=>{const{name:c,size:u,type:d}=o,h=()=>n(l);return w.jsxs("li",{children:[w.jsx(vi,{children:s(Fe.FilesInfo,[c,d,String(u)])}),r&&w.jsx(Sv,{fileInfo:o,registry:t}),w.jsx(a,{onClick:h,registry:t})]},l)})})}function Cv(e){const{disabled:t,readonly:r,required:n,multiple:i,onChange:s,value:a,options:o,registry:l}=e,{filesInfo:c,handleChange:u,handleRemove:d}=dy(a,s,i),h=be("BaseInputTemplate",l,o),m=g=>{g.target.files&&u(g.target.files)};return w.jsxs("div",{children:[w.jsx(h,{...e,disabled:t||r,type:"file",required:a?!1:n,onChangeOverride:m,value:"",accept:o.accept?String(o.accept):void 0}),w.jsx(xv,{filesInfo:c,onRemove:d,registry:l,preview:o.filePreview,options:o})]})}function Av({id:e,value:t,htmlName:r}){return w.jsx("input",{type:"hidden",id:e,name:r||e,value:typeof t>"u"?"":t})}function wv(e){const{options:t,registry:r}=e,n=be("BaseInputTemplate",r,t);return w.jsx(n,{type:"password",...e})}function $v({options:e,value:t,required:r,disabled:n,readonly:i,autofocus:s=!1,onBlur:a,onFocus:o,onChange:l,id:c,htmlName:u}){const{enumOptions:d,enumDisabled:h,inline:m,emptyValue:g}=e,b=No(e),v=G.useCallback(({target:f})=>a(c,on(f?.value,d,b,g)),[a,d,g,c,b]),y=G.useCallback(({target:f})=>o(c,on(f?.value,d,b,g)),[o,d,g,c,b]);return w.jsx("div",{className:"field-radio-group",id:c,role:"radiogroup",children:Array.isArray(d)&&d.map((f,A)=>{const O=zs(f.value,t),p=Array.isArray(h)&&h.includes(f.value),x=n||p||i?"disabled":"",$=()=>l(f.value),k=w.jsxs("span",{children:[w.jsx("input",{type:"radio",id:Ud(c,A),checked:O,name:u||c,required:r,value:Po(f.value,A,b),disabled:n||p||i,autoFocus:s&&A===0,onChange:$,onBlur:v,onFocus:y,"aria-describedby":vn(c)}),w.jsx("span",{children:f.label})]});return m?w.jsx("label",{className:`radio-inline ${x}`,children:k},String(f.value)):w.jsx("div",{className:`radio ${x}`,children:w.jsx("label",{children:k})},String(f.value))})})}function _v(e){const{value:t,registry:{templates:{BaseInputTemplate:r}}}=e;return w.jsxs("div",{className:"field-range-wrapper",children:[w.jsx(r,{type:"range",...e}),w.jsx("span",{className:"range-view",children:t})]})}function Ev({id:e,value:t,required:r,disabled:n,readonly:i,onChange:s,onFocus:a,onBlur:o,schema:l,options:c,htmlName:u}){const{stars:d=5,shape:h="star"}=c,m=l.maximum?Math.min(l.maximum,5):Math.min(Math.max(d,1),5),g=l.minimum||0,b=G.useCallback(A=>{!n&&!i&&s(A)},[s,n,i]),v=G.useCallback(A=>{if(a){const O=Number(A.target.dataset.value);a(e,O)}},[a,e]),y=G.useCallback(A=>{if(o){const O=Number(A.target.dataset.value);o(e,O)}},[o,e]),f=A=>h==="heart"?A?"♥":"♡":A?"★":"☆";return w.jsxs("div",{className:"rating-widget",style:{display:"inline-flex",fontSize:"1.5rem",cursor:n||i?"default":"pointer"},children:[[...Array(m)].map((A,O)=>{const p=g+O,x=p<=t;return w.jsx("span",{onClick:()=>b(p),onKeyDown:$=>($.key==="Enter"||$.key===" ")&&b(p),onFocus:v,onBlur:y,"data-value":p,tabIndex:n||i?-1:0,role:"radio","aria-checked":p===t,"aria-label":`${p} ${h==="heart"?"heart":"star"}${p===1?"":"s"}`,style:{color:x?"#FFD700":"#ccc",padding:"0 0.2rem",transition:"color 0.2s",userSelect:"none"},children:f(x)},O)}),w.jsx("input",{type:"hidden",id:e,name:u||e,value:t||"",required:r,disabled:n||i,"aria-hidden":"true"})]})}function Na(e,t){return t?Array.from(e.target.options).slice().filter(r=>r.selected).map(r=>r.value):e.target.value}function jv({schema:e,id:t,options:r,value:n,required:i,disabled:s,readonly:a,multiple:o=!1,autofocus:l=!1,onChange:c,onBlur:u,onFocus:d,placeholder:h,htmlName:m,registry:g,uiSchema:b}){const{enumOptions:v,enumDisabled:y,emptyValue:f}=r,A=o?[]:"",O=No(r),p=G.useCallback(I=>{const U=Na(I,o);return d(t,on(U,v,O,f))},[d,t,o,v,f,O]),x=G.useCallback(I=>{const U=Na(I,o);return u(t,on(U,v,O,f))},[u,t,o,v,f,O]),$=G.useCallback(I=>{const U=Na(I,o);return c(on(U,v,O,f))},[c,o,v,f,O]),k=Tp(n,v,o,O,A),N=!o&&e.default===void 0;return Qp(t,e,v,o),w.jsxs(w.Fragment,{children:[w.jsx(ty,{id:t,multiple:o,options:r,registry:g,uiSchema:b,value:n}),w.jsxs("select",{id:t,name:m||t,multiple:o,className:"form-control",value:k,required:i,disabled:s||a,autoFocus:l,onBlur:x,onFocus:p,onChange:$,"aria-describedby":vn(t),children:[N&&w.jsx("option",{value:"",children:h}),Array.isArray(v)&&v.map(({value:I,label:U},q)=>{const M=y&&y.includes(I);return w.jsx("option",{value:Po(I,q,O),disabled:M,children:U},String(I))})]})]})}function Ov({id:e,options:t,placeholder:r,value:n,required:i,disabled:s,readonly:a,autofocus:o=!1,onChange:l,onBlur:c,onFocus:u,htmlName:d}){const h=G.useCallback(({target:{value:b}})=>l(b===""?t.emptyValue:b),[l,t.emptyValue]),m=G.useCallback(({target:b})=>c(e,b?.value),[c,e]),g=G.useCallback(({target:b})=>u(e,b?.value),[e,u]);return w.jsx("textarea",{id:e,name:d||e,className:"form-control",value:n||"",placeholder:r,required:i,disabled:s,readOnly:a,autoFocus:o,rows:t.rows,onBlur:m,onFocus:g,onChange:h,"aria-describedby":vn(e)})}function kv(e){const{options:t,registry:r}=e,n=be("BaseInputTemplate",r,t);return w.jsx(n,{...e})}function Pv(e){const{onChange:t,options:r,registry:n,schema:i,value:s}=e,a=be("BaseInputTemplate",n,r),o=typeof i.multipleOf=="number"&&Number.isFinite(i.multipleOf)&&i.multipleOf<60,l=G.useCallback(u=>{t(u?o?u:`${u}:00`:void 0)},[o,t]),c=typeof s=="string"&&!o&&/^\d{2}:\d{2}:00$/.test(s)?s.slice(0,-3):s;return w.jsx(a,{type:"time",...e,value:c,onChange:l})}function Nv(e){const{options:t,registry:r}=e,n=be("BaseInputTemplate",r,t);return w.jsx(n,{type:"number",...e})}function Fv(e){const{options:t,registry:r}=e,n=be("BaseInputTemplate",r,t);return w.jsx(n,{type:"url",...e})}function Iv(){return{AltDateWidget:hv,AltDateTimeWidget:fv,CheckboxWidget:pv,CheckboxesWidget:mv,ColorWidget:yv,DateWidget:vv,DateTimeWidget:gv,EmailWidget:bv,FileWidget:Cv,HiddenWidget:Av,PasswordWidget:wv,RadioWidget:$v,RangeWidget:_v,RatingWidget:Ev,SelectWidget:jv,TextWidget:kv,TextareaWidget:Ov,TimeWidget:Pv,UpDownWidget:Nv,URLWidget:Fv}}function Rv(){return{fields:E0(),templates:dv(),widgets:Iv(),rootSchema:{},formContext:{},translateString:Rp,globalFormOptions:{idPrefix:nd,idSeparator:id,useFallbackUiForUnsupportedType:!1}}}function $n(e,t){const{schema:r,uiSchema:n,fieldPathId:i,schemaUtils:s,formData:a,edit:o,errors:l,errorSchema:c}=e;return{schema:r,uiSchema:n,fieldPathId:i,schemaUtils:s,formData:a,edit:o,errors:l,errorSchema:c,...t!==void 0&&{status:t}}}class Or extends G.Component{formElement;pendingChanges=[];isProcessingUserChange=!1;static getDerivedStateFromProps(t,r){if(t.extraErrors!==r.prevExtraErrors){const n={errors:r.schemaValidationErrors||[],errorSchema:r.schemaValidationErrorSchema||{}};let{errors:i,errorSchema:s}=n;return t.extraErrors&&({errors:i,errorSchema:s}=ai(n,t.extraErrors)),r.customErrors&&({errors:i,errorSchema:s}=ai({errors:i,errorSchema:s},r.customErrors.ErrorSchema,!0)),{prevExtraErrors:t.extraErrors,errors:i,errorSchema:s}}return null}constructor(t){if(super(t),!t.validator)throw new Error("A validator is required for Form functionality to work");const{formData:r,initialFormData:n,onChange:i}=t,s=r??n;this.state={...this.getStateFromProps(t,s,void 0,void 0,void 0,!0),prevExtraErrors:t.extraErrors},i&&!Ae(this.state.formData,s)&&i($n(this.state)),this.formElement=G.createRef()}getSnapshotBeforeUpdate(t,r){if(!Ae(this.props,t)){const n=bs(this.props.formData,t.formData),i=bs(this.props.formData,this.state.formData),s=!Ae(t.schema,this.props.schema),a=n.length>0||!Ae(t.formData,this.props.formData),o=i.length>0||!Ae(this.state.formData,this.props.formData),l=this.getStateFromProps(this.props,this.props.formData,s||a?void 0:this.state.retrievedSchema,s,()=>bs(this.props.formData,t.formData,!0),!o),c=!Ae(l,r);return{nextState:l,shouldUpdate:c}}return{shouldUpdate:!1}}componentDidUpdate(t,r,n){if(n.shouldUpdate){const{nextState:i}=n,s=!Ae(i.formData,this.props.formData),a=this.isProcessingUserChange;if(this.isProcessingUserChange=!1,a&&s)return;s&&!Ae(i.formData,r.formData)&&this.props.onChange&&this.props.onChange($n(i)),this.setState(i)}}getStateFromProps(t,r,n,i=!1,s=()=>[],a=!1,o=!1){const l=this.state||{},c="schema"in t?t.schema:this.props.schema,u="validator"in t?t.validator:this.props.validator,d=("uiSchema"in t?t.uiSchema:this.props.uiSchema)||{},h=t.formData===void 0&&this.props.formData===void 0,m=typeof r<"u",g="liveValidate"in t?t.liveValidate:this.props.liveValidate,b=m&&!t.noValidate&&g,v="experimental_defaultFormStateBehavior"in t?t.experimental_defaultFormStateBehavior:this.props.experimental_defaultFormStateBehavior,y="experimental_customMergeAllOf"in t?t.experimental_customMergeAllOf:this.props.experimental_customMergeAllOf;let{schemaUtils:f,hasNestedConditionalSchema:A}=l;(!f||f.doesSchemaUtilsDiffer(u,c,v,y))&&(f=Np(u,c,v,y),A=Ld(f.getRootSchema(),f.getRootSchema()));const O=f.getRootSchema();let p=r;r===Nc?p=void 0:r===void 0&&h&&(p=l.formData);let x,$,k=!1;const N=[];do{x=f.getDefaultFormState(O,p,!1,l.initialDefaultsGenerated);const re=o?Lt({formData:x}):"";if($=this.updateRetrievedSchema(n??f.retrieveSchema(O,x)),o&&!N.includes(re)&&(A||!Ae($,l.retrievedSchema))){const E=f.sanitizeDataForNewSchema($,l.retrievedSchema,x);if(k=!Ae(E,x),k){x=E,p=E;const _=Lt({formData:E});k=!N.includes(_),N.push(_)}N.push(re)}else k=!1}while(k);const I=()=>t.noValidate||i?{errors:[],errorSchema:{}}:t.liveValidate?{errors:l.errors||[],errorSchema:l.errorSchema||{}}:{errors:l.schemaValidationErrors||[],errorSchema:l.schemaValidationErrorSchema||{}};let U,q,{schemaValidationErrors:M,schemaValidationErrorSchema:L}=l;if(b&&!a){const re=this.liveValidate(O,f,l.errorSchema,x,void 0,l.customErrors,n,n!==void 0);U=re.errors,q=re.errorSchema,M=re.schemaValidationErrors,L=re.schemaValidationErrorSchema}else{const re=I();if(U=re.errors,q=re.errorSchema,!b){const _=s();if(_.length>0){const P=_.reduce((C,S)=>{const j=Zt(S);for(let R=1;R$p(t,r);getFieldNames=(t,r)=>_p(t,r);omitExtraData=t=>{const{schema:r,schemaUtils:n}=this.state;return n.omitExtraData(r,t)};setFieldValue=(t,r)=>{const{registry:n}=this.state,i=Array.isArray(t)?t:t.split("."),s=Qt("",n.globalFormOptions,i);this.onChange(r,i,void 0,s[Te])};onChange=(t,r,n,i)=>{this.pendingChanges.push({newValue:t,path:r,newErrorSchema:n,id:i}),this.pendingChanges.length===1&&this.processPendingChange()};processPendingChange(){if(this.pendingChanges.length===0)return;this.isProcessingUserChange=!0;const{newValue:t,path:r,id:n}=this.pendingChanges[0],{newErrorSchema:i}=this.pendingChanges[0],{extraErrors:s,omitExtraData:a,liveOmit:o,noValidate:l,liveValidate:c,onChange:u,disabled:d,readonly:h}=this.props,{formData:m,schemaUtils:g,schema:b,fieldPathId:v,schemaValidationErrorSchema:y,errors:f}=this.state;let{customErrors:A,retrievedSchema:O}=this.state,p=y;const x=v.path[0]||"",$=!r||r.length===0||r.length===1&&r[0]===x;let k=$?t:structuredClone(m);const N=le(k)&&Object.keys(k).length>0&&Object.values(k).every(K=>K===void 0),I=m==null,U=N&&I?void 0:k;if(le(k)||Array.isArray(k)){let K=!1;if(t===cf)Fm(k,r);else if(!$){let X=t;if(t===void 0)if(typeof r[r.length-1]=="number")X=null;else{const{field:E}=g.findFieldInSchema(b,r,m),_=E;!(_&&(ve in _||Oe in _))&&_!==void 0&&(K=!0)}K?rt(k,r,void 0):rt(k,r,X)}const B=O&&!$&&!le(t)&&!Array.isArray(t)&&!d&&!h,Q=this.getStateFromProps(this.props,U,void 0,void 0,void 0,!0,B);k=Q.formData,O=Q.retrievedSchema,K&&k&&rt(k,r,void 0)}const q=!l&&(c===!0||c==="onChange");let M={formData:k,retrievedSchema:O},L=k;if(a===!0&&(o===!0||o==="onChange")&&(L=this.omitExtraData(k),M={...M,formData:L}),i){const K=$?y:he(y,r);if(K&&Object.keys(K).length>0)$?p=i:(p=structuredClone(y),rt(p,r,i,!0));else if(A||(A=new Id),$){const B=i[pt];B&&A.setErrors(B)}else rt(A.ErrorSchema,r,i,!0)}else A&&he(A.ErrorSchema,[...r,pt])&&A.clearErrors(r);if(q&&this.pendingChanges.length===1){const K=this.liveValidate(b,g,p,L,s,A,O);M={...M,formData:L,...K,customErrors:A}}else if(!l&&i){const K=Or.mergeErrors({errorSchema:p,errors:f},s,A);M={...M,formData:L,...K,customErrors:A}}this.setState(M,()=>{u&&u($n({...this.state,...M}),n),this.pendingChanges.shift(),this.processPendingChange()})}updateRetrievedSchema(t){return Ae(t,this.state?.retrievedSchema)?this.state.retrievedSchema:t}reset=()=>{const{formData:t,initialFormData:r=Nc,onChange:n}=this.props,a={formData:this.getStateFromProps(this.props,t??r,void 0,void 0,void 0,!0).formData,errorSchema:{},errors:[],schemaValidationErrors:[],schemaValidationErrorSchema:{},initialDefaultsGenerated:!1,customErrors:void 0};this.setState(a,()=>n?.($n({...this.state,...a})))};onBlur=(t,r)=>{const{onBlur:n,omitExtraData:i,liveOmit:s,liveValidate:a}=this.props;if(n&&n(t,r),i===!0&&s==="onBlur"||a==="onBlur"){const{onChange:o,extraErrors:l}=this.props,{formData:c}=this.state;let u=c,d={formData:u};if(i===!0&&s==="onBlur"&&(u=this.omitExtraData(c),d={formData:u}),a==="onBlur"){const{schema:m,schemaUtils:g,errorSchema:b,customErrors:v,retrievedSchema:y}=this.state,f=this.liveValidate(m,g,b,u,l,v,y);d={formData:u,...f,customErrors:v}}const h=Object.keys(d).filter(m=>!m.startsWith("schemaValidation")).some(m=>{const g=this.state[m],b=d[m];return!Ae(g,b)});this.setState(d,()=>{o&&h&&o($n({...this.state,...d}),t)})}};onFocus=(t,r)=>{const{onFocus:n}=this.props;n&&n(t,r)};onSubmit=t=>{if(t.preventDefault(),t.target!==t.currentTarget)return;t.persist();const{omitExtraData:r,extraErrors:n,noValidate:i,onSubmit:s}=this.props;let{formData:a}=this.state;if(r===!0&&(a=this.omitExtraData(a)),i||this.validateFormWithFormData(a)){const o=n||{},l=n?Vd(n):[];this.setState({formData:a,errors:l,errorSchema:o,schemaValidationErrors:[],schemaValidationErrorSchema:{}},()=>{s&&s($n({...this.state,formData:a},"submitted"),t)})}};static getGlobalFormOptions(t){const{uiSchema:r={},experimental_componentUpdateStrategy:n,idSeparator:i=id,idPrefix:s=nd,nameGenerator:a,useFallbackUiForUnsupportedType:o=!1}=t;return{idPrefix:r["ui:rootFieldId"]||s,idSeparator:i,useFallbackUiForUnsupportedType:o,...n!==void 0&&{experimental_componentUpdateStrategy:n},...a!==void 0&&{nameGenerator:a}}}static getRegistry(t,r,n){const{translateString:i,uiSchema:s={}}=t,{fields:a,templates:o,widgets:l,formContext:c,translateString:u}=Rv();return{fields:{...a,...t.fields},templates:{...o,...t.templates,ButtonTemplates:{...o.ButtonTemplates,...t.templates?.ButtonTemplates}},widgets:{...l,...t.widgets},rootSchema:r,formContext:t.formContext||c,schemaUtils:n,translateString:i||u,globalUiOptions:s[Ga],globalFormOptions:Or.getGlobalFormOptions(t),uiSchemaDefinitions:s[em]??{}}}submit=()=>{if(this.formElement.current){const t=new CustomEvent("submit",{cancelable:!0});t.preventDefault(),this.formElement.current.dispatchEvent(t),this.formElement.current.requestSubmit()}};focusOnError(t){const{idPrefix:r="root",idSeparator:n="_"}=this.props,{property:i}=t,s=Zt(i??"");s.unshift(r);const a=s.join(n);let o=this.formElement.current.elements[a];o||(o=this.formElement.current.querySelector(`input[id^="${a}"], button[id^="${a}"]`)),o?.length&&(o=o[0]),o&&o.focus()}validateFormWithFormData=t=>{const{extraErrors:r,extraErrorsBlockSubmit:n,focusOnFirstError:i,onError:s}=this.props,{errors:a}=this.state,o=this.validate(t),{errors:l,errorSchema:c}=r?Or.mergeErrors(o,r):o,u=o.errors.length>0||r&&n;return u?(i&&(typeof i=="function"?i(l[0]):this.focusOnError(l[0])),this.setState({errors:l,errorSchema:c,schemaValidationErrors:o.errors,schemaValidationErrorSchema:o.errorSchema},()=>{s?s(l):console.error("Form validation failed",l)})):l.length>0?this.setState({errors:l,errorSchema:c,schemaValidationErrors:[],schemaValidationErrorSchema:{}}):a.length>0&&this.setState({errors:[],errorSchema:{},schemaValidationErrors:[],schemaValidationErrorSchema:{}}),!u};validateForm(){const{omitExtraData:t}=this.props;let{formData:r}=this.state;return t===!0&&(r=this.omitExtraData(r)),this.validateFormWithFormData(r)}render(){const{children:t,id:r,className:n="",tagName:i,name:s,method:a,target:o,action:l,autoComplete:c,enctype:u,acceptCharset:d,noHtml5Validate:h=!1,disabled:m,readonly:g,showErrorList:b="top",_internalFormWrapper:v}=this.props,{schema:y,uiSchema:f,formData:A,errorSchema:O,fieldPathId:p,registry:x}=this.state,{SchemaField:$}=x.fields,{SubmitButton:k}=x.templates.ButtonTemplates,N=v?i:void 0,I=v||i||"form";let{[_s]:U={}}=me(f);m&&(U={...U,props:{...U.props,disabled:!0}});const q={[Pr]:{[_s]:U}};return w.jsxs(I,{className:n||"rjsf",id:r,name:s,method:a,target:o,action:l,autoComplete:c,encType:u,acceptCharset:d,noValidate:h,onSubmit:this.onSubmit,as:N,ref:this.formElement,children:[b==="top"&&this.renderErrors(x),w.jsx($,{name:"",schema:y,uiSchema:f,errorSchema:O,fieldPathId:p,formData:A,onChange:this.onChange,onBlur:this.onBlur,onFocus:this.onFocus,registry:x,disabled:m,readonly:g}),t||w.jsx(k,{uiSchema:q,registry:x}),b==="bottom"&&this.renderErrors(x)]})}}function Dv(e,t="none"){return t==="all"?e:e.reduce((r,n)=>{const{message:i,schemaPath:s}=n,a=t!=="anyOf"?s?.indexOf(`/${Oe}/`):void 0,o=t!=="oneOf"?s?.indexOf(`/${ve}/`):void 0;let l;return a&&a>=0?l=s?.substring(0,a):o&&o>=0&&(l=s?.substring(0,o)),l&&r.find(u=>u.message===i&&u.schemaPath?.startsWith(l))||r.push(n),r},[])}function Tv(e=[],t,r,n){const i=e.map(s=>{const{instancePath:a,keyword:o,params:l,schemaPath:c,parentSchema:u,...d}=s;let{message:h=""}=d,m=a.replace(/\//g,"."),g=`${m} ${h}`.trim(),b="";const v=[...l.deps?.split(", ")||[],l.missingProperty,l.property].filter(y=>y);if(v.length>0)v.forEach(y=>{const f=m?`${m}.${y}`:y;let A=me(he(t,Zt(f))).title;if(A===void 0){const O=c.replace(/\/properties\//g,"/").split("/").slice(1,-1).concat([y]);A=me(he(t,O)).title}if(A===void 0){const O=m.replace(/^\./,"").split(".").filter(Boolean);A=he(t,[...O,y,"title"])}if(A)h=h.replace(`'${y}'`,`'${A}'`),b=A;else{const O=he(u,[Qe,y,"title"]);if(O)h=h.replace(`'${y}'`,`'${O}'`),b=O;else if(n){const p=m.replace(/^\./,"").split(".").filter(Boolean),x=[];for(const k of p)x.push(Qe,k);x.push(Qe,y,"title");const $=he(n,x);$&&(h=h.replace(`'${y}'`,`'${$}'`),b=$)}}}),g=h;else{const y=me(he(t,Zt(m))).title;if(y)g=`'${y}' ${h}`.trim(),b=y;else{const f=u?.title;f&&(g=`'${f}' ${h}`.trim(),b=f)}}return"missingProperty"in l&&(m=m?`${m}.${l.missingProperty}`:l.missingProperty),{name:o,property:m,message:h,params:l,stack:g,schemaPath:c,title:b}});return Dv(i,r)}function Mv(e,t,r,n,i,s,a,o){const{validationError:l}=t;let c=Tv(t.errors,a,o,n);l&&(c=[...c,{stack:l.message}]),typeof s=="function"&&(c=s(c,a));let u=ny(c);if(l&&(u={...u,$schema:{__errors:[l.message]}}),typeof i!="function")return{errors:c,errorSchema:u};const d=Ed(e,n,r,n,!0),h=i(d,Ja(d),a,u),m=iy(h);return ai({errors:c,errorSchema:u},m)}var Oi={exports:{}},Fa={},fr={},Qr={},Ia={},Ra={},Da={},Ic;function Ts(){return Ic||(Ic=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class t{}e._CodeOrName=t,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class r extends t{constructor(f){if(super(),!e.IDENTIFIER.test(f))throw new Error("CodeGen: name must be a valid identifier");this.str=f}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=r;class n extends t{constructor(f){super(),this._items=typeof f=="string"?[f]:f}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const f=this._items[0];return f===""||f==='""'}get str(){var f;return(f=this._str)!==null&&f!==void 0?f:this._str=this._items.reduce((A,O)=>`${A}${O}`,"")}get names(){var f;return(f=this._names)!==null&&f!==void 0?f:this._names=this._items.reduce((A,O)=>(O instanceof r&&(A[O.str]=(A[O.str]||0)+1),A),{})}}e._Code=n,e.nil=new n("");function i(y,...f){const A=[y[0]];let O=0;for(;O{if(d.scopePath===void 0)throw new Error(`CodeGen: name "${d}" has no value`);return(0,t._)`${c}${d.scopePath}`})}scopeCode(c=this._values,u,d){return this._reduceValues(c,h=>{if(h.value===void 0)throw new Error(`CodeGen: name "${h}" has no value`);return h.value.code},u,d)}_reduceValues(c,u,d={},h){let m=t.nil;for(const g in c){const b=c[g];if(!b)continue;const v=d[g]=d[g]||new Map;b.forEach(y=>{if(v.has(y))return;v.set(y,n.Started);let f=u(y);if(f){const A=this.opts.es5?e.varKinds.var:e.varKinds.const;m=(0,t._)`${m}${A} ${y} = ${f};${this.opts._n}`}else if(f=h?.(y))m=(0,t._)`${m}${f}${this.opts._n}`;else throw new r(y);v.set(y,n.Completed)})}return m}}e.ValueScope=o})(Ta)),Ta}var Tc;function je(){return Tc||(Tc=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const t=Ts(),r=Dc();var n=Ts();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return n._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return n.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return n.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return n.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return n.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return n.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return n.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return n.Name}});var i=Dc();Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return i.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return i.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return i.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return i.varKinds}}),e.operators={GT:new t._Code(">"),GTE:new t._Code(">="),LT:new t._Code("<"),LTE:new t._Code("<="),EQ:new t._Code("==="),NEQ:new t._Code("!=="),NOT:new t._Code("!"),OR:new t._Code("||"),AND:new t._Code("&&"),ADD:new t._Code("+")};class s{optimizeNodes(){return this}optimizeNames(S,j){return this}}class a extends s{constructor(S,j,R){super(),this.varKind=S,this.name=j,this.rhs=R}render({es5:S,_n:j}){const R=S?r.varKinds.var:this.varKind,D=this.rhs===void 0?"":` = ${this.rhs}`;return`${R} ${this.name}${D};`+j}optimizeNames(S,j){if(S[this.name.str])return this.rhs&&(this.rhs=L(this.rhs,S,j)),this}get names(){return this.rhs instanceof t._CodeOrName?this.rhs.names:{}}}class o extends s{constructor(S,j,R){super(),this.lhs=S,this.rhs=j,this.sideEffects=R}render({_n:S}){return`${this.lhs} = ${this.rhs};`+S}optimizeNames(S,j){if(!(this.lhs instanceof t.Name&&!S[this.lhs.str]&&!this.sideEffects))return this.rhs=L(this.rhs,S,j),this}get names(){const S=this.lhs instanceof t.Name?{}:{...this.lhs.names};return M(S,this.rhs)}}class l extends o{constructor(S,j,R,D){super(S,R,D),this.op=j}render({_n:S}){return`${this.lhs} ${this.op}= ${this.rhs};`+S}}class c extends s{constructor(S){super(),this.label=S,this.names={}}render({_n:S}){return`${this.label}:`+S}}class u extends s{constructor(S){super(),this.label=S,this.names={}}render({_n:S}){return`break${this.label?` ${this.label}`:""};`+S}}class d extends s{constructor(S){super(),this.error=S}render({_n:S}){return`throw ${this.error};`+S}get names(){return this.error.names}}class h extends s{constructor(S){super(),this.code=S}render({_n:S}){return`${this.code};`+S}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(S,j){return this.code=L(this.code,S,j),this}get names(){return this.code instanceof t._CodeOrName?this.code.names:{}}}class m extends s{constructor(S=[]){super(),this.nodes=S}render(S){return this.nodes.reduce((j,R)=>j+R.render(S),"")}optimizeNodes(){const{nodes:S}=this;let j=S.length;for(;j--;){const R=S[j].optimizeNodes();Array.isArray(R)?S.splice(j,1,...R):R?S[j]=R:S.splice(j,1)}return S.length>0?this:void 0}optimizeNames(S,j){const{nodes:R}=this;let D=R.length;for(;D--;){const H=R[D];H.optimizeNames(S,j)||(K(S,H.names),R.splice(D,1))}return R.length>0?this:void 0}get names(){return this.nodes.reduce((S,j)=>q(S,j.names),{})}}class g extends m{render(S){return"{"+S._n+super.render(S)+"}"+S._n}}class b extends m{}class v extends g{}v.kind="else";class y extends g{constructor(S,j){super(j),this.condition=S}render(S){let j=`if(${this.condition})`+super.render(S);return this.else&&(j+="else "+this.else.render(S)),j}optimizeNodes(){super.optimizeNodes();const S=this.condition;if(S===!0)return this.nodes;let j=this.else;if(j){const R=j.optimizeNodes();j=this.else=Array.isArray(R)?new v(R):R}if(j)return S===!1?j instanceof y?j:j.nodes:this.nodes.length?this:new y(B(S),j instanceof y?[j]:j.nodes);if(!(S===!1||!this.nodes.length))return this}optimizeNames(S,j){var R;if(this.else=(R=this.else)===null||R===void 0?void 0:R.optimizeNames(S,j),!!(super.optimizeNames(S,j)||this.else))return this.condition=L(this.condition,S,j),this}get names(){const S=super.names;return M(S,this.condition),this.else&&q(S,this.else.names),S}}y.kind="if";class f extends g{}f.kind="for";class A extends f{constructor(S){super(),this.iteration=S}render(S){return`for(${this.iteration})`+super.render(S)}optimizeNames(S,j){if(super.optimizeNames(S,j))return this.iteration=L(this.iteration,S,j),this}get names(){return q(super.names,this.iteration.names)}}class O extends f{constructor(S,j,R,D){super(),this.varKind=S,this.name=j,this.from=R,this.to=D}render(S){const j=S.es5?r.varKinds.var:this.varKind,{name:R,from:D,to:H}=this;return`for(${j} ${R}=${D}; ${R}<${H}; ${R}++)`+super.render(S)}get names(){const S=M(super.names,this.from);return M(S,this.to)}}class p extends f{constructor(S,j,R,D){super(),this.loop=S,this.varKind=j,this.name=R,this.iterable=D}render(S){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(S)}optimizeNames(S,j){if(super.optimizeNames(S,j))return this.iterable=L(this.iterable,S,j),this}get names(){return q(super.names,this.iterable.names)}}class x extends g{constructor(S,j,R){super(),this.name=S,this.args=j,this.async=R}render(S){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(S)}}x.kind="func";class $ extends m{render(S){return"return "+super.render(S)}}$.kind="return";class k extends g{render(S){let j="try"+super.render(S);return this.catch&&(j+=this.catch.render(S)),this.finally&&(j+=this.finally.render(S)),j}optimizeNodes(){var S,j;return super.optimizeNodes(),(S=this.catch)===null||S===void 0||S.optimizeNodes(),(j=this.finally)===null||j===void 0||j.optimizeNodes(),this}optimizeNames(S,j){var R,D;return super.optimizeNames(S,j),(R=this.catch)===null||R===void 0||R.optimizeNames(S,j),(D=this.finally)===null||D===void 0||D.optimizeNames(S,j),this}get names(){const S=super.names;return this.catch&&q(S,this.catch.names),this.finally&&q(S,this.finally.names),S}}class N extends g{constructor(S){super(),this.error=S}render(S){return`catch(${this.error})`+super.render(S)}}N.kind="catch";class I extends g{render(S){return"finally"+super.render(S)}}I.kind="finally";class U{constructor(S,j={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...j,_n:j.lines?` -`:""},this._extScope=S,this._scope=new r.Scope({parent:S}),this._nodes=[new b]}toString(){return this._root.render(this.opts)}name(S){return this._scope.name(S)}scopeName(S){return this._extScope.name(S)}scopeValue(S,j){const R=this._extScope.value(S,j);return(this._values[R.prefix]||(this._values[R.prefix]=new Set)).add(R),R}getScopeValue(S,j){return this._extScope.getValue(S,j)}scopeRefs(S){return this._extScope.scopeRefs(S,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(S,j,R,D){const H=this._scope.toName(j);return R!==void 0&&D&&(this._constants[H.str]=R),this._leafNode(new a(S,H,R)),H}const(S,j,R){return this._def(r.varKinds.const,S,j,R)}let(S,j,R){return this._def(r.varKinds.let,S,j,R)}var(S,j,R){return this._def(r.varKinds.var,S,j,R)}assign(S,j,R){return this._leafNode(new o(S,j,R))}add(S,j){return this._leafNode(new l(S,e.operators.ADD,j))}code(S){return typeof S=="function"?S():S!==t.nil&&this._leafNode(new h(S)),this}object(...S){const j=["{"];for(const[R,D]of S)j.length>1&&j.push(","),j.push(R),(R!==D||this.opts.es5)&&(j.push(":"),(0,t.addCodeArg)(j,D));return j.push("}"),new t._Code(j)}if(S,j,R){if(this._blockNode(new y(S)),j&&R)this.code(j).else().code(R).endIf();else if(j)this.code(j).endIf();else if(R)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(S){return this._elseNode(new y(S))}else(){return this._elseNode(new v)}endIf(){return this._endBlockNode(y,v)}_for(S,j){return this._blockNode(S),j&&this.code(j).endFor(),this}for(S,j){return this._for(new A(S),j)}forRange(S,j,R,D,H=this.opts.es5?r.varKinds.var:r.varKinds.let){const T=this._scope.toName(S);return this._for(new O(H,T,j,R),()=>D(T))}forOf(S,j,R,D=r.varKinds.const){const H=this._scope.toName(S);if(this.opts.es5){const T=j instanceof t.Name?j:this.var("_arr",j);return this.forRange("_i",0,(0,t._)`${T}.length`,W=>{this.var(H,(0,t._)`${T}[${W}]`),R(H)})}return this._for(new p("of",D,H,j),()=>R(H))}forIn(S,j,R,D=this.opts.es5?r.varKinds.var:r.varKinds.const){if(this.opts.ownProperties)return this.forOf(S,(0,t._)`Object.keys(${j})`,R);const H=this._scope.toName(S);return this._for(new p("in",D,H,j),()=>R(H))}endFor(){return this._endBlockNode(f)}label(S){return this._leafNode(new c(S))}break(S){return this._leafNode(new u(S))}return(S){const j=new $;if(this._blockNode(j),this.code(S),j.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode($)}try(S,j,R){if(!j&&!R)throw new Error('CodeGen: "try" without "catch" and "finally"');const D=new k;if(this._blockNode(D),this.code(S),j){const H=this.name("e");this._currNode=D.catch=new N(H),j(H)}return R&&(this._currNode=D.finally=new I,this.code(R)),this._endBlockNode(N,I)}throw(S){return this._leafNode(new d(S))}block(S,j){return this._blockStarts.push(this._nodes.length),S&&this.code(S).endBlock(j),this}endBlock(S){const j=this._blockStarts.pop();if(j===void 0)throw new Error("CodeGen: not in self-balancing block");const R=this._nodes.length-j;if(R<0||S!==void 0&&R!==S)throw new Error(`CodeGen: wrong number of nodes: ${R} vs ${S} expected`);return this._nodes.length=j,this}func(S,j=t.nil,R,D){return this._blockNode(new x(S,j,R)),D&&this.code(D).endFunc(),this}endFunc(){return this._endBlockNode(x)}optimize(S=1){for(;S-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(S){return this._currNode.nodes.push(S),this}_blockNode(S){this._currNode.nodes.push(S),this._nodes.push(S)}_endBlockNode(S,j){const R=this._currNode;if(R instanceof S||j&&R instanceof j)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${j?`${S.kind}/${j.kind}`:S.kind}"`)}_elseNode(S){const j=this._currNode;if(!(j instanceof y))throw new Error('CodeGen: "else" without "if"');return this._currNode=j.else=S,this}get _root(){return this._nodes[0]}get _currNode(){const S=this._nodes;return S[S.length-1]}set _currNode(S){const j=this._nodes;j[j.length-1]=S}}e.CodeGen=U;function q(C,S){for(const j in S)C[j]=(C[j]||0)+(S[j]||0);return C}function M(C,S){return S instanceof t._CodeOrName?q(C,S.names):C}function L(C,S,j){if(C instanceof t.Name)return R(C);if(!D(C))return C;return new t._Code(C._items.reduce((H,T)=>(T instanceof t.Name&&(T=R(T)),T instanceof t._Code?H.push(...T._items):H.push(T),H),[]));function R(H){const T=j[H.str];return T===void 0||S[H.str]!==1?H:(delete S[H.str],T)}function D(H){return H instanceof t._Code&&H._items.some(T=>T instanceof t.Name&&S[T.str]===1&&j[T.str]!==void 0)}}function K(C,S){for(const j in S)C[j]=(C[j]||0)-(S[j]||0)}function B(C){return typeof C=="boolean"||typeof C=="number"||C===null?!C:(0,t._)`!${P(C)}`}e.not=B;const Q=_(e.operators.AND);function X(...C){return C.reduce(Q)}e.and=X;const re=_(e.operators.OR);function E(...C){return C.reduce(re)}e.or=E;function _(C){return(S,j)=>S===t.nil?j:j===t.nil?S:(0,t._)`${P(S)} ${C} ${P(j)}`}function P(C){return C instanceof t.Name?C:(0,t._)`(${C})`}})(Ra)),Ra}var we={},Mc;function Re(){if(Mc)return we;Mc=1,Object.defineProperty(we,"__esModule",{value:!0}),we.checkStrictMode=we.getErrorPath=we.Type=we.useFunc=we.setEvaluated=we.evaluatedPropsToName=we.mergeEvaluated=we.eachItem=we.unescapeJsonPointer=we.escapeJsonPointer=we.escapeFragment=we.unescapeFragment=we.schemaRefOrVal=we.schemaHasRulesButRef=we.schemaHasRules=we.checkUnknownRules=we.alwaysValidSchema=we.toHash=void 0;const e=je(),t=Ts();function r(p){const x={};for(const $ of p)x[$]=!0;return x}we.toHash=r;function n(p,x){return typeof x=="boolean"?x:Object.keys(x).length===0?!0:(i(p,x),!s(x,p.self.RULES.all))}we.alwaysValidSchema=n;function i(p,x=p.schema){const{opts:$,self:k}=p;if(!$.strictSchema||typeof x=="boolean")return;const N=k.RULES.keywords;for(const I in x)N[I]||O(p,`unknown keyword: "${I}"`)}we.checkUnknownRules=i;function s(p,x){if(typeof p=="boolean")return!p;for(const $ in p)if(x[$])return!0;return!1}we.schemaHasRules=s;function a(p,x){if(typeof p=="boolean")return!p;for(const $ in p)if($!=="$ref"&&x.all[$])return!0;return!1}we.schemaHasRulesButRef=a;function o({topSchemaRef:p,schemaPath:x},$,k,N){if(!N){if(typeof $=="number"||typeof $=="boolean")return $;if(typeof $=="string")return(0,e._)`${$}`}return(0,e._)`${p}${x}${(0,e.getProperty)(k)}`}we.schemaRefOrVal=o;function l(p){return d(decodeURIComponent(p))}we.unescapeFragment=l;function c(p){return encodeURIComponent(u(p))}we.escapeFragment=c;function u(p){return typeof p=="number"?`${p}`:p.replace(/~/g,"~0").replace(/\//g,"~1")}we.escapeJsonPointer=u;function d(p){return p.replace(/~1/g,"/").replace(/~0/g,"~")}we.unescapeJsonPointer=d;function h(p,x){if(Array.isArray(p))for(const $ of p)x($);else x(p)}we.eachItem=h;function m({mergeNames:p,mergeToName:x,mergeValues:$,resultToName:k}){return(N,I,U,q)=>{const M=U===void 0?I:U instanceof e.Name?(I instanceof e.Name?p(N,I,U):x(N,I,U),U):I instanceof e.Name?(x(N,U,I),I):$(I,U);return q===e.Name&&!(M instanceof e.Name)?k(N,M):M}}we.mergeEvaluated={props:m({mergeNames:(p,x,$)=>p.if((0,e._)`${$} !== true && ${x} !== undefined`,()=>{p.if((0,e._)`${x} === true`,()=>p.assign($,!0),()=>p.assign($,(0,e._)`${$} || {}`).code((0,e._)`Object.assign(${$}, ${x})`))}),mergeToName:(p,x,$)=>p.if((0,e._)`${$} !== true`,()=>{x===!0?p.assign($,!0):(p.assign($,(0,e._)`${$} || {}`),b(p,$,x))}),mergeValues:(p,x)=>p===!0?!0:{...p,...x},resultToName:g}),items:m({mergeNames:(p,x,$)=>p.if((0,e._)`${$} !== true && ${x} !== undefined`,()=>p.assign($,(0,e._)`${x} === true ? true : ${$} > ${x} ? ${$} : ${x}`)),mergeToName:(p,x,$)=>p.if((0,e._)`${$} !== true`,()=>p.assign($,x===!0?!0:(0,e._)`${$} > ${x} ? ${$} : ${x}`)),mergeValues:(p,x)=>p===!0?!0:Math.max(p,x),resultToName:(p,x)=>p.var("items",x)})};function g(p,x){if(x===!0)return p.var("props",!0);const $=p.var("props",(0,e._)`{}`);return x!==void 0&&b(p,$,x),$}we.evaluatedPropsToName=g;function b(p,x,$){Object.keys($).forEach(k=>p.assign((0,e._)`${x}${(0,e.getProperty)(k)}`,!0))}we.setEvaluated=b;const v={};function y(p,x){return p.scopeValue("func",{ref:x,code:v[x.code]||(v[x.code]=new t._Code(x.code))})}we.useFunc=y;var f;(function(p){p[p.Num=0]="Num",p[p.Str=1]="Str"})(f||(we.Type=f={}));function A(p,x,$){if(p instanceof e.Name){const k=x===f.Num;return $?k?(0,e._)`"[" + ${p} + "]"`:(0,e._)`"['" + ${p} + "']"`:k?(0,e._)`"/" + ${p}`:(0,e._)`"/" + ${p}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return $?(0,e.getProperty)(p).toString():"/"+u(p)}we.getErrorPath=A;function O(p,x,$=p.opts.strictSchema){if($){if(x=`strict mode: ${x}`,$===!0)throw new Error(x);p.self.logger.warn(x)}}return we.checkStrictMode=O,we}var ki={},Uc;function zr(){if(Uc)return ki;Uc=1,Object.defineProperty(ki,"__esModule",{value:!0});const e=je(),t={data:new e.Name("data"),valCxt:new e.Name("valCxt"),instancePath:new e.Name("instancePath"),parentData:new e.Name("parentData"),parentDataProperty:new e.Name("parentDataProperty"),rootData:new e.Name("rootData"),dynamicAnchors:new e.Name("dynamicAnchors"),vErrors:new e.Name("vErrors"),errors:new e.Name("errors"),this:new e.Name("this"),self:new e.Name("self"),scope:new e.Name("scope"),json:new e.Name("json"),jsonPos:new e.Name("jsonPos"),jsonLen:new e.Name("jsonLen"),jsonPart:new e.Name("jsonPart")};return ki.default=t,ki}var qc;function Gs(){return qc||(qc=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const t=je(),r=Re(),n=zr();e.keywordError={message:({keyword:v})=>(0,t.str)`must pass "${v}" keyword validation`},e.keyword$DataError={message:({keyword:v,schemaType:y})=>y?(0,t.str)`"${v}" keyword must be ${y} ($data)`:(0,t.str)`"${v}" keyword is invalid ($data)`};function i(v,y=e.keywordError,f,A){const{it:O}=v,{gen:p,compositeRule:x,allErrors:$}=O,k=d(v,y,f);A??(x||$)?l(p,k):c(O,(0,t._)`[${k}]`)}e.reportError=i;function s(v,y=e.keywordError,f){const{it:A}=v,{gen:O,compositeRule:p,allErrors:x}=A,$=d(v,y,f);l(O,$),p||x||c(A,n.default.vErrors)}e.reportExtraError=s;function a(v,y){v.assign(n.default.errors,y),v.if((0,t._)`${n.default.vErrors} !== null`,()=>v.if(y,()=>v.assign((0,t._)`${n.default.vErrors}.length`,y),()=>v.assign(n.default.vErrors,null)))}e.resetErrorsCount=a;function o({gen:v,keyword:y,schemaValue:f,data:A,errsCount:O,it:p}){if(O===void 0)throw new Error("ajv implementation error");const x=v.name("err");v.forRange("i",O,n.default.errors,$=>{v.const(x,(0,t._)`${n.default.vErrors}[${$}]`),v.if((0,t._)`${x}.instancePath === undefined`,()=>v.assign((0,t._)`${x}.instancePath`,(0,t.strConcat)(n.default.instancePath,p.errorPath))),v.assign((0,t._)`${x}.schemaPath`,(0,t.str)`${p.errSchemaPath}/${y}`),p.opts.verbose&&(v.assign((0,t._)`${x}.schema`,f),v.assign((0,t._)`${x}.data`,A))})}e.extendErrors=o;function l(v,y){const f=v.const("err",y);v.if((0,t._)`${n.default.vErrors} === null`,()=>v.assign(n.default.vErrors,(0,t._)`[${f}]`),(0,t._)`${n.default.vErrors}.push(${f})`),v.code((0,t._)`${n.default.errors}++`)}function c(v,y){const{gen:f,validateName:A,schemaEnv:O}=v;O.$async?f.throw((0,t._)`new ${v.ValidationError}(${y})`):(f.assign((0,t._)`${A}.errors`,y),f.return(!1))}const u={keyword:new t.Name("keyword"),schemaPath:new t.Name("schemaPath"),params:new t.Name("params"),propertyName:new t.Name("propertyName"),message:new t.Name("message"),schema:new t.Name("schema"),parentSchema:new t.Name("parentSchema")};function d(v,y,f){const{createErrors:A}=v.it;return A===!1?(0,t._)`{}`:h(v,y,f)}function h(v,y,f={}){const{gen:A,it:O}=v,p=[m(O,f),g(v,f)];return b(v,y,p),A.object(...p)}function m({errorPath:v},{instancePath:y}){const f=y?(0,t.str)`${v}${(0,r.getErrorPath)(y,r.Type.Str)}`:v;return[n.default.instancePath,(0,t.strConcat)(n.default.instancePath,f)]}function g({keyword:v,it:{errSchemaPath:y}},{schemaPath:f,parentSchema:A}){let O=A?y:(0,t.str)`${y}/${v}`;return f&&(O=(0,t.str)`${O}${(0,r.getErrorPath)(f,r.Type.Str)}`),[u.schemaPath,O]}function b(v,{params:y,message:f},A){const{keyword:O,data:p,schemaValue:x,it:$}=v,{opts:k,propertyName:N,topSchemaRef:I,schemaPath:U}=$;A.push([u.keyword,O],[u.params,typeof y=="function"?y(v):y||(0,t._)`{}`]),k.messages&&A.push([u.message,typeof f=="function"?f(v):f]),k.verbose&&A.push([u.schema,x],[u.parentSchema,(0,t._)`${I}${U}`],[n.default.data,p]),N&&A.push([u.propertyName,N])}})(Ia)),Ia}var Lc;function Uv(){if(Lc)return Qr;Lc=1,Object.defineProperty(Qr,"__esModule",{value:!0}),Qr.boolOrEmptySchema=Qr.topBoolOrEmptySchema=void 0;const e=Gs(),t=je(),r=zr(),n={message:"boolean schema is false"};function i(o){const{gen:l,schema:c,validateName:u}=o;c===!1?a(o,!1):typeof c=="object"&&c.$async===!0?l.return(r.default.data):(l.assign((0,t._)`${u}.errors`,null),l.return(!0))}Qr.topBoolOrEmptySchema=i;function s(o,l){const{gen:c,schema:u}=o;u===!1?(c.var(l,!1),a(o)):c.var(l,!0)}Qr.boolOrEmptySchema=s;function a(o,l){const{gen:c,data:u}=o,d={gen:c,keyword:"false schema",data:u,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:o};(0,e.reportError)(d,n,void 0,l)}return Qr}var mt={},Xr={},Vc;function yf(){if(Vc)return Xr;Vc=1,Object.defineProperty(Xr,"__esModule",{value:!0}),Xr.getRules=Xr.isJSONType=void 0;const e=["string","number","integer","boolean","null","object","array"],t=new Set(e);function r(i){return typeof i=="string"&&t.has(i)}Xr.isJSONType=r;function n(){const i={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...i,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},i.number,i.string,i.array,i.object],post:{rules:[]},all:{},keywords:{}}}return Xr.getRules=n,Xr}var hr={},zc;function gf(){if(zc)return hr;zc=1,Object.defineProperty(hr,"__esModule",{value:!0}),hr.shouldUseRule=hr.shouldUseGroup=hr.schemaHasRulesForType=void 0;function e({schema:n,self:i},s){const a=i.RULES.types[s];return a&&a!==!0&&t(n,a)}hr.schemaHasRulesForType=e;function t(n,i){return i.rules.some(s=>r(n,s))}hr.shouldUseGroup=t;function r(n,i){var s;return n[i.keyword]!==void 0||((s=i.definition.implements)===null||s===void 0?void 0:s.some(a=>n[a]!==void 0))}return hr.shouldUseRule=r,hr}var Bc;function Ms(){if(Bc)return mt;Bc=1,Object.defineProperty(mt,"__esModule",{value:!0}),mt.reportTypeError=mt.checkDataTypes=mt.checkDataType=mt.coerceAndCheckDataType=mt.getJSONTypes=mt.getSchemaTypes=mt.DataType=void 0;const e=yf(),t=gf(),r=Gs(),n=je(),i=Re();var s;(function(f){f[f.Correct=0]="Correct",f[f.Wrong=1]="Wrong"})(s||(mt.DataType=s={}));function a(f){const A=o(f.type);if(A.includes("null")){if(f.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!A.length&&f.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');f.nullable===!0&&A.push("null")}return A}mt.getSchemaTypes=a;function o(f){const A=Array.isArray(f)?f:f?[f]:[];if(A.every(e.isJSONType))return A;throw new Error("type must be JSONType or JSONType[]: "+A.join(","))}mt.getJSONTypes=o;function l(f,A){const{gen:O,data:p,opts:x}=f,$=u(A,x.coerceTypes),k=A.length>0&&!($.length===0&&A.length===1&&(0,t.schemaHasRulesForType)(f,A[0]));if(k){const N=g(A,p,x.strictNumbers,s.Wrong);O.if(N,()=>{$.length?d(f,A,$):v(f)})}return k}mt.coerceAndCheckDataType=l;const c=new Set(["string","number","integer","boolean","null"]);function u(f,A){return A?f.filter(O=>c.has(O)||A==="array"&&O==="array"):[]}function d(f,A,O){const{gen:p,data:x,opts:$}=f,k=p.let("dataType",(0,n._)`typeof ${x}`),N=p.let("coerced",(0,n._)`undefined`);$.coerceTypes==="array"&&p.if((0,n._)`${k} == 'object' && Array.isArray(${x}) && ${x}.length == 1`,()=>p.assign(x,(0,n._)`${x}[0]`).assign(k,(0,n._)`typeof ${x}`).if(g(A,x,$.strictNumbers),()=>p.assign(N,x))),p.if((0,n._)`${N} !== undefined`);for(const U of O)(c.has(U)||U==="array"&&$.coerceTypes==="array")&&I(U);p.else(),v(f),p.endIf(),p.if((0,n._)`${N} !== undefined`,()=>{p.assign(x,N),h(f,N)});function I(U){switch(U){case"string":p.elseIf((0,n._)`${k} == "number" || ${k} == "boolean"`).assign(N,(0,n._)`"" + ${x}`).elseIf((0,n._)`${x} === null`).assign(N,(0,n._)`""`);return;case"number":p.elseIf((0,n._)`${k} == "boolean" || ${x} === null - || (${k} == "string" && ${x} && ${x} == +${x})`).assign(N,(0,n._)`+${x}`);return;case"integer":p.elseIf((0,n._)`${k} === "boolean" || ${x} === null - || (${k} === "string" && ${x} && ${x} == +${x} && !(${x} % 1))`).assign(N,(0,n._)`+${x}`);return;case"boolean":p.elseIf((0,n._)`${x} === "false" || ${x} === 0 || ${x} === null`).assign(N,!1).elseIf((0,n._)`${x} === "true" || ${x} === 1`).assign(N,!0);return;case"null":p.elseIf((0,n._)`${x} === "" || ${x} === 0 || ${x} === false`),p.assign(N,null);return;case"array":p.elseIf((0,n._)`${k} === "string" || ${k} === "number" - || ${k} === "boolean" || ${x} === null`).assign(N,(0,n._)`[${x}]`)}}}function h({gen:f,parentData:A,parentDataProperty:O},p){f.if((0,n._)`${A} !== undefined`,()=>f.assign((0,n._)`${A}[${O}]`,p))}function m(f,A,O,p=s.Correct){const x=p===s.Correct?n.operators.EQ:n.operators.NEQ;let $;switch(f){case"null":return(0,n._)`${A} ${x} null`;case"array":$=(0,n._)`Array.isArray(${A})`;break;case"object":$=(0,n._)`${A} && typeof ${A} == "object" && !Array.isArray(${A})`;break;case"integer":$=k((0,n._)`!(${A} % 1) && !isNaN(${A})`);break;case"number":$=k();break;default:return(0,n._)`typeof ${A} ${x} ${f}`}return p===s.Correct?$:(0,n.not)($);function k(N=n.nil){return(0,n.and)((0,n._)`typeof ${A} == "number"`,N,O?(0,n._)`isFinite(${A})`:n.nil)}}mt.checkDataType=m;function g(f,A,O,p){if(f.length===1)return m(f[0],A,O,p);let x;const $=(0,i.toHash)(f);if($.array&&$.object){const k=(0,n._)`typeof ${A} != "object"`;x=$.null?k:(0,n._)`!${A} || ${k}`,delete $.null,delete $.array,delete $.object}else x=n.nil;$.number&&delete $.integer;for(const k in $)x=(0,n.and)(x,m(k,A,O,p));return x}mt.checkDataTypes=g;const b={message:({schema:f})=>`must be ${f}`,params:({schema:f,schemaValue:A})=>typeof f=="string"?(0,n._)`{type: ${f}}`:(0,n._)`{type: ${A}}`};function v(f){const A=y(f);(0,r.reportError)(A,b)}mt.reportTypeError=v;function y(f){const{gen:A,data:O,schema:p}=f,x=(0,i.schemaRefOrVal)(f,p,"type");return{gen:A,keyword:"type",data:O,schema:p.type,schemaCode:x,schemaValue:x,parentSchema:p,params:{},it:f}}return mt}var ei={},Kc;function qv(){if(Kc)return ei;Kc=1,Object.defineProperty(ei,"__esModule",{value:!0}),ei.assignDefaults=void 0;const e=je(),t=Re();function r(i,s){const{properties:a,items:o}=i.schema;if(s==="object"&&a)for(const l in a)n(i,l,a[l].default);else s==="array"&&Array.isArray(o)&&o.forEach((l,c)=>n(i,c,l.default))}ei.assignDefaults=r;function n(i,s,a){const{gen:o,compositeRule:l,data:c,opts:u}=i;if(a===void 0)return;const d=(0,e._)`${c}${(0,e.getProperty)(s)}`;if(l){(0,t.checkStrictMode)(i,`default is ignored for: ${d}`);return}let h=(0,e._)`${d} === undefined`;u.useDefaults==="empty"&&(h=(0,e._)`${h} || ${d} === null || ${d} === ""`),o.if(h,(0,e._)`${d} = ${(0,e.stringify)(a)}`)}return ei}var Jt={},ze={},Hc;function Xt(){if(Hc)return ze;Hc=1,Object.defineProperty(ze,"__esModule",{value:!0}),ze.validateUnion=ze.validateArray=ze.usePattern=ze.callValidateCode=ze.schemaProperties=ze.allSchemaProperties=ze.noPropertyInData=ze.propertyInData=ze.isOwnProperty=ze.hasPropFunc=ze.reportMissingProp=ze.checkMissingProp=ze.checkReportMissingProp=void 0;const e=je(),t=Re(),r=zr(),n=Re();function i(f,A){const{gen:O,data:p,it:x}=f;O.if(u(O,p,A,x.opts.ownProperties),()=>{f.setParams({missingProperty:(0,e._)`${A}`},!0),f.error()})}ze.checkReportMissingProp=i;function s({gen:f,data:A,it:{opts:O}},p,x){return(0,e.or)(...p.map($=>(0,e.and)(u(f,A,$,O.ownProperties),(0,e._)`${x} = ${$}`)))}ze.checkMissingProp=s;function a(f,A){f.setParams({missingProperty:A},!0),f.error()}ze.reportMissingProp=a;function o(f){return f.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,e._)`Object.prototype.hasOwnProperty`})}ze.hasPropFunc=o;function l(f,A,O){return(0,e._)`${o(f)}.call(${A}, ${O})`}ze.isOwnProperty=l;function c(f,A,O,p){const x=(0,e._)`${A}${(0,e.getProperty)(O)} !== undefined`;return p?(0,e._)`${x} && ${l(f,A,O)}`:x}ze.propertyInData=c;function u(f,A,O,p){const x=(0,e._)`${A}${(0,e.getProperty)(O)} === undefined`;return p?(0,e.or)(x,(0,e.not)(l(f,A,O))):x}ze.noPropertyInData=u;function d(f){return f?Object.keys(f).filter(A=>A!=="__proto__"):[]}ze.allSchemaProperties=d;function h(f,A){return d(A).filter(O=>!(0,t.alwaysValidSchema)(f,A[O]))}ze.schemaProperties=h;function m({schemaCode:f,data:A,it:{gen:O,topSchemaRef:p,schemaPath:x,errorPath:$},it:k},N,I,U){const q=U?(0,e._)`${f}, ${A}, ${p}${x}`:A,M=[[r.default.instancePath,(0,e.strConcat)(r.default.instancePath,$)],[r.default.parentData,k.parentData],[r.default.parentDataProperty,k.parentDataProperty],[r.default.rootData,r.default.rootData]];k.opts.dynamicRef&&M.push([r.default.dynamicAnchors,r.default.dynamicAnchors]);const L=(0,e._)`${q}, ${O.object(...M)}`;return I!==e.nil?(0,e._)`${N}.call(${I}, ${L})`:(0,e._)`${N}(${L})`}ze.callValidateCode=m;const g=(0,e._)`new RegExp`;function b({gen:f,it:{opts:A}},O){const p=A.unicodeRegExp?"u":"",{regExp:x}=A.code,$=x(O,p);return f.scopeValue("pattern",{key:$.toString(),ref:$,code:(0,e._)`${x.code==="new RegExp"?g:(0,n.useFunc)(f,x)}(${O}, ${p})`})}ze.usePattern=b;function v(f){const{gen:A,data:O,keyword:p,it:x}=f,$=A.name("valid");if(x.allErrors){const N=A.let("valid",!0);return k(()=>A.assign(N,!1)),N}return A.var($,!0),k(()=>A.break()),$;function k(N){const I=A.const("len",(0,e._)`${O}.length`);A.forRange("i",0,I,U=>{f.subschema({keyword:p,dataProp:U,dataPropType:t.Type.Num},$),A.if((0,e.not)($),N)})}}ze.validateArray=v;function y(f){const{gen:A,schema:O,keyword:p,it:x}=f;if(!Array.isArray(O))throw new Error("ajv implementation error");if(O.some(I=>(0,t.alwaysValidSchema)(x,I))&&!x.opts.unevaluated)return;const k=A.let("valid",!1),N=A.name("_valid");A.block(()=>O.forEach((I,U)=>{const q=f.subschema({keyword:p,schemaProp:U,compositeRule:!0},N);A.assign(k,(0,e._)`${k} || ${N}`),f.mergeValidEvaluated(q,N)||A.if((0,e.not)(k))})),f.result(k,()=>f.reset(),()=>f.error(!0))}return ze.validateUnion=y,ze}var Wc;function Lv(){if(Wc)return Jt;Wc=1,Object.defineProperty(Jt,"__esModule",{value:!0}),Jt.validateKeywordUsage=Jt.validSchemaType=Jt.funcKeywordCode=Jt.macroKeywordCode=void 0;const e=je(),t=zr(),r=Xt(),n=Gs();function i(h,m){const{gen:g,keyword:b,schema:v,parentSchema:y,it:f}=h,A=m.macro.call(f.self,v,y,f),O=c(g,b,A);f.opts.validateSchema!==!1&&f.self.validateSchema(A,!0);const p=g.name("valid");h.subschema({schema:A,schemaPath:e.nil,errSchemaPath:`${f.errSchemaPath}/${b}`,topSchemaRef:O,compositeRule:!0},p),h.pass(p,()=>h.error(!0))}Jt.macroKeywordCode=i;function s(h,m){var g;const{gen:b,keyword:v,schema:y,parentSchema:f,$data:A,it:O}=h;l(O,m);const p=!A&&m.compile?m.compile.call(O.self,y,f,O):m.validate,x=c(b,v,p),$=b.let("valid");h.block$data($,k),h.ok((g=m.valid)!==null&&g!==void 0?g:$);function k(){if(m.errors===!1)U(),m.modifying&&a(h),q(()=>h.error());else{const M=m.async?N():I();m.modifying&&a(h),q(()=>o(h,M))}}function N(){const M=b.let("ruleErrs",null);return b.try(()=>U((0,e._)`await `),L=>b.assign($,!1).if((0,e._)`${L} instanceof ${O.ValidationError}`,()=>b.assign(M,(0,e._)`${L}.errors`),()=>b.throw(L))),M}function I(){const M=(0,e._)`${x}.errors`;return b.assign(M,null),U(e.nil),M}function U(M=m.async?(0,e._)`await `:e.nil){const L=O.opts.passContext?t.default.this:t.default.self,K=!("compile"in m&&!A||m.schema===!1);b.assign($,(0,e._)`${M}${(0,r.callValidateCode)(h,x,L,K)}`,m.modifying)}function q(M){var L;b.if((0,e.not)((L=m.valid)!==null&&L!==void 0?L:$),M)}}Jt.funcKeywordCode=s;function a(h){const{gen:m,data:g,it:b}=h;m.if(b.parentData,()=>m.assign(g,(0,e._)`${b.parentData}[${b.parentDataProperty}]`))}function o(h,m){const{gen:g}=h;g.if((0,e._)`Array.isArray(${m})`,()=>{g.assign(t.default.vErrors,(0,e._)`${t.default.vErrors} === null ? ${m} : ${t.default.vErrors}.concat(${m})`).assign(t.default.errors,(0,e._)`${t.default.vErrors}.length`),(0,n.extendErrors)(h)},()=>h.error())}function l({schemaEnv:h},m){if(m.async&&!h.$async)throw new Error("async keyword in sync schema")}function c(h,m,g){if(g===void 0)throw new Error(`keyword "${m}" failed to compile`);return h.scopeValue("keyword",typeof g=="function"?{ref:g}:{ref:g,code:(0,e.stringify)(g)})}function u(h,m,g=!1){return!m.length||m.some(b=>b==="array"?Array.isArray(h):b==="object"?h&&typeof h=="object"&&!Array.isArray(h):typeof h==b||g&&typeof h>"u")}Jt.validSchemaType=u;function d({schema:h,opts:m,self:g,errSchemaPath:b},v,y){if(Array.isArray(v.keyword)?!v.keyword.includes(y):v.keyword!==y)throw new Error("ajv implementation error");const f=v.dependencies;if(f?.some(A=>!Object.prototype.hasOwnProperty.call(h,A)))throw new Error(`parent schema must have dependencies of ${y}: ${f.join(",")}`);if(v.validateSchema&&!v.validateSchema(h[y])){const O=`keyword "${y}" value is invalid at path "${b}": `+g.errorsText(v.validateSchema.errors);if(m.validateSchema==="log")g.logger.error(O);else throw new Error(O)}}return Jt.validateKeywordUsage=d,Jt}var mr={},Gc;function Vv(){if(Gc)return mr;Gc=1,Object.defineProperty(mr,"__esModule",{value:!0}),mr.extendSubschemaMode=mr.extendSubschemaData=mr.getSubschema=void 0;const e=je(),t=Re();function r(s,{keyword:a,schemaProp:o,schema:l,schemaPath:c,errSchemaPath:u,topSchemaRef:d}){if(a!==void 0&&l!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(a!==void 0){const h=s.schema[a];return o===void 0?{schema:h,schemaPath:(0,e._)`${s.schemaPath}${(0,e.getProperty)(a)}`,errSchemaPath:`${s.errSchemaPath}/${a}`}:{schema:h[o],schemaPath:(0,e._)`${s.schemaPath}${(0,e.getProperty)(a)}${(0,e.getProperty)(o)}`,errSchemaPath:`${s.errSchemaPath}/${a}/${(0,t.escapeFragment)(o)}`}}if(l!==void 0){if(c===void 0||u===void 0||d===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:l,schemaPath:c,topSchemaRef:d,errSchemaPath:u}}throw new Error('either "keyword" or "schema" must be passed')}mr.getSubschema=r;function n(s,a,{dataProp:o,dataPropType:l,data:c,dataTypes:u,propertyName:d}){if(c!==void 0&&o!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:h}=a;if(o!==void 0){const{errorPath:g,dataPathArr:b,opts:v}=a,y=h.let("data",(0,e._)`${a.data}${(0,e.getProperty)(o)}`,!0);m(y),s.errorPath=(0,e.str)`${g}${(0,t.getErrorPath)(o,l,v.jsPropertySyntax)}`,s.parentDataProperty=(0,e._)`${o}`,s.dataPathArr=[...b,s.parentDataProperty]}if(c!==void 0){const g=c instanceof e.Name?c:h.let("data",c,!0);m(g),d!==void 0&&(s.propertyName=d)}u&&(s.dataTypes=u);function m(g){s.data=g,s.dataLevel=a.dataLevel+1,s.dataTypes=[],a.definedProperties=new Set,s.parentData=a.data,s.dataNames=[...a.dataNames,g]}}mr.extendSubschemaData=n;function i(s,{jtdDiscriminator:a,jtdMetadata:o,compositeRule:l,createErrors:c,allErrors:u}){l!==void 0&&(s.compositeRule=l),c!==void 0&&(s.createErrors=c),u!==void 0&&(s.allErrors=u),s.jtdDiscriminator=a,s.jtdMetadata=o}return mr.extendSubschemaMode=i,mr}var wt={},Ma,Jc;function vf(){return Jc||(Jc=1,Ma=function e(t,r){if(t===r)return!0;if(t&&r&&typeof t=="object"&&typeof r=="object"){if(t.constructor!==r.constructor)return!1;var n,i,s;if(Array.isArray(t)){if(n=t.length,n!=r.length)return!1;for(i=n;i--!==0;)if(!e(t[i],r[i]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if(s=Object.keys(t),n=s.length,n!==Object.keys(r).length)return!1;for(i=n;i--!==0;)if(!Object.prototype.hasOwnProperty.call(r,s[i]))return!1;for(i=n;i--!==0;){var a=s[i];if(!e(t[a],r[a]))return!1}return!0}return t!==t&&r!==r}),Ma}var Ua={exports:{}},Yc;function zv(){if(Yc)return Ua.exports;Yc=1;var e=Ua.exports=function(n,i,s){typeof i=="function"&&(s=i,i={}),s=i.cb||s;var a=typeof s=="function"?s:s.pre||function(){},o=s.post||function(){};t(i,a,o,n,"",n)};e.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},e.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},e.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},e.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function t(n,i,s,a,o,l,c,u,d,h){if(a&&typeof a=="object"&&!Array.isArray(a)){i(a,o,l,c,u,d,h);for(var m in a){var g=a[m];if(Array.isArray(g)){if(m in e.arrayKeywords)for(var b=0;bv+=o(f)),v===1/0))return 1/0}return v}function l(b,v="",y){y!==!1&&(v=d(v));const f=b.parse(v);return c(b,f)}wt.getFullPath=l;function c(b,v){return b.serialize(v).split("#")[0]+"#"}wt._getFullPath=c;const u=/#\/?$/;function d(b){return b?b.replace(u,""):""}wt.normalizeId=d;function h(b,v,y){return y=d(y),b.resolve(v,y)}wt.resolveUrl=h;const m=/^[a-z_][-a-z0-9._]*$/i;function g(b,v){if(typeof b=="boolean")return{};const{schemaId:y,uriResolver:f}=this.opts,A=d(b[y]||v),O={"":A},p=l(f,A,!1),x={},$=new Set;return r(b,{allKeys:!0},(I,U,q,M)=>{if(M===void 0)return;const L=p+U;let K=O[M];typeof I[y]=="string"&&(K=B.call(this,I[y])),Q.call(this,I.$anchor),Q.call(this,I.$dynamicAnchor),O[U]=K;function B(X){const re=this.opts.uriResolver.resolve;if(X=d(K?re(K,X):X),$.has(X))throw N(X);$.add(X);let E=this.refs[X];return typeof E=="string"&&(E=this.refs[E]),typeof E=="object"?k(I,E.schema,X):X!==d(L)&&(X[0]==="#"?(k(I,x[X],X),x[X]=I):this.refs[X]=L),X}function Q(X){if(typeof X=="string"){if(!m.test(X))throw new Error(`invalid anchor "${X}"`);B.call(this,`#${X}`)}}}),x;function k(I,U,q){if(U!==void 0&&!t(I,U))throw N(q)}function N(I){return new Error(`reference "${I}" resolves to more than one schema`)}}return wt.getSchemaRefs=g,wt}var Qc;function Ys(){if(Qc)return fr;Qc=1,Object.defineProperty(fr,"__esModule",{value:!0}),fr.getData=fr.KeywordCxt=fr.validateFunctionCode=void 0;const e=Uv(),t=Ms(),r=gf(),n=Ms(),i=qv(),s=Lv(),a=Vv(),o=je(),l=zr(),c=Js(),u=Re(),d=Gs();function h(F){if(p(F)&&($(F),O(F))){v(F);return}m(F,()=>(0,e.topBoolOrEmptySchema)(F))}fr.validateFunctionCode=h;function m({gen:F,validateName:V,schema:z,schemaEnv:J,opts:Y},Z){Y.code.es5?F.func(V,(0,o._)`${l.default.data}, ${l.default.valCxt}`,J.$async,()=>{F.code((0,o._)`"use strict"; ${f(z,Y)}`),b(F,Y),F.code(Z)}):F.func(V,(0,o._)`${l.default.data}, ${g(Y)}`,J.$async,()=>F.code(f(z,Y)).code(Z))}function g(F){return(0,o._)`{${l.default.instancePath}="", ${l.default.parentData}, ${l.default.parentDataProperty}, ${l.default.rootData}=${l.default.data}${F.dynamicRef?(0,o._)`, ${l.default.dynamicAnchors}={}`:o.nil}}={}`}function b(F,V){F.if(l.default.valCxt,()=>{F.var(l.default.instancePath,(0,o._)`${l.default.valCxt}.${l.default.instancePath}`),F.var(l.default.parentData,(0,o._)`${l.default.valCxt}.${l.default.parentData}`),F.var(l.default.parentDataProperty,(0,o._)`${l.default.valCxt}.${l.default.parentDataProperty}`),F.var(l.default.rootData,(0,o._)`${l.default.valCxt}.${l.default.rootData}`),V.dynamicRef&&F.var(l.default.dynamicAnchors,(0,o._)`${l.default.valCxt}.${l.default.dynamicAnchors}`)},()=>{F.var(l.default.instancePath,(0,o._)`""`),F.var(l.default.parentData,(0,o._)`undefined`),F.var(l.default.parentDataProperty,(0,o._)`undefined`),F.var(l.default.rootData,l.default.data),V.dynamicRef&&F.var(l.default.dynamicAnchors,(0,o._)`{}`)})}function v(F){const{schema:V,opts:z,gen:J}=F;m(F,()=>{z.$comment&&V.$comment&&M(F),I(F),J.let(l.default.vErrors,null),J.let(l.default.errors,0),z.unevaluated&&y(F),k(F),L(F)})}function y(F){const{gen:V,validateName:z}=F;F.evaluated=V.const("evaluated",(0,o._)`${z}.evaluated`),V.if((0,o._)`${F.evaluated}.dynamicProps`,()=>V.assign((0,o._)`${F.evaluated}.props`,(0,o._)`undefined`)),V.if((0,o._)`${F.evaluated}.dynamicItems`,()=>V.assign((0,o._)`${F.evaluated}.items`,(0,o._)`undefined`))}function f(F,V){const z=typeof F=="object"&&F[V.schemaId];return z&&(V.code.source||V.code.process)?(0,o._)`/*# sourceURL=${z} */`:o.nil}function A(F,V){if(p(F)&&($(F),O(F))){x(F,V);return}(0,e.boolOrEmptySchema)(F,V)}function O({schema:F,self:V}){if(typeof F=="boolean")return!F;for(const z in F)if(V.RULES.all[z])return!0;return!1}function p(F){return typeof F.schema!="boolean"}function x(F,V){const{schema:z,gen:J,opts:Y}=F;Y.$comment&&z.$comment&&M(F),U(F),q(F);const Z=J.const("_errs",l.default.errors);k(F,Z),J.var(V,(0,o._)`${Z} === ${l.default.errors}`)}function $(F){(0,u.checkUnknownRules)(F),N(F)}function k(F,V){if(F.opts.jtd)return B(F,[],!1,V);const z=(0,t.getSchemaTypes)(F.schema),J=(0,t.coerceAndCheckDataType)(F,z);B(F,z,!J,V)}function N(F){const{schema:V,errSchemaPath:z,opts:J,self:Y}=F;V.$ref&&J.ignoreKeywordsWithRef&&(0,u.schemaHasRulesButRef)(V,Y.RULES)&&Y.logger.warn(`$ref: keywords ignored in schema at path "${z}"`)}function I(F){const{schema:V,opts:z}=F;V.default!==void 0&&z.useDefaults&&z.strictSchema&&(0,u.checkStrictMode)(F,"default is ignored in the schema root")}function U(F){const V=F.schema[F.opts.schemaId];V&&(F.baseId=(0,c.resolveUrl)(F.opts.uriResolver,F.baseId,V))}function q(F){if(F.schema.$async&&!F.schemaEnv.$async)throw new Error("async schema in sync schema")}function M({gen:F,schemaEnv:V,schema:z,errSchemaPath:J,opts:Y}){const Z=z.$comment;if(Y.$comment===!0)F.code((0,o._)`${l.default.self}.logger.log(${Z})`);else if(typeof Y.$comment=="function"){const te=(0,o.str)`${J}/$comment`,ie=F.scopeValue("root",{ref:V.root});F.code((0,o._)`${l.default.self}.opts.$comment(${Z}, ${te}, ${ie}.schema)`)}}function L(F){const{gen:V,schemaEnv:z,validateName:J,ValidationError:Y,opts:Z}=F;z.$async?V.if((0,o._)`${l.default.errors} === 0`,()=>V.return(l.default.data),()=>V.throw((0,o._)`new ${Y}(${l.default.vErrors})`)):(V.assign((0,o._)`${J}.errors`,l.default.vErrors),Z.unevaluated&&K(F),V.return((0,o._)`${l.default.errors} === 0`))}function K({gen:F,evaluated:V,props:z,items:J}){z instanceof o.Name&&F.assign((0,o._)`${V}.props`,z),J instanceof o.Name&&F.assign((0,o._)`${V}.items`,J)}function B(F,V,z,J){const{gen:Y,schema:Z,data:te,allErrors:ie,opts:ae,self:de}=F,{RULES:ge}=de;if(Z.$ref&&(ae.ignoreKeywordsWithRef||!(0,u.schemaHasRulesButRef)(Z,ge))){Y.block(()=>D(F,"$ref",ge.all.$ref.definition));return}ae.jtd||X(F,V),Y.block(()=>{for(const Ce of ge.rules)ue(Ce);ue(ge.post)});function ue(Ce){(0,r.shouldUseGroup)(Z,Ce)&&(Ce.type?(Y.if((0,n.checkDataType)(Ce.type,te,ae.strictNumbers)),Q(F,Ce),V.length===1&&V[0]===Ce.type&&z&&(Y.else(),(0,n.reportTypeError)(F)),Y.endIf()):Q(F,Ce),ie||Y.if((0,o._)`${l.default.errors} === ${J||0}`))}}function Q(F,V){const{gen:z,schema:J,opts:{useDefaults:Y}}=F;Y&&(0,i.assignDefaults)(F,V.type),z.block(()=>{for(const Z of V.rules)(0,r.shouldUseRule)(J,Z)&&D(F,Z.keyword,Z.definition,V.type)})}function X(F,V){F.schemaEnv.meta||!F.opts.strictTypes||(re(F,V),F.opts.allowUnionTypes||E(F,V),_(F,F.dataTypes))}function re(F,V){if(V.length){if(!F.dataTypes.length){F.dataTypes=V;return}V.forEach(z=>{C(F.dataTypes,z)||j(F,`type "${z}" not allowed by context "${F.dataTypes.join(",")}"`)}),S(F,V)}}function E(F,V){V.length>1&&!(V.length===2&&V.includes("null"))&&j(F,"use allowUnionTypes to allow union type keyword")}function _(F,V){const z=F.self.RULES.all;for(const J in z){const Y=z[J];if(typeof Y=="object"&&(0,r.shouldUseRule)(F.schema,Y)){const{type:Z}=Y.definition;Z.length&&!Z.some(te=>P(V,te))&&j(F,`missing type "${Z.join(",")}" for keyword "${J}"`)}}}function P(F,V){return F.includes(V)||V==="number"&&F.includes("integer")}function C(F,V){return F.includes(V)||V==="integer"&&F.includes("number")}function S(F,V){const z=[];for(const J of F.dataTypes)C(V,J)?z.push(J):V.includes("integer")&&J==="number"&&z.push("integer");F.dataTypes=z}function j(F,V){const z=F.schemaEnv.baseId+F.errSchemaPath;V+=` at "${z}" (strictTypes)`,(0,u.checkStrictMode)(F,V,F.opts.strictTypes)}class R{constructor(V,z,J){if((0,s.validateKeywordUsage)(V,z,J),this.gen=V.gen,this.allErrors=V.allErrors,this.keyword=J,this.data=V.data,this.schema=V.schema[J],this.$data=z.$data&&V.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,u.schemaRefOrVal)(V,this.schema,J,this.$data),this.schemaType=z.schemaType,this.parentSchema=V.schema,this.params={},this.it=V,this.def=z,this.$data)this.schemaCode=V.gen.const("vSchema",W(this.$data,V));else if(this.schemaCode=this.schemaValue,!(0,s.validSchemaType)(this.schema,z.schemaType,z.allowUndefined))throw new Error(`${J} value must be ${JSON.stringify(z.schemaType)}`);("code"in z?z.trackErrors:z.errors!==!1)&&(this.errsCount=V.gen.const("_errs",l.default.errors))}result(V,z,J){this.failResult((0,o.not)(V),z,J)}failResult(V,z,J){this.gen.if(V),J?J():this.error(),z?(this.gen.else(),z(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(V,z){this.failResult((0,o.not)(V),void 0,z)}fail(V){if(V===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(V),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(V){if(!this.$data)return this.fail(V);const{schemaCode:z}=this;this.fail((0,o._)`${z} !== undefined && (${(0,o.or)(this.invalid$data(),V)})`)}error(V,z,J){if(z){this.setParams(z),this._error(V,J),this.setParams({});return}this._error(V,J)}_error(V,z){(V?d.reportExtraError:d.reportError)(this,this.def.error,z)}$dataError(){(0,d.reportError)(this,this.def.$dataError||d.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,d.resetErrorsCount)(this.gen,this.errsCount)}ok(V){this.allErrors||this.gen.if(V)}setParams(V,z){z?Object.assign(this.params,V):this.params=V}block$data(V,z,J=o.nil){this.gen.block(()=>{this.check$data(V,J),z()})}check$data(V=o.nil,z=o.nil){if(!this.$data)return;const{gen:J,schemaCode:Y,schemaType:Z,def:te}=this;J.if((0,o.or)((0,o._)`${Y} === undefined`,z)),V!==o.nil&&J.assign(V,!0),(Z.length||te.validateSchema)&&(J.elseIf(this.invalid$data()),this.$dataError(),V!==o.nil&&J.assign(V,!1)),J.else()}invalid$data(){const{gen:V,schemaCode:z,schemaType:J,def:Y,it:Z}=this;return(0,o.or)(te(),ie());function te(){if(J.length){if(!(z instanceof o.Name))throw new Error("ajv implementation error");const ae=Array.isArray(J)?J:[J];return(0,o._)`${(0,n.checkDataTypes)(ae,z,Z.opts.strictNumbers,n.DataType.Wrong)}`}return o.nil}function ie(){if(Y.validateSchema){const ae=V.scopeValue("validate$data",{ref:Y.validateSchema});return(0,o._)`!${ae}(${z})`}return o.nil}}subschema(V,z){const J=(0,a.getSubschema)(this.it,V);(0,a.extendSubschemaData)(J,this.it,V),(0,a.extendSubschemaMode)(J,V);const Y={...this.it,...J,items:void 0,props:void 0};return A(Y,z),Y}mergeEvaluated(V,z){const{it:J,gen:Y}=this;J.opts.unevaluated&&(J.props!==!0&&V.props!==void 0&&(J.props=u.mergeEvaluated.props(Y,V.props,J.props,z)),J.items!==!0&&V.items!==void 0&&(J.items=u.mergeEvaluated.items(Y,V.items,J.items,z)))}mergeValidEvaluated(V,z){const{it:J,gen:Y}=this;if(J.opts.unevaluated&&(J.props!==!0||J.items!==!0))return Y.if(z,()=>this.mergeEvaluated(V,o.Name)),!0}}fr.KeywordCxt=R;function D(F,V,z,J){const Y=new R(F,z,V);"code"in z?z.code(Y,J):Y.$data&&z.validate?(0,s.funcKeywordCode)(Y,z):"macro"in z?(0,s.macroKeywordCode)(Y,z):(z.compile||z.validate)&&(0,s.funcKeywordCode)(Y,z)}const H=/^\/(?:[^~]|~0|~1)*$/,T=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function W(F,{dataLevel:V,dataNames:z,dataPathArr:J}){let Y,Z;if(F==="")return l.default.rootData;if(F[0]==="/"){if(!H.test(F))throw new Error(`Invalid JSON-pointer: ${F}`);Y=F,Z=l.default.rootData}else{const de=T.exec(F);if(!de)throw new Error(`Invalid JSON-pointer: ${F}`);const ge=+de[1];if(Y=de[2],Y==="#"){if(ge>=V)throw new Error(ae("property/index",ge));return J[V-ge]}if(ge>V)throw new Error(ae("data",ge));if(Z=z[V-ge],!Y)return Z}let te=Z;const ie=Y.split("/");for(const de of ie)de&&(Z=(0,o._)`${Z}${(0,o.getProperty)((0,u.unescapeJsonPointer)(de))}`,te=(0,o._)`${te} && ${Z}`);return te;function ae(de,ge){return`Cannot access ${de} ${ge} levels up, current level is ${V}`}}return fr.getData=W,fr}var Pi={},Xc;function Bo(){if(Xc)return Pi;Xc=1,Object.defineProperty(Pi,"__esModule",{value:!0});class e extends Error{constructor(r){super("validation failed"),this.errors=r,this.ajv=this.validation=!0}}return Pi.default=e,Pi}var Ni={},eu;function Zs(){if(eu)return Ni;eu=1,Object.defineProperty(Ni,"__esModule",{value:!0});const e=Js();class t extends Error{constructor(n,i,s,a){super(a||`can't resolve reference ${s} from id ${i}`),this.missingRef=(0,e.resolveUrl)(n,i,s),this.missingSchema=(0,e.normalizeId)((0,e.getFullPath)(n,this.missingRef))}}return Ni.default=t,Ni}var Pt={},tu;function Ko(){if(tu)return Pt;tu=1,Object.defineProperty(Pt,"__esModule",{value:!0}),Pt.resolveSchema=Pt.getCompilingSchema=Pt.resolveRef=Pt.compileSchema=Pt.SchemaEnv=void 0;const e=je(),t=Bo(),r=zr(),n=Js(),i=Re(),s=Ys();class a{constructor(y){var f;this.refs={},this.dynamicAnchors={};let A;typeof y.schema=="object"&&(A=y.schema),this.schema=y.schema,this.schemaId=y.schemaId,this.root=y.root||this,this.baseId=(f=y.baseId)!==null&&f!==void 0?f:(0,n.normalizeId)(A?.[y.schemaId||"$id"]),this.schemaPath=y.schemaPath,this.localRefs=y.localRefs,this.meta=y.meta,this.$async=A?.$async,this.refs={}}}Pt.SchemaEnv=a;function o(v){const y=u.call(this,v);if(y)return y;const f=(0,n.getFullPath)(this.opts.uriResolver,v.root.baseId),{es5:A,lines:O}=this.opts.code,{ownProperties:p}=this.opts,x=new e.CodeGen(this.scope,{es5:A,lines:O,ownProperties:p});let $;v.$async&&($=x.scopeValue("Error",{ref:t.default,code:(0,e._)`require("ajv/dist/runtime/validation_error").default`}));const k=x.scopeName("validate");v.validateName=k;const N={gen:x,allErrors:this.opts.allErrors,data:r.default.data,parentData:r.default.parentData,parentDataProperty:r.default.parentDataProperty,dataNames:[r.default.data],dataPathArr:[e.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:x.scopeValue("schema",this.opts.code.source===!0?{ref:v.schema,code:(0,e.stringify)(v.schema)}:{ref:v.schema}),validateName:k,ValidationError:$,schema:v.schema,schemaEnv:v,rootId:f,baseId:v.baseId||f,schemaPath:e.nil,errSchemaPath:v.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,e._)`""`,opts:this.opts,self:this};let I;try{this._compilations.add(v),(0,s.validateFunctionCode)(N),x.optimize(this.opts.code.optimize);const U=x.toString();I=`${x.scopeRefs(r.default.scope)}return ${U}`,this.opts.code.process&&(I=this.opts.code.process(I,v));const M=new Function(`${r.default.self}`,`${r.default.scope}`,I)(this,this.scope.get());if(this.scope.value(k,{ref:M}),M.errors=null,M.schema=v.schema,M.schemaEnv=v,v.$async&&(M.$async=!0),this.opts.code.source===!0&&(M.source={validateName:k,validateCode:U,scopeValues:x._values}),this.opts.unevaluated){const{props:L,items:K}=N;M.evaluated={props:L instanceof e.Name?void 0:L,items:K instanceof e.Name?void 0:K,dynamicProps:L instanceof e.Name,dynamicItems:K instanceof e.Name},M.source&&(M.source.evaluated=(0,e.stringify)(M.evaluated))}return v.validate=M,v}catch(U){throw delete v.validate,delete v.validateName,I&&this.logger.error("Error compiling schema, function code:",I),U}finally{this._compilations.delete(v)}}Pt.compileSchema=o;function l(v,y,f){var A;f=(0,n.resolveUrl)(this.opts.uriResolver,y,f);const O=v.refs[f];if(O)return O;let p=h.call(this,v,f);if(p===void 0){const x=(A=v.localRefs)===null||A===void 0?void 0:A[f],{schemaId:$}=this.opts;x&&(p=new a({schema:x,schemaId:$,root:v,baseId:y}))}if(p!==void 0)return v.refs[f]=c.call(this,p)}Pt.resolveRef=l;function c(v){return(0,n.inlineRef)(v.schema,this.opts.inlineRefs)?v.schema:v.validate?v:o.call(this,v)}function u(v){for(const y of this._compilations)if(d(y,v))return y}Pt.getCompilingSchema=u;function d(v,y){return v.schema===y.schema&&v.root===y.root&&v.baseId===y.baseId}function h(v,y){let f;for(;typeof(f=this.refs[y])=="string";)y=f;return f||this.schemas[y]||m.call(this,v,y)}function m(v,y){const f=this.opts.uriResolver.parse(y),A=(0,n._getFullPath)(this.opts.uriResolver,f);let O=(0,n.getFullPath)(this.opts.uriResolver,v.baseId,void 0);if(Object.keys(v.schema).length>0&&A===O)return b.call(this,f,v);const p=(0,n.normalizeId)(A),x=this.refs[p]||this.schemas[p];if(typeof x=="string"){const $=m.call(this,v,x);return typeof $?.schema!="object"?void 0:b.call(this,f,$)}if(typeof x?.schema=="object"){if(x.validate||o.call(this,x),p===(0,n.normalizeId)(y)){const{schema:$}=x,{schemaId:k}=this.opts,N=$[k];return N&&(O=(0,n.resolveUrl)(this.opts.uriResolver,O,N)),new a({schema:$,schemaId:k,root:v,baseId:O})}return b.call(this,f,x)}}Pt.resolveSchema=m;const g=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function b(v,{baseId:y,schema:f,root:A}){var O;if(((O=v.fragment)===null||O===void 0?void 0:O[0])!=="/")return;for(const $ of v.fragment.slice(1).split("/")){if(typeof f=="boolean")return;const k=f[(0,i.unescapeFragment)($)];if(k===void 0)return;f=k;const N=typeof f=="object"&&f[this.opts.schemaId];!g.has($)&&N&&(y=(0,n.resolveUrl)(this.opts.uriResolver,y,N))}let p;if(typeof f!="boolean"&&f.$ref&&!(0,i.schemaHasRulesButRef)(f,this.RULES)){const $=(0,n.resolveUrl)(this.opts.uriResolver,y,f.$ref);p=m.call(this,A,$)}const{schemaId:x}=this.opts;if(p=p||new a({schema:f,schemaId:x,root:A,baseId:y}),p.schema!==p.root.schema)return p}return Pt}const Bv="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",Kv="Meta-schema for $data reference (JSON AnySchema extension proposal)",Hv="object",Wv=["$data"],Gv={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},Jv=!1,Yv={$id:Bv,description:Kv,type:Hv,required:Wv,properties:Gv,additionalProperties:Jv};var Fi={},ti={exports:{}},qa,ru;function bf(){if(ru)return qa;ru=1;const e=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),t=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),r=RegExp.prototype.test.bind(/^\d*$/u),n=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),i=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),s=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u),a=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u),o=RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u),l=new Array(256);{const E="0123456789ABCDEF";for(let _=0;_<256;_++)l[_]="%"+E[_>>4]+E[_&15]}function c(E){return E<2048?l[192|E>>6]+l[128|E&63]:E<65536?l[224|E>>12]+l[128|E>>6&63]+l[128|E&63]:l[240|E>>18]+l[128|E>>12&63]+l[128|E>>6&63]+l[128|E&63]}function u(E){let _="",P=0,C=0;for(C=0;C=48&&P<=57||P>=65&&P<=70||P>=97&&P<=102))return"";_+=E[C];break}for(C+=1;C=48&&P<=57||P>=65&&P<=70||P>=97&&P<=102))return"";_+=E[C]}return _}const d=RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/),h=RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/),m=RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/),g=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function b(E){if(E.length===0)return!1;for(let _=0;_P&&(P=S,_=C)):(C=-1,S=0);if(P<2)return E.join(":");const j=E.slice(0,_).join(":"),R=E.slice(_+P).join(":");return j+"::"+R}function y(E){const _=E.indexOf("::");if(_!==-1&&E.indexOf("::",_+1)!==-1)return;const P=_===-1?E.split(":"):E.slice(0,_).split(":"),C=_===-1?[]:E.slice(_+2).split(":");_!==-1&&(P.length===1&&P[0]===""&&(P.length=0),C.length===1&&C[0]===""&&(C.length=0));const S=P.concat(C);let j=0;for(let D=0;D=8)return;const R=S.slice(0,P.length);for(let D=j;D<8;D++)R.push("0");for(let D=P.length;Dp[C])}function N(E,_=!1){if(E.indexOf("%")===-1)return E;let P="";for(let C=0;C57343)_+=c(S);else if(S<=56319&&P+1=56320&&j<=57343?(_+=c(65536+(S-55296<<10)+(j-56320)),P++):_+=c(65533)}else _+=c(65533)}}return _}function U(E,_=!1){let P="",C=_&&E[0]!=="/";for(let S=0;S57343)P+=c(R);else if(R<=56319&&S+1=56320&&D<=57343?(P+=c(65536+(R-55296<<10)+(D-56320)),S++):P+=c(65533)}else P+=c(65533)}}return P}function q(E,_){let P="";for(let C=0;C57343)P+=c(j);else if(j<=56319&&C+1=56320&&R<=57343?(P+=c(65536+(j-55296<<10)+(R-56320)),C++):P+=c(65533)}else P+=c(65533)}}return P}function M(E){return q(E,o)}function L(E){return q(E,a)}function K(E){return q(E,a)}function B(E){return E>=48&&E<=57||E>=65&&E<=90||E>=97&&E<=122||E===42||E===43||E===45||E===46||E===47||E===64||E===95}function Q(E){let _="";for(let P=0;P57343)_+=c(S);else if(S<=56319&&P+1=56320&&j<=57343?(_+=c(65536+(S-55296<<10)+(j-56320)),P++):_+=c(65533)}else _+=c(65533)}}return _}function X(E){let _="";for(let P=0;P65535))return"URI port is malformed."}function I(E){if(E===void 0)return!1;let _=E.indexOf("%");for(;_!==-1;){if(_+2>=E.length||!/^[\da-f]{2}$/iu.test(E.slice(_+1,_+3)))return!0;_=E.indexOf("%",_+3)}return!1}function U(E){return E[0]==="["&&E[E.length-1]==="]"}function q(E){const _=E[4];return I(E[3])||_!==void 0&&!U(_)&&I(_)||I(E[6])||I(E[7])||I(E[8])}function M(E,_,P,C){if(!_.unicodeSupport&&(!P||!P.unicodeSupport)&&E.host&&!U(E.host)&&(_.domainHost||P&&P.domainHost)&&C===!1&&d(E.host))try{E.host=new URL("http://"+E.host).hostname}catch(S){return E.error=E.error||"Host's domain name can not be converted to ASCII: "+S,!0}return!1}function L(E,_){const P=Object.assign({},_),C={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0};let S=!1,j=!1,R=!1,D=!1,H=!1,T=!1,W=!1;P.reference==="suffix"&&(P.scheme?E=P.scheme+":"+E:E="//"+E);const F=E.match($);F!==null&&F[1].indexOf("\\")!==-1&&(C.error="URI authority must not contain a literal backslash.",S=!0);const V=E.match(k);if(V!==null){const J=V[1],Y=J.replace(/[\t\n\r]/g,"");Y.length>=2&&(Y.slice(0,2)!=="//"?(C.error=C.error||"URI authority must not contain a literal backslash.",S=!0):J.length!==Y.length&&(C.error=C.error||"URI authority introducer must not contain whitespace.",S=!0))}const z=E.match(x);if(z){if(C.scheme=z[1],C.userinfo=z[3],C.host=z[4],C.port=parseInt(z[5],10),C.path=z[6]||"",C.query=z[7],C.fragment=z[8],C.scheme!==void 0){const Z=unescape(C.scheme);g.test(Z)?C.scheme=Z.toLowerCase():(C.error=C.error||b,T=!0)}j=q(z),j&&(C.error=C.error||"URI contains malformed percent-encoding."),isNaN(C.port)&&(C.port=z[5]);const J=N(C,z);if(J!==void 0&&(C.error=C.error||J,S=!0),C.host)if(u(C.host)===!1){const te=U(C.host),ie=C.host.indexOf("[")!==-1||C.host.indexOf("]")!==-1,ae=e(C.host);W=ae.isIPV6||ae.isIPVFuture===!0,H=ie&&(!te||ae.error===!0),C.host=W?ae.host:ae.host.toLowerCase(),H&&(C.error=C.error||"URI host is malformed.",S=!0)}else W=!0;C.scheme===void 0&&C.userinfo===void 0&&C.host===void 0&&C.port===void 0&&C.query===void 0&&!C.path?C.reference="same-document":C.scheme===void 0?C.reference="relative":C.fragment===void 0?C.reference="absolute":C.reference="uri",P.reference&&P.reference!=="suffix"&&P.reference!==C.reference&&(C.error=C.error||"URI is not a "+P.reference+" reference.");const Y=m(P.scheme||C.scheme);if(H||(D=M(C,P,Y,W)),E.indexOf("%")!==-1&&C.host!==void 0&&!H){let Z=W?C.host:n(C.host,!0);W||(Z=n(Z.toLowerCase())),C.host=c(Z,W)}(!Y||Y&&!Y.skipNormalize)&&(C.path&&(C.path=i(C.path)),C.query&&(C.query=a(C.query)),C.fragment&&(C.fragment=a(C.fragment))),Y&&Y.parse&&(Y.parse(C,P),Y===h.urn&&C.nid===void 0&&(R=!0))}else C.error=C.error||"URI can not be parsed.";return{parsed:C,malformedAuthorityOrPort:S,malformedPercentEncoding:j,malformedSchemeSpecific:R,malformedHost:D,malformedScheme:T}}function K(E,_){return L(E,_).parsed}function B(E,_){return Q(E,_).normalized}function Q(E,_){const{parsed:P,malformedAuthorityOrPort:C,malformedPercentEncoding:S,malformedSchemeSpecific:j,malformedHost:R,malformedScheme:D}=L(E,_);return{normalized:C||S||j||R||D?E:p(P,_),malformedAuthorityOrPort:C,malformedPercentEncoding:S,malformedSchemeSpecific:j,malformedHost:R,malformedScheme:D}}function X(E,_){if(typeof E!="string"&&typeof E!="object")return;let P;try{P=typeof E=="string"?E:p(E,_)}catch{return}const{normalized:C,malformedAuthorityOrPort:S,malformedPercentEncoding:j,malformedSchemeSpecific:R,malformedHost:D,malformedScheme:H}=Q(P,_);return S||j||R||D||H?void 0:C}const re={SCHEMES:h,normalize:y,resolve:f,resolveComponent:A,equal:O,serialize:p,parse:K};return ti.exports=re,ti.exports.default=re,ti.exports.fastUri=re,ti.exports}var su;function Xv(){if(su)return Fi;su=1,Object.defineProperty(Fi,"__esModule",{value:!0});const e=Qv();return e.code='require("ajv/dist/runtime/uri").default',Fi.default=e,Fi}var au;function eb(){return au||(au=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=Ys();Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return t.KeywordCxt}});var r=je();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return r._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return r.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return r.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return r.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return r.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return r.CodeGen}});const n=Bo(),i=Zs(),s=yf(),a=Ko(),o=je(),l=Js(),c=Ms(),u=Re(),d=Yv,h=Xv(),m=(E,_)=>new RegExp(E,_);m.code="new RegExp";const g=["removeAdditional","useDefaults","coerceTypes"],b=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),v={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},y={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},f=200;function A(E){var _,P,C,S,j,R,D,H,T,W,F,V,z,J,Y,Z,te,ie,ae,de,ge,ue,Ce,Pe,fe;const Ye=E.strict,it=(_=E.code)===null||_===void 0?void 0:_.optimize,Se=it===!0||it===void 0?1:it||0,oe=(C=(P=E.code)===null||P===void 0?void 0:P.regExp)!==null&&C!==void 0?C:m,Ne=(S=E.uriResolver)!==null&&S!==void 0?S:h.default;return{strictSchema:(R=(j=E.strictSchema)!==null&&j!==void 0?j:Ye)!==null&&R!==void 0?R:!0,strictNumbers:(H=(D=E.strictNumbers)!==null&&D!==void 0?D:Ye)!==null&&H!==void 0?H:!0,strictTypes:(W=(T=E.strictTypes)!==null&&T!==void 0?T:Ye)!==null&&W!==void 0?W:"log",strictTuples:(V=(F=E.strictTuples)!==null&&F!==void 0?F:Ye)!==null&&V!==void 0?V:"log",strictRequired:(J=(z=E.strictRequired)!==null&&z!==void 0?z:Ye)!==null&&J!==void 0?J:!1,code:E.code?{...E.code,optimize:Se,regExp:oe}:{optimize:Se,regExp:oe},loopRequired:(Y=E.loopRequired)!==null&&Y!==void 0?Y:f,loopEnum:(Z=E.loopEnum)!==null&&Z!==void 0?Z:f,meta:(te=E.meta)!==null&&te!==void 0?te:!0,messages:(ie=E.messages)!==null&&ie!==void 0?ie:!0,inlineRefs:(ae=E.inlineRefs)!==null&&ae!==void 0?ae:!0,schemaId:(de=E.schemaId)!==null&&de!==void 0?de:"$id",addUsedSchema:(ge=E.addUsedSchema)!==null&&ge!==void 0?ge:!0,validateSchema:(ue=E.validateSchema)!==null&&ue!==void 0?ue:!0,validateFormats:(Ce=E.validateFormats)!==null&&Ce!==void 0?Ce:!0,unicodeRegExp:(Pe=E.unicodeRegExp)!==null&&Pe!==void 0?Pe:!0,int32range:(fe=E.int32range)!==null&&fe!==void 0?fe:!0,uriResolver:Ne}}class O{constructor(_={}){this.schemas={},this.refs={},this.formats=Object.create(null),this._compilations=new Set,this._loading={},this._cache=new Map,_=this.opts={..._,...A(_)};const{es5:P,lines:C}=this.opts.code;this.scope=new o.ValueScope({scope:{},prefixes:b,es5:P,lines:C}),this.logger=q(_.logger);const S=_.validateFormats;_.validateFormats=!1,this.RULES=(0,s.getRules)(),p.call(this,v,_,"NOT SUPPORTED"),p.call(this,y,_,"DEPRECATED","warn"),this._metaOpts=I.call(this),_.formats&&k.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),_.keywords&&N.call(this,_.keywords),typeof _.meta=="object"&&this.addMetaSchema(_.meta),$.call(this),_.validateFormats=S}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:_,meta:P,schemaId:C}=this.opts;let S=d;C==="id"&&(S={...d},S.id=S.$id,delete S.$id),P&&_&&this.addMetaSchema(S,S[C],!1)}defaultMeta(){const{meta:_,schemaId:P}=this.opts;return this.opts.defaultMeta=typeof _=="object"?_[P]||_:void 0}validate(_,P){let C;if(typeof _=="string"){if(C=this.getSchema(_),!C)throw new Error(`no schema with key or ref "${_}"`)}else C=this.compile(_);const S=C(P);return"$async"in C||(this.errors=C.errors),S}compile(_,P){const C=this._addSchema(_,P);return C.validate||this._compileSchemaEnv(C)}compileAsync(_,P){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:C}=this.opts;return S.call(this,_,P);async function S(W,F){await j.call(this,W.$schema);const V=this._addSchema(W,F);return V.validate||R.call(this,V)}async function j(W){W&&!this.getSchema(W)&&await S.call(this,{$ref:W},!0)}async function R(W){try{return this._compileSchemaEnv(W)}catch(F){if(!(F instanceof i.default))throw F;return D.call(this,F),await H.call(this,F.missingSchema),R.call(this,W)}}function D({missingSchema:W,missingRef:F}){if(this.refs[W])throw new Error(`AnySchema ${W} is loaded but ${F} cannot be resolved`)}async function H(W){const F=await T.call(this,W);this.refs[W]||await j.call(this,F.$schema),this.refs[W]||this.addSchema(F,W,P)}async function T(W){const F=this._loading[W];if(F)return F;try{return await(this._loading[W]=C(W))}finally{delete this._loading[W]}}}addSchema(_,P,C,S=this.opts.validateSchema){if(Array.isArray(_)){for(const R of _)this.addSchema(R,void 0,C,S);return this}let j;if(typeof _=="object"){const{schemaId:R}=this.opts;if(j=_[R],j!==void 0&&typeof j!="string")throw new Error(`schema ${R} must be string`)}return P=(0,l.normalizeId)(P||j),this._checkUnique(P),this.schemas[P]=this._addSchema(_,C,P,S,!0),this}addMetaSchema(_,P,C=this.opts.validateSchema){return this.addSchema(_,P,!0,C),this}validateSchema(_,P){if(typeof _=="boolean")return!0;let C;if(C=_.$schema,C!==void 0&&typeof C!="string")throw new Error("$schema must be a string");if(C=C||this.opts.defaultMeta||this.defaultMeta(),!C)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const S=this.validate(C,_);if(!S&&P){const j="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(j);else throw new Error(j)}return S}getSchema(_){let P;for(;typeof(P=x.call(this,_))=="string";)_=P;if(P===void 0){const{schemaId:C}=this.opts,S=new a.SchemaEnv({schema:{},schemaId:C});if(P=a.resolveSchema.call(this,S,_),!P)return;this.refs[_]=P}return P.validate||this._compileSchemaEnv(P)}removeSchema(_){if(_ instanceof RegExp)return this._removeAllSchemas(this.schemas,_),this._removeAllSchemas(this.refs,_),this;switch(typeof _){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const P=x.call(this,_);return typeof P=="object"&&this._cache.delete(P.schema),delete this.schemas[_],delete this.refs[_],this}case"object":{const P=_;this._cache.delete(P);let C=_[this.opts.schemaId];return C&&(C=(0,l.normalizeId)(C),delete this.schemas[C],delete this.refs[C]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(_){for(const P of _)this.addKeyword(P);return this}addKeyword(_,P){let C;if(typeof _=="string")C=_,typeof P=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),P.keyword=C);else if(typeof _=="object"&&P===void 0){if(P=_,C=P.keyword,Array.isArray(C)&&!C.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(L.call(this,C,P),!P)return(0,u.eachItem)(C,j=>K.call(this,j)),this;Q.call(this,P);const S={...P,type:(0,c.getJSONTypes)(P.type),schemaType:(0,c.getJSONTypes)(P.schemaType)};return(0,u.eachItem)(C,S.type.length===0?j=>K.call(this,j,S):j=>S.type.forEach(R=>K.call(this,j,S,R))),this}getKeyword(_){const P=this.RULES.all[_];return typeof P=="object"?P.definition:!!P}removeKeyword(_){const{RULES:P}=this;delete P.keywords[_],delete P.all[_];for(const C of P.rules){const S=C.rules.findIndex(j=>j.keyword===_);S>=0&&C.rules.splice(S,1)}return this}addFormat(_,P){return typeof P=="string"&&(P=new RegExp(P)),this.formats[_]=P,this}errorsText(_=this.errors,{separator:P=", ",dataVar:C="data"}={}){return!_||_.length===0?"No errors":_.map(S=>`${C}${S.instancePath} ${S.message}`).reduce((S,j)=>S+P+j)}$dataMetaSchema(_,P){const C=this.RULES.all;_=JSON.parse(JSON.stringify(_));for(const S of P){const j=S.split("/").slice(1);let R=_;for(const D of j)R=R[D];for(const D in C){const H=C[D];if(typeof H!="object")continue;const{$data:T}=H.definition,W=R[D];T&&W&&(R[D]=re(W))}}return _}_removeAllSchemas(_,P){for(const C in _){const S=_[C];(!P||P.test(C))&&(typeof S=="string"?delete _[C]:S&&!S.meta&&(this._cache.delete(S.schema),delete _[C]))}}_addSchema(_,P,C,S=this.opts.validateSchema,j=this.opts.addUsedSchema){let R;const{schemaId:D}=this.opts;if(typeof _=="object")R=_[D];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof _!="boolean")throw new Error("schema must be object or boolean")}let H=this._cache.get(_);if(H!==void 0)return H;C=(0,l.normalizeId)(R||C);const T=l.getSchemaRefs.call(this,_,C);return H=new a.SchemaEnv({schema:_,schemaId:D,meta:P,baseId:C,localRefs:T}),this._cache.set(H.schema,H),j&&!C.startsWith("#")&&(C&&this._checkUnique(C),this.refs[C]=H),S&&this.validateSchema(_,!0),H}_checkUnique(_){if(this.schemas[_]||this.refs[_])throw new Error(`schema with key or id "${_}" already exists`)}_compileSchemaEnv(_){if(_.meta?this._compileMetaSchema(_):a.compileSchema.call(this,_),!_.validate)throw new Error("ajv implementation error");return _.validate}_compileMetaSchema(_){const P=this.opts;this.opts=this._metaOpts;try{a.compileSchema.call(this,_)}finally{this.opts=P}}}O.ValidationError=n.default,O.MissingRefError=i.default,e.default=O;function p(E,_,P,C="error"){for(const S in E){const j=S;j in _&&this.logger[C](`${P}: option ${S}. ${E[j]}`)}}function x(E){return E=(0,l.normalizeId)(E),this.schemas[E]||this.refs[E]}function $(){const E=this.opts.schemas;if(E)if(Array.isArray(E))this.addSchema(E);else for(const _ in E)this.addSchema(E[_],_)}function k(){for(const E in this.opts.formats){const _=this.opts.formats[E];_&&this.addFormat(E,_)}}function N(E){if(Array.isArray(E)){this.addVocabulary(E);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const _ in E){const P=E[_];P.keyword||(P.keyword=_),this.addKeyword(P)}}function I(){const E={...this.opts};for(const _ of g)delete E[_];return E}const U={log(){},warn(){},error(){}};function q(E){if(E===!1)return U;if(E===void 0)return console;if(E.log&&E.warn&&E.error)return E;throw new Error("logger must implement log, warn and error methods")}const M=/^[a-z_$][a-z0-9_$:-]*$/i;function L(E,_){const{RULES:P}=this;if((0,u.eachItem)(E,C=>{if(P.keywords[C])throw new Error(`Keyword ${C} is already defined`);if(!M.test(C))throw new Error(`Keyword ${C} has invalid name`)}),!!_&&_.$data&&!("code"in _||"validate"in _))throw new Error('$data keyword must have "code" or "validate" function')}function K(E,_,P){var C;const S=_?.post;if(P&&S)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:j}=this;let R=S?j.post:j.rules.find(({type:H})=>H===P);if(R||(R={type:P,rules:[]},j.rules.push(R)),j.keywords[E]=!0,!_)return;const D={keyword:E,definition:{..._,type:(0,c.getJSONTypes)(_.type),schemaType:(0,c.getJSONTypes)(_.schemaType)}};_.before?B.call(this,R,D,_.before):R.rules.push(D),j.all[E]=D,(C=_.implements)===null||C===void 0||C.forEach(H=>this.addKeyword(H))}function B(E,_,P){const C=E.rules.findIndex(S=>S.keyword===P);C>=0?E.rules.splice(C,0,_):(E.rules.push(_),this.logger.warn(`rule ${P} is not defined`))}function Q(E){let{metaSchema:_}=E;_!==void 0&&(E.$data&&this.opts.$data&&(_=re(_)),E.validateSchema=this.compile(_,!0))}const X={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function re(E){return{anyOf:[E,X]}}})(Fa)),Fa}var Ii={},Ri={},Di={},ou;function tb(){if(ou)return Di;ou=1,Object.defineProperty(Di,"__esModule",{value:!0});const e={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return Di.default=e,Di}var $r={},lu;function rb(){if(lu)return $r;lu=1,Object.defineProperty($r,"__esModule",{value:!0}),$r.callRef=$r.getValidate=void 0;const e=Zs(),t=Xt(),r=je(),n=zr(),i=Ko(),s=Re(),a={keyword:"$ref",schemaType:"string",code(c){const{gen:u,schema:d,it:h}=c,{baseId:m,schemaEnv:g,validateName:b,opts:v,self:y}=h,{root:f}=g;if((d==="#"||d==="#/")&&m===f.baseId)return O();const A=i.resolveRef.call(y,f,m,d);if(A===void 0)throw new e.default(h.opts.uriResolver,m,d);if(A instanceof i.SchemaEnv)return p(A);return x(A);function O(){if(g===f)return l(c,b,g,g.$async);const $=u.scopeValue("root",{ref:f});return l(c,(0,r._)`${$}.validate`,f,f.$async)}function p($){const k=o(c,$);l(c,k,$,$.$async)}function x($){const k=u.scopeValue("schema",v.code.source===!0?{ref:$,code:(0,r.stringify)($)}:{ref:$}),N=u.name("valid"),I=c.subschema({schema:$,dataTypes:[],schemaPath:r.nil,topSchemaRef:k,errSchemaPath:d},N);c.mergeEvaluated(I),c.ok(N)}}};function o(c,u){const{gen:d}=c;return u.validate?d.scopeValue("validate",{ref:u.validate}):(0,r._)`${d.scopeValue("wrapper",{ref:u})}.validate`}$r.getValidate=o;function l(c,u,d,h){const{gen:m,it:g}=c,{allErrors:b,schemaEnv:v,opts:y}=g,f=y.passContext?n.default.this:r.nil;h?A():O();function A(){if(!v.$async)throw new Error("async schema referenced by sync schema");const $=m.let("valid");m.try(()=>{m.code((0,r._)`await ${(0,t.callValidateCode)(c,u,f)}`),x(u),b||m.assign($,!0)},k=>{m.if((0,r._)`!(${k} instanceof ${g.ValidationError})`,()=>m.throw(k)),p(k),b||m.assign($,!1)}),c.ok($)}function O(){c.result((0,t.callValidateCode)(c,u,f),()=>x(u),()=>p(u))}function p($){const k=(0,r._)`${$}.errors`;m.assign(n.default.vErrors,(0,r._)`${n.default.vErrors} === null ? ${k} : ${n.default.vErrors}.concat(${k})`),m.assign(n.default.errors,(0,r._)`${n.default.vErrors}.length`)}function x($){var k;if(!g.opts.unevaluated)return;const N=(k=d?.validate)===null||k===void 0?void 0:k.evaluated;if(g.props!==!0)if(N&&!N.dynamicProps)N.props!==void 0&&(g.props=s.mergeEvaluated.props(m,N.props,g.props));else{const I=m.var("props",(0,r._)`${$}.evaluated.props`);g.props=s.mergeEvaluated.props(m,I,g.props,r.Name)}if(g.items!==!0)if(N&&!N.dynamicItems)N.items!==void 0&&(g.items=s.mergeEvaluated.items(m,N.items,g.items));else{const I=m.var("items",(0,r._)`${$}.evaluated.items`);g.items=s.mergeEvaluated.items(m,I,g.items,r.Name)}}}return $r.callRef=l,$r.default=a,$r}var cu;function nb(){if(cu)return Ri;cu=1,Object.defineProperty(Ri,"__esModule",{value:!0});const e=tb(),t=rb(),r=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",e.default,t.default];return Ri.default=r,Ri}var Ti={},Mi={},uu;function ib(){if(uu)return Mi;uu=1,Object.defineProperty(Mi,"__esModule",{value:!0});const e=je(),t=e.operators,r={maximum:{okStr:"<=",ok:t.LTE,fail:t.GT},minimum:{okStr:">=",ok:t.GTE,fail:t.LT},exclusiveMaximum:{okStr:"<",ok:t.LT,fail:t.GTE},exclusiveMinimum:{okStr:">",ok:t.GT,fail:t.LTE}},n={message:({keyword:s,schemaCode:a})=>(0,e.str)`must be ${r[s].okStr} ${a}`,params:({keyword:s,schemaCode:a})=>(0,e._)`{comparison: ${r[s].okStr}, limit: ${a}}`},i={keyword:Object.keys(r),type:"number",schemaType:"number",$data:!0,error:n,code(s){const{keyword:a,data:o,schemaCode:l}=s;s.fail$data((0,e._)`${o} ${r[a].fail} ${l} || isNaN(${o})`)}};return Mi.default=i,Mi}var Ui={},du;function sb(){if(du)return Ui;du=1,Object.defineProperty(Ui,"__esModule",{value:!0});const e=je(),r={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:n})=>(0,e.str)`must be multiple of ${n}`,params:({schemaCode:n})=>(0,e._)`{multipleOf: ${n}}`},code(n){const{gen:i,data:s,schemaCode:a,it:o}=n,l=o.opts.multipleOfPrecision,c=i.let("res"),u=l?(0,e._)`Math.abs(Math.round(${c}) - ${c}) > 1e-${l}`:(0,e._)`${c} !== parseInt(${c})`;n.fail$data((0,e._)`(${a} === 0 || (${c} = ${s}/${a}, ${u}))`)}};return Ui.default=r,Ui}var qi={},Li={},fu;function ab(){if(fu)return Li;fu=1,Object.defineProperty(Li,"__esModule",{value:!0});function e(t){const r=t.length;let n=0,i=0,s;for(;i=55296&&s<=56319&&i(0,e._)`{limit: ${s}}`},code(s){const{keyword:a,data:o,schemaCode:l,it:c}=s,u=a==="maxLength"?e.operators.GT:e.operators.LT,d=c.opts.unicode===!1?(0,e._)`${o}.length`:(0,e._)`${(0,t.useFunc)(s.gen,r.default)}(${o})`;s.fail$data((0,e._)`${d} ${u} ${l}`)}};return qi.default=i,qi}var Vi={},mu;function lb(){if(mu)return Vi;mu=1,Object.defineProperty(Vi,"__esModule",{value:!0});const e=Xt(),t=Re(),r=je(),i={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:s})=>(0,r.str)`must match pattern "${s}"`,params:({schemaCode:s})=>(0,r._)`{pattern: ${s}}`},code(s){const{gen:a,data:o,$data:l,schema:c,schemaCode:u,it:d}=s,h=d.opts.unicodeRegExp?"u":"";if(l){const{regExp:m}=d.opts.code,g=m.code==="new RegExp"?(0,r._)`new RegExp`:(0,t.useFunc)(a,m),b=a.let("valid");a.try(()=>a.assign(b,(0,r._)`${g}(${u}, ${h}).test(${o})`),()=>a.assign(b,!1)),s.fail$data((0,r._)`!${b}`)}else{const m=(0,e.usePattern)(s,c);s.fail$data((0,r._)`!${m}.test(${o})`)}}};return Vi.default=i,Vi}var zi={},pu;function cb(){if(pu)return zi;pu=1,Object.defineProperty(zi,"__esModule",{value:!0});const e=je(),r={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:n,schemaCode:i}){const s=n==="maxProperties"?"more":"fewer";return(0,e.str)`must NOT have ${s} than ${i} properties`},params:({schemaCode:n})=>(0,e._)`{limit: ${n}}`},code(n){const{keyword:i,data:s,schemaCode:a}=n,o=i==="maxProperties"?e.operators.GT:e.operators.LT;n.fail$data((0,e._)`Object.keys(${s}).length ${o} ${a}`)}};return zi.default=r,zi}var Bi={},yu;function ub(){if(yu)return Bi;yu=1,Object.defineProperty(Bi,"__esModule",{value:!0});const e=Xt(),t=je(),r=Re(),i={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:s}})=>(0,t.str)`must have required property '${s}'`,params:({params:{missingProperty:s}})=>(0,t._)`{missingProperty: ${s}}`},code(s){const{gen:a,schema:o,schemaCode:l,data:c,$data:u,it:d}=s,{opts:h}=d;if(!u&&o.length===0)return;const m=o.length>=h.loopRequired;if(d.allErrors?g():b(),h.strictRequired){const f=s.parentSchema.properties,{definedProperties:A}=s.it;for(const O of o)if(f?.[O]===void 0&&!A.has(O)){const p=d.schemaEnv.baseId+d.errSchemaPath,x=`required property "${O}" is not defined at "${p}" (strictRequired)`;(0,r.checkStrictMode)(d,x,d.opts.strictRequired)}}function g(){if(m||u)s.block$data(t.nil,v);else for(const f of o)(0,e.checkReportMissingProp)(s,f)}function b(){const f=a.let("missing");if(m||u){const A=a.let("valid",!0);s.block$data(A,()=>y(f,A)),s.ok(A)}else a.if((0,e.checkMissingProp)(s,o,f)),(0,e.reportMissingProp)(s,f),a.else()}function v(){a.forOf("prop",l,f=>{s.setParams({missingProperty:f}),a.if((0,e.noPropertyInData)(a,c,f,h.ownProperties),()=>s.error())})}function y(f,A){s.setParams({missingProperty:f}),a.forOf(f,l,()=>{a.assign(A,(0,e.propertyInData)(a,c,f,h.ownProperties)),a.if((0,t.not)(A),()=>{s.error(),a.break()})},t.nil)}}};return Bi.default=i,Bi}var Ki={},gu;function db(){if(gu)return Ki;gu=1,Object.defineProperty(Ki,"__esModule",{value:!0});const e=je(),r={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:n,schemaCode:i}){const s=n==="maxItems"?"more":"fewer";return(0,e.str)`must NOT have ${s} than ${i} items`},params:({schemaCode:n})=>(0,e._)`{limit: ${n}}`},code(n){const{keyword:i,data:s,schemaCode:a}=n,o=i==="maxItems"?e.operators.GT:e.operators.LT;n.fail$data((0,e._)`${s}.length ${o} ${a}`)}};return Ki.default=r,Ki}var Hi={},Wi={},vu;function Ho(){if(vu)return Wi;vu=1,Object.defineProperty(Wi,"__esModule",{value:!0});const e=vf();return e.code='require("ajv/dist/runtime/equal").default',Wi.default=e,Wi}var bu;function fb(){if(bu)return Hi;bu=1,Object.defineProperty(Hi,"__esModule",{value:!0});const e=Ms(),t=je(),r=Re(),n=Ho(),s={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:a,j:o}})=>(0,t.str)`must NOT have duplicate items (items ## ${o} and ${a} are identical)`,params:({params:{i:a,j:o}})=>(0,t._)`{i: ${a}, j: ${o}}`},code(a){const{gen:o,data:l,$data:c,schema:u,parentSchema:d,schemaCode:h,it:m}=a;if(!c&&!u)return;const g=o.let("valid"),b=d.items?(0,e.getSchemaTypes)(d.items):[];a.block$data(g,v,(0,t._)`${h} === false`),a.ok(g);function v(){const O=o.let("i",(0,t._)`${l}.length`),p=o.let("j");a.setParams({i:O,j:p}),o.assign(g,!0),o.if((0,t._)`${O} > 1`,()=>(y()?f:A)(O,p))}function y(){return b.length>0&&!b.some(O=>O==="object"||O==="array")}function f(O,p){const x=o.name("item"),$=(0,e.checkDataTypes)(b,x,m.opts.strictNumbers,e.DataType.Wrong),k=o.const("indices",(0,t._)`{}`);o.for((0,t._)`;${O}--;`,()=>{o.let(x,(0,t._)`${l}[${O}]`),o.if($,(0,t._)`continue`),b.length>1&&o.if((0,t._)`typeof ${x} == "string"`,(0,t._)`${x} += "_"`),o.if((0,t._)`typeof ${k}[${x}] == "number"`,()=>{o.assign(p,(0,t._)`${k}[${x}]`),a.error(),o.assign(g,!1).break()}).code((0,t._)`${k}[${x}] = ${O}`)})}function A(O,p){const x=(0,r.useFunc)(o,n.default),$=o.name("outer");o.label($).for((0,t._)`;${O}--;`,()=>o.for((0,t._)`${p} = ${O}; ${p}--;`,()=>o.if((0,t._)`${x}(${l}[${O}], ${l}[${p}])`,()=>{a.error(),o.assign(g,!1).break($)})))}}};return Hi.default=s,Hi}var Gi={},Su;function hb(){if(Su)return Gi;Su=1,Object.defineProperty(Gi,"__esModule",{value:!0});const e=je(),t=Re(),r=Ho(),i={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:s})=>(0,e._)`{allowedValue: ${s}}`},code(s){const{gen:a,data:o,$data:l,schemaCode:c,schema:u}=s;l||u&&typeof u=="object"?s.fail$data((0,e._)`!${(0,t.useFunc)(a,r.default)}(${o}, ${c})`):s.fail((0,e._)`${u} !== ${o}`)}};return Gi.default=i,Gi}var Ji={},xu;function mb(){if(xu)return Ji;xu=1,Object.defineProperty(Ji,"__esModule",{value:!0});const e=je(),t=Re(),r=Ho(),i={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:s})=>(0,e._)`{allowedValues: ${s}}`},code(s){const{gen:a,data:o,$data:l,schema:c,schemaCode:u,it:d}=s;if(!l&&c.length===0)throw new Error("enum must have non-empty array");const h=c.length>=d.opts.loopEnum;let m;const g=()=>m??(m=(0,t.useFunc)(a,r.default));let b;if(h||l)b=a.let("valid"),s.block$data(b,v);else{if(!Array.isArray(c))throw new Error("ajv implementation error");const f=a.const("vSchema",u);b=(0,e.or)(...c.map((A,O)=>y(f,O)))}s.pass(b);function v(){a.assign(b,!1),a.forOf("v",u,f=>a.if((0,e._)`${g()}(${o}, ${f})`,()=>a.assign(b,!0).break()))}function y(f,A){const O=c[A];return typeof O=="object"&&O!==null?(0,e._)`${g()}(${o}, ${f}[${A}])`:(0,e._)`${o} === ${O}`}}};return Ji.default=i,Ji}var Cu;function pb(){if(Cu)return Ti;Cu=1,Object.defineProperty(Ti,"__esModule",{value:!0});const e=ib(),t=sb(),r=ob(),n=lb(),i=cb(),s=ub(),a=db(),o=fb(),l=hb(),c=mb(),u=[e.default,t.default,r.default,n.default,i.default,s.default,a.default,o.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},l.default,c.default];return Ti.default=u,Ti}var Yi={},_n={},Au;function Sf(){if(Au)return _n;Au=1,Object.defineProperty(_n,"__esModule",{value:!0}),_n.validateAdditionalItems=void 0;const e=je(),t=Re(),n={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:s}})=>(0,e.str)`must NOT have more than ${s} items`,params:({params:{len:s}})=>(0,e._)`{limit: ${s}}`},code(s){const{parentSchema:a,it:o}=s,{items:l}=a;if(!Array.isArray(l)){(0,t.checkStrictMode)(o,'"additionalItems" is ignored when "items" is not an array of schemas');return}i(s,l)}};function i(s,a){const{gen:o,schema:l,data:c,keyword:u,it:d}=s;d.items=!0;const h=o.const("len",(0,e._)`${c}.length`);if(l===!1)s.setParams({len:a.length}),s.pass((0,e._)`${h} <= ${a.length}`);else if(typeof l=="object"&&!(0,t.alwaysValidSchema)(d,l)){const g=o.var("valid",(0,e._)`${h} <= ${a.length}`);o.if((0,e.not)(g),()=>m(g)),s.ok(g)}function m(g){o.forRange("i",a.length,h,b=>{s.subschema({keyword:u,dataProp:b,dataPropType:t.Type.Num},g),d.allErrors||o.if((0,e.not)(g),()=>o.break())})}}return _n.validateAdditionalItems=i,_n.default=n,_n}var Zi={},En={},wu;function xf(){if(wu)return En;wu=1,Object.defineProperty(En,"__esModule",{value:!0}),En.validateTuple=void 0;const e=je(),t=Re(),r=Xt(),n={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(s){const{schema:a,it:o}=s;if(Array.isArray(a))return i(s,"additionalItems",a);o.items=!0,!(0,t.alwaysValidSchema)(o,a)&&s.ok((0,r.validateArray)(s))}};function i(s,a,o=s.schema){const{gen:l,parentSchema:c,data:u,keyword:d,it:h}=s;b(c),h.opts.unevaluated&&o.length&&h.items!==!0&&(h.items=t.mergeEvaluated.items(l,o.length,h.items));const m=l.name("valid"),g=l.const("len",(0,e._)`${u}.length`);o.forEach((v,y)=>{(0,t.alwaysValidSchema)(h,v)||(l.if((0,e._)`${g} > ${y}`,()=>s.subschema({keyword:d,schemaProp:y,dataProp:y},m)),s.ok(m))});function b(v){const{opts:y,errSchemaPath:f}=h,A=o.length,O=A===v.minItems&&(A===v.maxItems||v[a]===!1);if(y.strictTuples&&!O){const p=`"${d}" is ${A}-tuple, but minItems or maxItems/${a} are not specified or different at path "${f}"`;(0,t.checkStrictMode)(h,p,y.strictTuples)}}}return En.validateTuple=i,En.default=n,En}var $u;function yb(){if($u)return Zi;$u=1,Object.defineProperty(Zi,"__esModule",{value:!0});const e=xf(),t={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:r=>(0,e.validateTuple)(r,"items")};return Zi.default=t,Zi}var Qi={},_u;function gb(){if(_u)return Qi;_u=1,Object.defineProperty(Qi,"__esModule",{value:!0});const e=je(),t=Re(),r=Xt(),n=Sf(),s={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:a}})=>(0,e.str)`must NOT have more than ${a} items`,params:({params:{len:a}})=>(0,e._)`{limit: ${a}}`},code(a){const{schema:o,parentSchema:l,it:c}=a,{prefixItems:u}=l;c.items=!0,!(0,t.alwaysValidSchema)(c,o)&&(u?(0,n.validateAdditionalItems)(a,u):a.ok((0,r.validateArray)(a)))}};return Qi.default=s,Qi}var Xi={},Eu;function vb(){if(Eu)return Xi;Eu=1,Object.defineProperty(Xi,"__esModule",{value:!0});const e=je(),t=Re(),n={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:i,max:s}})=>s===void 0?(0,e.str)`must contain at least ${i} valid item(s)`:(0,e.str)`must contain at least ${i} and no more than ${s} valid item(s)`,params:({params:{min:i,max:s}})=>s===void 0?(0,e._)`{minContains: ${i}}`:(0,e._)`{minContains: ${i}, maxContains: ${s}}`},code(i){const{gen:s,schema:a,parentSchema:o,data:l,it:c}=i;let u,d;const{minContains:h,maxContains:m}=o;c.opts.next?(u=h===void 0?1:h,d=m):u=1;const g=s.const("len",(0,e._)`${l}.length`);if(i.setParams({min:u,max:d}),d===void 0&&u===0){(0,t.checkStrictMode)(c,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(d!==void 0&&u>d){(0,t.checkStrictMode)(c,'"minContains" > "maxContains" is always invalid'),i.fail();return}if((0,t.alwaysValidSchema)(c,a)){let A=(0,e._)`${g} >= ${u}`;d!==void 0&&(A=(0,e._)`${A} && ${g} <= ${d}`),i.pass(A);return}c.items=!0;const b=s.name("valid");d===void 0&&u===1?y(b,()=>s.if(b,()=>s.break())):u===0?(s.let(b,!0),d!==void 0&&s.if((0,e._)`${l}.length > 0`,v)):(s.let(b,!1),v()),i.result(b,()=>i.reset());function v(){const A=s.name("_valid"),O=s.let("count",0);y(A,()=>s.if(A,()=>f(O)))}function y(A,O){s.forRange("i",0,g,p=>{i.subschema({keyword:"contains",dataProp:p,dataPropType:t.Type.Num,compositeRule:!0},A),O()})}function f(A){s.code((0,e._)`${A}++`),d===void 0?s.if((0,e._)`${A} >= ${u}`,()=>s.assign(b,!0).break()):(s.if((0,e._)`${A} > ${d}`,()=>s.assign(b,!1).break()),u===1?s.assign(b,!0):s.if((0,e._)`${A} >= ${u}`,()=>s.assign(b,!0)))}}};return Xi.default=n,Xi}var Va={},ju;function bb(){return ju||(ju=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;const t=je(),r=Re(),n=Xt();e.error={message:({params:{property:l,depsCount:c,deps:u}})=>{const d=c===1?"property":"properties";return(0,t.str)`must have ${d} ${u} when property ${l} is present`},params:({params:{property:l,depsCount:c,deps:u,missingProperty:d}})=>(0,t._)`{property: ${l}, - missingProperty: ${d}, - depsCount: ${c}, - deps: ${u}}`};const i={keyword:"dependencies",type:"object",schemaType:"object",error:e.error,code(l){const[c,u]=s(l);a(l,c),o(l,u)}};function s({schema:l}){const c={},u={};for(const d in l){if(d==="__proto__")continue;const h=Array.isArray(l[d])?c:u;h[d]=l[d]}return[c,u]}function a(l,c=l.schema){const{gen:u,data:d,it:h}=l;if(Object.keys(c).length===0)return;const m=u.let("missing");for(const g in c){const b=c[g];if(b.length===0)continue;const v=(0,n.propertyInData)(u,d,g,h.opts.ownProperties);l.setParams({property:g,depsCount:b.length,deps:b.join(", ")}),h.allErrors?u.if(v,()=>{for(const y of b)(0,n.checkReportMissingProp)(l,y)}):(u.if((0,t._)`${v} && (${(0,n.checkMissingProp)(l,b,m)})`),(0,n.reportMissingProp)(l,m),u.else())}}e.validatePropertyDeps=a;function o(l,c=l.schema){const{gen:u,data:d,keyword:h,it:m}=l,g=u.name("valid");for(const b in c)(0,r.alwaysValidSchema)(m,c[b])||(u.if((0,n.propertyInData)(u,d,b,m.opts.ownProperties),()=>{const v=l.subschema({keyword:h,schemaProp:b},g);l.mergeValidEvaluated(v,g)},()=>u.var(g,!0)),l.ok(g))}e.validateSchemaDeps=o,e.default=i})(Va)),Va}var es={},Ou;function Sb(){if(Ou)return es;Ou=1,Object.defineProperty(es,"__esModule",{value:!0});const e=je(),t=Re(),n={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:i})=>(0,e._)`{propertyName: ${i.propertyName}}`},code(i){const{gen:s,schema:a,data:o,it:l}=i;if((0,t.alwaysValidSchema)(l,a))return;const c=s.name("valid");s.forIn("key",o,u=>{i.setParams({propertyName:u}),i.subschema({keyword:"propertyNames",data:u,dataTypes:["string"],propertyName:u,compositeRule:!0},c),s.if((0,e.not)(c),()=>{i.error(!0),l.allErrors||s.break()})}),i.ok(c)}};return es.default=n,es}var ts={},ku;function Cf(){if(ku)return ts;ku=1,Object.defineProperty(ts,"__esModule",{value:!0});const e=Xt(),t=je(),r=zr(),n=Re(),s={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:a})=>(0,t._)`{additionalProperty: ${a.additionalProperty}}`},code(a){const{gen:o,schema:l,parentSchema:c,data:u,errsCount:d,it:h}=a;if(!d)throw new Error("ajv implementation error");const{allErrors:m,opts:g}=h;if(h.props=!0,g.removeAdditional!=="all"&&(0,n.alwaysValidSchema)(h,l))return;const b=(0,e.allSchemaProperties)(c.properties),v=(0,e.allSchemaProperties)(c.patternProperties);y(),a.ok((0,t._)`${d} === ${r.default.errors}`);function y(){o.forIn("key",u,x=>{!b.length&&!v.length?O(x):o.if(f(x),()=>O(x))})}function f(x){let $;if(b.length>8){const k=(0,n.schemaRefOrVal)(h,c.properties,"properties");$=(0,e.isOwnProperty)(o,k,x)}else b.length?$=(0,t.or)(...b.map(k=>(0,t._)`${x} === ${k}`)):$=t.nil;return v.length&&($=(0,t.or)($,...v.map(k=>(0,t._)`${(0,e.usePattern)(a,k)}.test(${x})`))),(0,t.not)($)}function A(x){o.code((0,t._)`delete ${u}[${x}]`)}function O(x){if(g.removeAdditional==="all"||g.removeAdditional&&l===!1){A(x);return}if(l===!1){a.setParams({additionalProperty:x}),a.error(),m||o.break();return}if(typeof l=="object"&&!(0,n.alwaysValidSchema)(h,l)){const $=o.name("valid");g.removeAdditional==="failing"?(p(x,$,!1),o.if((0,t.not)($),()=>{a.reset(),A(x)})):(p(x,$),m||o.if((0,t.not)($),()=>o.break()))}}function p(x,$,k){const N={keyword:"additionalProperties",dataProp:x,dataPropType:n.Type.Str};k===!1&&Object.assign(N,{compositeRule:!0,createErrors:!1,allErrors:!1}),a.subschema(N,$)}}};return ts.default=s,ts}var rs={},Pu;function xb(){if(Pu)return rs;Pu=1,Object.defineProperty(rs,"__esModule",{value:!0});const e=Ys(),t=Xt(),r=Re(),n=Cf(),i={keyword:"properties",type:"object",schemaType:"object",code(s){const{gen:a,schema:o,parentSchema:l,data:c,it:u}=s;u.opts.removeAdditional==="all"&&l.additionalProperties===void 0&&n.default.code(new e.KeywordCxt(u,n.default,"additionalProperties"));const d=(0,t.allSchemaProperties)(o);for(const v of d)u.definedProperties.add(v);u.opts.unevaluated&&d.length&&u.props!==!0&&(u.props=r.mergeEvaluated.props(a,(0,r.toHash)(d),u.props));const h=d.filter(v=>!(0,r.alwaysValidSchema)(u,o[v]));if(h.length===0)return;const m=a.name("valid");for(const v of h)g(v)?b(v):(a.if((0,t.propertyInData)(a,c,v,u.opts.ownProperties)),b(v),u.allErrors||a.else().var(m,!0),a.endIf()),s.it.definedProperties.add(v),s.ok(m);function g(v){return u.opts.useDefaults&&!u.compositeRule&&o[v].default!==void 0}function b(v){s.subschema({keyword:"properties",schemaProp:v,dataProp:v},m)}}};return rs.default=i,rs}var ns={},Nu;function Cb(){if(Nu)return ns;Nu=1,Object.defineProperty(ns,"__esModule",{value:!0});const e=Xt(),t=je(),r=Re(),n=Re(),i={keyword:"patternProperties",type:"object",schemaType:"object",code(s){const{gen:a,schema:o,data:l,parentSchema:c,it:u}=s,{opts:d}=u,h=(0,e.allSchemaProperties)(o),m=h.filter(O=>(0,r.alwaysValidSchema)(u,o[O]));if(h.length===0||m.length===h.length&&(!u.opts.unevaluated||u.props===!0))return;const g=d.strictSchema&&!d.allowMatchingProperties&&c.properties,b=a.name("valid");u.props!==!0&&!(u.props instanceof t.Name)&&(u.props=(0,n.evaluatedPropsToName)(a,u.props));const{props:v}=u;y();function y(){for(const O of h)g&&f(O),u.allErrors?A(O):(a.var(b,!0),A(O),a.if(b))}function f(O){for(const p in g)new RegExp(O).test(p)&&(0,r.checkStrictMode)(u,`property ${p} matches pattern ${O} (use allowMatchingProperties)`)}function A(O){a.forIn("key",l,p=>{a.if((0,t._)`${(0,e.usePattern)(s,O)}.test(${p})`,()=>{const x=m.includes(O);x||s.subschema({keyword:"patternProperties",schemaProp:O,dataProp:p,dataPropType:n.Type.Str},b),u.opts.unevaluated&&v!==!0?a.assign((0,t._)`${v}[${p}]`,!0):!x&&!u.allErrors&&a.if((0,t.not)(b),()=>a.break())})})}}};return ns.default=i,ns}var is={},Fu;function Ab(){if(Fu)return is;Fu=1,Object.defineProperty(is,"__esModule",{value:!0});const e=Re(),t={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(r){const{gen:n,schema:i,it:s}=r;if((0,e.alwaysValidSchema)(s,i)){r.fail();return}const a=n.name("valid");r.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},a),r.failResult(a,()=>r.reset(),()=>r.error())},error:{message:"must NOT be valid"}};return is.default=t,is}var ss={},Iu;function wb(){if(Iu)return ss;Iu=1,Object.defineProperty(ss,"__esModule",{value:!0});const t={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:Xt().validateUnion,error:{message:"must match a schema in anyOf"}};return ss.default=t,ss}var as={},Ru;function $b(){if(Ru)return as;Ru=1,Object.defineProperty(as,"__esModule",{value:!0});const e=je(),t=Re(),n={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:i})=>(0,e._)`{passingSchemas: ${i.passing}}`},code(i){const{gen:s,schema:a,parentSchema:o,it:l}=i;if(!Array.isArray(a))throw new Error("ajv implementation error");if(l.opts.discriminator&&o.discriminator)return;const c=a,u=s.let("valid",!1),d=s.let("passing",null),h=s.name("_valid");i.setParams({passing:d}),s.block(m),i.result(u,()=>i.reset(),()=>i.error(!0));function m(){c.forEach((g,b)=>{let v;(0,t.alwaysValidSchema)(l,g)?s.var(h,!0):v=i.subschema({keyword:"oneOf",schemaProp:b,compositeRule:!0},h),b>0&&s.if((0,e._)`${h} && ${u}`).assign(u,!1).assign(d,(0,e._)`[${d}, ${b}]`).else(),s.if(h,()=>{s.assign(u,!0),s.assign(d,b),v&&i.mergeEvaluated(v,e.Name)})})}}};return as.default=n,as}var os={},Du;function _b(){if(Du)return os;Du=1,Object.defineProperty(os,"__esModule",{value:!0});const e=Re(),t={keyword:"allOf",schemaType:"array",code(r){const{gen:n,schema:i,it:s}=r;if(!Array.isArray(i))throw new Error("ajv implementation error");const a=n.name("valid");i.forEach((o,l)=>{if((0,e.alwaysValidSchema)(s,o))return;const c=r.subschema({keyword:"allOf",schemaProp:l},a);r.ok(a),r.mergeEvaluated(c)})}};return os.default=t,os}var ls={},Tu;function Eb(){if(Tu)return ls;Tu=1,Object.defineProperty(ls,"__esModule",{value:!0});const e=je(),t=Re(),n={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:s})=>(0,e.str)`must match "${s.ifClause}" schema`,params:({params:s})=>(0,e._)`{failingKeyword: ${s.ifClause}}`},code(s){const{gen:a,parentSchema:o,it:l}=s;o.then===void 0&&o.else===void 0&&(0,t.checkStrictMode)(l,'"if" without "then" and "else" is ignored');const c=i(l,"then"),u=i(l,"else");if(!c&&!u)return;const d=a.let("valid",!0),h=a.name("_valid");if(m(),s.reset(),c&&u){const b=a.let("ifClause");s.setParams({ifClause:b}),a.if(h,g("then",b),g("else",b))}else c?a.if(h,g("then")):a.if((0,e.not)(h),g("else"));s.pass(d,()=>s.error(!0));function m(){const b=s.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},h);s.mergeEvaluated(b)}function g(b,v){return()=>{const y=s.subschema({keyword:b},h);a.assign(d,h),s.mergeValidEvaluated(y,d),v?a.assign(v,(0,e._)`${b}`):s.setParams({ifClause:b})}}}};function i(s,a){const o=s.schema[a];return o!==void 0&&!(0,t.alwaysValidSchema)(s,o)}return ls.default=n,ls}var cs={},Mu;function jb(){if(Mu)return cs;Mu=1,Object.defineProperty(cs,"__esModule",{value:!0});const e=Re(),t={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:r,parentSchema:n,it:i}){n.if===void 0&&(0,e.checkStrictMode)(i,`"${r}" without "if" is ignored`)}};return cs.default=t,cs}var Uu;function Ob(){if(Uu)return Yi;Uu=1,Object.defineProperty(Yi,"__esModule",{value:!0});const e=Sf(),t=yb(),r=xf(),n=gb(),i=vb(),s=bb(),a=Sb(),o=Cf(),l=xb(),c=Cb(),u=Ab(),d=wb(),h=$b(),m=_b(),g=Eb(),b=jb();function v(y=!1){const f=[u.default,d.default,h.default,m.default,g.default,b.default,a.default,o.default,s.default,l.default,c.default];return y?f.push(t.default,n.default):f.push(e.default,r.default),f.push(i.default),f}return Yi.default=v,Yi}var us={},ds={},qu;function kb(){if(qu)return ds;qu=1,Object.defineProperty(ds,"__esModule",{value:!0});const e=je(),r={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:n})=>(0,e.str)`must match format "${n}"`,params:({schemaCode:n})=>(0,e._)`{format: ${n}}`},code(n,i){const{gen:s,data:a,$data:o,schema:l,schemaCode:c,it:u}=n,{opts:d,errSchemaPath:h,schemaEnv:m,self:g}=u;if(!d.validateFormats)return;o?b():v();function b(){const y=s.scopeValue("formats",{ref:g.formats,code:d.code.formats}),f=s.const("fDef",(0,e._)`${y}[${c}]`),A=s.let("fType"),O=s.let("format");s.if((0,e._)`typeof ${f} == "object" && !(${f} instanceof RegExp)`,()=>s.assign(A,(0,e._)`${f}.type || "string"`).assign(O,(0,e._)`${f}.validate`),()=>s.assign(A,(0,e._)`"string"`).assign(O,f)),n.fail$data((0,e.or)(p(),x()));function p(){return d.strictSchema===!1?e.nil:(0,e._)`${c} && !${O}`}function x(){const $=m.$async?(0,e._)`(${f}.async ? await ${O}(${a}) : ${O}(${a}))`:(0,e._)`${O}(${a})`,k=(0,e._)`(typeof ${O} == "function" ? ${$} : ${O}.test(${a}))`;return(0,e._)`${O} && ${O} !== true && ${A} === ${i} && !${k}`}}function v(){const y=g.formats[l];if(!y){p();return}if(y===!0)return;const[f,A,O]=x(y);f===i&&n.pass($());function p(){if(d.strictSchema===!1){g.logger.warn(k());return}throw new Error(k());function k(){return`unknown format "${l}" ignored in schema at path "${h}"`}}function x(k){const N=k instanceof RegExp?(0,e.regexpCode)(k):d.code.formats?(0,e._)`${d.code.formats}${(0,e.getProperty)(l)}`:void 0,I=s.scopeValue("formats",{key:l,ref:k,code:N});return typeof k=="object"&&!(k instanceof RegExp)?[k.type||"string",k.validate,(0,e._)`${I}.validate`]:["string",k,I]}function $(){if(typeof y=="object"&&!(y instanceof RegExp)&&y.async){if(!m.$async)throw new Error("async format in sync schema");return(0,e._)`await ${O}(${a})`}return typeof A=="function"?(0,e._)`${O}(${a})`:(0,e._)`${O}.test(${a})`}}}};return ds.default=r,ds}var Lu;function Pb(){if(Lu)return us;Lu=1,Object.defineProperty(us,"__esModule",{value:!0});const t=[kb().default];return us.default=t,us}var en={},Vu;function Nb(){return Vu||(Vu=1,Object.defineProperty(en,"__esModule",{value:!0}),en.contentVocabulary=en.metadataVocabulary=void 0,en.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],en.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]),en}var zu;function Fb(){if(zu)return Ii;zu=1,Object.defineProperty(Ii,"__esModule",{value:!0});const e=nb(),t=pb(),r=Ob(),n=Pb(),i=Nb(),s=[e.default,t.default,(0,r.default)(),n.default,i.metadataVocabulary,i.contentVocabulary];return Ii.default=s,Ii}var fs={},ri={},Bu;function Ib(){if(Bu)return ri;Bu=1,Object.defineProperty(ri,"__esModule",{value:!0}),ri.DiscrError=void 0;var e;return(function(t){t.Tag="tag",t.Mapping="mapping"})(e||(ri.DiscrError=e={})),ri}var Ku;function Rb(){if(Ku)return fs;Ku=1,Object.defineProperty(fs,"__esModule",{value:!0});const e=je(),t=Ib(),r=Ko(),n=Zs(),i=Re(),a={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:o,tagName:l}})=>o===t.DiscrError.Tag?`tag "${l}" must be string`:`value of tag "${l}" must be in oneOf`,params:({params:{discrError:o,tag:l,tagName:c}})=>(0,e._)`{error: ${o}, tag: ${c}, tagValue: ${l}}`},code(o){const{gen:l,data:c,schema:u,parentSchema:d,it:h}=o,{oneOf:m}=d;if(!h.opts.discriminator)throw new Error("discriminator: requires discriminator option");const g=u.propertyName;if(typeof g!="string")throw new Error("discriminator: requires propertyName");if(u.mapping)throw new Error("discriminator: mapping is not supported");if(!m)throw new Error("discriminator: requires oneOf keyword");const b=l.let("valid",!1),v=l.const("tag",(0,e._)`${c}${(0,e.getProperty)(g)}`);l.if((0,e._)`typeof ${v} == "string"`,()=>y(),()=>o.error(!1,{discrError:t.DiscrError.Tag,tag:v,tagName:g})),o.ok(b);function y(){const O=A();l.if(!1);for(const p in O)l.elseIf((0,e._)`${v} === ${p}`),l.assign(b,f(O[p]));l.else(),o.error(!1,{discrError:t.DiscrError.Mapping,tag:v,tagName:g}),l.endIf()}function f(O){const p=l.name("valid"),x=o.subschema({keyword:"oneOf",schemaProp:O},p);return o.mergeEvaluated(x,e.Name),p}function A(){var O;const p={},x=k(d);let $=!0;for(let U=0;Uthis.addVocabulary(g)),this.opts.discriminator&&this.addKeyword(i.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const g=this.opts.$data?this.$dataMetaSchema(s,a):s;this.addMetaSchema(g,o,!1),this.refs["http://json-schema.org/schema"]=o}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(o)?o:void 0)}}t.Ajv=l,e.exports=t=l,e.exports.Ajv=l,Object.defineProperty(t,"__esModule",{value:!0}),t.default=l;var c=Ys();Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return c.KeywordCxt}});var u=je();Object.defineProperty(t,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});var d=Bo();Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return d.default}});var h=Zs();Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return h.default}})})(Oi,Oi.exports)),Oi.exports}var zb=Af();const Bb=mi(zb);var hs={exports:{}},za={},Wu;function Kb(){return Wu||(Wu=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.formatNames=e.fastFormats=e.fullFormats=void 0;function t(N,I){return{validate:N,compare:I}}e.fullFormats={date:t(s,a),time:t(l,c),"date-time":t(d,h),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:b,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:k,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:y,int32:{type:"number",validate:O},int64:{type:"number",validate:p},float:{type:"number",validate:x},double:{type:"number",validate:x},password:!0,binary:!0},e.fastFormats={...e.fullFormats,date:t(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,a),time:t(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,c),"date-time":t(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,h),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},e.formatNames=Object.keys(e.fullFormats);function r(N){return N%4===0&&(N%100!==0||N%400===0)}const n=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,i=[0,31,28,31,30,31,30,31,31,30,31,30,31];function s(N){const I=n.exec(N);if(!I)return!1;const U=+I[1],q=+I[2],M=+I[3];return q>=1&&q<=12&&M>=1&&M<=(q===2&&r(U)?29:i[q])}function a(N,I){if(N&&I)return N>I?1:NI?1:N=f}function p(N){return Number.isInteger(N)}function x(){return!0}const $=/[^\\]\\Z/;function k(N){if($.test(N))return!1;try{return new RegExp(N),!0}catch{return!1}}})(za)),za}var Ba={},Gu;function Hb(){return Gu||(Gu=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.formatLimitDefinition=void 0;const t=Af(),r=je(),n=r.operators,i={formatMaximum:{okStr:"<=",ok:n.LTE,fail:n.GT},formatMinimum:{okStr:">=",ok:n.GTE,fail:n.LT},formatExclusiveMaximum:{okStr:"<",ok:n.LT,fail:n.GTE},formatExclusiveMinimum:{okStr:">",ok:n.GT,fail:n.LTE}},s={message:({keyword:o,schemaCode:l})=>r.str`should be ${i[o].okStr} ${l}`,params:({keyword:o,schemaCode:l})=>r._`{comparison: ${i[o].okStr}, limit: ${l}}`};e.formatLimitDefinition={keyword:Object.keys(i),type:"string",schemaType:"string",$data:!0,error:s,code(o){const{gen:l,data:c,schemaCode:u,keyword:d,it:h}=o,{opts:m,self:g}=h;if(!m.validateFormats)return;const b=new t.KeywordCxt(h,g.RULES.all.format.definition,"format");b.$data?v():y();function v(){const A=l.scopeValue("formats",{ref:g.formats,code:m.code.formats}),O=l.const("fmt",r._`${A}[${b.schemaCode}]`);o.fail$data(r.or(r._`typeof ${O} != "object"`,r._`${O} instanceof RegExp`,r._`typeof ${O}.compare != "function"`,f(O)))}function y(){const A=b.schema,O=g.formats[A];if(!O||O===!0)return;if(typeof O!="object"||O instanceof RegExp||typeof O.compare!="function")throw new Error(`"${d}": format "${A}" does not define "compare" function`);const p=l.scopeValue("formats",{key:A,ref:O,code:m.code.formats?r._`${m.code.formats}${r.getProperty(A)}`:void 0});o.fail$data(f(p))}function f(A){return r._`${A}.compare(${c}, ${u}) ${i[d].fail} 0`}},dependencies:["format"]};const a=o=>(o.addKeyword(e.formatLimitDefinition),o);e.default=a})(Ba)),Ba}var Ju;function Wb(){return Ju||(Ju=1,(function(e,t){Object.defineProperty(t,"__esModule",{value:!0});const r=Kb(),n=Hb(),i=je(),s=new i.Name("fullFormats"),a=new i.Name("fastFormats"),o=(c,u={keywords:!0})=>{if(Array.isArray(u))return l(c,u,r.fullFormats,s),c;const[d,h]=u.mode==="fast"?[r.fastFormats,a]:[r.fullFormats,s],m=u.formats||r.formatNames;return l(c,m,d,h),u.keywords&&n.default(c),c};o.get=(c,u="full")=>{const h=(u==="fast"?r.fastFormats:r.fullFormats)[c];if(!h)throw new Error(`Unknown format "${c}"`);return h};function l(c,u,d,h){var m,g;(m=(g=c.opts.code).formats)!==null&&m!==void 0||(g.formats=i._`require("ajv-formats/dist/formats").${h}`);for(const b of u)c.addFormat(b,d[b])}e.exports=t=o,Object.defineProperty(t,"__esModule",{value:!0}),t.default=o})(hs,hs.exports)),hs.exports}var Gb=Wb();const Yu=mi(Gb),Jb={allErrors:!0,multipleOfPrecision:8,strict:!1,verbose:!0,discriminator:!1},Yb=/^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/,Zb=/^data:([a-z]+\/[a-z0-9-+.]+)?;(?:name=(.*);)?base64,(.*)$/;function Qb(e,t,r={},n,i=Bb,s){let a=new i({...Jb,...r});return n?Yu(a,n):n!==!1&&Yu(a),a.addFormat("data-url",Zb),a.addFormat("color",Yb),a.addKeyword(Ao),Array.isArray(e)&&a.addMetaSchema(e),le(t)&&Object.keys(t).forEach(o=>{a.addFormat(o,t[o])}),s&&(a=s(a)),a}class Xb{ajv;localizer;suppressDuplicateFiltering;lastSeenRootSchema;hasRegisteredRootSchema=!1;constructor(t,r){const{additionalMetaSchemas:n,customFormats:i,ajvOptionsOverrides:s,ajvFormatOptions:a,AjvClass:o,extenderFn:l,suppressDuplicateFiltering:c}=t;this.ajv=Qb(n,i,s,a,o,l),this.localizer=r,this.suppressDuplicateFiltering=c}reset(){this.ajv.removeSchema(),this.lastSeenRootSchema=void 0,this.hasRegisteredRootSchema=!1}rawValidation(t,r){let n,i;try{t[Te]&&(i=this.ajv.getSchema(t[Te])),i===void 0&&(i=this.ajv.compile(t)),i(r)}catch(a){n=a,i===void 0&&this.ajv.removeSchema(t[Te]!==void 0?t[Te]:t)}let s;return i&&(typeof this.localizer=="function"&&((i.errors??[]).forEach(a=>{["missingProperty","property"].forEach(o=>{a.params?.[o]&&(a.params[o]=`'${a.params[o]}'`)}),a.params?.deps&&(a.params.deps=a.params.deps.split(", ").map(o=>`'${o}'`).join(", "))}),this.localizer(i.errors),(i.errors??[]).forEach(a=>{["missingProperty","property"].forEach(o=>{a.params?.[o]&&(a.params[o]=a.params[o].slice(1,-1))}),a.params?.deps&&(a.params.deps=a.params.deps.split(", ").map(o=>o.slice(1,-1)).join(", "))})),s=i.errors||void 0,i.errors=null),{errors:s,validationError:n}}validateFormData(t,r,n,i,s){const a=this.rawValidation(r,t);return Mv(this,a,t,r,n,i,s,this.suppressDuplicateFiltering)}handleSchemaUpdate(t){if(this.lastSeenRootSchema===t&&this.hasRegisteredRootSchema)return;const r=t[Te]??ad;this.ajv.getSchema(r)===void 0?this.ajv.addSchema(t,r):Ae(t,this.ajv.getSchema(r)?.schema)||(this.ajv.removeSchema(r),this.ajv.addSchema(t,r)),this.lastSeenRootSchema=t,this.hasRegisteredRootSchema=!0}isValid(t,r,n){let i,s=!1;try{this.handleSchemaUpdate(n);const a=To(t);i=a[Te]??Wp(a);let o;return o=this.ajv.getSchema(i),o===void 0&&(o=this.ajv.addSchema(a,i).getSchema(i)||this.ajv.compile(a)),s=!0,o(r)}catch(a){return console.warn("Error encountered compiling schema:",a),!s&&i!==void 0&&this.ajv.removeSchema(i),!1}}}function e1(e={},t){return new Xb(e,t)}const t1=e1(),Zu=["#0ea5e9","#f97316","#22c55e","#a855f7","#ef4444","#eab308"],hi=G.createContext(0);function Wo(){const e=G.useContext(hi);return{color:Zu[e%Zu.length],depth:e}}function So(e,t=""){if(!e||typeof e!="object")return{};const r=Array.isArray(e.examples)?e.examples[0]:void 0,n=r===void 0?{}:{"ui:placeholder":String(r)};return e.writeOnly===!0?{"ui:widget":"SecretWidget","ui:options":{secretPath:t},...n}:e.type==="boolean"?{"ui:widget":"checkbox","ui:options":{label:!1}}:e.type==="array"&&e.items?{items:So(e.items,t?`${t}[]`:"[]")}:e.type!=="object"||!e.properties?n:Object.fromEntries(Object.entries(e.properties).map(([i,s])=>[i,So(s,t?`${t}.${i}`:i)]))}function r1({id:e,disabled:t,readonly:r,options:n,placeholder:i,registry:s}){const a=n.secretPath,o=s.formContext||{},l=o.secretOperations?.[a],c=!!o.configuredSecrets?.[a],u=l?.action==="replace",d=l?.action==="clear",h=t||r;function m(g){h||o.setSecretOperation?.(a,g)}return w.jsxs("div",{className:"configuration-secret space-y-0.5",children:[w.jsxs("div",{className:"flex flex-wrap items-center gap-0.5",children:[w.jsx("span",{className:"text-[0.7rem] text-slate-500",children:d?"Will be cleared when saved":u?"Replacement pending":c?"Configured":"Not configured"}),w.jsxs("div",{className:"flex gap-0.5",children:[w.jsx("button",{type:"button",className:"button-dark text-xs",disabled:h,onClick:()=>m(u?null:{action:"replace",value:""}),children:u?"Cancel replace":"Replace"}),w.jsx("button",{type:"button",className:d?"button-dark text-xs":"button-danger text-xs",disabled:h,onClick:()=>m(d?null:{action:"clear"}),children:d?"Undo clear":"Clear"})]})]}),u?w.jsx("input",{id:e,className:"field-input w-full",type:"password",autoComplete:"new-password",value:l.value,placeholder:i||"Enter replacement value",disabled:h,onChange:g=>m({action:"replace",value:g.target.value})}):null]})}function n1({children:e,classNames:t,description:r,errors:n,help:i,hidden:s,id:a,label:o,required:l,schema:c,style:u}){return s?w.jsx("div",{className:"hidden",children:e}):c?.type==="object"||c?.type==="array"?w.jsxs("div",{className:t,style:u,children:[e,n,i]}):w.jsxs("div",{className:`${t||""} configuration-line`,style:u,children:[w.jsx("div",{className:"configuration-key",children:w.jsxs("label",{htmlFor:a,className:"configuration-key-label",children:[o,l?w.jsx("span",{className:"ml-0.25 text-sky-300",children:"*"}):null]})}),w.jsxs("div",{className:"configuration-value",children:[r?w.jsx("div",{className:"configuration-value-description",children:r}):null,e,n,i]})]})}function i1({description:e,fieldPathId:t,properties:r,title:n}){const s=r.filter(l=>!l.hidden).map(l=>l.content),a=t.path.length===1,o=Wo();return t.path.length===0?w.jsxs("div",{children:[e?w.jsx("div",{className:"configuration-root-description",children:e}):null,w.jsx(hi.Provider,{value:0,children:w.jsx("div",{className:"configuration-tree",children:s})})]}):typeof t.path.at(-1)=="number"?w.jsxs("div",{children:[e?w.jsx("div",{className:"configuration-item-description",children:e}):null,s]}):w.jsxs(We,{title:n,color:o.color,clipOverflow:!1,stickyHeader:a,className:`configuration-card${a?" configuration-top-level-card":""}`,headerClassName:a?"configuration-card-header":"",bodyClassName:"configuration-card-body",children:[e?w.jsx("div",{className:"configuration-branch-description",children:e}):null,w.jsx(hi.Provider,{value:o.depth+1,children:w.jsx("div",{className:"configuration-children",children:s})})]})}function s1({buttonsProps:e,children:t,hasToolbar:r,index:n}){const i=e.disabled||e.readonly,s=Wo();return w.jsxs(We,{title:`Item ${n+1}`,color:s.color,clipOverflow:!1,className:"configuration-card configuration-array-item",bodyClassName:"configuration-card-body",children:[r?w.jsxs("div",{className:"configuration-item-actions",children:[e.hasMoveUp||e.hasMoveDown?w.jsx("button",{type:"button",className:"button-dark text-xs",disabled:i||!e.hasMoveUp,onClick:e.onMoveUpItem,children:"Move up"}):null,e.hasMoveUp||e.hasMoveDown?w.jsx("button",{type:"button",className:"button-dark text-xs",disabled:i||!e.hasMoveDown,onClick:e.onMoveDownItem,children:"Move down"}):null,e.hasCopy?w.jsx("button",{type:"button",className:"button-dark text-xs",disabled:i,onClick:e.onCopyItem,children:"Duplicate"}):null,e.hasRemove?w.jsx("button",{type:"button",className:"button-danger text-xs",disabled:i,onClick:e.onRemoveItem,children:"Remove"}):null]}):null,w.jsx(hi.Provider,{value:s.depth+1,children:w.jsx("div",{className:"configuration-children",children:t})})]})}function a1({canAdd:e,disabled:t,fieldPathId:r,items:n,onAddClick:i,readonly:s,schema:a,title:o}){const l=r.path.length===1,c=Wo();return w.jsxs(We,{title:o,meta:`${n.length} ${n.length===1?"item":"items"}`,color:c.color,clipOverflow:!1,stickyHeader:l,className:`configuration-card configuration-array${l?" configuration-top-level-card":""}`,headerClassName:l?"configuration-card-header":"",bodyClassName:"configuration-card-body",children:[a.description?w.jsx("div",{className:"configuration-branch-description",children:a.description}):null,e?w.jsx("div",{className:"configuration-array-actions",children:w.jsx("button",{type:"button",className:"button-dark text-xs",disabled:t||s,onClick:i,children:"Add item"})}):null,w.jsx(hi.Provider,{value:c.depth+1,children:w.jsx("div",{className:"configuration-children",children:n.length?n:w.jsx("p",{className:"text-xs text-slate-500",children:"No items configured."})})})]})}function o1({schema:e,value:t,onChange:r,configuredSecrets:n,secretOperations:i,setSecretOperation:s}){const a=G.useMemo(()=>So(e),[e]),o=G.useMemo(()=>({SecretWidget:r1}),[]),l=G.useMemo(()=>({ArrayFieldItemTemplate:s1,ArrayFieldTemplate:a1,FieldTemplate:n1,ObjectFieldTemplate:i1}),[]),c=G.useMemo(()=>({configuredSecrets:n,secretOperations:i,setSecretOperation:s}),[n,i,s]);return w.jsx("div",{className:"configuration-schema-form",children:w.jsx(Or,{schema:e,uiSchema:a,formData:t,validator:t1,widgets:o,templates:l,formContext:c,noHtml5Validate:!0,showErrorList:!1,onChange:({formData:u})=>r(u),children:w.jsx(w.Fragment,{})})})}function Ka(e){return JSON.parse(JSON.stringify(e))}function l1({snapshot:e,socket:t,runSensitive:r,onSnapshot:n,onReload:i}){const s=e?.configuration?.config,a=e?.configuration?.schema,o=e?.configuration?.revision,[l,c]=G.useState(()=>Ka(s)),[u,d]=G.useState({}),[h,m]=G.useState(!1),[g,b]=G.useState(!1),[v,y]=G.useState(null),[f,A]=G.useState(""),[O,p]=G.useState(""),[x,$]=G.useState([]),k=G.useRef(null),N=G.useRef(null);G.useEffect(()=>{c(Ka(s)),d({}),p(""),y(null),$([])},[o,s]),G.useEffect(()=>{const K=k.current,B=N.current;if(!K||!B)return;const Q=()=>{K.style.setProperty("--configuration-sticky-top",`${B.offsetHeight}px`)};Q();const X=typeof ResizeObserver=="function"?new ResizeObserver(Q):null;return X?.observe(B),window.addEventListener("resize",Q),()=>{X?.disconnect(),window.removeEventListener("resize",Q),K.style.removeProperty("--configuration-sticky-top")}},[s,a]);const I=G.useMemo(()=>JSON.stringify(l)!==JSON.stringify(s)||Object.keys(u).length>0,[l,u,s]),U=h||g;if(!s||!a)return w.jsx("p",{className:"surface p-1 text-sm text-red-200",children:"The configuration document is unavailable."});const q=(K,B)=>d(Q=>{const X={...Q};return B?X[K]=B:delete X[K],X});async function M(){m(!0),p(""),$([]);try{const K=await r(()=>yh(t,{value:l,expectedRevision:o,secretOperations:u}));n(K.snapshot)}catch(K){p(K.message),$(K.validationErrors||[])}finally{m(!1)}}async function L(){if(!(!v||!window.confirm("Replace the current configuration with this YAML file and apply it now? Any unsaved edits will be discarded. Administrator accounts in the file will be ignored."))){b(!0),p(""),A(""),$([]);try{const B=await v.text(),Q=await r(()=>gh(t,{fileName:v.name,yaml:B,expectedRevision:o}));n(Q.snapshot),A(Q.ignoredAdministratorCount>0?`Configuration imported and applied. ${Q.ignoredAdministratorCount} administrator entr${Q.ignoredAdministratorCount===1?"y was":"ies were"} ignored.`:"Configuration imported and applied.")}catch(B){p(B.message),$(B.validationErrors||[])}finally{b(!1)}}}return w.jsx("div",{ref:k,className:"configuration-editor",children:w.jsxs(We,{title:"Configuration",meta:`revision ${o}`,clipOverflow:!1,bodyClassName:"p-0.5",children:[w.jsxs("div",{ref:N,className:"configuration-toolbar sticky top-0 z-20 mb-0.5 space-y-0.5 border border-neutral-500/60 bg-neutral-900/95 p-0.5 backdrop-blur",children:[w.jsx("p",{className:"text-xs text-slate-400",children:"Saving applies the complete revision immediately and reloads each affected service."}),w.jsxs("div",{className:"flex flex-wrap gap-0.5",children:[w.jsx("button",{type:"button",className:"button-dark",disabled:U,onClick:i,children:"Reload"}),w.jsx("button",{type:"button",className:"button-dark",disabled:!I||U,onClick:()=>{c(Ka(s)),d({})},children:"Reset"}),w.jsx("button",{type:"button",className:"button-dark",disabled:!I||U,onClick:M,children:h?"Applying…":"Save configuration"})]})]}),w.jsxs(We,{title:"Import legacy YAML",bodyClassName:"space-y-0.5 p-1 text-sm",clipOverflow:!1,children:[w.jsx("p",{className:"text-sm text-slate-300",children:"Replace this configuration from an explicitly selected legacy file. Unknown old settings and administrator accounts are ignored; current settings are validated and applied immediately."}),w.jsxs("div",{className:"flex max-w-3xl flex-col gap-0.5 md:flex-row",children:[w.jsx("input",{className:"field-input min-w-0 flex-1",type:"file",accept:".yaml,.yml,text/yaml",disabled:U,onChange:K=>y(K.target.files?.[0]||null)},o),w.jsx("button",{type:"button",className:"button-dark",disabled:U||!v,onClick:L,children:g?"Importing…":"Import selected YAML"})]})]}),e.configurationApplication?.services?.some(K=>K.status==="failed")?w.jsxs("div",{className:"mb-0.5 border border-amber-500/60 bg-amber-950/40 p-1 text-xs text-amber-100",children:[w.jsx("p",{className:"font-semibold",children:"Configuration was saved, but some services could not reload"}),w.jsx("ul",{className:"mt-0.5 list-disc space-y-0.25 pl-4",children:e.configurationApplication.services.filter(K=>K.status==="failed").map((K,B)=>w.jsxs("li",{children:[K.section,": ",K.error]},`${K.section}-${B}`))})]}):null,O?w.jsx("p",{className:"border border-red-500/60 bg-red-950/40 p-1 text-xs text-red-100",children:O}):null,f?w.jsx("p",{className:"border border-emerald-500/60 bg-emerald-950/40 p-1 text-sm text-emerald-100",children:f}):null,x.length?w.jsxs("div",{className:"border border-red-500/60 bg-red-950/40 p-1 text-xs text-red-100",children:[w.jsx("p",{className:"font-semibold",children:"Configuration could not be saved"}),w.jsx("ul",{className:"mt-0.5 list-disc space-y-0.25 pl-4",children:x.map((K,B)=>w.jsxs("li",{children:[K.path,": ",K.message]},`${K.path}-${B}`))})]}):null,w.jsx(o1,{schema:a,value:l,onChange:c,configuredSecrets:e.configuration.configuredSecrets,secretOperations:u,setSecretOperation:q})]})})}function c1({open:e,busy:t,error:r,onCancel:n,onConfirm:i}){const[s,a]=G.useState("");if(!e)return null;async function o(c){c.preventDefault(),await i(s),a("")}function l(){a(""),n()}return w.jsx("div",{className:"fixed inset-0 z-[1000] flex items-center justify-center bg-black/75 p-2",children:w.jsxs("form",{className:"w-full max-w-sm border border-neutral-500/70 bg-neutral-900 p-1 text-slate-100 shadow-2xl",onSubmit:o,children:[w.jsx("h2",{className:"text-base font-semibold",children:"Confirm password"}),w.jsx("p",{className:"mt-0.5 text-xs text-slate-400",children:"This sensitive action requires recent confirmation of your administrator password."}),w.jsx("input",{autoFocus:!0,autoComplete:"current-password",className:"field-input mt-1 w-full",type:"password",value:s,onChange:c=>a(c.target.value)}),r?w.jsx("p",{className:"mt-0.5 text-xs text-red-300",children:r}):null,w.jsxs("div",{className:"mt-1 flex justify-end gap-0.5",children:[w.jsx("button",{type:"button",className:"button-dark",disabled:t,onClick:l,children:"Cancel"}),w.jsx("button",{type:"submit",className:"button-dark",disabled:t||!s,children:t?"Confirming…":"Confirm"})]})]})})}const u1=[{key:"overview",label:"Overview"},{key:"fleet",label:"Fleet operations"},{key:"users",label:"Users and administrators",lockdownOnly:!0},{key:"configuration",label:"Configuration",lockdownOnly:!0},{key:"backup-restore",label:"Backup and restore",lockdownOnly:!0}];function h1(){Yf({identitySurface:"passive"});const e=Qu(),t=ll(M=>M.session?.role||"user"),r=ll(M=>M.connected),[n,i]=Zf(),s=n.get("section")||"overview",[a,o]=G.useState(null),[l,c]=G.useState(""),u=G.useRef(null),[d,h]=G.useState(!1),[m,g]=G.useState(!1),[b,v]=G.useState(""),{value:y}=Qf("page",{backgroundTheme:Xf}),f=eh(y?.backgroundTheme),A=t==="admin"||t==="lockdown",O=t==="lockdown",p=G.useCallback(async()=>{if(!O){o(null);return}c("");try{o(await vh(e))}catch(M){c(M.message)}},[O,e]);G.useEffect(()=>{p()},[p,r]);const x=G.useCallback(async M=>{try{return await M()}catch(L){if(L.code!=="PASSWORD_CONFIRMATION_REQUIRED")throw L;return new Promise((K,B)=>{u.current={operation:M,resolve:K,reject:B},v(""),h(!0)})}},[]);async function $(M){g(!0),v("");try{await bh(e,M);const L=u.current;if(u.current=null,h(!1),L)try{L.resolve(await L.operation())}catch(K){L.reject(K)}}catch(L){v(L.message)}finally{g(!1)}}function k(){const M=u.current;u.current=null,h(!1),M&&M.reject(new Error("Sensitive action cancelled."))}function N(M){i(M==="overview"?{}:{section:M})}const I=u1.filter(M=>!M.lockdownOnly||O),U=I.some(M=>M.key===s)?s:"overview";let q;return A?U==="fleet"?q=w.jsx(nh,{}):O?a?U==="users"?q=w.jsxs("div",{className:"space-y-0.5",children:[w.jsx(Vh,{administrators:a.administrators,socket:e,runSensitive:x,onSnapshot:o}),w.jsx(qh,{})]}):U==="configuration"?q=w.jsx(l1,{snapshot:a,socket:e,runSensitive:x,onSnapshot:o,onReload:p}):U==="backup-restore"?q=w.jsx(Kh,{socket:e,runSensitive:x}):q=w.jsx(zh,{snapshot:a,socket:e,runSensitive:x,onSnapshot:o}):q=w.jsx(We,{title:"Loading administration",bodyClassName:"p-1 text-sm text-slate-300",children:w.jsx("p",{children:l||"Loading configuration and audit state…"})}):q=w.jsx(We,{title:"Administrator access",bodyClassName:"p-1 text-sm text-slate-300",children:w.jsx("p",{children:"Routine fleet operations are available. Configuration, users, secrets, and system administration require a lockdown administrator."})}):q=w.jsx("div",{className:"mx-auto w-full max-w-md",children:w.jsx(rh,{})}),w.jsxs("div",{className:`${f} min-h-screen text-slate-100`,children:[w.jsx(th,{}),w.jsx(c1,{open:d,busy:m,error:b,onCancel:k,onConfirm:$}),w.jsxs("main",{className:"mx-auto min-h-screen w-full max-w-[100rem] p-1",children:[w.jsx(We,{title:"MultiRover administration",meta:r?t:"offline",bodyClassName:"p-0.5 text-xs text-slate-400",children:w.jsx("p",{children:a?`Active configuration revision ${a.configuration.revision}. The running application has applied revision ${a.appliedRevision}.`:"Central server administration and configuration."})}),A?w.jsxs(Xu,{currentTab:U,onTabChange:N,children:[w.jsx("nav",{"aria-label":"Administration sections",children:w.jsx(ed,{className:"my-0.5",children:I.map(M=>w.jsx(jn,{id:M.key,children:M.label},M.key))})}),w.jsx(td,{children:w.jsx("section",{className:"min-w-0",children:q})})]}):w.jsx("section",{className:"mt-0.5 min-w-0",children:q})]})]})}export{h1 as default}; -//# sourceMappingURL=AdminApp-CIfEu47p.js.map diff --git a/server/public/assets/AdminApp-CIfEu47p.js.map b/server/public/assets/AdminApp-CIfEu47p.js.map deleted file mode 100644 index 2e86ee94..00000000 --- a/server/public/assets/AdminApp-CIfEu47p.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AdminApp-CIfEu47p.js","sources":["../../../webui/src/database/identityDatabaseApi.js","../../../webui/src/database/identityDatabaseUtils.js","../../../webui/src/database/IdentityDatabasePanel.jsx","../../../webui/src/admin/components/AdministratorAccounts.jsx","../../../webui/src/admin/components/AdminOverview.jsx","../../../webui/src/admin/components/BackupRestorePanel.jsx","../../../webui/node_modules/@rjsf/utils/lib/isObject.js","../../../webui/node_modules/@rjsf/utils/lib/allowAdditionalItems.js","../../../webui/node_modules/@rjsf/utils/lib/getDecimalSeparator.js","../../../webui/node_modules/@rjsf/utils/lib/asNumber.js","../../../webui/node_modules/@rjsf/utils/lib/constants.js","../../../webui/node_modules/@rjsf/utils/lib/getUiOptions.js","../../../webui/node_modules/@rjsf/utils/lib/canExpand.js","../../../webui/node_modules/@rjsf/utils/lib/isPlainObject.js","../../../webui/node_modules/@rjsf/utils/lib/createErrorHandler.js","../../../webui/node_modules/fast-equals/dist/es/index.mjs","../../../webui/node_modules/@rjsf/utils/lib/deepEquals.js","../../../webui/node_modules/fast-uri/lib/utils.js","../../../webui/node_modules/fast-uri/lib/schemes.js","../../../webui/node_modules/fast-uri/index.js","../../../webui/node_modules/jsonpointer/jsonpointer.js","../../../webui/node_modules/@rjsf/utils/lib/findSchemaDefinition.js","../../../webui/node_modules/@rjsf/utils/lib/pathUtils.js","../../../webui/node_modules/@rjsf/utils/lib/getDiscriminatorFieldFromSchema.js","../../../webui/node_modules/@rjsf/utils/lib/guessType.js","../../../webui/node_modules/@rjsf/utils/lib/getSchemaType.js","../../../webui/node_modules/@rjsf/utils/lib/mergeSchemas.js","../../../webui/node_modules/@rjsf/utils/lib/getPropertySchema.js","../../../webui/node_modules/@rjsf/utils/lib/getOptionMatchingSimpleDiscriminator.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getFirstMatchingOption.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/object.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/json-schema.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/ord.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/array.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/memoize.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/compare/compare.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/function.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/math.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/merge/patterns.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/merge/merge.js","../../../webui/node_modules/@x0k/json-schema-merge/dist/lib/json-schema/merge/all-of-merge.js","../../../webui/node_modules/@rjsf/utils/lib/schema/shallowAllOfMerge.js","../../../webui/node_modules/@rjsf/utils/lib/schema/retrieveSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/findSelectedOptionInXxxOf.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getFromSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/findFieldInSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getClosestMatchingOption.js","../../../webui/node_modules/@rjsf/utils/lib/constIsAjvDataReference.js","../../../webui/node_modules/@rjsf/utils/lib/isConstant.js","../../../webui/node_modules/@rjsf/utils/lib/isFixedItems.js","../../../webui/node_modules/@rjsf/utils/lib/mergeDefaultsWithFormData.js","../../../webui/node_modules/@rjsf/utils/lib/mergeObjects.js","../../../webui/node_modules/@rjsf/utils/lib/toConstant.js","../../../webui/node_modules/@rjsf/utils/lib/optionsList.js","../../../webui/node_modules/@rjsf/utils/lib/schema/isSelect.js","../../../webui/node_modules/@rjsf/utils/lib/schema/isMultiSelect.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getDefaultFormState.js","../../../webui/node_modules/@rjsf/utils/lib/isCustomWidget.js","../../../webui/node_modules/@rjsf/utils/lib/schema/isFilesArray.js","../../../webui/node_modules/@rjsf/utils/lib/schema/getDisplayLabel.js","../../../webui/node_modules/@rjsf/utils/lib/schema/omitExtraData.js","../../../webui/node_modules/@rjsf/utils/lib/schema/sanitizeDataForNewSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schema/toPathSchema.js","../../../webui/node_modules/@rjsf/utils/lib/createSchemaUtils.js","../../../webui/node_modules/@rjsf/utils/lib/dataURItoBlob.js","../../../webui/node_modules/@rjsf/utils/lib/pad.js","../../../webui/node_modules/@rjsf/utils/lib/dateRangeOptions.js","../../../webui/node_modules/@rjsf/utils/lib/replaceStringParameters.js","../../../webui/node_modules/@rjsf/utils/lib/englishStringTranslator.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsValueForIndex.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsDeselectValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsIsSelected.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsIndexForValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionSelectedValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionsSelectValue.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionValueDecoder.js","../../../webui/node_modules/@rjsf/utils/lib/enumOptionValueEncoder.js","../../../webui/node_modules/@rjsf/utils/lib/ErrorSchemaBuilder.js","../../../webui/node_modules/@rjsf/utils/lib/getChangedFields.js","../../../webui/node_modules/@rjsf/utils/lib/getDateElementProps.js","../../../webui/node_modules/@rjsf/utils/lib/rangeSpec.js","../../../webui/node_modules/@rjsf/utils/lib/getInputProps.js","../../../webui/node_modules/@rjsf/utils/lib/getOptionValueFormat.js","../../../webui/node_modules/@rjsf/utils/lib/getSubmitButtonOptions.js","../../../webui/node_modules/@rjsf/utils/lib/getTemplate.js","../../../webui/node_modules/@rjsf/utils/lib/getTestIds.js","../../../webui/node_modules/react-is/cjs/react-is.production.min.js","../../../webui/node_modules/react-is/index.js","../../../webui/node_modules/@rjsf/utils/lib/getWidget.js","../../../webui/node_modules/@rjsf/utils/lib/hashForSchema.js","../../../webui/node_modules/@rjsf/utils/lib/hasWidget.js","../../../webui/node_modules/@rjsf/utils/lib/idGenerators.js","../../../webui/node_modules/@rjsf/utils/lib/isFormDataAvailable.js","../../../webui/node_modules/@rjsf/utils/lib/isRootSchema.js","../../../webui/node_modules/@rjsf/utils/lib/labelValue.js","../../../webui/node_modules/@rjsf/utils/lib/localToUTC.js","../../../webui/node_modules/@rjsf/utils/lib/logUnsupportedDefaultForEnum.js","../../../webui/node_modules/@rjsf/utils/lib/lookupFromFormContext.js","../../../webui/node_modules/@rjsf/utils/lib/noop.js","../../../webui/node_modules/@rjsf/utils/lib/orderProperties.js","../../../webui/node_modules/@rjsf/utils/lib/parseDateString.js","../../../webui/node_modules/@rjsf/utils/lib/resolveDefaultWidget.js","../../../webui/node_modules/@rjsf/utils/lib/resolveUiSchema.js","../../../webui/node_modules/@rjsf/utils/lib/schemaHasNestedConditional.js","../../../webui/node_modules/@rjsf/utils/lib/schemaRequiresTrueValue.js","../../../webui/node_modules/@rjsf/utils/lib/SelectedOptionDescription.js","../../../webui/node_modules/@rjsf/utils/lib/shallowEquals.js","../../../webui/node_modules/@rjsf/utils/lib/shouldRender.js","../../../webui/node_modules/@rjsf/utils/lib/shouldRenderOptionalField.js","../../../webui/node_modules/@rjsf/utils/lib/toDateString.js","../../../webui/node_modules/@rjsf/utils/lib/toErrorList.js","../../../webui/node_modules/@rjsf/utils/lib/toErrorSchema.js","../../../webui/node_modules/@rjsf/utils/lib/toFieldPathId.js","../../../webui/node_modules/@rjsf/utils/lib/unwrapErrorHandler.js","../../../webui/node_modules/@rjsf/utils/lib/useAltDateWidgetProps.js","../../../webui/node_modules/@rjsf/utils/lib/useDeepCompareMemo.js","../../../webui/node_modules/@rjsf/utils/lib/useFileWidgetProps.js","../../../webui/node_modules/@rjsf/utils/lib/utcToLocal.js","../../../webui/node_modules/@rjsf/utils/lib/validationDataMerge.js","../../../webui/node_modules/@rjsf/utils/lib/withIdRefPrefix.js","../../../webui/node_modules/@rjsf/utils/lib/enums.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/ArrayField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/BooleanField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/CyclicSchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/FallbackField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/LayoutGridField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/LayoutHeaderField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/LayoutMultiSchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/MultiSchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/NullField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/NumberField.js","../../../webui/node_modules/markdown-to-jsx/dist/entities.browser.js","../../../webui/node_modules/markdown-to-jsx/dist/react.js","../../../webui/node_modules/@rjsf/core/lib/components/constants.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/ObjectField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/OptionalDataControlsField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/SchemaField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/StringField.js","../../../webui/node_modules/@rjsf/core/lib/components/fields/index.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldDescriptionTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldItemButtonsTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldItemTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ArrayFieldTitleTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/SchemaExamples.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/BaseInputTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/IconButton.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/AddButton.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/SubmitButton.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ButtonTemplates/index.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/CyclicSchemaExpandTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/RichDescription.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/DescriptionField.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ErrorList.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FallbackFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldErrorTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/RichHelp.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldHelpTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldTemplate/Label.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/FieldTemplate/FieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/GridTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/MultiSchemaFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/ObjectFieldTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/OptionalDataControlsTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/TitleField.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/UnsupportedField.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/WrapIfAdditionalTemplate.js","../../../webui/node_modules/@rjsf/core/lib/components/templates/index.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/AltDateTimeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/AltDateWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/CheckboxesWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/CheckboxWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/ColorWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/DateTimeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/DateWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/EmailWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/FileWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/HiddenWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/PasswordWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/RadioWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/RangeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/RatingWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/SelectWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/TextareaWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/TextWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/TimeWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/UpDownWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/URLWidget.js","../../../webui/node_modules/@rjsf/core/lib/components/widgets/index.js","../../../webui/node_modules/@rjsf/core/lib/getDefaultRegistry.js","../../../webui/node_modules/@rjsf/core/lib/components/Form.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/processRawValidationErrors.js","../../../webui/node_modules/ajv/dist/compile/codegen/code.js","../../../webui/node_modules/ajv/dist/compile/codegen/scope.js","../../../webui/node_modules/ajv/dist/compile/codegen/index.js","../../../webui/node_modules/ajv/dist/compile/util.js","../../../webui/node_modules/ajv/dist/compile/names.js","../../../webui/node_modules/ajv/dist/compile/errors.js","../../../webui/node_modules/ajv/dist/compile/validate/boolSchema.js","../../../webui/node_modules/ajv/dist/compile/rules.js","../../../webui/node_modules/ajv/dist/compile/validate/applicability.js","../../../webui/node_modules/ajv/dist/compile/validate/dataType.js","../../../webui/node_modules/ajv/dist/compile/validate/defaults.js","../../../webui/node_modules/ajv/dist/vocabularies/code.js","../../../webui/node_modules/ajv/dist/compile/validate/keyword.js","../../../webui/node_modules/ajv/dist/compile/validate/subschema.js","../../../webui/node_modules/fast-deep-equal/index.js","../../../webui/node_modules/json-schema-traverse/index.js","../../../webui/node_modules/ajv/dist/compile/resolve.js","../../../webui/node_modules/ajv/dist/compile/validate/index.js","../../../webui/node_modules/ajv/dist/runtime/validation_error.js","../../../webui/node_modules/ajv/dist/compile/ref_error.js","../../../webui/node_modules/ajv/dist/compile/index.js","../../../webui/node_modules/ajv/node_modules/fast-uri/lib/utils.js","../../../webui/node_modules/ajv/node_modules/fast-uri/lib/schemes.js","../../../webui/node_modules/ajv/node_modules/fast-uri/index.js","../../../webui/node_modules/ajv/dist/runtime/uri.js","../../../webui/node_modules/ajv/dist/core.js","../../../webui/node_modules/ajv/dist/vocabularies/core/id.js","../../../webui/node_modules/ajv/dist/vocabularies/core/ref.js","../../../webui/node_modules/ajv/dist/vocabularies/core/index.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/limitNumber.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/multipleOf.js","../../../webui/node_modules/ajv/dist/runtime/ucs2length.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/limitLength.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/pattern.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/limitProperties.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/required.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/limitItems.js","../../../webui/node_modules/ajv/dist/runtime/equal.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/const.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/enum.js","../../../webui/node_modules/ajv/dist/vocabularies/validation/index.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/items.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/items2020.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/contains.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/dependencies.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/properties.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/not.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/anyOf.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/oneOf.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/allOf.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/if.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/thenElse.js","../../../webui/node_modules/ajv/dist/vocabularies/applicator/index.js","../../../webui/node_modules/ajv/dist/vocabularies/format/format.js","../../../webui/node_modules/ajv/dist/vocabularies/format/index.js","../../../webui/node_modules/ajv/dist/vocabularies/metadata.js","../../../webui/node_modules/ajv/dist/vocabularies/draft7.js","../../../webui/node_modules/ajv/dist/vocabularies/discriminator/types.js","../../../webui/node_modules/ajv/dist/vocabularies/discriminator/index.js","../../../webui/node_modules/ajv/dist/ajv.js","../../../webui/node_modules/ajv-formats/dist/formats.js","../../../webui/node_modules/ajv-formats/dist/limit.js","../../../webui/node_modules/ajv-formats/dist/index.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/createAjvInstance.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/validator.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/customizeValidator.js","../../../webui/node_modules/@rjsf/validator-ajv8/lib/index.js","../../../webui/src/admin/components/SchemaConfigurationForm.jsx","../../../webui/src/admin/components/ConfigurationEditor.jsx","../../../webui/src/admin/components/PasswordConfirmationDialog.jsx","../../../webui/src/admin/AdminApp.jsx"],"sourcesContent":["// Identity Database API\n// Purpose: Keeps identity socket event names and acknowledgement handling local to the administration user editor.\n// Scope: Provides small promise helpers over the shared socket without adding app-wide SessionContext actions.\nexport function emitIdentityAdmin(socket, eventName, payload = {}) {\n return new Promise((resolve, reject) => {\n socket.emit(eventName, payload, (resp = {}) => {\n if (resp.error) {\n reject(new Error(resp.error));\n return;\n }\n resolve(resp);\n });\n });\n}\n\nexport function listUsers(socket, { query = '', filter = 'all' } = {}) {\n return emitIdentityAdmin(socket, 'identityAdmin:listUsers', { query, filter });\n}\n\nexport function getUser(socket, userId) {\n return emitIdentityAdmin(socket, 'identityAdmin:getUser', { userId });\n}\n\nexport function addSignal(socket, userId, type, value) {\n return emitIdentityAdmin(socket, 'identityAdmin:addSignal', { userId, type, value });\n}\n\nexport function removeSignal(socket, userId, type, value) {\n return emitIdentityAdmin(socket, 'identityAdmin:removeSignal', { userId, type, value });\n}\n\nexport function setVerified(socket, userId, enabled) {\n return emitIdentityAdmin(socket, 'identityAdmin:setVerified', { userId, enabled });\n}\n\nexport function setDeterrence(socket, userId, enabled, reason) {\n return emitIdentityAdmin(socket, 'identityAdmin:setDeterrence', { userId, enabled, reason });\n}\n\nexport function setMuted(socket, userId, enabled) {\n return emitIdentityAdmin(socket, 'identityAdmin:setMuted', { userId, enabled });\n}\n\nexport function setPermission(socket, userId, permissionKey, enabled) {\n return emitIdentityAdmin(socket, 'identityAdmin:setPermission', { userId, permissionKey, enabled });\n}\n\nexport function updateFeatureState(socket, userId, namespace, value) {\n return emitIdentityAdmin(socket, 'identityAdmin:updateFeatureState', { userId, namespace, value });\n}\n\nexport function deleteFeatureState(socket, userId, namespace) {\n return emitIdentityAdmin(socket, 'identityAdmin:deleteFeatureState', { userId, namespace });\n}\n","// Identity Database Utilities\n// Purpose: Provides local formatting, filtering, and JSON helpers for the administration user editor.\n// Scope: Avoids leaking database-editor-specific presentation helpers into shared UI modules.\nexport const SIGNAL_LABELS = {\n cookieUserId: 'Cookie keys',\n fingerprintId: 'Fingerprints',\n nickname: 'Nicknames',\n knownIp: 'Known IPs',\n};\n\nexport const SIGNAL_FIELDS = {\n cookieUserId: 'cookieUserIds',\n fingerprintId: 'fingerprintIds',\n nickname: 'nicknames',\n knownIp: 'knownIps',\n};\n\nexport function maskValue(value) {\n const text = String(value || '').trim();\n if (!text) return 'n/a';\n if (text.length <= 14) return text;\n return `${text.slice(0, 8)}...${text.slice(-6)}`;\n}\n\nexport function formatDateTime(value) {\n const ts = Number(value || 0);\n if (!Number.isFinite(ts) || ts <= 0) return 'never';\n try {\n return new Intl.DateTimeFormat('en-US', {\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n }).format(new Date(ts));\n } catch {\n return new Date(ts).toLocaleString();\n }\n}\n\nexport function userMatchesQuery(user, query) {\n const needle = String(query || '').trim().toLowerCase();\n if (!needle) return true;\n const haystack = [\n user?.id,\n user?.nickname,\n ...(user?.cookieUserIds || []),\n ...(user?.fingerprintIds || []),\n ...(user?.nicknames || []),\n ...(user?.knownIps || []),\n ...(user?.featureNamespaces || []),\n ...(user?.permissions || []).map((permission) => permission.key),\n ].join(' ').toLowerCase();\n return haystack.includes(needle);\n}\n\nexport function userMatchesFilter(user, filter) {\n if (filter === 'verified') return Boolean(user?.verified?.enabled);\n if (filter === 'deterred') return Boolean(user?.deterrence?.enabled);\n if (filter === 'muted') return Boolean(user?.deterrence?.muted);\n if (filter === 'unverified') return !user?.verified?.enabled;\n return true;\n}\n\nexport function stringifyJson(value) {\n return JSON.stringify(value ?? {}, null, 2);\n}\n\nexport function parseEditableJson(text) {\n const parsed = JSON.parse(String(text || '').trim() || '{}');\n if (!parsed || typeof parsed !== 'object') {\n throw new Error('JSON must be an object or array.');\n }\n return parsed;\n}\n","// Identity Database Panel\n// Purpose: Implements the lockdown admin identity database editor UI inside the centralized administration application.\n// Scope: Keeps list, detail, signal, status, feature-state, and raw JSON editing local to this feature.\nimport { useCallback, useEffect, useState } from 'react';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport Tabs, { Tab, TabList, TabPanel, TabPanels } from '../components/Tabs/index.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport {\n addSignal,\n deleteFeatureState,\n getUser,\n listUsers,\n removeSignal,\n setDeterrence,\n setMuted,\n setPermission,\n setVerified,\n updateFeatureState,\n} from './identityDatabaseApi.js';\nimport {\n SIGNAL_FIELDS,\n SIGNAL_LABELS,\n formatDateTime,\n maskValue,\n parseEditableJson,\n stringifyJson,\n} from './identityDatabaseUtils.js';\n\nconst FILTERS = [\n { key: 'all', label: 'All' },\n { key: 'verified', label: 'Verified' },\n { key: 'deterred', label: 'Deterred' },\n { key: 'muted', label: 'Muted' },\n { key: 'unverified', label: 'Unverified' },\n];\n\nfunction StatusPill({ active, children }) {\n return (\n \n {children}\n \n );\n}\n\nfunction UserListCard({ users, truncated, selectedUserId, query, filter, loading, onQuery, onFilter, onRefresh, onSearch, onSelect }) {\n const actions = (\n \n );\n\n return (\n \n
\n onQuery(event.target.value)}\n />\n \n \n \n {truncated ? (\n

\n Showing the first 100 matches. Narrow the search to find older users.\n

\n ) : null}\n
\n {users.length ? users.map((user) => (\n onSelect(user.id)}\n >\n \n {user.nickname || 'unknown user'}\n {user.id}\n {maskValue(user.cookieUserIds?.[0])} / {maskValue(user.fingerprintIds?.[0])}\n \n \n verified\n deterred\n muted\n \n \n )) : (\n

No users match this view.

\n )}\n
\n
\n );\n}\n\nfunction UserDetailsCard({ user }) {\n return (\n \n
\n

Canonical user id

\n

{user.id}

\n
\n
\n

Primary nickname

\n

{user.nickname || 'unknown user'}

\n
\n
\n

Created

\n

{formatDateTime(user.createdAt)}

\n
\n
\n

Last seen

\n

{formatDateTime(user.lastSeenAt)}

\n
\n
\n );\n}\n\nfunction SignalEditor({ user, type, onAdd, onRemove }) {\n const [draft, setDraft] = useState('');\n const values = user?.[SIGNAL_FIELDS[type]] || [];\n\n const submit = async (event) => {\n event.preventDefault();\n const value = draft.trim();\n if (!value) return;\n await onAdd(type, value);\n setDraft('');\n };\n\n return (\n
\n

{SIGNAL_LABELS[type]}

\n
\n {values.length ? values.map((value) => (\n
\n {value}\n \n
\n )) :

No values.

}\n
\n
\n setDraft(event.target.value)}\n />\n \n \n
\n );\n}\n\nfunction SignalsCard({ user, onAddSignal, onRemoveSignal }) {\n return (\n \n {Object.keys(SIGNAL_LABELS).map((type) => (\n \n ))}\n \n );\n}\n\nfunction StatusCard({ user, onVerified, onDeterrence, onMuted }) {\n const [reason, setReason] = useState(user?.deterrence?.reason || '');\n\n return (\n \n
\n

Verification

\n \n

Updated {formatDateTime(user?.verified?.at)}

\n
\n
\n

Deterrence

\n \n setReason(event.target.value)}\n />\n \n
\n \n {/*\n Mute is intentionally presented inside deterrence status because\n it is a narrower moderation action, while its own timestamp makes\n it clear that toggling mute does not toggle full deterrence.\n */}\n

Updated {formatDateTime(user?.deterrence?.mutedAt)}

\n
\n
\n
\n );\n}\n\nfunction FeatureStateCard({ user, onSaveFeature, onDeleteFeature }) {\n const namespaces = Object.keys(user?.features || {}).sort();\n const initialNamespace = namespaces[0] || '';\n const [namespace, setNamespace] = useState(initialNamespace);\n const [text, setText] = useState(stringifyJson(initialNamespace ? user.features[initialNamespace] : {}));\n const [error, setError] = useState('');\n\n const save = async () => {\n const ns = namespace.trim();\n if (!ns) {\n setError('Namespace required.');\n return;\n }\n try {\n const parsed = parseEditableJson(text);\n await onSaveFeature(ns, parsed);\n setError('');\n } catch (err) {\n setError(err.message || 'Invalid JSON.');\n }\n };\n\n const remove = async () => {\n const ns = namespace.trim();\n if (!ns) return;\n if (!window.confirm(`Delete feature state \"${ns}\" from ${user.id}?`)) return;\n await onDeleteFeature(ns);\n // The selected namespace no longer exists after deletion. Reset the local\n // editor directly instead of mirroring new props through an effect.\n setNamespace('');\n setText('{}');\n setError('');\n };\n\n return (\n \n
\n {\n const next = event.target.value;\n setNamespace(next);\n setText(stringifyJson(user.features?.[next] || {}));\n }}\n />\n \n {namespaces.map((entry) => \n \n \n
\n setText(event.target.value)}\n />\n {error ?

{error}

: null}\n
\n );\n}\n\nfunction RawRecordCard({ user }) {\n return (\n \n
\n        {stringifyJson(user)}\n      
\n
\n );\n}\n\nfunction PermissionsCard({ user, permissions, onPermission }) {\n const grantedKeys = new Set((user?.permissions || []).map((permission) => permission.key));\n return (\n \n {permissions.map((permission) => (\n \n ))}\n \n );\n}\n\nexport default function IdentityDatabasePanel() {\n const socket = useSocket();\n const [users, setUsers] = useState([]);\n const [permissions, setPermissions] = useState([]);\n const [selectedUser, setSelectedUser] = useState(null);\n const [query, setQuery] = useState('');\n const [filter, setFilter] = useState('all');\n const [truncated, setTruncated] = useState(false);\n const [loading, setLoading] = useState(false);\n const [message, setMessage] = useState('');\n\n const refreshUsers = useCallback(async () => {\n setLoading(true);\n try {\n const resp = await listUsers(socket, { query, filter });\n setUsers(resp.users || []);\n setTruncated(Boolean(resp.truncated));\n setPermissions(resp.permissions || []);\n if (selectedUser?.id) {\n const updated = await getUser(socket, selectedUser.id);\n setSelectedUser(updated.user || null);\n }\n setMessage('');\n } catch (err) {\n setMessage(err.message || 'Failed to load users.');\n } finally {\n setLoading(false);\n }\n }, [filter, query, selectedUser?.id, socket]);\n\n const selectUser = useCallback(async (userId) => {\n setLoading(true);\n try {\n const resp = await getUser(socket, userId);\n setSelectedUser(resp.user || null);\n setMessage('');\n } catch (err) {\n setMessage(err.message || 'Failed to load user.');\n } finally {\n setLoading(false);\n }\n }, [socket]);\n\n const applyUserUpdate = useCallback((user) => {\n setSelectedUser(user || null);\n if (!user?.id) return;\n setUsers((prev) => prev.map((entry) => (entry.id === user.id ? { ...entry, ...user } : entry)));\n }, []);\n\n const runMutation = useCallback(async (operation, successMessage) => {\n if (!selectedUser?.id) return;\n setLoading(true);\n try {\n const resp = await operation(selectedUser.id);\n applyUserUpdate(resp.user);\n setMessage(successMessage || 'Saved.');\n } catch (err) {\n setMessage(err.message || 'Save failed.');\n } finally {\n setLoading(false);\n }\n }, [applyUserUpdate, selectedUser?.id]);\n\n useEffect(() => {\n refreshUsers();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n const submitSearch = (event) => {\n event.preventDefault();\n refreshUsers();\n };\n\n const handleAddSignal = (type, value) =>\n runMutation((userId) => addSignal(socket, userId, type, value), 'Signal added.');\n const handleRemoveSignal = (type, value) =>\n runMutation((userId) => removeSignal(socket, userId, type, value), 'Signal removed.');\n const handleVerified = (enabled) =>\n runMutation((userId) => setVerified(socket, userId, enabled), 'Verification updated.');\n const handleDeterrence = (enabled, reason) =>\n runMutation((userId) => setDeterrence(socket, userId, enabled, reason), 'Deterrence updated.');\n const handleMuted = (enabled) =>\n runMutation((userId) => setMuted(socket, userId, enabled), 'Mute updated.');\n const handlePermission = (permissionKey, enabled) =>\n runMutation(\n (userId) => setPermission(socket, userId, permissionKey, enabled),\n 'Permission updated.',\n );\n const handleSaveFeature = (namespace, value) =>\n runMutation((userId) => updateFeatureState(socket, userId, namespace, value), 'Feature state saved.');\n const handleDeleteFeature = (namespace) =>\n runMutation((userId) => deleteFeatureState(socket, userId, namespace), 'Feature state deleted.');\n\n return (\n
\n \n
\n {message ?

{message}

: null}\n {selectedUser ? (\n <>\n \n \n \n Signals\n Status\n Permissions\n Feature state\n Raw JSON\n \n \n \n \n \n \n {/* These editors own drafts for one identity. Keys remount them\n when selection changes without effect-driven state mirroring. */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n Select a user to inspect and edit the identity record.\n \n )}\n
\n
\n );\n}\n","// Administrator Accounts\n// Purpose: Provides lockdown administrators with explicit account creation, editing, password replacement, and deletion controls.\n// Scope: Never receives or displays password hashes; final-lockdown safety is enforced by the server.\nimport { useEffect, useState } from 'react';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport { createAdministrator, deleteAdministrator, updateAdministrator } from '../api.js';\n\nfunction AdministratorRow({ administrator, socket, runSensitive, onSnapshot }) {\n const [draft, setDraft] = useState({\n username: administrator.username,\n discordId: administrator.discordId,\n role: administrator.role,\n password: '',\n });\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n\n useEffect(() => {\n setDraft({ username: administrator.username, discordId: administrator.discordId, role: administrator.role, password: '' });\n }, [administrator]);\n\n async function perform(work) {\n setBusy(true);\n setError('');\n try {\n const response = await runSensitive(work);\n onSnapshot(response.snapshot);\n } catch (actionError) {\n setError(actionError.message);\n } finally {\n setBusy(false);\n }\n }\n\n return (\n
\n
\n setDraft({ ...draft, username: event.target.value })} />\n setDraft({ ...draft, discordId: event.target.value })} />\n \n setDraft({ ...draft, password: event.target.value })} />\n
\n {error ?

{error}

: null}\n
\n \n \n
\n
\n );\n}\n\nexport default function AdministratorAccounts({ administrators, socket, runSensitive, onSnapshot }) {\n const [draft, setDraft] = useState({ username: '', discordId: '', role: 'admin', password: '' });\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState('');\n\n async function create(event) {\n event.preventDefault();\n setBusy(true);\n setError('');\n try {\n const response = await runSensitive(() => createAdministrator(socket, draft));\n onSnapshot(response.snapshot);\n setDraft({ username: '', discordId: '', role: 'admin', password: '' });\n } catch (actionError) {\n setError(actionError.message);\n } finally {\n setBusy(false);\n }\n }\n\n return (\n \n
\n setDraft({ ...draft, username: event.target.value })} />\n setDraft({ ...draft, discordId: event.target.value })} />\n \n setDraft({ ...draft, password: event.target.value })} />\n {error ?

{error}

: }\n \n \n {(administrators || []).map((administrator) => (\n \n ))}\n
\n );\n}\n","// Administration Overview\n// Purpose: Summarizes configuration state, revision history, audit history, and links to existing health/report surfaces.\n// Scope: Presents persisted administration metadata without duplicating operational service implementations.\nimport { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport {\n checkForApplicationUpdate,\n getApplicationLifecycleStatus,\n restartApplication,\n restoreConfigurationRevision,\n updateApplication,\n} from '../api.js';\n\nfunction formatDate(value) {\n return Number.isFinite(Number(value)) ? new Date(Number(value)).toLocaleString() : 'unknown';\n}\n\nexport default function AdminOverview({ snapshot, socket, runSensitive, onSnapshot }) {\n const config = snapshot.configuration;\n const [restartRequested, setRestartRequested] = useState(false);\n const [lifecycle, setLifecycle] = useState(null);\n const [lifecycleError, setLifecycleError] = useState('');\n\n useEffect(() => {\n let mounted = true;\n async function refreshLifecycle() {\n if (!socket.connected) return;\n try {\n const response = await getApplicationLifecycleStatus(socket);\n if (!mounted) return;\n setLifecycle(response.lifecycle);\n setLifecycleError('');\n } catch (error) {\n if (mounted) setLifecycleError(error.message);\n }\n }\n\n refreshLifecycle();\n // Update work continues while this application is being replaced. Polling\n // the controller gives the page current progress before disconnect and the\n // persisted final result immediately after Socket.IO reconnects.\n const timer = window.setInterval(refreshLifecycle, 2500);\n return () => {\n mounted = false;\n window.clearInterval(timer);\n };\n }, [socket]);\n\n useEffect(() => {\n if (!restartRequested) return undefined;\n // The socket reconnect is the simplest authoritative success signal: the\n // replacement process is accepting browser connections again.\n const handleReconnect = () => setRestartRequested(false);\n socket.once('connect', handleReconnect);\n return () => socket.off('connect', handleReconnect);\n }, [restartRequested, socket]);\n\n async function restore(revision) {\n if (!window.confirm(`Restore configuration revision ${revision}? This creates and immediately applies a new active revision.`)) return;\n try {\n const response = await runSensitive(() => restoreConfigurationRevision(socket, {\n revision,\n expectedRevision: config.revision,\n }));\n onSnapshot(response.snapshot);\n } catch (error) {\n window.alert(error.message);\n }\n }\n\n async function restart() {\n if (!window.confirm('Restart the MultiRover application now? Connected rovers and browsers will disconnect briefly; the server host will not reboot.')) return;\n setRestartRequested(true);\n try {\n await runSensitive(() => restartApplication(socket));\n } catch (error) {\n setRestartRequested(false);\n window.alert(error.message);\n }\n }\n\n async function checkForUpdate() {\n try {\n const response = await runSensitive(() => checkForApplicationUpdate(socket));\n setLifecycle(response.lifecycle);\n } catch (error) {\n setLifecycleError(error.message);\n }\n }\n\n async function update() {\n if (!window.confirm('Pull the configured MultiRover image and replace the application container now? The page will reconnect automatically.')) return;\n try {\n const response = await runSensitive(() => updateApplication(socket));\n setLifecycle(response.lifecycle);\n } catch (error) {\n setLifecycleError(error.message);\n }\n }\n\n const lifecycleBusy = lifecycle?.state === 'running';\n const lifecycleAvailable = Boolean(lifecycle?.available);\n const updateSummary = lifecycle?.updateAvailable === true\n ? 'An update is available.'\n : lifecycle?.updateAvailable === false\n ? 'The running application matches the latest checked image.'\n : 'Check for updates to compare the running container with the configured image.';\n\n return (\n
\n \n

Active revision

{config.revision}

\n

Administrators

{snapshot.administrators.length}

\n

Last configuration save

{formatDate(config.createdAt)}

\n
\n \n Open fleet reports\n Open driver application\n \n \n
\n

{lifecycleAvailable ? updateSummary : 'Container updates are unavailable until the lifecycle service is running.'}

\n {lifecycle?.message ?

{lifecycle.message}

: null}\n {lifecycle?.rollback ?

Rollback: {lifecycle.rollback.status}{lifecycle.rollback.error ? ` — ${lifecycle.rollback.error}` : ''}

: null}\n {lifecycleError ?

{lifecycleError}

: null}\n
\n
\n \n \n \n
\n
\n \n {snapshot.revisions.map((revision) => (\n
\n #{revision.revision}{formatDate(revision.createdAt)}{revision.actor}{revision.source}\n \n
\n ))}\n
\n \n {snapshot.auditEvents.map((event) => (\n
\n {formatDate(event.createdAt)}{event.actor}{event.action}\n
\n ))}\n
\n
\n );\n}\n","// Backup and Restore Administration\n// Purpose: Downloads one complete server backup and validates a selected archive before explicit restore confirmation.\n// Scope: Transfers large bytes over one-use HTTP URLs while protected socket actions own authorization and restart intent.\nimport { useEffect, useState } from 'react';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport {\n confirmFullRestore,\n createFullBackup,\n createRestoreUpload,\n getBackupRestoreStatus,\n} from '../api.js';\n\nfunction formatBytes(value) {\n const bytes = Number(value) || 0;\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KiB', 'MiB', 'GiB', 'TiB'];\n let amount = bytes / 1024;\n let unitIndex = 0;\n while (amount >= 1024 && unitIndex < units.length - 1) {\n amount /= 1024;\n unitIndex += 1;\n }\n return `${amount.toFixed(amount >= 10 ? 1 : 2)} ${units[unitIndex]}`;\n}\n\nexport default function BackupRestorePanel({ socket, runSensitive }) {\n const [backupBusy, setBackupBusy] = useState(false);\n const [restoreBusy, setRestoreBusy] = useState(false);\n const [backupFile, setBackupFile] = useState(null);\n const [validatedRestore, setValidatedRestore] = useState(null);\n const [lastRestore, setLastRestore] = useState(null);\n const [message, setMessage] = useState('');\n\n useEffect(() => {\n getBackupRestoreStatus(socket)\n .then((response) => setLastRestore(response.lastRestore))\n .catch((error) => setMessage(error.message));\n }, [socket]);\n\n async function downloadBackup() {\n setBackupBusy(true);\n setMessage('Creating consistent database snapshots and copying server data…');\n try {\n const response = await runSensitive(() => createFullBackup(socket));\n /*\n A temporary anchor begins a normal streamed browser download without\n navigating away from administration. The one-use URL contains no\n credentials and expires if the browser never requests it.\n */\n const link = document.createElement('a');\n link.href = response.downloadUrl;\n link.download = '';\n document.body.appendChild(link);\n link.click();\n link.remove();\n const skipped = response.skippedUnstableFiles?.length || 0;\n setMessage(`Backup download started with ${response.fileCount} files.${skipped ? ` ${skipped} actively changing file(s) were skipped.` : ''}`);\n } catch (error) {\n setMessage(error.message);\n } finally {\n setBackupBusy(false);\n }\n }\n\n async function validateRestore() {\n if (!backupFile) return;\n setRestoreBusy(true);\n setValidatedRestore(null);\n setMessage('Uploading and validating the selected backup…');\n try {\n const authorization = await runSensitive(() => createRestoreUpload(socket));\n const uploadResponse = await fetch(authorization.uploadUrl, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/gzip' },\n body: backupFile,\n });\n const result = await uploadResponse.json();\n if (!uploadResponse.ok || result.error) throw new Error(result.error || 'Restore upload failed.');\n setValidatedRestore(result);\n setMessage('Backup validated. Review the summary before replacing server data.');\n } catch (error) {\n setMessage(error.message);\n } finally {\n setRestoreBusy(false);\n }\n }\n\n async function restore() {\n if (!validatedRestore) return;\n const confirmed = window.confirm(\n 'Replace the complete server data folder with this backup and restart the application? Configuration, administrators, identities, history, and media will all be replaced.',\n );\n if (!confirmed) return;\n setRestoreBusy(true);\n try {\n await runSensitive(() => confirmFullRestore(socket, validatedRestore.restoreId));\n setMessage('Restore accepted. Waiting for the application to restart…');\n } catch (error) {\n setRestoreBusy(false);\n setMessage(error.message);\n }\n }\n\n return (\n
\n \n

Downloads configuration, administrator accounts, secrets, identities, history, snapshots, replays, and other durable server data. Keep the archive private because it contains credentials.

\n \n
\n\n \n

Upload a MultiRover full backup for validation. Nothing changes until the validated restore is confirmed.

\n
\n {\n setBackupFile(event.target.files?.[0] || null);\n setValidatedRestore(null);\n }}\n />\n \n
\n {validatedRestore ? (\n
\n

{validatedRestore.summary.fileCount} files, {formatBytes(validatedRestore.summary.totalBytes)}

\n

Created {new Date(validatedRestore.summary.createdAt).toLocaleString()} by application version {validatedRestore.summary.applicationVersion}

\n \n
\n ) : null}\n
\n\n {message ?

{message}

: null}\n {lastRestore ? (\n \n

{lastRestore.completedAt ? new Date(lastRestore.completedAt).toLocaleString() : 'Completion time unavailable'}{lastRestore.error ? ` — ${lastRestore.error}` : ''}

\n
\n ) : null}\n
\n );\n}\n","/** Determines whether a `thing` is an object for the purposes of RJSF. In this case, `thing` is an object if it has\n * the type `object` but is NOT null, an array or a File.\n *\n * @param thing - The thing to check to see whether it is an object\n * @returns - True if it is a non-null, non-array, non-File object\n */\nexport default function isObject(thing) {\n if (typeof thing !== 'object' || thing === null) {\n return false;\n }\n // lastModified is guaranteed to be a number on a File instance\n // as per https://w3c.github.io/FileAPI/#dfn-lastModified\n if ('lastModified' in thing &&\n typeof thing.lastModified === 'number' &&\n typeof File !== 'undefined' &&\n thing instanceof File) {\n return false;\n }\n // getMonth is guaranteed to be a method on a Date instance\n // as per https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-date.prototype.getmonth\n if ('getMonth' in thing &&\n typeof thing.getMonth === 'function' &&\n typeof Date !== 'undefined' &&\n thing instanceof Date) {\n return false;\n }\n return !Array.isArray(thing);\n}\n//# sourceMappingURL=isObject.js.map","import isObject from \"./isObject.js\";\n/** Checks the schema to see if it is allowing additional items, by verifying that `schema.additionalItems` is an\n * object. The user is warned in the console if `schema.additionalItems` has the value `true`.\n *\n * @param schema - The schema object to check\n * @returns - True if additional items is allowed, otherwise false\n */\nexport default function allowAdditionalItems(schema) {\n if (schema.additionalItems === true) {\n // oxlint-disable-next-line no-console\n console.warn('additionalItems=true is currently not supported');\n }\n return isObject(schema.additionalItems);\n}\n//# sourceMappingURL=allowAdditionalItems.js.map","/**\n * Determines the locale-specific decimal separator.\n * It uses the provided locale or the first locale in navigator.languages (if available) and falls back to \"en\".\n *\n * @param languages - Optional array of locales or a single locale string\n * @returns The decimal separator character (typically '.' or ',').\n */\nexport default function getDecimalSeparator(languages) {\n const locales = languages || (typeof navigator !== 'undefined' ? navigator.languages : undefined);\n if (locales) {\n try {\n const formatter = new Intl.NumberFormat(locales);\n const parts = formatter.formatToParts(1.1);\n return parts.find((part) => part.type === 'decimal')?.value || '.';\n }\n catch (e) {\n // Fallback\n }\n }\n return '.';\n}\n//# sourceMappingURL=getDecimalSeparator.js.map","import getDecimalSeparator from \"./getDecimalSeparator.js\";\n/** Attempts to convert the string into a number. If an empty string is provided, then `undefined` is returned.\n * If a `null` is provided, it is returned. If the string ends in a `.` or the locale-specific separator then the\n * string is returned because the user may be in the middle of typing a float number. If a number ends in a pattern\n * like `.0`, `.20`, `.030`, string is returned because the user may be typing number that will end in a non-zero\n * digit. Otherwise, the string is wrapped by `Number()` and if that result is not `NaN`, that number will be\n * returned, otherwise the string `value` will be.\n *\n * @param value - The string or null value to convert to a number\n * @returns - The `value` converted to a number when appropriate, otherwise the `value`\n */\nexport default function asNumber(value) {\n if (value === '') {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n const separator = getDecimalSeparator();\n // Normalize separator to standard '.' for pattern checking and parsing\n const standardValue = typeof value === 'string' && separator !== '.' ? value.replace(separator, '.') : value;\n // oxlint-disable-next-line typescript/prefer-string-starts-ends-with -- regex test() coerces undefined to \"undefined\" safely; endsWith() throws on undefined values passed at runtime\n if (/\\.$/.test(standardValue)) {\n // '3.' can't really be considered a number even if it parses in js. The\n // user is most likely entering a float.\n return value;\n }\n // oxlint-disable-next-line typescript/prefer-string-starts-ends-with -- same as above\n if (/\\.0$/.test(standardValue)) {\n // we need to return this as a string here, to allow for input like 3.07\n return value;\n }\n if (/\\.\\d*0$/.test(standardValue)) {\n // It's a number, that's cool - but we need it as a string so it doesn't screw\n // with the user when entering dollar amounts or other values (such as those with\n // specific precision or number of significant digits)\n return value;\n }\n const n = Number(standardValue);\n const valid = typeof n === 'number' && !Number.isNaN(n);\n return valid ? n : value;\n}\n//# sourceMappingURL=asNumber.js.map","/** Below are the list of all the keys into various elements of a RJSFSchema or UiSchema that are used by the various\n * utility functions. In addition to those keys, there are the special `ADDITIONAL_PROPERTY_FLAG`,\n * `RJSF_REF_KEY`, and `RJSF_REF_CYCLE_KEY` Symbols that are added to a schema under certain conditions by the\n * `retrieveSchema()` utility. Using Symbols keeps these internal markers invisible to JSON serialisation and\n * JSON Schema validators (AJV, ATA, etc.), which only enumerate string-keyed properties.\n */\nexport const ADDITIONAL_PROPERTY_FLAG = Symbol('__additional_property');\nexport const ADDITIONAL_PROPERTIES_KEY = 'additionalProperties';\nexport const ALL_OF_KEY = 'allOf';\nexport const ANY_OF_KEY = 'anyOf';\nexport const CONST_KEY = 'const';\nexport const DEFAULT_KEY = 'default';\nexport const DEFINITIONS_KEY = 'definitions';\nexport const DEPENDENCIES_KEY = 'dependencies';\nexport const ELSE_KEY = 'else';\nexport const ENUM_KEY = 'enum';\nexport const ERRORS_KEY = '__errors';\nexport const ID_KEY = '$id';\nexport const IF_KEY = 'if';\nexport const ITEMS_KEY = 'items';\nexport const JUNK_OPTION_ID = '_$junk_option_schema_id$_';\nexport const NAME_KEY = '$name';\nexport const ONE_OF_KEY = 'oneOf';\nexport const PATTERN_PROPERTIES_KEY = 'patternProperties';\nexport const PROPERTIES_KEY = 'properties';\nexport const READONLY_KEY = 'readonly';\nexport const REQUIRED_KEY = 'required';\nexport const SUBMIT_BTN_OPTIONS_KEY = 'submitButtonOptions';\nexport const REF_KEY = '$ref';\nexport const THEN_KEY = 'then';\nexport const RJSF_REF_KEY = Symbol('__rjsf_ref');\nexport const RJSF_REF_CYCLE_KEY = Symbol('__rjsf_ref_cycle');\nexport const SCHEMA_KEY = '$schema';\nexport const DEFAULT_ID_PREFIX = 'root';\nexport const DEFAULT_ID_SEPARATOR = '_';\n/** The path of the discriminator value returned by the schema endpoint.\n * The discriminator is the value in a `oneOf` that determines which option is selected.\n */\nexport const DISCRIMINATOR_PATH = ['discriminator', 'propertyName'];\n/** The name of the `formContext` attribute in the React JSON Schema Form Registry\n */\nexport const FORM_CONTEXT_NAME = 'formContext';\n/** The name of the `layoutGridLookupMap` attribute in the form context\n */\nexport const LOOKUP_MAP_NAME = 'layoutGridLookupMap';\nexport const RJSF_PREFIX_KEY = '__rjsf';\nexport const RJSF_ADDITIONAL_PROPERTIES_FLAG = `${RJSF_PREFIX_KEY}_additionalProperties`;\nexport const ROOT_SCHEMA_PREFIX = `${RJSF_PREFIX_KEY}_rootSchema`;\nexport const UI_FIELD_KEY = 'ui:field';\nexport const UI_WIDGET_KEY = 'ui:widget';\nexport const UI_OPTIONS_KEY = 'ui:options';\nexport const UI_GLOBAL_OPTIONS_KEY = 'ui:globalOptions';\nexport const UI_DEFINITIONS_KEY = 'ui:definitions';\n/** The JSON Schema version strings\n */\nexport const JSON_SCHEMA_DRAFT_2019_09 = 'https://json-schema.org/draft/2019-09/schema';\nexport const JSON_SCHEMA_DRAFT_2020_12 = 'https://json-schema.org/draft/2020-12/schema';\n//# sourceMappingURL=constants.js.map","import { UI_OPTIONS_KEY, UI_WIDGET_KEY } from \"./constants.js\";\nimport isObject from \"./isObject.js\";\n/** Get all passed options from ui:options, and ui:, returning them in an object with the `ui:`\n * stripped off. Any `globalOptions` will always be returned, unless they are overridden by options in the `uiSchema`.\n *\n * @param [uiSchema={}] - The UI Schema from which to get any `ui:xxx` options\n * @param [globalOptions={}] - The optional Global UI Schema from which to get any fallback `xxx` options\n * @returns - An object containing all the `ui:xxx` options with the `ui:` stripped off along with all `globalOptions`\n */\nexport default function getUiOptions(uiSchema = {}, globalOptions = {}) {\n // Handle null or undefined uiSchema\n if (!uiSchema) {\n return { ...globalOptions };\n }\n return Object.keys(uiSchema)\n .filter((key) => key.startsWith('ui:'))\n .reduce((options, key) => {\n const value = uiSchema[key];\n if (key === UI_WIDGET_KEY && isObject(value)) {\n // oxlint-disable-next-line no-console\n console.error('Setting options via ui:widget object is no longer supported, use ui:options instead');\n return options;\n }\n if (key === UI_OPTIONS_KEY && isObject(value)) {\n return { ...options, ...value };\n }\n return { ...options, [key.substring(3)]: value };\n }, { ...globalOptions });\n}\n//# sourceMappingURL=getUiOptions.js.map","import getUiOptions from \"./getUiOptions.js\";\n/** Checks whether the field described by `schema`, having the `uiSchema` and `formData` supports expanding. The UI for\n * the field can expand if it has additional properties, is not forced as non-expandable by the `uiSchema` and the\n * `formData` object doesn't already have `schema.maxProperties` elements.\n *\n * @param schema - The schema for the field that is being checked\n * @param [uiSchema={}] - The uiSchema for the field\n * @param [formData] - The formData for the field\n * @returns - True if the schema element has additionalProperties, is expandable, and not at the maxProperties limit\n */\nexport default function canExpand(schema, uiSchema = {}, formData) {\n if (!(schema.additionalProperties || schema.patternProperties)) {\n return false;\n }\n const { expandable = true } = getUiOptions(uiSchema);\n if (expandable === false) {\n return expandable;\n }\n // if ui:options.expandable was not explicitly set to false, we can add\n // another property if we have not exceeded maxProperties yet\n if (schema.maxProperties !== undefined && formData) {\n return Object.keys(formData).length < schema.maxProperties;\n }\n return true;\n}\n//# sourceMappingURL=canExpand.js.map","/** Determines whether `thing` is a plain object, i.e. one created by the `Object` constructor or with a `null`\n * prototype. Unlike `isObject()`, class instances such as `Error` are not plain objects, which matters when\n * recursively walking a structure whose nested values are expected to be plain data.\n *\n * @param thing - The thing to check to see whether it is a plain object\n * @returns - True if it is a plain object, otherwise false\n */\nexport default function isPlainObject(thing) {\n if (typeof thing !== 'object' || thing === null) {\n return false;\n }\n const proto = Object.getPrototypeOf(thing);\n return proto === null || proto === Object.prototype;\n}\n//# sourceMappingURL=isPlainObject.js.map","import { ERRORS_KEY } from \"./constants.js\";\nimport isPlainObject from \"./isPlainObject.js\";\n/** Given a `formData` object, recursively creates a `FormValidation` error handling structure around it\n *\n * @param formData - The form data around which the error handler is created\n * @returns - A `FormValidation` object based on the `formData` structure\n */\nexport default function createErrorHandler(formData) {\n const handler = {\n // We store the list of errors for this node in a property named __errors\n // to avoid name collision with a possible sub schema field named\n // 'errors' (see `utils.toErrorSchema`).\n [ERRORS_KEY]: [],\n addError(message) {\n this[ERRORS_KEY].push(message);\n },\n };\n if (Array.isArray(formData)) {\n return formData.reduce((acc, value, key) => ({ ...acc, [key]: createErrorHandler(value) }), handler);\n }\n if (isPlainObject(formData)) {\n return Object.keys(formData).reduce((acc, key) => ({ ...acc, [key]: createErrorHandler(formData[key]) }), handler);\n }\n return handler;\n}\n//# sourceMappingURL=createErrorHandler.js.map","const { getOwnPropertyNames, getOwnPropertySymbols } = Object;\nconst { hasOwnProperty } = Object.prototype;\n/**\n * Combine two comparators into a single comparators.\n */\nfunction combineComparators(comparatorA, comparatorB) {\n return function isEqual(a, b, state) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nfunction createIsCircular(areItemsEqual) {\n return function isCircular(a, b, state) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n const { cache } = state;\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n cache.set(a, b);\n cache.set(b, a);\n const result = areItemsEqual(a, b, state);\n cache.delete(a);\n cache.delete(b);\n return result;\n };\n}\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nfunction getStrictProperties(object) {\n const symbols = getOwnPropertySymbols(object);\n return symbols.length\n ? getOwnPropertyNames(object).concat(symbols)\n : getOwnPropertyNames(object);\n}\n/**\n * Whether the object contains the property passed as an own property.\n */\nconst hasOwn = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.hasOwn || ((object, property) => hasOwnProperty.call(object, property));\n\nconst PREACT_VNODE = '__v';\nconst PREACT_OWNER = '__o';\nconst REACT_OWNER = '_owner';\n// `Float16Array` is recent enough that it cannot be referenced unguarded, and capturing its\n// availability once keeps that detail out of the comparison itself.\nconst HAS_FLOAT_16_ARRAY = typeof Float16Array !== 'undefined';\nconst { getOwnPropertyDescriptor, keys } = Object;\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevalue) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`) or both are `NaN`.\n *\n * @note\n * When available in the environment, this is just a re-export of the global\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) method.\n */\nconst sameValueEqual = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nObject.is\n || function sameValueEqual(a, b) {\n return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b;\n };\n/**\n * Whether the values passed are equal based on a [SameValue](https://262.ecma-international.org/7.0/#sec-samevaluezero) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`), both are `NaN`, or both\n * are either positive or negative zero.\n */\nfunction sameValueZeroEqual(a, b) {\n return a === b || (a !== a && b !== b);\n}\n/**\n * Whether the values passed are equal based on a\n * [Strict Equality Comparison](https://262.ecma-international.org/7.0/#sec-strict-equality-comparison) basis.\n * Simplified, this maps to if the two values are referentially equal to one another (`a === b`).\n *\n * @note\n * This is mainly available as a convenience function, such as being a default when a function to determine equality between\n * two objects is used.\n */\nfunction strictEqual(a, b) {\n return a === b;\n}\n/**\n * Whether the array buffers are equal in value.\n */\nfunction areArrayBuffersEqual(a, b) {\n return a.byteLength === b.byteLength && areTypedArraysEqual(new Uint8Array(a), new Uint8Array(b));\n}\n/**\n * Whether the arrays are equal in value.\n */\nfunction areArraysEqual(a, b, state) {\n let index = a.length;\n if (b.length !== index) {\n return false;\n }\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the dataviews are equal in value.\n */\nfunction areDataViewsEqual(a, b) {\n return (a.byteLength === b.byteLength\n && areTypedArraysEqual(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)));\n}\n/**\n * Whether the dates passed are equal in value.\n */\nfunction areDatesEqual(a, b) {\n return sameValueEqual(a.getTime(), b.getTime());\n}\n/**\n * Whether the errors passed are equal in value.\n *\n * @note\n * `name`, `message` and `stack` are own properties but are not enumerable, so they are compared\n * explicitly. `cause` is compared by value rather than by reference, matching how every other\n * nested value in the comparison is treated. Own enumerable properties (which custom `Error`\n * subclasses commonly add) are compared by composing this with the object comparator in the\n * comparator config, so that the strict and circular variants apply to them as well.\n */\nfunction areErrorsEqual(a, b, state) {\n return (a.name === b.name\n && a.message === b.message\n && a.stack === b.stack\n && state.equals(a.cause, b.cause, 'cause', 'cause', a, b, state));\n}\n/**\n * Whether the `Map`s are equal in value.\n */\nfunction areMapsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Uint8Array(size);\n const aIterable = a.entries();\n let aResult;\n let bResult;\n let index = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.entries();\n let hasMatch = 0;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (matchedIndices[matchIndex]) {\n matchIndex++;\n continue;\n }\n const aEntry = aResult.value;\n const bEntry = bResult.value;\n if (state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state)\n && state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = 1;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n index++;\n }\n return true;\n}\n/**\n * Whether the objects are equal in value.\n */\nfunction areObjectsEqual(a, b, state) {\n const properties = keys(a);\n let index = properties.length;\n if (keys(b).length !== index) {\n return false;\n }\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n if (!isPropertyEqual(a, b, state, properties[index])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nfunction areObjectsEqualStrict(a, b, state) {\n const properties = getStrictProperties(a);\n let index = properties.length;\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n let property;\n let descriptorA;\n let descriptorB;\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index];\n if (!isPropertyEqual(a, b, state, property)) {\n return false;\n }\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n if ((descriptorA || descriptorB)\n && (!descriptorA\n || !descriptorB\n || descriptorA.configurable !== descriptorB.configurable\n || descriptorA.enumerable !== descriptorB.enumerable\n || descriptorA.writable !== descriptorB.writable)) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nfunction arePrimitiveWrappersEqual(a, b) {\n return sameValueEqual(a.valueOf(), b.valueOf());\n}\n/**\n * Whether the regexps passed are equal in value.\n */\nfunction areRegExpsEqual(a, b) {\n return a.source === b.source && a.flags === b.flags;\n}\n/**\n * Whether the `Set`s are equal in value.\n */\nfunction areSetsEqual(a, b, state) {\n const size = a.size;\n if (size !== b.size) {\n return false;\n }\n if (!size) {\n return true;\n }\n const matchedIndices = new Uint8Array(size);\n const aIterable = a.values();\n let aResult;\n let bResult;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n const bIterable = b.values();\n let hasMatch = 0;\n let matchIndex = 0;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n if (!matchedIndices[matchIndex]\n && state.equals(aResult.value, bResult.value, aResult.value, bResult.value, a, b, state)) {\n hasMatch = matchedIndices[matchIndex] = 1;\n break;\n }\n matchIndex++;\n }\n if (!hasMatch) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the TypedArray instances are equal in value.\n */\nfunction areTypedArraysEqual(a, b) {\n let index = a.length;\n if (b.length !== index || a.byteOffset !== b.byteOffset) {\n return false;\n }\n // Only float-backed views can hold `NaN`, and the additional check needed to treat it as equal\n // to itself measurably slows the loop, so integer views keep the plain comparison. This is\n // hoisted out of the loop so the cost is paid once per call rather than once per element.\n if (a instanceof Float64Array || a instanceof Float32Array || (HAS_FLOAT_16_ARRAY && a instanceof Float16Array)) {\n while (index-- > 0) {\n // `NaN` is the only value not equal to itself, and it is treated as equal here to match\n // the SameValueZero semantics used for every other numeric comparison in the library.\n if (a[index] !== b[index] && (a[index] === a[index] || b[index] === b[index])) {\n return false;\n }\n }\n return true;\n }\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n return true;\n}\n/**\n * Whether the URL instances are equal in value.\n */\nfunction areUrlsEqual(a, b) {\n // `href` is the normalized serialization of every component, so matching hrefs are equal without\n // any further work. Only a difference in query parameter ordering can survive a mismatch here.\n if (a.href === b.href) {\n return true;\n }\n return (a.protocol === b.protocol\n && a.username === b.username\n && a.password === b.password\n // `host` covers both the hostname and the port.\n && a.host === b.host\n && a.pathname === b.pathname\n && a.hash === b.hash\n && areSearchParamsEqual(a.searchParams, b.searchParams));\n}\n/**\n * Whether the search params passed are equal in value.\n *\n * @note\n * Order is not significant, matching how the other unordered collections in the library are\n * compared. Repeated keys are, so this is a comparison of multisets rather than of sets:\n * `a=1&a=2` is equal to `a=2&a=1`, but not to `a=1&a=1`.\n */\nfunction areSearchParamsEqual(a, b) {\n const serializedA = a.toString();\n const serializedB = b.toString();\n // Identical serializations are equal under any ordering, and this is by far the common case, so\n // it is worth checking before sorting anything.\n return serializedA === serializedB || sortSearchParams(serializedA) === sortSearchParams(serializedB);\n}\n/**\n * Reorder a serialized query string so that params holding the same pairs compare as equal\n * regardless of the order they appear in.\n *\n * @note\n * The serializer percent-encodes `&` and `=` wherever they appear inside a name or a value, so\n * splitting on `&` recovers exactly the pairs and nothing else.\n */\nfunction sortSearchParams(serialized) {\n return serialized.split('&').sort().join('&');\n}\nfunction isPropertyEqual(a, b, state, property) {\n if ((property === REACT_OWNER || property === PREACT_OWNER || property === PREACT_VNODE)\n && (a.$$typeof || b.$$typeof)) {\n return true;\n }\n return hasOwn(b, property) && state.equals(a[property], b[property], property, property, a, b, state);\n}\n\nconst toString = Object.prototype.toString;\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nfunction createEqualityComparator(config) {\n const supportedComparatorMap = createSupportedComparatorMap(config);\n const { areArraysEqual, areDatesEqual, areFunctionsEqual, areMapsEqual, areNumbersEqual, areObjectsEqual, areRegExpsEqual, areSetsEqual, getUnsupportedCustomComparator, } = config;\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a, b, state) {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n // If either of the items are nullish and fail the strictly equal check\n // above, then they must be unequal.\n if (a == null || b == null) {\n return false;\n }\n const type = typeof a;\n if (type !== typeof b) {\n return false;\n }\n if (type !== 'object') {\n if (type === 'number' || type === 'bigint') {\n return areNumbersEqual(a, b, state);\n }\n if (type === 'function') {\n return areFunctionsEqual(a, b, state);\n }\n // If a primitive value that is not strictly equal, it must be unequal.\n return false;\n }\n const constructor = a.constructor;\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is creating a subclass from a native class, it will be\n // handled with the string tag comparison.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n if (constructor === Array) {\n return areArraysEqual(a, b, state);\n }\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n if (constructor === Promise) {\n // Avoid tag checks for promise values, since we know if they are not referentially equal\n // then they are not equal.\n return false;\n }\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` in edge cases.\n if (Array.isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n // Since this is a custom object, capture the string tag to determining its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = toString.call(a);\n const supportedComparator = supportedComparatorMap[tag];\n if (supportedComparator) {\n return supportedComparator(a, b, state);\n }\n const unsupportedCustomComparator = getUnsupportedCustomComparator && getUnsupportedCustomComparator(a, b, state, tag);\n if (unsupportedCustomComparator) {\n return unsupportedCustomComparator(a, b, state);\n }\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n/**\n * Create the configuration object used for building comparators.\n */\nfunction createEqualityComparatorConfig({ circular, createCustomConfig, strict, }) {\n let config = {\n areArrayBuffersEqual,\n areArraysEqual: strict ? areObjectsEqualStrict : areArraysEqual,\n areDataViewsEqual,\n areDatesEqual: areDatesEqual,\n // `Error` subclasses routinely carry their own enumerable properties (`status`, `code`, ...),\n // which the error comparator alone does not see, so it is composed with the object comparator.\n // `name` / `message` / `stack` are own but not enumerable, which is why errors need a\n // comparator of their own rather than being treated as plain objects in the first place.\n areErrorsEqual: strict\n ? combineComparators(areErrorsEqual, areObjectsEqualStrict)\n : combineComparators(areErrorsEqual, areObjectsEqual),\n areFunctionsEqual: strictEqual,\n areMapsEqual: strict ? combineComparators(areMapsEqual, areObjectsEqualStrict) : areMapsEqual,\n areNumbersEqual: sameValueEqual,\n areObjectsEqual: strict ? areObjectsEqualStrict : areObjectsEqual,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqual,\n areRegExpsEqual: areRegExpsEqual,\n areSetsEqual: strict ? combineComparators(areSetsEqual, areObjectsEqualStrict) : areSetsEqual,\n areTypedArraysEqual: strict\n ? combineComparators(areTypedArraysEqual, areObjectsEqualStrict)\n : areTypedArraysEqual,\n areUrlsEqual: areUrlsEqual,\n getUnsupportedCustomComparator: undefined,\n };\n if (createCustomConfig) {\n config = Object.assign({}, config, createCustomConfig(config));\n }\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n // Errors are included because comparing `cause` and own properties by value means an error\n // that references itself would otherwise recurse without bound.\n const areErrorsEqual = createIsCircular(config.areErrorsEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n config = Object.assign({}, config, {\n areArraysEqual,\n areErrorsEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n return config;\n}\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nfunction createInternalEqualityComparator(compare) {\n return function (a, b, _indexOrKeyA, _indexOrKeyB, _parentA, _parentB, state) {\n return compare(a, b, state);\n };\n}\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nfunction createIsEqual({ circular, comparator, createState, equals, strict }) {\n if (createState) {\n return function isEqual(a, b) {\n const { cache = circular ? new WeakMap() : undefined, meta } = createState();\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n });\n };\n }\n if (circular) {\n return function isEqual(a, b) {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined,\n strict,\n });\n };\n }\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n };\n return function isEqual(a, b) {\n return comparator(a, b, state);\n };\n}\n/**\n * Create a map of `toString()` values to their respective handlers for `tag`-based lookups.\n */\nfunction createSupportedComparatorMap({ areArrayBuffersEqual, areArraysEqual, areDataViewsEqual, areDatesEqual, areErrorsEqual, areFunctionsEqual, areMapsEqual, areObjectsEqual, arePrimitiveWrappersEqual, areRegExpsEqual, areSetsEqual, areTypedArraysEqual, areUrlsEqual, }) {\n return {\n '[object Arguments]': areObjectsEqual,\n '[object Array]': areArraysEqual,\n '[object ArrayBuffer]': areArrayBuffersEqual,\n '[object AsyncGeneratorFunction]': areFunctionsEqual,\n '[object BigInt]': arePrimitiveWrappersEqual,\n '[object BigInt64Array]': areTypedArraysEqual,\n '[object BigUint64Array]': areTypedArraysEqual,\n '[object Boolean]': arePrimitiveWrappersEqual,\n '[object DataView]': areDataViewsEqual,\n '[object Date]': areDatesEqual,\n // If an error tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n '[object Error]': areErrorsEqual,\n '[object Float16Array]': areTypedArraysEqual,\n '[object Float32Array]': areTypedArraysEqual,\n '[object Float64Array]': areTypedArraysEqual,\n '[object Function]': areFunctionsEqual,\n '[object GeneratorFunction]': areFunctionsEqual,\n '[object Int8Array]': areTypedArraysEqual,\n '[object Int16Array]': areTypedArraysEqual,\n '[object Int32Array]': areTypedArraysEqual,\n '[object Map]': areMapsEqual,\n '[object Number]': arePrimitiveWrappersEqual,\n '[object Object]': (a, b, state) => \n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n typeof a.then !== 'function' && typeof b.then !== 'function' && areObjectsEqual(a, b, state),\n // For RegExp, the properties are not enumerable, and therefore will give false positives if\n // tested like a standard object.\n '[object RegExp]': areRegExpsEqual,\n '[object Set]': areSetsEqual,\n '[object String]': arePrimitiveWrappersEqual,\n '[object URL]': areUrlsEqual,\n '[object Uint8Array]': areTypedArraysEqual,\n '[object Uint8ClampedArray]': areTypedArraysEqual,\n '[object Uint16Array]': areTypedArraysEqual,\n '[object Uint32Array]': areTypedArraysEqual,\n };\n}\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nconst deepEqual = createCustomEqual();\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nconst strictDeepEqual = createCustomEqual({ strict: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nconst circularDeepEqual = createCustomEqual({ circular: true });\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nconst shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nconst strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nconst circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n});\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nconst strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueEqual,\n strict: true,\n});\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nfunction createCustomEqual(options = {}) {\n const { circular = false, createInternalComparator: createCustomInternalComparator, createState, strict = false, } = options;\n const config = createEqualityComparatorConfig(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n\nexport { circularDeepEqual, circularShallowEqual, createCustomEqual, deepEqual, sameValueEqual, sameValueZeroEqual, shallowEqual, strictCircularDeepEqual, strictCircularShallowEqual, strictDeepEqual, strictEqual, strictShallowEqual };\n","import { createCustomEqual } from 'fast-equals';\n/** Implements a deep equals using `fast-equals.createCustomEqual`. Functions\n * are always considered equal, and circular references are tracked to avoid\n * infinite recursion on self-referential inputs.\n *\n * @param a - The first element to compare\n * @param b - The second element to compare\n * @returns - True if the `a` and `b` are deeply equal, false otherwise\n */\nconst deepEquals = createCustomEqual({\n circular: true,\n createCustomConfig: () => ({\n areFunctionsEqual(_a, b) {\n return typeof b === 'function';\n },\n }),\n});\nexport default deepEquals;\n//# sourceMappingURL=deepEquals.js.map","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/** @type {(value: string) => boolean} */\nconst isPort = RegExp.prototype.test.bind(/^\\d*$/u)\n\n/** @type {(value: string) => boolean} */\nconst isHexPair = RegExp.prototype.test.bind(/^[\\da-f]{2}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isUnreserved = RegExp.prototype.test.bind(/^[\\da-z\\-._~]$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:]$/u)\n\n/**\n * @param {Array} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/** @type {(value: string) => boolean} */\nconst isHextet = RegExp.prototype.test.bind(/^[\\dA-Fa-f]{1,4}$/)\n\n/** @type {(value: string) => boolean} */\nconst isIPvFuture = RegExp.prototype.test.bind(/^[vV][\\dA-Fa-f]+\\.[A-Za-z\\d\\-._~!$&'()*+,;=:]+$/)\n\n/** @type {(value: string) => boolean} */\nconst isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\\d\\-._~]$/)\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/** @type {(value: string) => boolean} */\nconst nonSimpleDomainChars = RegExp.prototype.test.bind(/[^\\d!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/** @type {(value: string) => boolean} */\nconst numericLastLabel = RegExp.prototype.test.bind(/(?:^|\\.)\\d+$/u)\n\n/**\n * True when `new URL('http://' + domain).hostname` may differ from `domain`,\n * i.e. when the caller must fall back to the WHATWG parser.\n *\n * Same purpose as `nonSimpleDomain`, but digits are allowed: for this character\n * set `hostname` is the identity, *except* that an all-numeric final label is\n * read as IPv4 shorthand (\"1.2.3\" -> \"1.2.0.3\", \"127.1\" -> \"127.0.0.1\",\n * \"a.b.1\" throws), which is why `nonSimpleDomain` excludes digits outright.\n * Rejecting that one shape lets the common `mail2.example.org` case stay on the\n * fast path.\n *\n * @param {string} domain - must already be lowercased\n * @returns {boolean}\n */\nfunction nonSimpleMailtoDomain (domain) {\n return nonSimpleDomainChars(domain) || numericLastLabel(domain)\n}\n\n/**\n * @param {string} zone\n * @returns {boolean}\n */\nfunction isZoneIdentifier (zone) {\n if (zone.length === 0) return false\n\n for (let i = 0; i < zone.length; i++) {\n if (isZoneCharacter(zone[i])) continue\n if (zone[i] === '%' && i + 2 < zone.length && isHexPair(zone.slice(i + 1, i + 3))) {\n i += 2\n continue\n }\n return false\n }\n\n return true\n}\n\n/**\n * Compresses the longest run of zero hextets to \"::\" per RFC 5952. A run of a\n * single zero hextet is left uncompressed. On ties the leftmost run wins.\n *\n * @param {string[]} hextets\n * @returns {string}\n */\nfunction compressIPv6ZeroRun (hextets) {\n let bestStart = -1\n let bestLength = 0\n let runStart = -1\n let runLength = 0\n for (let i = 0; i < hextets.length; i++) {\n if (hextets[i] === '0') {\n if (runStart === -1) runStart = i\n runLength++\n if (runLength > bestLength) {\n bestLength = runLength\n bestStart = runStart\n }\n } else {\n runStart = -1\n runLength = 0\n }\n }\n\n if (bestLength < 2) return hextets.join(':')\n\n const head = hextets.slice(0, bestStart).join(':')\n const tail = hextets.slice(bestStart + bestLength).join(':')\n return head + '::' + tail\n}\n\n/**\n * Validates an IPv6 address against the alternatives in RFC 3986 section\n * 3.2.2 and returns the same address with leading hextet zeroes removed.\n * An embedded IPv4 address counts as two hextets and is only valid at the end.\n *\n * @param {string} input\n * @returns {string|undefined}\n */\nfunction normalizeIPv6Address (input) {\n const compression = input.indexOf('::')\n if (compression !== -1 && input.indexOf('::', compression + 1) !== -1) return undefined\n\n const left = compression === -1 ? input.split(':') : input.slice(0, compression).split(':')\n const right = compression === -1 ? [] : input.slice(compression + 2).split(':')\n if (compression !== -1) {\n if (left.length === 1 && left[0] === '') left.length = 0\n if (right.length === 1 && right[0] === '') right.length = 0\n }\n\n const parts = left.concat(right)\n let hextetCount = 0\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part === '') return undefined\n\n if (part.indexOf('.') !== -1) {\n if (i !== parts.length - 1 || (compression !== -1 && right.length === 0) || !isIPv4(part)) return undefined\n hextetCount += 2\n continue\n }\n\n if (!isHextet(part)) return undefined\n parts[i] = parseInt(part, 16).toString(16)\n hextetCount++\n }\n\n if (compression === -1) {\n if (hextetCount !== 8) return undefined\n return compressIPv6ZeroRun(parts)\n }\n if (hextetCount >= 8) return undefined\n\n // expand \"::\" then re-compress the longest run for a canonical result\n const expanded = parts.slice(0, left.length)\n for (let i = hextetCount; i < 8; i++) expanded.push('0')\n for (let i = left.length; i < parts.length; i++) expanded.push(parts[i])\n return compressIPv6ZeroRun(expanded)\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n * @property {boolean} [isIPVFuture] - Indicates if the host is an IPvFuture literal.\n * @property {boolean} [error] - Indicates if a bracketed IP literal is malformed.\n */\n\n/**\n * Validates and normalizes a bracketed IP literal. Raw zone separators remain\n * accepted for backwards compatibility, while encoded separators and zone\n * contents follow RFC 6874.\n *\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n const bracketed = host[0] === '[' && host[host.length - 1] === ']'\n const hasBracket = host[0] === '[' || host[host.length - 1] === ']'\n if (hasBracket && !bracketed) return { host, isIPV6: false, error: true }\n\n let input = bracketed ? host.slice(1, -1) : host\n if (bracketed && isIPvFuture(input)) {\n input = input.toLowerCase()\n return { host: `[${input}]`, escapedHost: input, isIPV6: false, isIPVFuture: true }\n }\n\n if (findToken(input, ':') < 2) {\n return { host, isIPV6: false, error: bracketed }\n }\n\n let zoneIdentifier = ''\n const zoneSeparator = input.indexOf('%')\n if (zoneSeparator !== -1) {\n const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === '%25' ? 3 : 1\n zoneIdentifier = input.slice(zoneSeparator + separatorLength)\n if (!isZoneIdentifier(zoneIdentifier)) return { host, isIPV6: false, error: true }\n input = input.slice(0, zoneSeparator)\n }\n\n const address = normalizeIPv6Address(input)\n if (address === undefined) return { host, isIPV6: false, error: true }\n\n return {\n host: address + (zoneIdentifier ? '%' + zoneIdentifier : ''),\n escapedHost: address + (zoneIdentifier ? '%25' + zoneIdentifier : ''),\n isIPV6: true\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * Re-escape RFC 3986 gen-delims that must not appear literally in the host.\n * After the URI regex parses, these characters cannot be literal in the host\n * field, so any that appear after decoding came from percent-encoding and\n * must be restored to prevent authority structure changes.\n *\n * @param {string} host\n * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)\n * @returns {string}\n */\nconst HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' }\nconst HOST_DELIM_RE = /[@/?#:]/g\nconst HOST_DELIM_NO_COLON_RE = /[@/?#]/g\n\nfunction reescapeHostDelimiters (host, isIP) {\n const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE\n re.lastIndex = 0\n return host.replace(re, (ch) => HOST_DELIMS[ch])\n}\n\n/**\n * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.\n * Reserved delimiters such as `%2F` stay escaped; `%2E` is unreserved.\n *\n * @param {string} input\n * @param {boolean} [decodeUnreserved=false]\n * @returns {string}\n */\nfunction normalizePercentEncoding (input, decodeUnreserved = false) {\n if (input.indexOf('%') === -1) {\n return input\n }\n\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decodeUnreserved && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n output += input[i]\n }\n\n return output\n}\n\n/** Pre-built `%XX` strings for every byte. Avoids per-call hex math/concat. */\nconst BYTE_HEX = new Array(256)\n{\n const HEX_DIGITS = '0123456789ABCDEF'\n for (let i = 0; i < 256; i++) {\n BYTE_HEX[i] = '%' + HEX_DIGITS[i >> 4] + HEX_DIGITS[i & 0xF]\n }\n}\n\n/**\n * Mirrors the pass-through set of the deprecated `escape()` global:\n * `A-Z a-z 0-9 * + - . / @ _`. Keeps drop-in semantics for ASCII input.\n *\n * @param {number} cp\n * @returns {boolean}\n */\nfunction isEscapeSafe (cp) {\n return (\n (cp >= 0x30 && cp <= 0x39) ||\n (cp >= 0x41 && cp <= 0x5A) ||\n (cp >= 0x61 && cp <= 0x7A) ||\n cp === 0x2A || cp === 0x2B || cp === 0x2D || cp === 0x2E ||\n cp === 0x2F || cp === 0x40 || cp === 0x5F\n )\n}\n\n/**\n * RFC 3986 percent-encode a non-ASCII Unicode code point as UTF-8 bytes.\n * Caller handles the ASCII branch inline for speed.\n *\n * @param {number} cp - Unicode code point (>= 0x80, <= 0x10FFFF)\n * @returns {string}\n */\nfunction percentEncodeNonAscii (cp) {\n if (cp < 0x800) {\n return BYTE_HEX[0xC0 | (cp >> 6)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n if (cp < 0x10000) {\n return BYTE_HEX[0xE0 | (cp >> 12)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n return BYTE_HEX[0xF0 | (cp >> 18)] +\n BYTE_HEX[0x80 | ((cp >> 12) & 0x3F)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n}\n\n/**\n * Normalizes path data without turning reserved escapes into live path syntax.\n * Valid escapes are uppercased, raw unsafe characters are escaped, and only\n * unreserved bytes that are not `.` are decoded.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizePathEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decoded !== '.' && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isPathCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Serializes a path without rewriting reserved data. Raw RFC 3986 path\n * characters remain literal, valid escapes are preserved and uppercased, and\n * everything else is UTF-8 percent-encoded. In a path-noscheme, a colon in the\n * first segment must be escaped so the result cannot be parsed as a scheme.\n *\n * @param {string} input\n * @param {boolean} [pathNoScheme=false]\n * @returns {string}\n */\nfunction serializePathEncoding (input, pathNoScheme = false) {\n let output = ''\n let firstSegment = pathNoScheme && input[0] !== '/'\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (ch === '/') {\n firstSegment = false\n }\n\n if (isPathCharacter(ch) && (ch !== ':' || !firstSegment)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Normalizes the percent-encoding of a query or fragment component.\n *\n * Like `normalizePathEncoding`, but uses the query/fragment character set\n * (which additionally allows `?`) and decodes `.` since it has no dot-segment\n * meaning outside of a path.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeQueryFragmentEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isQueryFragmentCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Percent-encodes a URI component using its RFC 3986 literal character set.\n * Existing valid escapes are preserved and normalized to uppercase hex.\n *\n * @param {string} input\n * @param {(value: string) => boolean} isAllowed\n * @returns {string}\n */\nfunction encodeComponent (input, isAllowed) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (isAllowed(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Encodes userinfo while preserving its RFC 3986 §3.2.1 literal characters.\n * In particular, authority delimiters such as `@`, `/`, `?`, and `#` are data.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeUserinfo (input) {\n return encodeComponent(input, isUserinfoCharacter)\n}\n\n/**\n * Encodes query data using the RFC 3986 §3.4 grammar. A literal `#` must be\n * escaped because it would otherwise begin the fragment component.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeQuery (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\n/**\n * Encodes fragment data using the RFC 3986 §3.5 grammar.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeFragment (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\n/**\n * Escapes a component while preserving existing valid percent escapes.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction escapePreservingEscapes (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n\n return output\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(encodeUserinfo(component.userinfo))\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = component.host\n if (!isIPv4(host)) {\n let ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {\n // Decode only unreserved bytes, once. In particular, keep %25 encoded\n // so it cannot introduce a second escape during recomposition.\n host = normalizePercentEncoding(host, true)\n ipV6res = normalizeIPv6(host)\n }\n if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = reescapeHostDelimiters(host, false)\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n const port = String(component.port)\n if (!isPort(port)) {\n throw new TypeError('URI port is malformed.')\n }\n uriTokens.push(':')\n uriTokens.push(port)\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n BYTE_HEX,\n percentEncodeNonAscii,\n nonSimpleDomain,\n nonSimpleMailtoDomain,\n recomposeAuthority,\n reescapeHostDelimiters,\n normalizePercentEncoding,\n normalizePathEncoding,\n serializePathEncoding,\n normalizeQueryFragmentEncoding,\n encodeUserinfo,\n encodeQuery,\n encodeFragment,\n escapePreservingEscapes,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID, BYTE_HEX, percentEncodeNonAscii, nonSimpleMailtoDomain } = require('./utils')\nconst URN_REG = /^([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-./:;=@]|%[\\da-f]{2})+)$/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid', 'mailto'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const queryIndex = wsComponent.resourceName.indexOf('?')\n const path = queryIndex === -1\n ? wsComponent.resourceName\n : wsComponent.resourceName.slice(0, queryIndex)\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = queryIndex === -1\n ? undefined\n : wsComponent.resourceName.slice(queryIndex + 1)\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches && matches[0] === urnComponent.path) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\n/**\n * Allow-sets for `encodeWithAllow`, each a `{ all, table, allowNonAscii }`\n * descriptor built by `allowSet`:\n *\n * - `LOCAL_PART` is the intersection of upstream uri-js's VCHAR and\n * NOT_PATH_NOSCHEME, minus \",\": the serializer joins recipients with \",\" and\n * `mailtoParse` splits the path on it, so a comma left literal inside a local\n * part would silently become a recipient delimiter.\n * - `HFNAME` is the qchar allow-set used for header names/values.\n * - `DTEXT` is RFC 6068 dtext-no-obs restricted to characters that are also\n * safe in a URI path; `DTEXT_IRI` additionally permits non-ASCII for\n * `unicodeSupport`.\n */\nconst LOCAL_PART_ALLOWED = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+=\"\nconst HFNAME_ALLOWED = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+,;:@\"\nconst DTEXT_ALLOWED = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$'()*+;:\"\n\n/**\n * @typedef {Object} AllowSet\n * @property {RegExp} all - matches a whole string needing no encoding at all.\n * @property {Uint8Array} table - per-ASCII-code allow lookup for the slow path.\n * @property {boolean} allowNonAscii - pass non-ASCII code points through (IRI).\n */\n\n/**\n * `all` deliberately excludes \"%\" and (for the IRI variant) surrogates, so any\n * input needing escape normalization or surrogate repair falls to the slow path.\n *\n * @param {string} chars\n * @param {boolean} [allowNonAscii=false]\n * @returns {AllowSet}\n */\nfunction allowSet (chars, allowNonAscii = false) {\n const table = new Uint8Array(128)\n for (let i = 0; i < chars.length; i++) {\n table[chars.charCodeAt(i)] = 1\n }\n const escaped = chars.replace(/[\\\\\\]^-]/gu, '\\\\$&')\n const cls = allowNonAscii ? `[${escaped}]|[^\\\\0-\\\\x7F\\\\uD800-\\\\uDFFF]` : `[${escaped}]`\n return { all: new RegExp(`^(?:${cls})*$`, 'u'), table, allowNonAscii }\n}\n\nconst LOCAL_PART = allowSet(LOCAL_PART_ALLOWED)\nconst HFNAME = allowSet(HFNAME_ALLOWED)\nconst DTEXT = allowSet(DTEXT_ALLOWED)\nconst DTEXT_IRI = allowSet(DTEXT_ALLOWED, true)\n\nconst HEX_PAIR = /^[\\da-f]{2}$/iu\nconst MAILTO_DOMAIN_LITERAL = /^\\[[\\x21-\\x5A\\x5E-\\x7E]*\\]$/u\nconst MAILTO_DOMAIN_ERROR = 'URI mailto has an invalid recipient domain.'\nconst HAS_SURROGATE = /[\\uD800-\\uDFFF]/u\n\n/**\n * @param {string} str\n * @returns {string}\n */\nfunction decodeHex (str) {\n if (typeof str !== 'string' || str.indexOf('%') === -1) {\n return str\n }\n try {\n return decodeURIComponent(str)\n } catch {\n return str\n }\n}\n\n/**\n * Replaces lone surrogates with U+FFFD, leaving valid pairs intact. Only called\n * when `HAS_SURROGATE` matched, so the scan cost is not on the common path.\n * (`String.prototype.toWellFormed` would do this natively but is Node 20+.)\n *\n * @param {string} input\n * @returns {string}\n */\nfunction replaceLoneSurrogates (input) {\n let result = ''\n for (let i = 0; i < input.length; i++) {\n const code = input.charCodeAt(i)\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n result += input[i] + input[i + 1]\n i++\n continue\n }\n }\n result += (code >= 0xD800 && code <= 0xDFFF) ? '\\uFFFD' : input[i]\n }\n return result\n}\n\n/**\n * Percent-encodes everything outside `set`, preserving existing valid escapes\n * (uppercased) and repairing lone surrogates.\n *\n * ASCII uses `BYTE_HEX` rather than `encodeURIComponent`. That is equivalent\n * only because every character `encodeURIComponent` leaves unescaped\n * (`A-Za-z0-9-_.!~*'()`) is present in all of the allow-sets above, so no such\n * character ever reaches the encode branch. Re-check if a set is narrowed.\n *\n * @param {string} input\n * @param {AllowSet} set\n * @returns {string}\n */\nfunction encodeWithAllow (input, set) {\n if (set.all.test(input)) {\n return input\n }\n\n const table = set.table\n let result = ''\n for (let i = 0; i < input.length; i++) {\n const code = input.charCodeAt(i)\n\n if (code < 0x80) {\n if (table[code] === 1) {\n result += input[i]\n } else if (code === 0x25 && i + 2 < input.length && HEX_PAIR.test(input.slice(i + 1, i + 3))) {\n result += '%' + input.slice(i + 1, i + 3).toUpperCase()\n i += 2\n } else {\n result += BYTE_HEX[code]\n }\n continue\n }\n\n if (code < 0xD800 || code > 0xDFFF) {\n result += set.allowNonAscii ? input[i] : percentEncodeNonAscii(code)\n continue\n }\n\n if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n result += set.allowNonAscii\n ? input[i] + input[i + 1]\n : percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n continue\n }\n }\n\n result += set.allowNonAscii ? '\\uFFFD' : percentEncodeNonAscii(0xFFFD)\n }\n return result\n}\n\n/**\n * @param {string} domain\n * @param {import('../types/index').Options} [options]\n * @param {{error?:string}} [component]\n * @returns {string}\n */\nfunction mailtoNormalizeDomain (domain, options, component) {\n const normalizedDomain = String(domain).toLowerCase()\n\n if (MAILTO_DOMAIN_LITERAL.test(normalizedDomain)) {\n return normalizedDomain\n }\n\n // `hostname` is the identity for these, so skip constructing a WHATWG URL.\n if (normalizedDomain !== '' && !nonSimpleMailtoDomain(normalizedDomain)) {\n return normalizedDomain\n }\n\n try {\n const parsedDomain = new URL('http://' + normalizedDomain)\n if (\n parsedDomain.username ||\n parsedDomain.password ||\n parsedDomain.port ||\n parsedDomain.pathname !== '/' ||\n parsedDomain.search ||\n parsedDomain.hash ||\n !parsedDomain.hostname\n ) {\n throw new Error(MAILTO_DOMAIN_ERROR)\n }\n\n return options && options.unicodeSupport\n ? normalizedDomain\n : parsedDomain.hostname\n } catch {\n if (component) {\n component.error = component.error || MAILTO_DOMAIN_ERROR\n }\n return normalizedDomain\n }\n}\n\n/**\n * Percent-encodes everything in a recipient domain that is not `dtext-no-obs`\n * (RFC 6068). Serialize-only: `mailtoNormalizeDomain` returns the domain\n * verbatim when validation fails, and `MAILTO_DOMAIN_LITERAL` accepts the full\n * RFC 5321 dcontent range (which includes \"?\", \"#\", \"&\" and \"/\"), so without\n * this an attacker-supplied recipient could inject header fields or a fragment\n * into the serialized URI. `mailtoParse` deliberately reports the raw domain\n * instead, so it must not use this.\n * @param {string} domain\n * @param {import('../types/index').Options} [options]\n * @returns {string}\n */\nfunction mailtoEncodeDomain (domain, options) {\n const set = options && options.unicodeSupport ? DTEXT_IRI : DTEXT\n\n // Keep the delimiters of a domain literal, encode its contents.\n if (domain.length > 1 && domain[0] === '[' && domain[domain.length - 1] === ']') {\n return '[' + encodeWithAllow(domain.slice(1, -1), set) + ']'\n }\n\n return encodeWithAllow(domain, set)\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\nfunction mailtoParse (component, options) {\n const mailtoComponent = component\n\n // The handler sets `skipNormalize`, so path and query arrive raw. Everything\n // here goes through `decodeHex`, which subsumes the generic normalizers --\n // except that they also fold lone surrogates to U+FFFD, so do that here.\n let rawPath = mailtoComponent.path\n let rawQuery = mailtoComponent.query\n if (rawPath && HAS_SURROGATE.test(rawPath)) rawPath = replaceLoneSurrogates(rawPath)\n if (rawQuery && HAS_SURROGATE.test(rawQuery)) rawQuery = replaceLoneSurrogates(rawQuery)\n\n const to = rawPath\n ? (rawPath.indexOf(',') === -1 ? [rawPath] : rawPath.split(','))\n : []\n mailtoComponent.path = undefined\n\n if (rawQuery) {\n // Null prototype: header names come from untrusted input, so `headers[name]`\n // must not resolve to inherited members (\"constructor\", \"toString\", ...),\n // and \"__proto__\" has to land as a plain own property instead of hitting\n // Object.prototype's setter and being silently dropped. Allocated lazily so\n // the common subject/body-only URI does not pay for it.\n /** @type {Record|null} */\n let headers = null\n let start = 0\n while (start <= rawQuery.length) {\n let end = rawQuery.indexOf('&', start)\n if (end === -1) end = rawQuery.length\n const token = rawQuery.slice(start, end)\n start = end + 1\n\n const eqIdx = token.indexOf('=')\n if (eqIdx !== token.lastIndexOf('=')) {\n mailtoComponent.error = mailtoComponent.error || 'URI mailto has malformed header fields.'\n continue\n }\n const name = decodeHex(eqIdx === -1 ? token : token.slice(0, eqIdx))\n const normalizedName = name.toLowerCase()\n const value = eqIdx === -1 ? '' : token.slice(eqIdx + 1)\n if (normalizedName === 'to') {\n const addrs = value.split(',')\n for (let j = 0; j < addrs.length; j++) to.push(addrs[j])\n continue\n }\n if (normalizedName === 'subject') {\n mailtoComponent.subject = decodeHex(value)\n continue\n }\n if (normalizedName === 'body') {\n mailtoComponent.body = decodeHex(value)\n continue\n }\n if (headers === null) headers = /** @type {Record} */ (Object.create(null))\n headers[name] = decodeHex(value)\n }\n if (headers !== null) mailtoComponent.headers = headers\n }\n\n mailtoComponent.query = undefined\n\n for (let i = 0; i < to.length; i++) {\n const rawAddr = to[i]\n const atIdx = rawAddr.lastIndexOf('@')\n if (atIdx < 0) {\n mailtoComponent.error = mailtoComponent.error || MAILTO_DOMAIN_ERROR\n to[i] = decodeHex(rawAddr)\n continue\n }\n const local = decodeHex(rawAddr.slice(0, atIdx))\n const domain = mailtoNormalizeDomain(decodeHex(rawAddr.slice(atIdx + 1)), options, mailtoComponent)\n to[i] = local + '@' + domain\n }\n\n if (to.length) mailtoComponent.to = to\n\n return mailtoComponent\n}\n\n/**\n * Encodes a decoded mailto header name. Unlike `encodeWithAllow`, a percent\n * sign is always data here, even when followed by two hex digits. Preserving\n * such a sequence as an existing escape would decode the name again on the\n * next parse and could turn a generic header into `to`, `subject`, or `body`.\n * @param {string} name\n * @returns {string}\n */\nfunction mailtoEncodeHeaderName (name) {\n return encodeWithAllow(name.replace(/%/gu, '%25'), HFNAME)\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\nfunction mailtoSerialize (component, options) {\n const mailtoComponent = component\n const to = Array.isArray(mailtoComponent.to) ? mailtoComponent.to.slice() : []\n const sourceHeaders = mailtoComponent.headers && typeof mailtoComponent.headers === 'object'\n ? Object.assign(Object.create(null), mailtoComponent.headers)\n : Object.create(null)\n const headers = Object.create(null)\n\n // Header field names are case-insensitive. Canonicalize the fields with\n // dedicated component properties so callers cannot smuggle a second spelling\n // through `headers`. As during parsing, all `to` fields are accumulated;\n // repeated subject/body fields use the last value.\n for (const name in sourceHeaders) {\n const normalizedName = name.toLowerCase()\n if (normalizedName === 'to') {\n const addrs = String(sourceHeaders[name]).split(',')\n for (let i = 0; i < addrs.length; i++) to.push(addrs[i])\n } else if (normalizedName === 'subject' || normalizedName === 'body') {\n headers[normalizedName] = sourceHeaders[name]\n } else {\n headers[name] = sourceHeaders[name]\n }\n }\n\n if (mailtoComponent.subject !== undefined) headers.subject = mailtoComponent.subject\n if (mailtoComponent.body !== undefined) headers.body = mailtoComponent.body\n mailtoComponent.headers = headers\n\n if (to.length) {\n for (let i = 0; i < to.length; i++) {\n const addr = String(to[i])\n const atIdx = addr.lastIndexOf('@')\n const rawLocal = atIdx >= 0 ? addr.slice(0, atIdx) : addr\n const rawDomain = atIdx >= 0 ? addr.slice(atIdx + 1) : ''\n const local = encodeWithAllow(rawLocal, LOCAL_PART)\n const decodedDomain = decodeHex(rawDomain)\n // `component` is intentionally not passed: index.js's `serialize` writes\n // the error onto a private copy and returns only a string, so an error\n // recorded here would be unreachable. Safety comes from encoding instead.\n const normalizedDomain = mailtoNormalizeDomain(decodedDomain, options)\n to[i] = local + '@' + mailtoEncodeDomain(normalizedDomain, options)\n }\n // Every recipient is now fully encoded and only the joining commas are\n // literal, so bypass index.js's generic encoder, whose allow-set is\n // narrower than upstream's and would over-encode.\n mailtoComponent.path = to.join(',')\n options.skipEscape = true\n } else {\n // No recipients: drop any caller-supplied path, matching upstream uri-js.\n // `to` is the only recipient source, and `mailtoParse` always moves the\n // path into it, so a mailto component never legitimately carries one.\n mailtoComponent.path = undefined\n }\n\n // `headers` has a null prototype, so every enumerable key is an own property\n // and no hasOwnProperty guard is needed.\n let query = ''\n let count = 0\n for (const name in headers) {\n if (count++ !== 0) query += '&'\n query += mailtoEncodeHeaderName(name) + '=' + encodeWithAllow(String(headers[name]), HFNAME)\n }\n\n if (count !== 0) {\n mailtoComponent.query = query\n } else {\n mailtoComponent.headers = undefined\n }\n\n return mailtoComponent\n}\n\nconst mailto = /** @type {SchemeHandler} */ ({\n scheme: 'mailto',\n parse: mailtoParse,\n serialize: mailtoSerialize,\n domainHost: false,\n unicodeSupport: true,\n // `mailtoParse` re-derives every component from the raw path/query via\n // `decodeHex`, which subsumes the generic normalizers, so running them first\n // is wasted work (~28% of parsing a URI with header fields).\n skipNormalize: true,\n // A recipient list has no dot segments to remove, and `removeDotSegments`\n // would rewrite a \"./\"-prefixed local part.\n absolutePath: true\n})\n\nconst SCHEMES = /** @type {Record} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid,\n mailto\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\nconst VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u\nconst MALFORMED_SCHEME_ERROR = 'URI scheme is malformed.'\n\n/**\n * @param {string} scheme\n * @returns {string}\n */\nfunction decodeValidScheme (scheme) {\n const decodedScheme = unescape(String(scheme))\n if (!VALID_SCHEME.test(decodedScheme)) {\n throw new TypeError(MALFORMED_SCHEME_ERROR)\n }\n return decodedScheme\n}\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (normalizeString(uri, options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const {\n parsed: baseParsed,\n malformedAuthorityOrPort: baseMalformed,\n malformedPercentEncoding: baseMalformedPercentEncoding,\n malformedSchemeSpecific: baseMalformedSchemeSpecific,\n malformedHost: baseMalformedHost,\n malformedScheme: baseMalformedScheme\n } = parseWithStatus(baseURI, schemelessOptions)\n const {\n parsed: relativeParsed,\n malformedAuthorityOrPort: relativeMalformed,\n malformedPercentEncoding: relativeMalformedPercentEncoding,\n malformedSchemeSpecific: relativeMalformedSchemeSpecific,\n malformedHost: relativeMalformedHost,\n malformedScheme: relativeMalformedScheme\n } = parseWithStatus(relativeURI, schemelessOptions)\n if (\n baseMalformed ||\n relativeMalformed ||\n baseMalformedPercentEncoding ||\n relativeMalformedPercentEncoding ||\n baseMalformedSchemeSpecific ||\n relativeMalformedSchemeSpecific ||\n baseMalformedHost ||\n relativeMalformedHost ||\n baseMalformedScheme ||\n relativeMalformedScheme\n ) {\n throw new Error(baseParsed.error || relativeParsed.error || 'URI is malformed.')\n }\n const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true)\n const resolvedSchemeHandler = getSchemeHandler((options && options.scheme) || resolved.scheme)\n const resolvedHost = resolved.host\n const resolvedHostIsIP = resolvedHost !== undefined && resolvedHost !== '' &&\n (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6)\n canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP)\n // Percent escapes in an ASCII reg-name are encoded data. The WHATWG hostname\n // parser can reject them even though fast-uri preserves them safely as RFC\n // 3986 data. A raw non-ASCII host must still fail closed if conversion fails.\n const encodedASCIIHost = resolvedHost && resolvedHost.indexOf('%') !== -1 &&\n !/\\P{ASCII}/u.test(resolvedHost)\n if (resolved.error && !encodedASCIIHost) {\n throw new Error(resolved.error)\n }\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n const normalizedA = normalizeComparableURI(uriA, options)\n const normalizedB = normalizeComparableURI(uriB, options)\n\n return normalizedA !== undefined && normalizedB !== undefined && normalizedA === normalizedB\n}\n\n/**\n * @param {Readonly} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n to: cmpts.to,\n subject: cmpts.subject,\n body: cmpts.body,\n headers: cmpts.headers,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n if (component.scheme) {\n component.scheme = decodeValidScheme(component.scheme)\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n const hasAuthority = component.userinfo !== undefined || component.host !== undefined || component.port !== undefined\n const pathNoScheme = !options.skipEscape && component.scheme === undefined && !hasAuthority\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = serializePathEncoding(component.path, pathNoScheme)\n } else {\n component.path = normalizePercentEncoding(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n // Scheme handlers may replace the scheme during serialization.\n component.scheme = decodeValidScheme(component.scheme)\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n // Dot-segment removal can expose a colon that was not originally in the\n // first segment (for example, \"./a:b\"). Reapply path-noscheme encoding so\n // the serialized relative reference cannot be reparsed as a URI scheme.\n if (pathNoScheme) {\n s = serializePathEncoding(s, true)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', encodeQuery(component.query))\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', encodeFragment(component.fragment))\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n// Captures the authority component (between \"//\" and the next \"/\", \"?\" or \"#\"),\n// with or without a scheme prefix, for the literal-backslash rejection below.\nconst AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\\/\\/([^/?#]*)/\n\n// Captures the leading authority-introducer region after an optional scheme: a\n// run of forward slashes, backslashes, and the characters the WHATWG URL parser\n// removes before parsing (TAB U+0009, LF U+000A, CR U+000D). A valid introducer\n// is exactly \"//\". Node treats \"\\\" as \"/\" on special schemes and strips those\n// characters first, so forms like \"\\\\\", \"/\\\", \"\\/\", \"//\", or a leading\n// \"//\" reach an authority in Node while fast-uri's URI_PARSE folds them into\n// the path group (host confusion / SSRF / redirect bypass).\nconst AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\\\\t\\n\\r]*)/\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {RegExpMatchArray} matches\n * @returns {string|undefined}\n */\nfunction getParseError (parsed, matches) {\n if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {\n return 'URI path must start with \"/\" when authority is present.'\n }\n\n if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {\n return 'URI port is malformed.'\n }\n\n return undefined\n}\n\n/**\n * Checks percent syntax without decoding the represented octets. RFC 3986\n * percent-encoding is byte-oriented, so sequences such as `%FF` are valid even\n * though they are not independently valid UTF-8.\n *\n * @param {string|undefined} component\n * @returns {boolean}\n */\nfunction hasMalformedPercentEncoding (component) {\n if (component === undefined) return false\n\n let percent = component.indexOf('%')\n while (percent !== -1) {\n if (percent + 2 >= component.length || !/^[\\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) {\n return true\n }\n percent = component.indexOf('%', percent + 3)\n }\n\n return false\n}\n\n/**\n * Whether the host is a bracketed IP literal (RFC 3986 `IP-literal`).\n * An unterminated `[` is not a literal, so it must still be validated as a\n * reg-name instead of being waved through as an IP.\n *\n * @param {string} host\n * @returns {boolean}\n */\nfunction isIPLiteral (host) {\n return host[0] === '[' && host[host.length - 1] === ']'\n}\n\n/**\n * @param {RegExpMatchArray} matches\n * @returns {boolean}\n */\nfunction hasMalformedComponentPercentEncoding (matches) {\n // Bracketed IP literals use a raw \"%\" as the zone separator for historical\n // compatibility. Their parsing is intentionally left to normalizeIPv6.\n const host = matches[4]\n return hasMalformedPercentEncoding(matches[3]) ||\n (host !== undefined && !isIPLiteral(host) && hasMalformedPercentEncoding(host)) ||\n hasMalformedPercentEncoding(matches[6]) ||\n hasMalformedPercentEncoding(matches[7]) ||\n hasMalformedPercentEncoding(matches[8])\n}\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {import('./types/index').Options} options\n * @param {{ domainHost?: boolean, unicodeSupport?: boolean }|undefined} schemeHandler\n * @param {boolean} isIP\n * @returns {boolean} whether host conversion failed\n */\nfunction canonicalizeHost (parsed, options, schemeHandler, isIP) {\n const bracketedIPLiteral =\n parsed.host &&\n parsed.host[0] === '[' &&\n parsed.host[parsed.host.length - 1] === ']'\n\n if (\n !options.unicodeSupport &&\n (!schemeHandler || !schemeHandler.unicodeSupport) &&\n parsed.host &&\n !isIPLiteral(parsed.host) &&\n (options.domainHost || (schemeHandler && schemeHandler.domainHost)) &&\n isIP === false &&\n !bracketedIPLiteral &&\n nonSimpleDomain(parsed.host)\n ) {\n try {\n parsed.host = new URL('http://' + parsed.host).hostname\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n return true\n }\n }\n\n return false\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction parseWithStatus (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let malformedAuthorityOrPort = false\n let malformedPercentEncoding = false\n let malformedSchemeSpecific = false\n let malformedHost = false\n let malformedIPLiteral = false\n let malformedScheme = false\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n // A literal backslash (U+005C) is not a valid RFC 3986 URI character and is\n // not an authority delimiter. Reject it in the authority rather than\n // rewriting it: normalizing \"\\\" -> \"/\" (WHATWG error recovery) could silently\n // change the resource identified by an otherwise-invalid input, and lets \"\\\"\n // act as a host delimiter here while Node's native URL parses a different\n // host (SSRF / redirect / origin-allowlist bypass). Percent-encoded %5C is\n // untouched and remains valid encoded data.\n const authorityMatch = uri.match(AUTHORITY_PREFIX)\n if (authorityMatch !== null && authorityMatch[1].indexOf('\\\\') !== -1) {\n parsed.error = 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n }\n\n // Reject a malformed or whitespace-smuggled authority introducer. fast-uri\n // only recognizes a literal \"//\"; anything else in the leading separator run\n // (a backslash, or a \"//\" that appears only after removing the TAB/LF/CR that\n // Node strips) means the authority fast-uri parses differs from the one Node's\n // URL resolves. Reject rather than rewrite, mirroring the literal-backslash\n // guard above. Percent-encoded forms (%5C, %09) are untouched, valid data.\n const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION)\n if (introducerMatch !== null) {\n const region = introducerMatch[1]\n const normalizedRegion = region.replace(/[\\t\\n\\r]/g, '')\n // Two or more leading separators introduce an authority.\n if (normalizedRegion.length >= 2) {\n if (normalizedRegion.slice(0, 2) !== '//') {\n parsed.error = parsed.error || 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n } else if (region.length !== normalizedRegion.length) {\n parsed.error = parsed.error || 'URI authority introducer must not contain whitespace.'\n malformedAuthorityOrPort = true\n }\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n if (parsed.scheme !== undefined) {\n const decodedScheme = unescape(parsed.scheme)\n if (VALID_SCHEME.test(decodedScheme)) {\n parsed.scheme = decodedScheme.toLowerCase()\n } else {\n parsed.error = parsed.error || MALFORMED_SCHEME_ERROR\n malformedScheme = true\n }\n }\n\n malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches)\n if (malformedPercentEncoding) {\n parsed.error = parsed.error || 'URI contains malformed percent-encoding.'\n }\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n\n const parseError = getParseError(parsed, matches)\n if (parseError !== undefined) {\n parsed.error = parsed.error || parseError\n malformedAuthorityOrPort = true\n }\n\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const bracketedIPLiteral = isIPLiteral(parsed.host)\n const hasIPLiteralBracket = parsed.host.indexOf('[') !== -1 || parsed.host.indexOf(']') !== -1\n const ipv6result = normalizeIPv6(parsed.host)\n isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true\n malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true)\n parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase()\n\n if (malformedIPLiteral) {\n parsed.error = parsed.error || 'URI host is malformed.'\n malformedAuthorityOrPort = true\n }\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // convert Unicode IDN -> ASCII IDN when the effective scheme uses domain hosts\n if (!malformedIPLiteral) {\n malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP)\n }\n\n if (uri.indexOf('%') !== -1 && parsed.host !== undefined && !malformedIPLiteral) {\n let host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true)\n if (!isIP) {\n // Fold reg-name case after decoding unreserved octets. The second\n // pass only restores uppercase hex in escapes that remain encoded.\n host = normalizePercentEncoding(host.toLowerCase())\n }\n parsed.host = reescapeHostDelimiters(host, isIP)\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (parsed.path) {\n parsed.path = normalizePathEncoding(parsed.path)\n }\n if (parsed.query) {\n parsed.query = normalizeQueryFragmentEncoding(parsed.query)\n }\n if (parsed.fragment) {\n parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment)\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n if (schemeHandler === SCHEMES.urn && parsed.nid === undefined) {\n malformedSchemeSpecific = true\n }\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme }\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n return parseWithStatus(uri, opts).parsed\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction normalizeString (uri, opts) {\n return normalizeStringWithStatus(uri, opts).normalized\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ normalized: string, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction normalizeStringWithStatus (uri, opts) {\n const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts)\n return {\n normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize(parsed, opts),\n malformedAuthorityOrPort,\n malformedPercentEncoding,\n malformedSchemeSpecific,\n malformedHost,\n malformedScheme\n }\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string|undefined}\n */\nfunction normalizeComparableURI (uri, opts) {\n if (typeof uri !== 'string' && typeof uri !== 'object') {\n return undefined\n }\n\n let value\n try {\n value = typeof uri === 'string' ? uri : serialize(uri, opts)\n } catch {\n return undefined\n }\n const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts)\n return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? undefined : normalized\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","var hasExcape = /~/\nvar escapeMatcher = /~[01]/g\nfunction escapeReplacer (m) {\n switch (m) {\n case '~1': return '/'\n case '~0': return '~'\n }\n throw new Error('Invalid tilde escape: ' + m)\n}\n\nfunction untilde (str) {\n if (!hasExcape.test(str)) return str\n return str.replace(escapeMatcher, escapeReplacer)\n}\n\nfunction setter (obj, pointer, value) {\n var part\n var hasNextPart\n\n for (var p = 1, len = pointer.length; p < len;) {\n if (pointer[p] === 'constructor' || pointer[p] === 'prototype' || pointer[p] === '__proto__') return obj\n\n part = untilde(pointer[p++])\n hasNextPart = len > p\n\n if (typeof obj[part] === 'undefined') {\n // support setting of /-\n if (Array.isArray(obj) && part === '-') {\n part = obj.length\n }\n\n // support nested objects/array when setting values\n if (hasNextPart) {\n if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = []\n else obj[part] = {}\n }\n }\n\n if (!hasNextPart) break\n obj = obj[part]\n }\n\n var oldValue = obj[part]\n if (value === undefined) delete obj[part]\n else obj[part] = value\n return oldValue\n}\n\nfunction compilePointer (pointer) {\n if (typeof pointer === 'string') {\n pointer = pointer.split('/')\n if (pointer[0] === '') return pointer\n throw new Error('Invalid JSON pointer.')\n } else if (Array.isArray(pointer)) {\n for (const part of pointer) {\n if (typeof part !== 'string' && typeof part !== 'number') {\n throw new Error('Invalid JSON pointer. Must be of type string or number.')\n }\n }\n return pointer\n }\n\n throw new Error('Invalid JSON pointer.')\n}\n\nfunction get (obj, pointer) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n var len = pointer.length\n if (len === 1) return obj\n\n for (var p = 1; p < len;) {\n obj = obj[untilde(pointer[p++])]\n if (len === p) return obj\n if (typeof obj !== 'object' || obj === null) return undefined\n }\n}\n\nfunction set (obj, pointer, value) {\n if (typeof obj !== 'object') throw new Error('Invalid input object.')\n pointer = compilePointer(pointer)\n if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.')\n return setter(obj, pointer, value)\n}\n\nfunction compile (pointer) {\n var compiled = compilePointer(pointer)\n return {\n get: function (object) {\n return get(object, compiled)\n },\n set: function (object, value) {\n return set(object, compiled, value)\n }\n }\n}\n\nexports.get = get\nexports.set = set\nexports.compile = compile\n","import UriResolver from 'fast-uri';\nimport jsonpointer from 'jsonpointer';\nimport { ALL_OF_KEY, ID_KEY, JSON_SCHEMA_DRAFT_2019_09, JSON_SCHEMA_DRAFT_2020_12, REF_KEY, SCHEMA_KEY, } from \"./constants.js\";\nimport isObject from \"./isObject.js\";\n/** Looks for the `$id` pointed by `ref` in the schema definitions embedded in\n * a JSON Schema bundle\n *\n * @param schema - The schema wherein `ref` should be searched\n * @param ref - The `$id` of the reference to search for\n * @returns - The schema matching the reference, or `undefined` if no match is found\n */\nfunction findEmbeddedSchemaRecursive(schema, ref) {\n if (ID_KEY in schema && UriResolver.equal(schema[ID_KEY], ref)) {\n return schema;\n }\n for (const subSchema of Object.values(schema)) {\n if (Array.isArray(subSchema)) {\n for (const item of subSchema) {\n if (isObject(item)) {\n const result = findEmbeddedSchemaRecursive(item, ref);\n if (result !== undefined) {\n return result;\n }\n }\n }\n }\n else if (isObject(subSchema)) {\n const result = findEmbeddedSchemaRecursive(subSchema, ref);\n if (result !== undefined) {\n return result;\n }\n }\n }\n return undefined;\n}\n/** Parses a JSONSchema and makes all references absolute with respect to\n * the `baseURI` argument\n * @param schema - The schema to be processed\n * @param baseURI - The base URI to be used for resolving relative references\n */\nexport function makeAllReferencesAbsolute(schema, baseURI) {\n const currentURI = schema[ID_KEY] ?? baseURI;\n let result = schema;\n // Make all other references absolute\n if (REF_KEY in result) {\n result = { ...result, [REF_KEY]: UriResolver.resolve(currentURI, result[REF_KEY]) };\n }\n // Look for references in nested subschemas\n for (const [key, subSchema] of Object.entries(result)) {\n if (Array.isArray(subSchema)) {\n result = {\n ...result,\n [key]: subSchema.map((item) => (isObject(item) ? makeAllReferencesAbsolute(item, currentURI) : item)),\n };\n }\n else if (isObject(subSchema)) {\n result = { ...result, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };\n }\n }\n return result;\n}\n/** Splits out the value at the `key` in `object` from the `object`, returning an array that contains in the first\n * location, the `object` minus the `key: value` and in the second location the `value`.\n *\n * @param key - The key from the object to extract\n * @param object - The object from which to extract the element\n * @returns - An array with the first value being the object minus the `key` element and the second element being the\n * value from `object[key]`\n */\nexport function splitKeyElementFromObject(key, object) {\n const { [key]: value, ...remaining } = object;\n return [remaining, value];\n}\n/** Given the name of a `$ref` from within a schema, using the `rootSchema`, recursively look up and return the\n * sub-schema using the path provided by that reference. If `#` is not the first character of the reference, the path\n * does not exist in the schema, or the reference resolves circularly back to itself, then throw an Error.\n * Otherwise return the sub-schema. Also deals with nested `$ref`s in the sub-schema.\n *\n * @param $ref - The ref string for which the schema definition is desired\n * @param [rootSchema={}] - The root schema in which to search for the definition\n * @param recurseList - List of $refs already resolved to prevent recursion\n * @param [baseURI=rootSchema['$id']] - The base URI to be used for resolving relative references\n * @returns - The sub-schema within the `rootSchema` which matches the `$ref` if it exists\n * @throws - Error indicating that no schema for that reference could be resolved\n */\nexport function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = rootSchema[ID_KEY]) {\n const ref = $ref || '';\n let current = undefined;\n let currentBaseURI = baseURI;\n if (ref.startsWith('#')) {\n // Decode URI fragment representation.\n const decodedRef = decodeURIComponent(ref.substring(1));\n if (currentBaseURI === undefined || (ID_KEY in rootSchema && rootSchema[ID_KEY] === currentBaseURI)) {\n current = jsonpointer.get(rootSchema, decodedRef);\n }\n else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n current = findEmbeddedSchemaRecursive(rootSchema, currentBaseURI.replace(/\\/$/, ''));\n if (current !== undefined) {\n current = jsonpointer.get(current, decodedRef);\n }\n }\n }\n else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n const resolvedRef = currentBaseURI ? UriResolver.resolve(currentBaseURI, ref) : ref;\n const [refId, ...refAnchor] = resolvedRef.replace(/#\\/?$/, '').split('#');\n current = findEmbeddedSchemaRecursive(rootSchema, refId.replace(/\\/$/, ''));\n if (current !== undefined) {\n currentBaseURI = current[ID_KEY];\n if (refAnchor.length > 0) {\n current = jsonpointer.get(current, decodeURIComponent(refAnchor.join('#')));\n }\n }\n }\n if (current === undefined) {\n throw new Error(`Could not find a definition for ${$ref}.`);\n }\n const nextRef = current[REF_KEY];\n if (nextRef) {\n // Check for circular references.\n if (recurseList.includes(nextRef)) {\n if (recurseList.length === 1) {\n throw new Error(`Definition for ${$ref} is a circular reference`);\n }\n const [firstRef, ...restRefs] = recurseList;\n const circularPath = [...restRefs, ref, firstRef].join(' -> ');\n throw new Error(`Definition for ${firstRef} contains a circular reference through ${circularPath}`);\n }\n const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);\n const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], currentBaseURI);\n if (Object.keys(remaining).length > 0) {\n if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 ||\n rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n return { [ALL_OF_KEY]: [remaining, subSchema] };\n }\n return { ...remaining, ...subSchema };\n }\n return subSchema;\n }\n return current;\n}\n/** Given the name of a `$ref` from within a schema, using the `rootSchema`, look up and return the sub-schema using the\n * path provided by that reference. If `#` is not the first character of the reference, the path does not exist in\n * the schema, or the reference resolves circularly back to itself, then throw an Error. Otherwise return the\n * sub-schema. Also deals with nested `$ref`s in the sub-schema.\n *\n * @param $ref - The ref string for which the schema definition is desired\n * @param [rootSchema={}] - The root schema in which to search for the definition\n * @param [baseURI=rootSchema['$id']] - The base URI to be used for resolving relative references\n * @returns - The sub-schema within the `rootSchema` which matches the `$ref` if it exists\n * @throws - Error indicating that no schema for that reference could be resolved\n */\nexport default function findSchemaDefinition($ref, rootSchema = {}, baseURI = rootSchema[ID_KEY]) {\n const recurseList = [];\n return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);\n}\n//# sourceMappingURL=findSchemaDefinition.js.map","/** Matches unsigned integer strings that represent valid array indexes */\nconst reIsIndex = /^(?:0|[1-9]\\d*)$/;\n/** Converts a dotted path string, such as produced for validation error properties, into its list of\n * path segments. Array indexes may be written bracketed (`'a[0].b'`) or dotted (`'a.0.b'`), and empty\n * segments — from a leading `.`, a trailing `.` or a `..` run — are dropped.\n *\n * Only the grammar RJSF itself produces is supported: dots and brackets are always separators, so\n * quoted keys are not recognized and keys containing dots must be addressed with a segment list\n * instead of a string.\n *\n * @param path - The string path to convert, such as `'.level1.level2[2].level3'`\n * @returns - The list of path segments, such as `['level1', 'level2', '2', 'level3']`\n */\nexport function toPath(path) {\n return path.split(/[.[\\]]+/).filter(Boolean);\n}\n/** Normalizes an `ObjectPath` into a list of path segments, wrapping a single key into a one-element list */\nfunction normalizePath(path) {\n return Array.isArray(path) ? path : [path];\n}\n/** Determines whether a path segment could mutate the prototype chain. Only `__proto__` can: assigning to it\n * invokes the prototype setter rather than creating an own property. `constructor` and `prototype` are safe\n * here — and are legal JSON Schema property names — because both reads and writes below are own-property-only,\n * so `['constructor', 'prototype', 'polluted']` shadows `constructor` with a fresh object instead of walking\n * into `Object.prototype`. Only writes need this check; reads are already own-property-only\n */\nfunction isUnsafeSegment(segment) {\n return segment === '__proto__';\n}\n/** Determines whether a path segment represents a valid array index */\nfunction isIndex(segment) {\n return typeof segment === 'number' ? Number.isInteger(segment) && segment >= 0 : reIsIndex.test(segment);\n}\n/** Determines whether `value` can hold properties, i.e. is an object (arrays included) or a function */\nfunction isSettable(value) {\n return value != null && (typeof value === 'object' || typeof value === 'function');\n}\n/** Gets the value at `path` of `obj`, returning `defaultValue` when the resolved value is `undefined`\n *\n * Every segment must be an OWN property, matching {@link hasByPath}, so the two can be used as a\n * guard/read pair. Inherited members are never resolved: `getByPath({}, 'toString')` returns\n * `defaultValue`, not `Function.prototype.toString`. For the plain form data and schemas RJSF navigates,\n * an inherited member is never data, and the own-property rule also makes prototype internals such as\n * `__proto__` unreachable unless they are genuine own data keys\n *\n * An empty segment list resolves to nothing, so `defaultValue` is returned. This matches {@link hasByPath},\n * which is `false` for an empty path, and keeps a computed-but-empty path (`toPath('')` for a root-level\n * validation error, say) from resolving to the whole object\n *\n * The value at a runtime-computed path cannot be known statically, so `R` is the CALLER'S declaration of\n * the expected type (like `Map.get()`); it defaults to `unknown`, which forces narrowing when no type is given\n *\n * @param obj - The object to query\n * @param path - The single key or list of path segments at which to get the value\n * @param [defaultValue] - The value returned when the resolved value is `undefined`\n * @returns - The resolved value, otherwise `defaultValue`\n */\nexport function getByPath(obj, path, defaultValue) {\n let current;\n if (!Array.isArray(path)) {\n // Fast path for the most common call shape, a single constant key, avoiding the segment-list allocation\n current = isSettable(obj) && Object.hasOwn(obj, path) ? obj[path] : undefined;\n }\n else if (path.length === 0) {\n // An empty path resolves to nothing, mirroring `hasByPath()`\n current = undefined;\n }\n else {\n current = obj;\n for (let i = 0; i < path.length; i++) {\n const segment = path[i];\n // Only own data keys resolve, so inherited members and prototype internals are never read\n if (!isSettable(current) || !Object.hasOwn(current, segment)) {\n current = undefined;\n break;\n }\n current = current[segment];\n }\n }\n // The single deliberate cast in these utilities: the resolved value is trusted to be the `R` the caller declared\n return (current === undefined ? defaultValue : current);\n}\n/** Sets `value` at `path` of `obj`, mutating and returning `obj`. Missing intermediate containers are\n * created: arrays when the next segment is a valid array index, plain objects otherwise (or always plain\n * objects when `createIntermediateObjects` is true)\n *\n * A `__proto__` segment is refused in any position — assigning to it would mutate the prototype chain rather\n * than create an own property — and the write is silently skipped. Every other key, `constructor` and\n * `prototype` included, is written as an own property\n *\n * @param obj - The object to modify\n * @param path - The single key or list of path segments at which to set the value\n * @param value - The value to set\n * @param [createIntermediateObjects] - When true, always create plain objects for missing intermediate\n * containers, even for numeric path segments\n * @returns - The mutated `obj`\n */\nexport function setByPath(obj, path, value, createIntermediateObjects = false) {\n if (!isSettable(obj)) {\n return obj;\n }\n // Fast path for a single constant key, avoiding the segment-list allocation\n if (!Array.isArray(path)) {\n // Refuse a segment that could mutate the prototype chain (prototype pollution)\n if (!isUnsafeSegment(path)) {\n const target = obj;\n target[path] = value;\n }\n return obj;\n }\n const segments = path;\n // Refuse paths that could mutate the prototype chain (prototype pollution)\n if (segments.some(isUnsafeSegment)) {\n return obj;\n }\n let current = obj;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (i === segments.length - 1) {\n current[segment] = value;\n }\n else {\n // Own properties only, so an inherited member is never traversed into\n const existing = Object.hasOwn(current, segment) ? current[segment] : undefined;\n if (isSettable(existing)) {\n current = existing;\n }\n else {\n const next = createIntermediateObjects || !isIndex(segments[i + 1]) ? {} : [];\n current[segment] = next;\n /* v8 ignore next -- a fresh {} or [] is always settable; the guard exists only to narrow the type */\n if (isSettable(next)) {\n current = next;\n }\n }\n }\n }\n return obj;\n}\n/** Determines whether `obj` has an own property at `path`\n *\n * Every segment is checked with `Object.hasOwn()`, so inherited properties report `false` —\n * `hasByPath({}, 'toString')` is `false`. {@link getByPath} applies the same own-property rule, so the\n * two can be used as a guard/read pair\n *\n * @param obj - The object to query\n * @param path - The single key or list of path segments to check for\n * @returns - True if the own property exists at `path`, otherwise false\n */\nexport function hasByPath(obj, path) {\n // Fast path for a single constant key, avoiding the segment-list allocation\n if (!Array.isArray(path)) {\n return isSettable(obj) && Object.hasOwn(obj, path);\n }\n let current = obj;\n for (let i = 0; i < path.length; i++) {\n if (!isSettable(current) || !Object.hasOwn(current, path[i])) {\n return false;\n }\n current = current[path[i]];\n }\n return path.length > 0;\n}\n/** Removes the own property at `path` of `obj`, mutating `obj`\n *\n * Both the parent lookup and the delete are own-property-only, so no segment can reach the prototype chain and\n * no `UNSAFE_SEGMENTS`-style guard is needed: deleting a `__proto__` that is not an own property is a no-op\n *\n * @param obj - The object to modify\n * @param path - The single key or list of path segments at which to remove the property\n * @returns - True if the property was removed or did not exist, otherwise false\n */\nexport function unsetByPath(obj, path) {\n const segments = normalizePath(path);\n // An empty path names no property, so there is nothing to remove\n if (segments.length === 0) {\n return true;\n }\n const parent = segments.length > 1 ? getByPath(obj, segments.slice(0, -1)) : obj;\n if (parent == null) {\n return true;\n }\n try {\n // Returns false for a non-configurable property instead of throwing like `delete` in strict mode\n return Reflect.deleteProperty(parent, segments[segments.length - 1]);\n }\n catch {\n // Reflect.deleteProperty throws when the target is a primitive\n return false;\n }\n}\n//# sourceMappingURL=pathUtils.js.map","import { DISCRIMINATOR_PATH } from \"./constants.js\";\nimport { getByPath } from \"./pathUtils.js\";\n/** Returns the `discriminator.propertyName` when defined in the `schema` if it is a string. A warning is generated when\n * it is not a string. Returns `undefined` when a valid discriminator is not present.\n *\n * @param schema - The schema from which the discriminator is potentially obtained\n * @returns - The `discriminator.propertyName` if it exists in the schema, otherwise `undefined`\n */\nexport default function getDiscriminatorFieldFromSchema(schema) {\n let discriminator;\n const maybeString = getByPath(schema, DISCRIMINATOR_PATH);\n if (typeof maybeString === 'string') {\n discriminator = maybeString;\n }\n else if (maybeString !== undefined) {\n // oxlint-disable-next-line no-console\n console.warn(`Expecting discriminator to be a string, got \"${typeof maybeString}\" instead`);\n }\n return discriminator;\n}\n//# sourceMappingURL=getDiscriminatorFieldFromSchema.js.map","/** Given a specific `value` attempts to guess the type of a schema element. In the case where we have to implicitly\n * create a schema, it is useful to know what type to use based on the data we are defining.\n *\n * @param value - The value from which to guess the type\n * @returns - The best guess for the object type\n */\nexport default function guessType(value) {\n if (Array.isArray(value)) {\n return 'array';\n }\n if (typeof value === 'string') {\n return 'string';\n }\n if (value == null) {\n return 'null';\n }\n if (typeof value === 'boolean') {\n return 'boolean';\n }\n if (typeof value === 'number' && !Number.isNaN(value)) {\n return 'number';\n }\n if (typeof value === 'object') {\n return 'object';\n }\n // Default to string if we can't figure it out\n return 'string';\n}\n//# sourceMappingURL=guessType.js.map","import guessType from \"./guessType.js\";\n/** Gets the type of a given `schema`. If the type is not explicitly defined, then an attempt is made to infer it from\n * other elements of the schema as follows:\n * - schema.const: Returns the `guessType()` of that value\n * - schema.enum: Returns `string`\n * - schema.properties: Returns `object`\n * - schema.additionalProperties: Returns `object`\n * - schema.patternProperties: Returns `object`\n * - type is an array with a length of 2 and one type is 'null': Returns the other type\n *\n * @param schema - The schema for which to get the type\n * @returns - The type of the schema\n */\nexport default function getSchemaType(schema) {\n let { type } = schema;\n if (!type && schema.const) {\n return guessType(schema.const);\n }\n if (!type && schema.enum) {\n return 'string';\n }\n if (!type && (schema.properties || schema.additionalProperties || schema.patternProperties)) {\n return 'object';\n }\n if (Array.isArray(type)) {\n if (type.length === 2 && type.includes('null')) {\n type = type.find((t) => t !== 'null');\n }\n else {\n // oxlint-disable-next-line prefer-destructuring\n type = type[0];\n }\n }\n return type;\n}\n//# sourceMappingURL=getSchemaType.js.map","import { REQUIRED_KEY } from \"./constants.js\";\nimport getSchemaType from \"./getSchemaType.js\";\nimport isObject from \"./isObject.js\";\n/** Recursively merge deeply nested schemas. The difference between `mergeSchemas` and `mergeObjects` is that\n * `mergeSchemas` only concats arrays for values under the 'required' keyword, and when it does, it doesn't include\n * duplicate values.\n *\n * @param obj1 - The first schema object to merge\n * @param obj2 - The second schema object to merge\n * @returns - The merged schema object\n */\nexport default function mergeSchemas(obj1, obj2) {\n const acc = { ...obj1 }; // Prevent mutation of source object.\n const result = Object.keys(obj2).reduce((accumulator, key) => {\n const left = obj1 ? obj1[key] : {}, right = obj2[key];\n if (obj1 && key in obj1 && isObject(right)) {\n accumulator[key] = mergeSchemas(left, right);\n }\n else if (obj1 &&\n obj2 &&\n (getSchemaType(obj1) === 'object' || getSchemaType(obj2) === 'object') &&\n key === REQUIRED_KEY &&\n Array.isArray(left) &&\n Array.isArray(right)) {\n // Don't include duplicate values when merging 'required' fields.\n accumulator[key] = [...new Set([...left, ...right])];\n }\n else {\n accumulator[key] = right;\n }\n return accumulator;\n }, acc);\n // Copy own Symbol-keyed properties from obj2 (Object.keys skips them).\n for (const sym of Object.getOwnPropertySymbols(obj2)) {\n // To avoid issues with symbols, we cast them to GenericSymbolObjectType. If we make the mergeSchema function take\n // in GenericSymbolObjectType rather than GenericObjectType, it causes a bunch of type errors downstream\n result[sym] = obj2[sym];\n }\n return result;\n}\n//# sourceMappingURL=mergeSchemas.js.map","import { PROPERTIES_KEY } from \"./constants.js\";\n/** Returns the sub-schema declared for `property` in the `properties` of `schema`, falling back to an empty schema\n * when the schema has no such property. Callers treat the properties of a schema as schemas of the same type `S`,\n * which the `JSONSchema7` typing of `properties` cannot express, so this function owns that single assertion rather\n * than repeating it at every lookup.\n *\n * @param schema - The schema, if any, from which to read the property sub-schema\n * @param property - The name of the property whose sub-schema is desired\n * @returns - The sub-schema for `property`, or an empty schema when it is not declared\n */\nexport default function getPropertySchema(schema, property) {\n return (schema?.[PROPERTIES_KEY]?.[property] ?? {});\n}\n//# sourceMappingURL=getPropertySchema.js.map","import getPropertySchema from \"./getPropertySchema.js\";\nimport { getByPath } from \"./pathUtils.js\";\n/** Compares the value of `discriminatorField` within `formData` against the value of `discriminatorField` within schema for each `option`.\n * Returns index of first `option` whose discriminator matches formData. Returns `undefined` if there is no match.\n * This function does not work with discriminators of `\"type\": \"object\"` and `\"type\": \"array\"`\n *\n * @param formData - The current formData, if any, used to figure out a match\n * @param options - The list of options to find a matching options from\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The index of the matched option or undefined if there is no match\n */\nexport default function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField) {\n if (formData && discriminatorField) {\n const value = getByPath(formData, discriminatorField);\n if (value === undefined) {\n return undefined;\n }\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n const discriminator = getPropertySchema(option, discriminatorField);\n if (discriminator.type !== 'object' && discriminator.type !== 'array') {\n if (discriminator.const === value) {\n return i;\n }\n const enumValues = discriminator.enum;\n if (enumValues?.includes(value)) {\n return i;\n }\n }\n }\n }\n return undefined;\n}\n//# sourceMappingURL=getOptionMatchingSimpleDiscriminator.js.map","import { PROPERTIES_KEY } from \"../constants.js\";\nimport getOptionMatchingSimpleDiscriminator from \"../getOptionMatchingSimpleDiscriminator.js\";\nimport { getByPath } from \"../pathUtils.js\";\n/** Given the `formData` and list of `options`, attempts to find the index of the first option that matches the data.\n * Always returns the first option if there is nothing that matches.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param formData - The current formData, if any, used to figure out a match\n * @param options - The list of options to find a matching options from\n * @param rootSchema - The root schema, used to primarily to look up `$ref`s\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The index of the first matched option or 0 if none is available\n */\nexport default function getFirstMatchingOption(validator, formData, options, rootSchema, discriminatorField) {\n // For performance, skip validating subschemas if formData is undefined. We just\n // want to get the first option in that case.\n if (formData === undefined) {\n return 0;\n }\n const simpleDiscriminatorMatch = getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField);\n if (typeof simpleDiscriminatorMatch === 'number') {\n return simpleDiscriminatorMatch;\n }\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n // If we have a discriminator field, then we will use this to make the determination\n const discriminator = discriminatorField\n ? option[PROPERTIES_KEY]?.[discriminatorField]\n : undefined;\n if (discriminatorField && discriminator !== undefined) {\n const value = getByPath(formData, discriminatorField);\n if (validator.isValid(discriminator, value, rootSchema)) {\n return i;\n }\n }\n else if (option[PROPERTIES_KEY]) {\n // If the schema describes an object then we need to add slightly more\n // strict matching to the schema, because unless the schema uses the\n // \"requires\" keyword, an object will match the schema as long as it\n // doesn't have matching keys with a conflicting type. To do this we use an\n // \"anyOf\" with an array of requires. This augmentation expresses that the\n // schema should match if any of the keys in the schema are present on the\n // object and pass validation.\n //\n // Create an \"anyOf\" schema that requires at least one of the keys in the\n // \"properties\" object\n const requiresAnyOf = {\n anyOf: Object.keys(option[PROPERTIES_KEY]).map((key) => ({\n required: [key],\n })),\n };\n let augmentedSchema;\n // If the \"anyOf\" keyword already exists, wrap the augmentation in an \"allOf\"\n if (option.anyOf) {\n // Create a shallow clone of the option\n const { ...shallowClone } = option;\n if (!shallowClone.allOf) {\n shallowClone.allOf = [];\n }\n else {\n // If \"allOf\" already exists, shallow clone the array\n shallowClone.allOf = shallowClone.allOf.slice();\n }\n shallowClone.allOf.push(requiresAnyOf);\n augmentedSchema = shallowClone;\n }\n else {\n augmentedSchema = { ...option, ...requiresAnyOf };\n }\n // Remove the \"required\" field as it's likely that not all fields have\n // been filled in yet, which will mean that the schema is not valid\n delete augmentedSchema.required;\n if (validator.isValid(augmentedSchema, formData, rootSchema)) {\n return i;\n }\n }\n else if (validator.isValid(option, formData, rootSchema)) {\n return i;\n }\n }\n return 0;\n}\n//# sourceMappingURL=getFirstMatchingOption.js.map","export function isObject(value) {\n return value !== null && typeof value === \"object\";\n}\nconst objProto = Object.prototype;\nexport function isRecordEmpty(rec) {\n for (const key in rec) {\n if (objProto.hasOwnProperty.call(rec, key)) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=object.js.map","import { isRecordEmpty } from \"../object.js\";\nexport const JSON_SCHEMA_TYPE_NAMES = [\n \"array\",\n \"boolean\",\n \"integer\",\n \"null\",\n \"number\",\n \"object\",\n \"string\",\n];\nexport const SET_OF_JSON_SCHEMA_TYPE_NAMES = new Set(JSON_SCHEMA_TYPE_NAMES);\nexport function isJsonSchemaType(type) {\n return SET_OF_JSON_SCHEMA_TYPE_NAMES.has(type);\n}\n// WARN: Order is important\nexport const RECORDS_OF_SUB_SCHEMAS = [\n \"$defs\",\n \"definitions\",\n \"properties\",\n \"patternProperties\",\n \"dependencies\",\n];\nexport const SET_OF_RECORDS_OF_SUB_SCHEMAS = new Set(RECORDS_OF_SUB_SCHEMAS);\n// WARN: Order is important\nexport const ARRAYS_OF_SUB_SCHEMAS = [\n \"items\",\n \"allOf\",\n \"oneOf\",\n \"anyOf\",\n];\nexport const SET_OF_ARRAYS_OF_SUB_SCHEMAS = new Set(ARRAYS_OF_SUB_SCHEMAS);\n// WARN: Order is important\nexport const SUB_SCHEMAS = [\n \"items\",\n \"additionalItems\",\n \"additionalProperties\",\n \"propertyNames\",\n \"contains\",\n \"if\",\n \"then\",\n \"else\",\n \"not\",\n];\nexport const SET_OF_SUB_SCHEMAS = new Set(SUB_SCHEMAS);\n// WARN: Order is important\nexport const ALL_SUB_SCHEMA_KEYS = [\n ...RECORDS_OF_SUB_SCHEMAS,\n ...ARRAYS_OF_SUB_SCHEMAS,\n ...SUB_SCHEMAS,\n];\nexport function isSchemaObject(schemaDef) {\n return typeof schemaDef === \"object\";\n}\nexport function isAllowAnySchema(def) {\n return isSchemaObject(def) ? isRecordEmpty(def) : def === true;\n}\n//# sourceMappingURL=json-schema.js.map","export function ascComparator(a, b) {\n if (a < b)\n return -1;\n if (a > b)\n return 1;\n return 0;\n}\n//# sourceMappingURL=ord.js.map","export function union(larger, smaller) {\n const ll = larger.length;\n if (ll === 0) {\n return smaller;\n }\n let sl = smaller.length;\n if (sl === 0) {\n return larger;\n }\n if (ll < sl) {\n const tmp = larger;\n larger = smaller;\n smaller = tmp;\n sl = ll;\n }\n const data = new Set(larger);\n for (let i = 0; i < sl; i++) {\n data.add(smaller[i]);\n }\n return Array.from(data);\n}\nexport function intersection(a, b) {\n const result = [];\n if (a.length === 0 || b.length === 0) {\n return result;\n }\n if (a.length > b.length) {\n const tmp = a;\n a = b;\n b = tmp;\n }\n const setB = new Set(b);\n for (let i = 0; i < a.length && setB.size > 0; i++) {\n const val = a[i];\n if (setB.delete(val)) {\n result.push(val);\n }\n }\n return result;\n}\nexport function isArrayEmpty(arr) {\n return arr.length === 0;\n}\nexport function createArrayComparator(compare) {\n return (a, b) => {\n const d = a.length - b.length;\n if (d !== 0) {\n return d;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n const d = compare(a[i], b[i]);\n if (d !== 0) {\n return d;\n }\n }\n }\n return 0;\n };\n}\nexport function createDeduplicator(compare, { threshold = 12 } = {}) {\n return (arr) => {\n const al = arr.length;\n if (al === 0) {\n return arr;\n }\n if (al <= threshold) {\n const result = [];\n let rl = 0;\n outer: for (let i = 0; i < al; i++) {\n const item = arr[i];\n for (let j = 0; j < rl; j++) {\n if (compare(item, result[j]) === 0) {\n continue outer;\n }\n }\n rl = result.push(item);\n }\n return result;\n }\n const sorted = arr.slice().sort(compare);\n let wIndex = 0;\n for (let rIndex = 1; rIndex < al; rIndex++) {\n if (compare(sorted[wIndex], sorted[rIndex]) !== 0) {\n if (++wIndex !== rIndex) {\n sorted[wIndex] = sorted[rIndex];\n }\n }\n }\n sorted.length = wIndex + 1;\n return sorted;\n };\n}\nexport function createIntersector(compare) {\n return (a, b) => {\n const result = [];\n let al = a.length;\n let bl = b.length;\n if (al === 0 || bl === 0) {\n return result;\n }\n if (al > bl) {\n const tmpArr = a;\n a = b;\n b = tmpArr;\n const tmpL = al;\n al = bl;\n bl = tmpL;\n }\n const aSorted = [...a].sort(compare);\n const bSorted = [...b].sort(compare);\n let i = 0, j = 0;\n while (i < al && j < bl) {\n const cmp = compare(aSorted[i], bSorted[j]);\n if (cmp === 0) {\n // Only push if result is empty OR last pushed value is different\n if (result.length === 0 ||\n compare(result[result.length - 1], aSorted[i]) !== 0) {\n result.push(aSorted[i]);\n }\n i++;\n j++;\n }\n else if (cmp < 0) {\n i++;\n }\n else {\n j++;\n }\n }\n return result;\n };\n}\n//# sourceMappingURL=array.js.map","export function memoize(cache, func) {\n return (arg) => {\n if (cache.has(arg)) {\n return cache.get(arg);\n }\n const ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n}\nexport const weakMemoize = memoize;\n//# sourceMappingURL=memoize.js.map","import { ascComparator } from \"../../ord.js\";\nimport { createArrayComparator, createDeduplicator, isArrayEmpty, } from \"../../array.js\";\nimport { isRecordEmpty } from \"../../object.js\";\nimport { weakMemoize } from \"../../memoize.js\";\nimport { isAllowAnySchema, isSchemaObject } from \"../json-schema.js\";\nconst zero = () => 0;\nconst isUndefined = (v) => v === undefined;\nconst isSchemaPrimitiveExceptNull = (value) => typeof value !== \"object\";\nconst PRIMITIVE_TYPE_ORDER = {\n boolean: 0,\n number: 1,\n string: 2,\n};\nfunction compareSchemaPrimitive(a, b) {\n const ta = typeof a;\n const tb = typeof b;\n return ta === tb\n ? ascComparator(a, b)\n : PRIMITIVE_TYPE_ORDER[ta] - PRIMITIVE_TYPE_ORDER[tb];\n}\nfunction insertUniqueValues(mutableTarget, mutableSource) {\n const tl = mutableTarget.length;\n if (tl === 0)\n return mutableSource;\n const sl = mutableSource.length;\n if (sl === 0)\n return mutableTarget;\n if (sl > tl) {\n const t = mutableTarget;\n mutableTarget = mutableSource;\n mutableSource = t;\n }\n const seen = new Set(mutableTarget);\n const l = mutableSource.length;\n for (let i = 0; i < l; i++) {\n const key = mutableSource[i];\n if (!seen.has(key)) {\n mutableTarget.push(key);\n }\n }\n return mutableTarget;\n}\nfunction createCmpMatcher(isEmpty, compare, compareEmpty = zero) {\n return (a, b) => {\n if (isEmpty(a)) {\n if (isEmpty(b)) {\n return compareEmpty(a, b);\n }\n return -1;\n }\n if (isEmpty(b)) {\n return 1;\n }\n return compare(a, b);\n };\n}\nfunction createOptionalComparator(compare) {\n return createCmpMatcher(isUndefined, compare);\n}\nfunction createNarrowingOptionalComparator(isEmpty, compare) {\n return createCmpMatcher((v) => v === undefined || isEmpty(v), compare);\n}\nfunction createArrayOrItemComparator(compare, compareArray) {\n return createCmpMatcher(Array.isArray, compare, compareArray);\n}\nconst compareOptionalSameTypeSchemaPrimitives = createOptionalComparator(ascComparator);\nconst compareNumbersWithZeroDefault = createNarrowingOptionalComparator((v) => v === 0, (a, b) => a - b);\nexport function createComparator({ deduplicationCache = new WeakMap(), sortedKeysCache = new WeakMap(), } = {}) {\n const getSortedKeys = weakMemoize(sortedKeysCache, (obj) => Object.keys(obj).sort());\n function createRecordsComparator(compare) {\n return (a, b) => {\n const aKeys = getSortedKeys(a);\n const bKeys = getSortedKeys(b);\n const l = Math.min(aKeys.length, bKeys.length);\n for (let i = 0; i < l; i++) {\n const cmp = ascComparator(aKeys[i], bKeys[i]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n if (aKeys.length !== bKeys.length) {\n return aKeys.length - bKeys.length;\n }\n for (let i = 0; i < l; i++) {\n const key = aKeys[i];\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const cmp = compare(a[key], b[key]);\n if (cmp !== 0) {\n return cmp;\n }\n }\n return 0;\n };\n }\n function createArrayComparatorWithDeduplication(compare) {\n const cmp = createArrayComparator(compare);\n const deduplicate = weakMemoize(deduplicationCache, \n // NOTE: Always sort output\n createDeduplicator(compare, { threshold: 0 }));\n return (a, b) => cmp(deduplicate(a), deduplicate(b));\n }\n const compareArrayOfSameTypePrimitivesWithDeduplication = createArrayComparatorWithDeduplication(ascComparator);\n function compareSchemaDefinitions(a, b) {\n if (isSchemaObject(a)) {\n if (isSchemaObject(b)) {\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n const allKeys = insertUniqueValues(aKeys, bKeys);\n const l = allKeys.length;\n for (let i = 0; i < l; i++) {\n const key = allKeys[i];\n if (a[key] === b[key]) {\n continue;\n }\n const cmp = COMPARATORS[key] ?? compareOptionalSchemaValues;\n const d = cmp(a[key], b[key]);\n if (d !== 0) {\n return d;\n }\n }\n return 0;\n }\n return b === true && isRecordEmpty(a) ? 0 : 1;\n }\n if (isSchemaObject(b)) {\n return a === true && isRecordEmpty(b) ? 0 : -1;\n }\n return ascComparator(a, b);\n }\n const compareOptionalSchemaValues = createOptionalComparator(compareSchemaValues);\n const compareNonNullSchemaValue = createCmpMatcher(isSchemaPrimitiveExceptNull, createArrayOrItemComparator(createRecordsComparator(compareOptionalSchemaValues), createArrayComparator(compareSchemaValues)), compareSchemaPrimitive);\n function compareSchemaValues(a, b) {\n if (a === null) {\n return -1;\n }\n if (b === null) {\n return 1;\n }\n return compareNonNullSchemaValue(a, b);\n }\n const compareOptionalSchemaDefinitions = createOptionalComparator(compareSchemaDefinitions);\n const compareRecordOfOptionalSchemasWithEmptyRecordDefault = createNarrowingOptionalComparator(isRecordEmpty, createRecordsComparator(compareOptionalSchemaDefinitions));\n const compareOptionalArrayOfSchemasWithDeduplication = createOptionalComparator(createArrayComparatorWithDeduplication(compareSchemaDefinitions));\n const compareSchemaDefinitionsWithEmptyDefinitionDefault = createNarrowingOptionalComparator(isAllowAnySchema, compareSchemaDefinitions);\n const COMPARATORS = {\n $id: compareOptionalSameTypeSchemaPrimitives,\n $comment: compareOptionalSameTypeSchemaPrimitives,\n $defs: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n $ref: compareOptionalSameTypeSchemaPrimitives,\n $schema: compareOptionalSameTypeSchemaPrimitives,\n const: compareOptionalSchemaValues,\n contains: compareOptionalSchemaDefinitions,\n contentEncoding: compareOptionalSameTypeSchemaPrimitives,\n contentMediaType: compareOptionalSameTypeSchemaPrimitives,\n default: compareOptionalSchemaValues,\n definitions: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n description: compareOptionalSameTypeSchemaPrimitives,\n else: compareOptionalSchemaDefinitions,\n examples: compareOptionalSchemaValues,\n exclusiveMaximum: compareOptionalSameTypeSchemaPrimitives,\n exclusiveMinimum: compareOptionalSameTypeSchemaPrimitives,\n format: compareOptionalSameTypeSchemaPrimitives,\n if: compareOptionalSchemaDefinitions,\n maximum: compareOptionalSameTypeSchemaPrimitives,\n maxItems: compareOptionalSameTypeSchemaPrimitives,\n maxLength: compareOptionalSameTypeSchemaPrimitives,\n maxProperties: compareOptionalSameTypeSchemaPrimitives,\n minimum: compareOptionalSameTypeSchemaPrimitives,\n multipleOf: compareOptionalSameTypeSchemaPrimitives,\n not: compareOptionalSchemaDefinitions,\n pattern: compareOptionalSameTypeSchemaPrimitives,\n propertyNames: compareOptionalSchemaDefinitions,\n readOnly: compareOptionalSameTypeSchemaPrimitives,\n then: compareOptionalSchemaDefinitions,\n title: compareOptionalSameTypeSchemaPrimitives,\n writeOnly: compareOptionalSameTypeSchemaPrimitives,\n uniqueItems: createNarrowingOptionalComparator((v) => v === false, zero),\n minLength: compareNumbersWithZeroDefault,\n minItems: compareNumbersWithZeroDefault,\n minProperties: compareNumbersWithZeroDefault,\n required: createNarrowingOptionalComparator(isArrayEmpty, compareArrayOfSameTypePrimitivesWithDeduplication),\n enum: createNarrowingOptionalComparator(isArrayEmpty, createArrayComparatorWithDeduplication(compareSchemaValues)),\n type: createOptionalComparator((a, b) => {\n const isAArr = Array.isArray(a);\n const isBArr = Array.isArray(b);\n if (!isAArr && !isBArr) {\n return ascComparator(a, b);\n }\n return compareArrayOfSameTypePrimitivesWithDeduplication(isAArr ? a : [a], isBArr ? b : [b]);\n }),\n items: createNarrowingOptionalComparator((v) => !Array.isArray(v) && isAllowAnySchema(v), createArrayOrItemComparator(compareSchemaDefinitions, createArrayComparator(compareSchemaDefinitions))),\n anyOf: compareOptionalArrayOfSchemasWithDeduplication,\n allOf: compareOptionalArrayOfSchemasWithDeduplication,\n oneOf: compareOptionalArrayOfSchemasWithDeduplication,\n properties: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n patternProperties: compareRecordOfOptionalSchemasWithEmptyRecordDefault,\n additionalProperties: compareSchemaDefinitionsWithEmptyDefinitionDefault,\n additionalItems: compareSchemaDefinitionsWithEmptyDefinitionDefault,\n dependencies: createNarrowingOptionalComparator(isRecordEmpty, createRecordsComparator(createOptionalComparator(createArrayOrItemComparator(compareSchemaDefinitions, compareArrayOfSameTypePrimitivesWithDeduplication)))),\n };\n return {\n compareSchemaValues,\n compareSchemaDefinitions,\n };\n}\n//# sourceMappingURL=compare.js.map","export function identity(v) {\n return v;\n}\n//# sourceMappingURL=function.js.map","export const gcd = (a, b) => (a ? gcd(b % a, a) : b);\nexport const lcm = (a, b) => Math.abs(a * b) / gcd(a, b);\n//# sourceMappingURL=math.js.map","export function legacyPatternsMerger(a, b) {\n return a === b ? a : `(?=${a})(?=${b})`;\n}\nexport function simplePatternsMerger(a, b) {\n return a === b ? a : `(?=.*(?:${a}))(?=.*(?:${b}))`;\n}\n//# sourceMappingURL=patterns.js.map","import { intersection, union, } from \"../../array.js\";\nimport { identity } from \"../../function.js\";\nimport { lcm } from \"../../math.js\";\nimport { isAllowAnySchema } from \"../json-schema.js\";\nimport { simplePatternsMerger } from \"./patterns.js\";\nfunction createPairCombinations(l, r, action) {\n const ll = l.length;\n const rl = r.length;\n if (ll > 0 && rl > 0) {\n for (let i = 0; i < ll; i++) {\n const lv = l[i];\n for (let j = 0; j < rl; j++) {\n action(lv, r[j]);\n }\n }\n }\n}\nfunction mergeBooleans(l, r) {\n return l || r;\n}\nfunction createRecordsMerge(merge) {\n return (left, right) => {\n const target = { ...left };\n const keys = Object.keys(right);\n const l = keys.length;\n for (let i = 0; i < l; i++) {\n const key = keys[i];\n target[key] =\n left[key] === undefined ? right[key] : merge(left[key], right[key]);\n }\n return target;\n };\n}\nfunction createMap(items) {\n const map = new Map();\n for (const pair of items) {\n for (const key of pair[0]) {\n map.set(key, pair[1]);\n }\n }\n return map;\n}\nfunction assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, key, value) {\n if (value === undefined || isAllowAnySchema(value)) {\n delete target[key];\n }\n else {\n target[key] = value;\n }\n}\nconst PROPERTIES_ASSIGNER_KEYS = [\n \"properties\",\n \"patternProperties\",\n \"additionalProperties\",\n];\nfunction compilePatterns(patterns) {\n const keys = Object.keys(patterns);\n const l = keys.length;\n const result = [];\n for (let i = 0; i < l; i++) {\n const source = keys[i];\n result.push({\n regExp: new RegExp(source),\n schema: patterns[source],\n });\n }\n return [result, keys];\n}\nconst EMPTY_PATTERNS_AND_KEYS = [[], []];\n/**\n * @returns `true` when `false` schema occurred\n */\nfunction appendKeyConstraints(target, key, patterns) {\n const l = patterns.length;\n for (let i = 0; i < l; i++) {\n const p = patterns[i];\n if (!p.regExp.test(key)) {\n continue;\n }\n const s = p.schema;\n if (s === false) {\n return true;\n }\n target.push(s);\n }\n return false;\n}\nconst ITEMS_ASSIGNER_KEYS = [\n \"items\",\n \"additionalItems\",\n];\nconst CONDITION_ASSIGNER_KEYS = [\n \"if\",\n \"then\",\n \"else\",\n];\nconst CONTAINS_ASSIGNER_KEYS = [\"contains\"];\nfunction assignCondition(target, source) {\n if (source.if !== undefined) {\n target.if = source.if;\n }\n if (source.then !== undefined) {\n target.then = source.then;\n }\n if (source.else !== undefined) {\n target.else = source.else;\n }\n return target;\n}\nfunction intersectSchemaTypes(a, b) {\n if (a === b) {\n return a;\n }\n switch (a) {\n case \"number\": {\n if (b === \"integer\") {\n return \"integer\";\n }\n }\n // eslint-disable-next-line no-fallthrough\n case \"integer\": {\n if (b === \"number\") {\n return \"integer\";\n }\n }\n // eslint-disable-next-line no-fallthrough\n default:\n return undefined;\n }\n}\nexport function check(a, b, check) {\n return [a, b, check];\n}\nfunction createChecksMap(checks) {\n const map = new Map();\n for (const [a, b, check] of checks) {\n const fn = (target) => {\n if (!check(target)) {\n throw new Error(`Schema keys '${a}' and '${b}' are conflicting (${a}: ${JSON.stringify(target[a])}, ${b}: ${JSON.stringify(target[b])})`);\n }\n };\n for (const k of [\n [a, b],\n [b, a],\n ]) {\n let arr = map.get(k[0]);\n if (arr === undefined) {\n arr = [];\n map.set(k[0], arr);\n }\n arr.push({ oppositeKey: k[1], check: fn });\n }\n }\n return map;\n}\nexport const DEFAULT_CHECKS = [\n check(\"minimum\", \"maximum\", (t) => t.maximum >= t.minimum),\n check(\"exclusiveMinimum\", \"maximum\", (t) => t.maximum > t.exclusiveMinimum),\n check(\"minimum\", \"exclusiveMaximum\", (t) => t.exclusiveMaximum > t.minimum),\n check(\"exclusiveMinimum\", \"exclusiveMaximum\", (t) => t.exclusiveMaximum > t.exclusiveMinimum),\n check(\"minLength\", \"maxLength\", (t) => t.maxLength >= t.minLength),\n check(\"minItems\", \"maxItems\", (t) => t.maxItems >= t.minItems),\n check(\"minProperties\", \"maxProperties\", (t) => t.maxProperties >= t.minProperties),\n];\nexport function createMerger({ mergePatterns = simplePatternsMerger, isSubRegExp = Object.is, intersectJson = intersection, deduplicateJsonSchemaDef = identity, defaultMerger = identity, assigners = [], checks = DEFAULT_CHECKS, mergers, } = {}) {\n function mergeArrayOfSchemaDefinitions(schemas) {\n const l = schemas.length;\n let result = schemas[0];\n for (let i = 1; i < l; i++) {\n const r = mergeSchemaDefinitions(result, schemas[i]);\n if (r === false) {\n return false;\n }\n if (isAllowAnySchema(r)) {\n continue;\n }\n result = r;\n }\n return result;\n }\n function createProperty(constraints, key, value, patterns, oppositeValue, oppositePatterns, oppositeAdditional) {\n constraints.length = 0;\n if (value === false) {\n return false;\n }\n constraints.push(value);\n const isOppositeValueDefined = oppositeValue !== undefined;\n if (isOppositeValueDefined) {\n if (oppositeValue === false) {\n return false;\n }\n constraints.push(oppositeValue);\n }\n if (appendKeyConstraints(constraints, key, oppositePatterns)) {\n return false;\n }\n const isNotYetAllowed = constraints.length < 2;\n if (oppositeAdditional === false) {\n // There are no allowing constraints from opposite side -> drop property\n if (isNotYetAllowed) {\n return undefined;\n }\n // Applying patterns of current schema cause they may disappear\n if (appendKeyConstraints(constraints, key, patterns)) {\n return false;\n }\n }\n else if (isNotYetAllowed && oppositeAdditional !== undefined) {\n constraints.push(oppositeAdditional);\n }\n const l = constraints.length;\n if (l === 1) {\n return constraints[0];\n }\n return mergeArrayOfSchemaDefinitions(constraints);\n }\n function assignPatternPropertiesAndAdditionalPropertiesMerge(target, patterns, patternKeys, matchedPatterns, oppositeAdditional, isOppositeTruthy) {\n const l = patternKeys.length;\n if (l > 0 && oppositeAdditional !== false) {\n if (isOppositeTruthy) {\n // TODO: in some cases we can just assign new value instead of copying\n Object.assign(target, patterns);\n }\n else {\n for (let i = 0; i < l; i++) {\n const pattern = patternKeys[i];\n if (matchedPatterns.has(pattern)) {\n continue;\n }\n target[pattern] = mergeSchemaDefinitions(patterns[pattern], oppositeAdditional);\n }\n }\n }\n return target;\n }\n const propertiesAssigner = (target, { properties: lProps = {}, patternProperties: lPatterns, additionalProperties: lAdditional = true, }, { properties: rProps = {}, patternProperties: rPatterns, additionalProperties: rAdditional = true, }) => {\n // Special case\n const isLAddTruthy = isAllowAnySchema(lAdditional);\n const isRAddTruthy = isAllowAnySchema(rAdditional);\n if (isLAddTruthy && isRAddTruthy) {\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"properties\", mergeRecordsOfSchemaDefinitions(lProps, rProps));\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"patternProperties\", lPatterns && rPatterns\n ? mergeRecordsOfSchemaDefinitions(lPatterns, rPatterns)\n : (lPatterns ?? rPatterns));\n delete target.additionalProperties;\n return target;\n }\n // Additional Properties\n const additionalProperties = mergeSchemaDefinitions(lAdditional, rAdditional);\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"additionalProperties\", additionalProperties);\n // Properties\n const properties = {};\n const lKeys = Object.keys(lProps);\n const lKeysLen = lKeys.length;\n const [lCompiledPatterns, lPatternKeys] = lPatterns\n ? compilePatterns(lPatterns)\n : EMPTY_PATTERNS_AND_KEYS;\n const [rCompiledPatterns, rPatternKeys] = rPatterns\n ? compilePatterns(rPatterns)\n : EMPTY_PATTERNS_AND_KEYS;\n const constraints = [];\n const lKeysSet = new Set();\n const mappedRAdditional = isRAddTruthy ? undefined : rAdditional;\n for (let i = 0; i < lKeysLen; i++) {\n const key = lKeys[i];\n lKeysSet.add(key);\n const prop = createProperty(constraints, key, lProps[key], lCompiledPatterns, rProps[key], rCompiledPatterns, mappedRAdditional);\n if (prop !== undefined) {\n properties[key] = prop;\n }\n }\n const rKeys = Object.keys(rProps);\n const rKeysLen = rKeys.length;\n const mappedLAdditional = isLAddTruthy ? undefined : lAdditional;\n for (let i = 0; i < rKeysLen; i++) {\n const key = rKeys[i];\n if (lKeysSet.has(key)) {\n continue;\n }\n const prop = createProperty(constraints, key, rProps[key], rCompiledPatterns, undefined, lCompiledPatterns, mappedLAdditional);\n if (prop !== undefined) {\n properties[key] = prop;\n }\n }\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"properties\", properties);\n // Pattern Properties\n // (lPatterns and rPatterns) or (lPatterns and rAdditional) or (rPatterns and lAdditional)\n let patterns = {};\n const matchedPatterns = new Set();\n if (lPatternKeys.length > 0 && rPatternKeys.length > 0) {\n createPairCombinations(lPatternKeys, rPatternKeys, (lKey, rKey) => {\n if (isSubRegExp(lKey, rKey)) {\n matchedPatterns.add(lKey);\n }\n if (isSubRegExp(rKey, lKey)) {\n matchedPatterns.add(rKey);\n }\n patterns[mergePatterns(lKey, rKey)] = mergeSchemaDefinitions(lPatterns[lKey], rPatterns[rKey]);\n });\n }\n patterns = assignPatternPropertiesAndAdditionalPropertiesMerge(patterns, lPatterns, lPatternKeys, matchedPatterns, rAdditional, isRAddTruthy);\n patterns = assignPatternPropertiesAndAdditionalPropertiesMerge(patterns, rPatterns, rPatternKeys, matchedPatterns, lAdditional, isLAddTruthy);\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"patternProperties\", patterns);\n return target;\n };\n const itemsAssigner = (target, \n // NOTE: Schema that has `additionalItems` without an `items` keyword is invalid\n // so the assigner should be triggered only be colliding `items` properties\n // so default values are used only for type narrowing\n { items: lItems = [], additionalItems: lAdditional }, { items: rItems = [], additionalItems: rAdditional }) => {\n const isLArr = Array.isArray(lItems);\n const isRArr = Array.isArray(rItems);\n const itemsArray = [];\n target.items = itemsArray;\n if (isLArr && isRArr) {\n const [l, additional, tail] = lItems.length < rItems.length\n ? [lItems.length, lAdditional, rItems]\n : [rItems.length, rAdditional, lItems];\n let i = 0;\n for (; i < l; i++) {\n itemsArray.push(mergeSchemaDefinitions(lItems[i], rItems[i]));\n }\n if (additional === false) {\n target.additionalItems = false;\n }\n else {\n const isAdditionalTruthy = additional === undefined || isAllowAnySchema(additional);\n for (; i < tail.length; i++) {\n itemsArray.push(isAdditionalTruthy\n ? tail[i]\n : mergeSchemaDefinitions(tail[i], additional));\n }\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"additionalItems\", lAdditional !== undefined && rAdditional !== undefined\n ? mergeSchemaDefinitions(lAdditional, rAdditional)\n : (lAdditional ?? rAdditional));\n }\n }\n else if (isLArr || isRArr) {\n const [arr, item, additional] = (isLArr ? [lItems, rItems, lAdditional] : [rItems, lItems, rAdditional]);\n assignSchemaDefinitionOrRecordOfSchemaDefinitions(target, \"additionalItems\", additional && mergeSchemaDefinitions(additional, item));\n for (let i = 0; i < arr.length; i++) {\n itemsArray.push(mergeSchemaDefinitions(arr[i], item));\n }\n }\n else {\n delete target.additionalItems;\n target.items = mergeSchemaDefinitions(lItems, rItems);\n }\n return target;\n };\n const conditionAssigner = (target, l, r) => {\n assignCondition(target, l);\n const cond = assignCondition({}, r);\n if (target.allOf === undefined) {\n target.allOf = [cond];\n }\n else {\n target.allOf = target.allOf.concat(cond);\n }\n return target;\n };\n const containsAssigner = (target, l, r) => {\n const lContains = l.contains;\n const rContains = r.contains;\n // Cheapest hot path: identical reference (target already holds it via spread).\n if (lContains === rContains)\n return target;\n // `contains: false` rejects every array, so it dominates the conjunction\n // (non-array instances ignore `contains` on both sides).\n if (lContains === false || rContains === false) {\n target.contains = false;\n return target;\n }\n // `contains: true` (or `{}`) only requires a non-empty array, which is\n // already implied by any other `contains`, so the other side wins.\n // (If both sides allow any, either one is equivalent.)\n if (isAllowAnySchema(lContains)) {\n target.contains = rContains;\n return target;\n }\n if (isAllowAnySchema(rContains)) {\n target.contains = lContains;\n return target;\n }\n // Idempotence: `contains: C` ∧ `contains: C` ≡ `contains: C`\n // (target already holds `lContains` via spread).\n if (deduplicateJsonSchemaDef([lContains, rContains]).length === 1) {\n return target;\n }\n // Existential conjunction cannot be expressed as a single `contains`\n // (`∃i C1(i) ∧ ∃j C2(j)` allows `i ≠ j`, while `∃k C1(k) ∧ C2(k)`\n // requires a single witness), so preserve both branches exactly.\n // Like `conditionAssigner`, keep left at root and move only right to `allOf`.\n const branch = { contains: rContains };\n target.allOf =\n target.allOf === undefined\n ? [branch]\n : deduplicateJsonSchemaDef(target.allOf.concat(branch));\n return target;\n };\n function mergeArraysOfSchemaDefinition(l, r) {\n const definitions = [];\n createPairCombinations(l, r, (a, b) => {\n try {\n definitions.push(mergeSchemaDefinitions(a, b));\n }\n catch { }\n });\n if (definitions.length === 0) {\n throw new Error(`No valid schema combinations could be produced for \"${JSON.stringify(l)}\" and \"${JSON.stringify(r)}\"; the merged result is empty`);\n }\n return deduplicateJsonSchemaDef(definitions);\n }\n const ASSIGNERS_MAP = createMap([\n [PROPERTIES_ASSIGNER_KEYS, propertiesAssigner],\n [ITEMS_ASSIGNER_KEYS, itemsAssigner],\n [CONDITION_ASSIGNER_KEYS, conditionAssigner],\n [CONTAINS_ASSIGNER_KEYS, containsAssigner],\n ...assigners,\n ]);\n const CHECKS_MAP = createChecksMap(checks);\n function mergeSchemaDefinitions(left, right) {\n if (left === false || right === false) {\n return false;\n }\n if (isAllowAnySchema(left)) {\n if (isAllowAnySchema(right)) {\n return true;\n }\n return right;\n }\n if (isAllowAnySchema(right)) {\n return left;\n }\n let target = { ...left };\n const assigners = new Set();\n const checks = new Set();\n const rKeys = Reflect.ownKeys(right);\n const l = rKeys.length;\n for (let i = 0; i < l; i++) {\n const rKey = rKeys[i];\n const rv = right[rKey];\n if (rv === undefined) {\n continue;\n }\n const checkData = CHECKS_MAP.get(rKey);\n if (checkData !== undefined) {\n const l = checkData.length;\n for (let j = 0; j < l; j++) {\n const item = checkData[j];\n if (left[item.oppositeKey] !== undefined) {\n checks.add(item.check);\n }\n }\n }\n const lv = left[rKey];\n if (lv === undefined) {\n // @ts-expect-error too complex\n target[rKey] = rv;\n continue;\n }\n const assign = ASSIGNERS_MAP.get(rKey);\n if (assign) {\n assigners.add(assign);\n continue;\n }\n const merge = MERGERS[rKey] ?? defaultMerger;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n target[rKey] = merge(lv, rv);\n }\n for (const assign of assigners) {\n target = assign(target, left, right);\n }\n for (const check of checks) {\n check(target);\n }\n return target;\n }\n const mergeRecordsOfSchemaDefinitions = createRecordsMerge(mergeSchemaDefinitions);\n const MERGERS = {\n $id: defaultMerger,\n $ref: defaultMerger,\n $schema: defaultMerger,\n $comment: defaultMerger,\n $defs: mergeRecordsOfSchemaDefinitions,\n definitions: mergeRecordsOfSchemaDefinitions,\n type: (a, b) => {\n if (a === b) {\n return a;\n }\n const isAArr = Array.isArray(a);\n const isBArr = Array.isArray(b);\n if (!isAArr && !isBArr) {\n const intersection = intersectSchemaTypes(a, b);\n if (intersection !== undefined) {\n return intersection;\n }\n }\n else if (isAArr || isBArr) {\n const r = new Set();\n if (isAArr && isBArr) {\n createPairCombinations(a, b, (x, y) => {\n const type = intersectSchemaTypes(x, y);\n if (type !== undefined) {\n r.add(type);\n }\n });\n }\n else {\n const arr = (isAArr ? a : b);\n const el = (isAArr ? b : a);\n const l = arr.length;\n for (let i = 0; i < l; i++) {\n const intersection = intersectSchemaTypes(el, arr[i]);\n if (intersection !== undefined) {\n r.add(intersection);\n }\n }\n }\n const s = r.size;\n if (s === 1) {\n return r.values().next().value;\n }\n if (s > 1) {\n return Array.from(r);\n }\n }\n throw new Error(`It is not possible to create an intersection of the following incompatible types: ${a.toString()}, ${b.toString()}`);\n },\n default: defaultMerger,\n description: defaultMerger,\n title: defaultMerger,\n const: defaultMerger,\n format: defaultMerger,\n contentEncoding: defaultMerger,\n contentMediaType: defaultMerger,\n not: (a, b) => {\n const items = deduplicateJsonSchemaDef([a, b]);\n return items.length === 1 ? items[0] : { anyOf: items };\n },\n pattern: mergePatterns,\n readOnly: mergeBooleans,\n writeOnly: mergeBooleans,\n enum: (a, b) => {\n const data = intersectJson(a, b);\n if (data.length === 0) {\n throw new Error(`Intersection of the following enums is empty: \"${JSON.stringify(a)}\", \"${JSON.stringify(b)}\"`);\n }\n return data;\n },\n anyOf: mergeArraysOfSchemaDefinition,\n oneOf: mergeArraysOfSchemaDefinition,\n allOf: (l, r) => deduplicateJsonSchemaDef(l.concat(r)),\n propertyNames: mergeSchemaDefinitions,\n dependencies: createRecordsMerge((a, b) => {\n if (Array.isArray(a)) {\n if (Array.isArray(b)) {\n return union(a, b);\n }\n return mergeSchemaDefinitions(b, { required: a });\n }\n if (Array.isArray(b)) {\n return mergeSchemaDefinitions(a, { required: b });\n }\n return mergeSchemaDefinitions(a, b);\n }),\n examples: (l, r) => {\n // https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-validation-01#section-10.4\n if (!Array.isArray(l) || !Array.isArray(r)) {\n throw new Error(`Value of the 'examples' field should be an array, but got \"${JSON.stringify(l)}\" and \"${JSON.stringify(r)}\"`);\n }\n // TODO: Proper deduplication\n return union(l, r);\n },\n multipleOf: (a, b) => {\n let factor = 1;\n while (!Number.isInteger(a) || !Number.isInteger(b)) {\n factor *= 10;\n a *= 10;\n b *= 10;\n }\n return lcm(a, b) / factor;\n },\n exclusiveMaximum: Math.min,\n maximum: Math.min,\n maxItems: Math.min,\n maxLength: Math.min,\n maxProperties: Math.min,\n exclusiveMinimum: Math.max,\n minimum: Math.max,\n minItems: Math.max,\n minLength: Math.max,\n minProperties: Math.max,\n uniqueItems: mergeBooleans,\n required: union,\n ...mergers,\n };\n return {\n mergeSchemaDefinitions,\n mergeArrayOfSchemaDefinitions,\n };\n}\n//# sourceMappingURL=merge.js.map","import { transformSchemaDefinition } from \"../transform.js\";\nfunction getAllOfSchemas(schema) {\n const result = [];\n const stack = [schema];\n while (stack.length > 0) {\n const current = stack.pop();\n if (typeof current === \"boolean\" || current.allOf === undefined) {\n result.push(current);\n continue;\n }\n const { allOf, ...rest } = current;\n result.push(rest);\n for (let i = allOf.length - 1; i >= 0; i--) {\n stack.push(allOf[i]);\n }\n }\n return result;\n}\nexport function createShallowAllOfMerge(mergeArrayOfSchemaDefinitions) {\n return (schema) => mergeArrayOfSchemaDefinitions(getAllOfSchemas(schema));\n}\nexport function createDeepAllOfMerge(shallowMerge) {\n return (schemaDef) => transformSchemaDefinition(schemaDef, (def) => {\n if (typeof def === \"boolean\" || def.allOf === undefined) {\n return def;\n }\n return shallowMerge(def);\n });\n}\n//# sourceMappingURL=all-of-merge.js.map","import { createComparator, createMerger, createShallowAllOfMerge } from '@x0k/json-schema-merge';\nimport { createDeduplicator, createIntersector } from '@x0k/json-schema-merge/lib/array';\nconst { compareSchemaDefinitions, compareSchemaValues } = createComparator();\nconst { mergeArrayOfSchemaDefinitions } = createMerger({\n intersectJson: createIntersector(compareSchemaValues),\n deduplicateJsonSchemaDef: createDeduplicator(compareSchemaDefinitions),\n});\n/** Shared `@x0k/json-schema-merge` shallow-allOf merge function used by `retrieveSchema` and\n * `omitExtraData`. Constructed once from a single comparator/merger/intersector/deduplicator\n * pipeline so both consumers share the same configuration without duplicating setup code.\n *\n * Usage: pass a schema that contains an `allOf` keyword and receive the merged result.\n *\n * @example\n * const merged = shallowAllOfMerge(schema); // schema.allOf is merged into the parent schema\n */\nexport default createShallowAllOfMerge(mergeArrayOfSchemaDefinitions);\n//# sourceMappingURL=shallowAllOfMerge.js.map","import { ADDITIONAL_PROPERTIES_KEY, ADDITIONAL_PROPERTY_FLAG, ALL_OF_KEY, ANY_OF_KEY, DEPENDENCIES_KEY, ID_KEY, IF_KEY, ITEMS_KEY, ONE_OF_KEY, PATTERN_PROPERTIES_KEY, PROPERTIES_KEY, REF_KEY, RJSF_REF_CYCLE_KEY, RJSF_REF_KEY, } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport findSchemaDefinition, { splitKeyElementFromObject } from \"../findSchemaDefinition.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport guessType from \"../guessType.js\";\nimport isObject from \"../isObject.js\";\nimport mergeSchemas from \"../mergeSchemas.js\";\nimport { getByPath } from \"../pathUtils.js\";\nimport getFirstMatchingOption from \"./getFirstMatchingOption.js\";\nimport shallowAllOfMerge from \"./shallowAllOfMerge.js\";\n/** Retrieves an expanded schema that has had all of its conditions, additional properties, references and dependencies\n * resolved and merged into the `schema` given a `validator`, `rootSchema` and `rawFormData` that is used to do the\n * potentially recursive resolution.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which retrieving a schema is desired\n * @param [rootSchema={}] - The root schema that will be forwarded to all the APIs\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs = false] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @returns - The schema having its conditions, additional properties, references and dependencies resolved\n */\nexport default function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs = false) {\n return retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, undefined, undefined, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs)[0];\n}\n/** Converts boolean schemas to equivalent object schemas for APIs that operate on `StrictRJSFSchema` objects.\n *\n * @param schema - The schema or boolean schema to normalize\n * @returns - The original schema or an equivalent object schema\n */\nfunction normalizeBooleanSchema(schema) {\n if (typeof schema !== 'boolean') {\n return schema;\n }\n return (schema ? {} : { not: {} });\n}\n/** Resolves a conditional block (if/else/then) by removing the condition and merging the appropriate conditional branch\n * with the rest of the schema. If `expandAllBranches` is true, then the `retrieveSchemaInteral()` results for both\n * conditions will be returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that is used to detect valid schema conditions\n * @param schema - The schema for which resolving a condition is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and\n * dependencies as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [preserveDependencies=false] - Leave dependencies unresolved for default computation\n * @returns - A list of schemas with the appropriate conditions resolved, possibly with all branches expanded\n */\nexport function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, preserveDependencies = false) {\n const { if: expression, then, else: otherwise, ...resolvedSchemaLessConditional } = schema;\n const conditionValue = validator.isValid(expression, formData || {}, rootSchema);\n let resolvedSchemas = [resolvedSchemaLessConditional];\n let schemas = [];\n if (expandAllBranches) {\n if (then && typeof then !== 'boolean') {\n const thenSchema = then;\n schemas = schemas.concat(retrieveSchemaInternal(validator, thenSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf, undefined, preserveDependencies));\n }\n if (otherwise && typeof otherwise !== 'boolean') {\n const otherwiseSchema = otherwise;\n schemas = schemas.concat(retrieveSchemaInternal(validator, otherwiseSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf, undefined, preserveDependencies));\n }\n }\n else {\n const conditionalBranch = (conditionValue ? then : otherwise);\n if (conditionalBranch !== undefined) {\n const conditionalSchema = normalizeBooleanSchema(conditionalBranch);\n schemas = schemas.concat(retrieveSchemaInternal(validator, conditionalSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf, undefined, preserveDependencies));\n }\n }\n if (schemas.length) {\n resolvedSchemas = schemas.map((s) => mergeSchemas(resolvedSchemaLessConditional, s));\n }\n return resolvedSchemas.flatMap((s) => retrieveSchemaInternal(validator, s, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf, undefined, preserveDependencies));\n}\n/** Given a list of lists of allOf, anyOf or oneOf values, create a list of lists of all permutations of the values. The\n * `listOfLists` is expected to be all resolved values of the 1st...nth schemas within an `allOf`, `anyOf` or `oneOf`.\n * From those lists, build a matrix for each `xxxOf` where there is more than one schema for a row in the list of lists.\n *\n * For example:\n * - If there are three xxxOf rows (A, B, C) and they have been resolved such that there is only one A, two B and three\n * C schemas then:\n * - The permutation for the first row is `[[A]]`\n * - The permutations for the second row are `[[A,B1], [A,B2]]`\n * - The permutations for the third row are `[[A,B1,C1], [A,B1,C2], [A,B1,C3], [A,B2,C1], [A,B2,C2], [A,B2,C3]]`\n *\n * @param listOfLists - The list of lists of elements that represent the allOf, anyOf or oneOf resolved values in order\n * @returns - The list of all permutations of schemas for a set of `xxxOf`s\n */\nexport function getAllPermutationsOfXxxOf(listOfLists) {\n const allPermutations = listOfLists.reduce((permutations, list) => {\n // When there are more than one set of schemas for a row, duplicate the set of permutations and add in the values\n if (list.length > 1) {\n return list.flatMap((element) => permutations.map((permutation) => [...permutation, element]));\n }\n // Otherwise just push in the single value into the current set of permutations\n permutations.forEach((permutation) => permutation.push(list[0]));\n return permutations;\n }, [[]]);\n return allPermutations;\n}\n/** Returns the subset of 'patternProperties' specifications that match the given 'key'\n *\n * @param schema - The schema whose 'patternProperties' are to be filtered\n * @param key - The key to match against the 'patternProperties' specifications\n * @returns - The subset of 'patternProperties' specifications that match the given 'key'\n */\nexport function getMatchingPatternProperties(schema, key) {\n const patternProperties = schema.patternProperties ?? {};\n return Object.fromEntries(Object.entries(patternProperties).filter(([pattern]) => RegExp(pattern).test(key)));\n}\n/** Resolves references and dependencies within a schema and its 'allOf' children. Passes the `expandAllBranches` flag\n * down to the `retrieveSchemaInternal()`, `resolveReference()` and `resolveDependencies()` helper calls. If\n * `expandAllBranches` is true, then all possible dependencies and/or allOf branches are returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @param [preserveDependencies=false] - Leave dependencies unresolved for default computation\n * @returns - The list of schemas having its references, dependencies and allOf schemas resolved\n */\nexport function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs, preserveDependencies = false) {\n const updatedSchemas = resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs, preserveDependencies);\n if (updatedSchemas.length > 1 || updatedSchemas[0] !== schema) {\n // return the updatedSchemas array if it has either multiple schemas within it\n // OR the first schema is not the same as the original schema\n return updatedSchemas;\n }\n if (DEPENDENCIES_KEY in schema && !preserveDependencies) {\n const resolvedSchemas = resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf);\n return resolvedSchemas.flatMap((s) => retrieveSchemaInternal(validator, s, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf));\n }\n if (ALL_OF_KEY in schema && Array.isArray(schema[ALL_OF_KEY])) {\n const allOfSchemaElements = schema.allOf.map((allOfSubschema) => retrieveSchemaInternal(validator, allOfSubschema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf, undefined, preserveDependencies));\n const allPermutations = getAllPermutationsOfXxxOf(allOfSchemaElements);\n return allPermutations.map((permutation) => ({\n ...schema,\n allOf: permutation,\n }));\n }\n // No $ref or dependencies or allOf attribute was found, returning the original schema.\n return [schema];\n}\n/** Resolves all references within a schema and then returns the `retrieveSchemaInternal()` if the resolved schema is\n * actually different than the original. Passes the `expandAllBranches` flag down to the `retrieveSchemaInternal()`\n * helper call.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a reference is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @param [preserveDependencies=false] - Leave dependencies unresolved for default computation\n * @returns - The list schemas retrieved after having all references resolved\n */\nexport function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs, preserveDependencies = false) {\n const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList, undefined, resolveAnyOfOrOneOfRefs);\n if (updatedSchema !== schema) {\n // Only call this if the schema was actually changed by the `resolveAllReferences()` function\n return retrieveSchemaInternal(validator, updatedSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs, preserveDependencies);\n }\n return [schema];\n}\n/** Resolves all references within the schema itself as well as any of its properties and array items.\n *\n * @param schema - The schema for which resolving all references is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param recurseList - List of $refs already resolved to prevent recursion\n * @param [baseURI] - The base URI to be used for resolving relative references\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @param [markCycleOnDetection=false] - When true and a recursive $ref is detected, the returned schema is tagged\n * with `__rjsf_ref_cycle: true` so that `SchemaField` can render a cycle indicator instead of recursing.\n * Should only be `true` when called from an **object-property** context, because object properties are always\n * rendered (creating an infinite loop), whereas array items and anyOf/oneOf branches are data-driven.\n * @returns - given schema will all references resolved or the original schema if no internal `$refs` were resolved\n */\nexport function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs, markCycleOnDetection = false) {\n if (!isObject(schema)) {\n return schema;\n }\n let resolvedSchema = schema;\n let currentBaseURI = baseURI;\n // resolve top level ref\n if (REF_KEY in resolvedSchema) {\n const { $ref, ...localSchema } = resolvedSchema;\n // Check for a recursive reference and stop the loop\n if (recurseList.includes($ref)) {\n return markCycleOnDetection ? { ...resolvedSchema, [RJSF_REF_CYCLE_KEY]: true } : resolvedSchema;\n }\n recurseList.push($ref);\n // Retrieve the referenced schema definition.\n const refSchema = findSchemaDefinition($ref, rootSchema, currentBaseURI);\n resolvedSchema = { ...refSchema, ...localSchema, [RJSF_REF_KEY]: $ref };\n if (ID_KEY in resolvedSchema) {\n currentBaseURI = resolvedSchema[ID_KEY];\n }\n }\n if (PROPERTIES_KEY in resolvedSchema) {\n const childrenLists = [];\n const updatedProps = {};\n for (const [key, value] of Object.entries(resolvedSchema[PROPERTIES_KEY] ?? {})) {\n const childList = [...recurseList];\n // Mark cycles only when NOT in resolveAnyOfOrOneOfRefs mode. When resolveAnyOfOrOneOfRefs=true\n // (e.g. from ObjectField), options are resolved against a shared recurseList that accumulates\n // refs across branches, causing false positives. In simple (non-anyOf) resolution, a $ref cycle\n // in an object property always causes an infinite render loop and must be caught.\n updatedProps[key] = resolveAllReferences(value, rootSchema, childList, currentBaseURI, resolveAnyOfOrOneOfRefs, !resolveAnyOfOrOneOfRefs);\n childrenLists.push(childList);\n }\n for (const ref of new Set(childrenLists.flat())) {\n if (!recurseList.includes(ref)) {\n recurseList.push(ref);\n }\n }\n resolvedSchema = { ...resolvedSchema, [PROPERTIES_KEY]: updatedProps };\n }\n if (ITEMS_KEY in resolvedSchema &&\n !Array.isArray(resolvedSchema.items) &&\n typeof resolvedSchema.items !== 'boolean') {\n resolvedSchema = {\n ...resolvedSchema,\n // Array items are only rendered when data exists, so a $ref cycle here does NOT cause an infinite render.\n items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, currentBaseURI, resolveAnyOfOrOneOfRefs),\n };\n }\n if (resolveAnyOfOrOneOfRefs) {\n let key;\n let schemas;\n if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {\n key = ANY_OF_KEY;\n schemas = resolvedSchema[ANY_OF_KEY];\n }\n else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {\n key = ONE_OF_KEY;\n schemas = resolvedSchema[ONE_OF_KEY];\n }\n if (key && schemas) {\n resolvedSchema = {\n ...resolvedSchema,\n [key]: schemas.map((s) => resolveAllReferences(s, rootSchema, recurseList, currentBaseURI, resolveAnyOfOrOneOfRefs)),\n };\n }\n }\n return deepEquals(schema, resolvedSchema) ? schema : resolvedSchema;\n}\n/** Creates new 'properties' items for each key in the `formData`\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param theSchema - The schema for which the existing additional properties is desired\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s * @param validator\n * @param [aFormData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The updated schema with additional properties stubbed\n */\nexport function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFormData, experimental_customMergeAllOf) {\n // Clone the schema so that we don't ruin the consumer's original\n const schema = {\n ...theSchema,\n properties: { ...theSchema.properties },\n };\n // make sure formData is an object\n const formData = aFormData && isObject(aFormData) ? aFormData : {};\n Object.keys(formData).forEach((key) => {\n if (key in schema.properties) {\n // No need to stub, our schema already has the property\n return;\n }\n if (PATTERN_PROPERTIES_KEY in schema) {\n const matchingProperties = getMatchingPatternProperties(schema, key);\n if (Object.keys(matchingProperties).length > 0) {\n schema.properties[key] = retrieveSchema(validator, { [ALL_OF_KEY]: Object.values(matchingProperties) }, rootSchema, formData[key], experimental_customMergeAllOf);\n schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;\n return;\n }\n }\n if (ADDITIONAL_PROPERTIES_KEY in schema && schema.additionalProperties !== false) {\n let additionalProperties;\n if (typeof schema.additionalProperties !== 'boolean') {\n if (REF_KEY in schema.additionalProperties) {\n additionalProperties = retrieveSchema(validator, { [REF_KEY]: schema.additionalProperties[REF_KEY] }, rootSchema, formData[key], experimental_customMergeAllOf);\n }\n else if ('type' in schema.additionalProperties) {\n additionalProperties = { ...schema.additionalProperties };\n }\n else if (ANY_OF_KEY in schema.additionalProperties || ONE_OF_KEY in schema.additionalProperties) {\n additionalProperties = {\n type: 'object',\n ...schema.additionalProperties,\n };\n }\n else {\n additionalProperties = { type: guessType(formData[key]) };\n }\n }\n else {\n additionalProperties = { type: guessType(formData[key]) };\n }\n // The type of our new key should match the additionalProperties value;\n schema.properties[key] = additionalProperties;\n // Set our additional property flag so we know it was dynamically added\n schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;\n }\n else {\n // Invalid property\n schema.properties[key] = { type: 'null' };\n // Set our additional property flag so we know it was dynamically added\n schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;\n }\n });\n return schema;\n}\n/**\n * Internal helper that merges allOf schemas using @x0k/json-schema-merge's shallow allOf merge\n * @param schema - The schema containing an `allOf` keyword\n * @returns The schema with allOf schemas merged\n */\nfunction mergeAllOf(schema) {\n return shallowAllOfMerge(schema);\n}\n/** Internal handler that retrieves an expanded schema that has had all of its conditions, additional properties,\n * references and dependencies resolved and merged into the `schema` given a `validator`, `rootSchema` and `rawFormData`\n * that is used to do the potentially recursive resolution. If `expandAllBranches` is true, then all possible branches\n * of the schema and its references, conditions and dependencies are returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which retrieving a schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema\n * @param [expandAllBranches=false] - Flag, if true, will return all possible branches of conditions, any/oneOf and\n * dependencies as a list of schemas\n * @param [recurseList=[]] - The optional, list of recursive references already processed\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @param [preserveDependencies=false] - Leave dependencies unresolved for default computation\n * @returns - The schema(s) resulting from having its conditions, additional properties, references and dependencies\n * resolved. Multiple schemas may be returned if `expandAllBranches` is true.\n */\nexport function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs, preserveDependencies = false) {\n if (!isObject(schema)) {\n return [{}];\n }\n const resolvedSchemas = resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs, preserveDependencies);\n return resolvedSchemas.flatMap((s) => {\n let resolvedSchema = s;\n if (IF_KEY in resolvedSchema) {\n return resolveCondition(validator, resolvedSchema, rootSchema, expandAllBranches, recurseList, rawFormData, experimental_customMergeAllOf, preserveDependencies);\n }\n if (ALL_OF_KEY in resolvedSchema) {\n // resolve allOf schemas\n if (expandAllBranches) {\n const { allOf, ...restOfSchema } = resolvedSchema;\n return [...allOf, restOfSchema];\n }\n try {\n resolvedSchema = experimental_customMergeAllOf\n ? experimental_customMergeAllOf(resolvedSchema)\n : mergeAllOf(resolvedSchema);\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.warn('could not merge subschemas in allOf:\\n', e);\n const { allOf, ...resolvedSchemaWithoutAllOf } = resolvedSchema;\n return resolvedSchemaWithoutAllOf;\n }\n }\n if (PROPERTIES_KEY in resolvedSchema && PATTERN_PROPERTIES_KEY in resolvedSchema) {\n resolvedSchema = Object.keys(resolvedSchema.properties).reduce((acc, key) => {\n const matchingProperties = getMatchingPatternProperties(acc, key);\n if (Object.keys(matchingProperties).length > 0) {\n [acc.properties[key]] = retrieveSchemaInternal(validator, { allOf: [acc.properties[key], ...Object.values(matchingProperties)] }, rootSchema, getByPath(rawFormData, key), undefined, undefined, experimental_customMergeAllOf, undefined, preserveDependencies);\n }\n return acc;\n }, {\n ...resolvedSchema,\n properties: { ...resolvedSchema.properties },\n });\n }\n const hasAdditionalProperties = PATTERN_PROPERTIES_KEY in resolvedSchema ||\n (ADDITIONAL_PROPERTIES_KEY in resolvedSchema && resolvedSchema.additionalProperties !== false);\n if (hasAdditionalProperties) {\n return stubExistingAdditionalProperties(validator, resolvedSchema, rootSchema, rawFormData, experimental_customMergeAllOf);\n }\n return resolvedSchema;\n });\n}\n/** Resolves an `anyOf` or `oneOf` within a schema (if present) to the list of schemas returned from\n * `retrieveSchemaInternal()` for the best matching option. If `expandAllBranches` is true, then a list of schemas for ALL\n * options are retrieved and returned.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which retrieving a schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema, defaults to an empty object\n * @returns - Either an array containing the best matching option or all options if `expandAllBranches` is true\n */\nexport function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranches, rawFormData) {\n let anyOrOneOf;\n const { oneOf, anyOf, ...remaining } = schema;\n if (Array.isArray(oneOf)) {\n anyOrOneOf = oneOf;\n }\n else if (Array.isArray(anyOf)) {\n anyOrOneOf = anyOf;\n }\n if (anyOrOneOf) {\n // Ensure that during expand all branches we pass an object rather than undefined so that all options are interrogated\n const formData = rawFormData === undefined && expandAllBranches ? {} : rawFormData;\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n anyOrOneOf = anyOrOneOf.map((s) => resolveAllReferences(s, rootSchema, []));\n // Call this to trigger the set of isValid() calls that the schema parser will need\n const option = getFirstMatchingOption(validator, formData, anyOrOneOf, rootSchema, discriminator);\n if (expandAllBranches) {\n // Also trigger isValid() for the relaxed variants so that precompiled validators capture their hashes.\n // omitExtraData's handleOneOf relaxes additionalProperties:false → true before scoring; those mutated\n // schemas must be present in a precompiled validator's compiled set or isValid() will throw at runtime.\n // Using getFirstMatchingOption (rather than calling isValid directly) ensures that the augmented forms\n // of each option (as constructed internally by getFirstMatchingOption for options with properties) are\n // also captured. The return value is discarded — the call is purely for ParserValidator's side effect.\n const relaxed = relaxOptionsForScoring(anyOrOneOf, false, rootSchema);\n getFirstMatchingOption(validator, formData, relaxed, rootSchema, discriminator);\n return anyOrOneOf.map((item) => mergeSchemas(remaining, item));\n }\n return [mergeSchemas(remaining, anyOrOneOf[option])];\n }\n return [schema];\n}\n/** Normalises a list of `oneOf`/`anyOf` options for use in option-scoring only (not for filtering).\n * Boolean schemas are converted to their object equivalents (`true` → `{}`, `false` → `{not:{}}`).\n * When `resolveRefs` is `true`, each object option is first passed through `resolveAllReferences`\n * so that `$ref`-based options expose their `additionalProperties` constraint before relaxation.\n * Any option whose `additionalProperties` is `false` is widened to `true` so that\n * `getClosestMatchingOption` / `validator.isValid()` does not produce false negatives when the\n * form data contains keys not listed in `properties`.\n *\n * @param options - The raw `oneOf`/`anyOf` array, which may contain boolean schemas\n * @param [resolveRefs=false] - When `true`, resolve `$ref`s in each option before relaxing; pass\n * `rootSchema` as well. Set `false` (default) when refs are already resolved at the call site.\n * @param [rootSchema] - Required when `resolveRefs` is `true`; the root schema used to look up `$ref`s\n * @returns - A new array of plain schema objects with `additionalProperties` relaxed where needed\n */\nexport function relaxOptionsForScoring(options, resolveRefs = false, rootSchema) {\n return options.map((d) => {\n if (!isObject(d)) {\n return normalizeBooleanSchema(d);\n }\n const schema = resolveRefs && rootSchema ? resolveAllReferences(d, rootSchema, []) : d;\n return schema.additionalProperties === false ? { ...schema, additionalProperties: true } : schema;\n });\n}\n/** Resolves dependencies within a schema and its 'anyOf/oneOf' children. Passes the `expandAllBranches` flag down to\n * the `resolveAnyOrOneOfSchema()` and `processDependencies()` helper calls.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a dependency is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The list of schemas with their dependencies resolved\n */\nexport function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n // Drop the dependencies from the source schema.\n const { dependencies, ...remainingSchema } = schema;\n const resolvedSchemas = resolveAnyOrOneOfSchemas(validator, remainingSchema, rootSchema, expandAllBranches, formData);\n return resolvedSchemas.flatMap((resolvedSchema) => processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf));\n}\n/** Processes all the `dependencies` recursively into the list of `resolvedSchema`s as needed. Passes the\n * `expandAllBranches` flag down to the `withDependentSchema()` and the recursive `processDependencies()` helper calls.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param dependencies - The set of dependencies that needs to be processed\n * @param resolvedSchema - The schema for which processing dependencies is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The schema with the `dependencies` resolved into it\n */\nexport function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n let schemas = [resolvedSchema];\n // Process dependencies updating the local schema properties as appropriate.\n for (const dependencyKey in dependencies) {\n if ((expandAllBranches || getByPath(formData, dependencyKey) !== undefined) &&\n (!resolvedSchema.properties || dependencyKey in resolvedSchema.properties)) {\n const [remainingDependencies, dependencyValue] = splitKeyElementFromObject(dependencyKey, dependencies);\n if (Array.isArray(dependencyValue)) {\n schemas[0] = withDependentProperties(resolvedSchema, dependencyValue);\n }\n else if (isObject(dependencyValue)) {\n schemas = withDependentSchema(validator, resolvedSchema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf);\n }\n return schemas.flatMap((schema) => processDependencies(validator, remainingDependencies, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf));\n }\n }\n return schemas;\n}\n/** Updates a schema with additionally required properties added\n *\n * @param schema - The schema for which resolving a dependent properties is desired\n * @param [additionallyRequired] - An optional array of additionally required names\n * @returns - The schema with the additional required values merged in\n */\nexport function withDependentProperties(schema, additionallyRequired) {\n if (!additionallyRequired) {\n return schema;\n }\n const required = Array.isArray(schema.required)\n ? Array.from(new Set([...schema.required, ...additionallyRequired]))\n : additionallyRequired;\n return { ...schema, required };\n}\n/** Merges a dependent schema into the `schema` dealing with oneOfs and references. Passes the `expandAllBranches` flag\n * down to the `retrieveSchemaInternal()`, `resolveReference()` and `withExactlyOneSubschema()` helper calls.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param schema - The schema for which resolving a dependent schema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param dependencyKey - The key name of the dependency\n * @param dependencyValue - The potentially dependent schema\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData]- The current formData to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The list of schemas with the dependent schema resolved into them\n */\nexport function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n const dependentSchemas = retrieveSchemaInternal(validator, dependencyValue, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf);\n return dependentSchemas.flatMap((dependent) => {\n const { oneOf, ...dependentSchema } = dependent;\n const mergedSchema = mergeSchemas(schema, dependentSchema);\n // Since it does not contain oneOf, we return the original schema.\n if (oneOf === undefined) {\n return mergedSchema;\n }\n // Resolve $refs inside oneOf.\n const resolvedOneOfs = oneOf.map((subschema) => {\n if (typeof subschema === 'boolean' || !(REF_KEY in subschema)) {\n return [subschema];\n }\n return resolveReference(validator, subschema, rootSchema, expandAllBranches, recurseList, formData);\n });\n const allPermutations = getAllPermutationsOfXxxOf(resolvedOneOfs);\n return allPermutations.flatMap((resolvedOneOf) => withExactlyOneSubschema(validator, mergedSchema, rootSchema, dependencyKey, resolvedOneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf));\n });\n}\n/** Returns a list of `schema`s with the best choice from the `oneOf` options merged into it. If `expandAllBranches` is\n * true, then a list of schemas for ALL options are retrieved and returned. Passes the `expandAllBranches` flag down to\n * the `retrieveSchemaInternal()` helper call.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used to validate oneOf options\n * @param schema - The schema for which resolving a oneOf subschema is desired\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param dependencyKey - The key name of the oneOf dependency\n * @param oneOf - The list of schemas representing the oneOf options\n * @param expandAllBranches - Flag, if true, will return all possible branches of conditions, any/oneOf and dependencies\n * as a list of schemas\n * @param recurseList - The list of recursive references already processed\n * @param [formData] - The current formData to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - Either an array containing the best matching option or all options if `expandAllBranches` is true\n */\nexport function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {\n const validSubschemas = oneOf.filter((subschema) => {\n if (typeof subschema === 'boolean' || !subschema?.properties) {\n return false;\n }\n const { [dependencyKey]: conditionPropertySchema } = subschema.properties;\n if (conditionPropertySchema) {\n const conditionSchema = {\n type: 'object',\n properties: {\n [dependencyKey]: conditionPropertySchema,\n },\n };\n return validator.isValid(conditionSchema, formData, rootSchema) || expandAllBranches;\n }\n return false;\n });\n if (!expandAllBranches && validSubschemas.length !== 1) {\n // oxlint-disable-next-line no-console\n console.warn(\"ignoring oneOf in dependencies because there isn't exactly one subschema that is valid\");\n return [schema];\n }\n return validSubschemas.flatMap((s) => {\n const subschema = s;\n const [dependentSubschema] = splitKeyElementFromObject(dependencyKey, subschema.properties);\n const dependentSchema = { ...subschema, properties: dependentSubschema };\n const schemas = retrieveSchemaInternal(validator, dependentSchema, rootSchema, formData, expandAllBranches, recurseList, experimental_customMergeAllOf);\n return schemas.map((resolvedSubschema) => mergeSchemas(schema, resolvedSubschema));\n });\n}\n//# sourceMappingURL=retrieveSchema.js.map","import { CONST_KEY, DEFAULT_KEY, PROPERTIES_KEY } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport { getByPath } from \"../pathUtils.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Finds the option inside the `schema['any/oneOf']` list which has the `properties[selectorField].default` or\n * `properties[selectorField].const` that matches the `formData[selectorField]` value. For the purposes of this\n * function, `selectorField` is either `schema.discriminator.propertyName` or `fallbackField`. The `LayoutGridField`\n * works directly with schemas in a recursive manner, making this faster than `getFirstMatchingOption()`.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param schema - The schema element in which to search for the selected anyOf/oneOf option\n * @param fallbackField - The field to use as a backup selector field if the schema does not have a required field\n * @param xxx - Either `anyOf` or `oneOf`, defines which value is being sought\n * @param [formData={}] - The form data that is used to determine which anyOf/oneOf option to descend\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The anyOf/oneOf option that matches the selector field in the schema or undefined if nothing is selected\n */\nexport default function findSelectedOptionInXxxOf(validator, rootSchema, schema, fallbackField, xxx, formData = {}, experimental_customMergeAllOf) {\n if (Array.isArray(schema[xxx])) {\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const selectorField = discriminator || fallbackField;\n const xxxOfs = schema[xxx].map((xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf));\n const data = getByPath(formData, selectorField);\n if (data !== undefined) {\n return xxxOfs.find((xxxOfOption) => deepEquals(getByPath(xxxOfOption, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], getByPath(xxxOfOption, [PROPERTIES_KEY, selectorField, CONST_KEY])), data));\n }\n }\n return undefined;\n}\n//# sourceMappingURL=findSelectedOptionInXxxOf.js.map","import { REF_KEY } from \"../constants.js\";\nimport { getByPath, hasByPath, toPath } from \"../pathUtils.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Internal helper function that acts like `getByPath` but additionally retrieves `$ref`s as needed to get the path\n * for schemas containing potentially nested `$ref`s.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param schema - The current node within the JSON schema recursion\n * @param path - The remaining keys in the path to the desired property\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The internal schema from the `schema` for the given `path` or undefined if not found\n */\nfunction getFromSchemaInternal(validator, rootSchema, schema, path, experimental_customMergeAllOf) {\n let fieldSchema = schema;\n // hasByPath instead of `in` because `schema` can be undefined at runtime when drilling past a non-matching xxxOf\n if (hasByPath(schema, REF_KEY)) {\n fieldSchema = retrieveSchema(validator, schema, rootSchema, undefined, experimental_customMergeAllOf);\n }\n if (path.length === 0) {\n return fieldSchema;\n }\n const pathList = Array.isArray(path) ? [...path] : toPath(path);\n const [part, ...nestedPath] = pathList;\n if (part !== undefined && part !== '' && hasByPath(fieldSchema, part)) {\n fieldSchema = getByPath(fieldSchema, part);\n return getFromSchemaInternal(validator, rootSchema, fieldSchema, nestedPath, experimental_customMergeAllOf);\n }\n return undefined;\n}\nexport default function getFromSchema(validator, rootSchema, schema, path, defaultValue, experimental_customMergeAllOf) {\n const result = getFromSchemaInternal(validator, rootSchema, schema, path, experimental_customMergeAllOf);\n if (result === undefined) {\n return defaultValue;\n }\n return result;\n}\n//# sourceMappingURL=getFromSchema.js.map","import { ANY_OF_KEY, ONE_OF_KEY, PROPERTIES_KEY, REQUIRED_KEY } from \"../constants.js\";\nimport { getByPath, hasByPath } from \"../pathUtils.js\";\nimport findSelectedOptionInXxxOf from \"./findSelectedOptionInXxxOf.js\";\nimport getFromSchema from \"./getFromSchema.js\";\n/** Unique schema that represents no schema was found, exported for testing purposes */\nexport const NOT_FOUND_SCHEMA = { title: '!@#$_UNKNOWN_$#@!' };\n/** Finds the field specified by the `path` within the root or recursed `schema`. If there is no field for the specified\n * `path`, then the default `{ field: undefined, isRequired: undefined }` is returned. It determines whether a leaf\n * field is in the `required` list for its parent and if so, it is marked as required on return.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param schema - The node within the JSON schema in which to search\n * @param path - The keys in the path to the desired field\n * @param [formData={}] - The form data that is used to determine which anyOf/oneOf option to descend\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - An object that contains the field and its required state. If no field can be found then\n * `{ field: undefined, isRequired: undefined }` is returned.\n */\nexport default function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, experimental_customMergeAllOf) {\n const pathList = Array.isArray(path) ? [...path] : path.split('.');\n let parentField = schema;\n // store the desired field into a variable and removing it from the `pathList`\n const fieldName = pathList.pop();\n const fieldNameKey = String(fieldName);\n if (pathList.length) {\n // drilling into the schema for each sub-path and taking into account of the any/oneOfs\n pathList.forEach((subPath) => {\n parentField = getFromSchema(validator, rootSchema, parentField, [PROPERTIES_KEY, subPath], {}, experimental_customMergeAllOf);\n if (hasByPath(parentField, ONE_OF_KEY)) {\n // if this sub-path has a `oneOf` then use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ONE_OF_KEY, getByPath(formData, subPath), experimental_customMergeAllOf);\n }\n else if (hasByPath(parentField, ANY_OF_KEY)) {\n // if this sub-path has a `anyOf` then use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ANY_OF_KEY, getByPath(formData, subPath), experimental_customMergeAllOf);\n }\n });\n }\n if (hasByPath(parentField, ONE_OF_KEY)) {\n // When oneOf is in the root schema, use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ONE_OF_KEY, formData, experimental_customMergeAllOf);\n }\n else if (hasByPath(parentField, ANY_OF_KEY)) {\n // When anyOf is in the root schema, use the formData to drill into the schema with the selected option\n parentField = findSelectedOptionInXxxOf(validator, rootSchema, parentField, fieldNameKey, ANY_OF_KEY, formData, experimental_customMergeAllOf);\n }\n // taking the most updated `parentField`, get our desired field\n let field = getFromSchema(validator, rootSchema, parentField, [PROPERTIES_KEY, fieldName], NOT_FOUND_SCHEMA, experimental_customMergeAllOf);\n if (field === NOT_FOUND_SCHEMA) {\n field = undefined;\n }\n // check to see if our desired field is in the `required` list for its parent\n const requiredArray = getFromSchema(validator, rootSchema, parentField, REQUIRED_KEY, [], experimental_customMergeAllOf);\n let isRequired;\n if (field && Array.isArray(requiredArray)) {\n isRequired = requiredArray.includes(fieldNameKey);\n }\n return { field, isRequired };\n}\n//# sourceMappingURL=findFieldInSchema.js.map","import { ONE_OF_KEY, REF_KEY, JUNK_OPTION_ID, ANY_OF_KEY } from \"../constants.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getOptionMatchingSimpleDiscriminator from \"../getOptionMatchingSimpleDiscriminator.js\";\nimport guessType from \"../guessType.js\";\nimport isObject from \"../isObject.js\";\nimport { getByPath, hasByPath } from \"../pathUtils.js\";\nimport getFirstMatchingOption from \"./getFirstMatchingOption.js\";\nimport retrieveSchema, { resolveAllReferences } from \"./retrieveSchema.js\";\n/** A junk option used to determine when the getFirstMatchingOption call really matches an option rather than returning\n * the first item\n */\nexport const JUNK_OPTION = {\n type: 'object',\n $id: JUNK_OPTION_ID,\n properties: {\n __not_really_there__: {\n type: 'number',\n },\n },\n};\n/** Recursive function that calculates the score of a `formData` against the given `schema`. The computation is fairly\n * simple. Initially the total score is 0. When `schema.properties` object exists, then all the `key/value` pairs within\n * the object are processed as follows after obtaining the formValue from `formData` using the `key`:\n * - If the `value` contains a `$ref`, `calculateIndexScore()` is called recursively with the formValue and the new\n * schema that is the result of the ref in the schema being resolved and that sub-schema's resulting score is added to\n * the total.\n * - If the `value` contains a `oneOf` and there is a formValue, then score based on the index returned from calling\n * `getClosestMatchingOption()` of that oneOf.\n * - If the type of the `value` is 'object', `calculateIndexScore()` is called recursively with the formValue and the\n * `value` itself as the sub-schema, and the score is added to the total.\n * - If the type of the `value` matches the guessed-type of the `formValue`, the score is incremented by 1, UNLESS the\n * value has a `default` or `const`. In those case, if the `default` or `const` and the `formValue` match, the score\n * is incremented by another 1 otherwise it is decremented by 1.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param rootSchema - The root JSON schema of the entire form\n * @param schema - The schema for which the score is being calculated\n * @param formData - The form data associated with the schema, used to calculate the score\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The score a schema against the formData\n */\nexport function calculateIndexScore(validator, rootSchema, schema, formData, experimental_customMergeAllOf) {\n let totalScore = 0;\n if (schema) {\n if (isObject(schema.properties)) {\n totalScore += Object.entries(schema.properties).reduce((score, [key, value]) => {\n const formValue = formData?.[key];\n if (typeof value === 'boolean') {\n return score;\n }\n if (hasByPath(value, REF_KEY)) {\n const newSchema = retrieveSchema(validator, value, rootSchema, formValue, experimental_customMergeAllOf);\n return (score +\n calculateIndexScore(validator, rootSchema, newSchema, formValue || {}, experimental_customMergeAllOf));\n }\n if ((hasByPath(value, ONE_OF_KEY) || hasByPath(value, ANY_OF_KEY)) && formValue) {\n const xxxOfKey = hasByPath(value, ONE_OF_KEY) ? ONE_OF_KEY : ANY_OF_KEY;\n const discriminator = getDiscriminatorFieldFromSchema(value);\n return (score +\n getClosestMatchingOption(validator, rootSchema, formValue, getByPath(value, xxxOfKey), -1, discriminator, experimental_customMergeAllOf));\n }\n if (value.type === 'object') {\n // If the structure is matching then give it a little boost in score\n const structureBoost = typeof formValue === 'object' && formValue !== null ? 1 : 0;\n return (score +\n structureBoost +\n calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf));\n }\n if (value.type === guessType(formValue)) {\n // If the types match, then we bump the score by one\n let newScore = score + 1;\n if (value.default) {\n // If the schema contains a readonly default value score the value that matches the default higher and\n // any non-matching value lower\n newScore += formValue === value.default ? 1 : -1;\n }\n else if (value.const) {\n // If the schema contains a const value score the value that matches the default higher and\n // any non-matching value lower\n newScore += formValue === value.const ? 1 : -1;\n }\n // TODO eventually, deal with enums/arrays\n return newScore;\n }\n return score;\n }, 0);\n }\n else if (typeof schema.type === 'string' && schema.type === guessType(formData)) {\n totalScore += 1;\n }\n }\n return totalScore;\n}\n/** Determines which of the given `options` provided most closely matches the `formData`. Using\n * `getFirstMatchingOption()` to match two schemas that differ only by the readOnly, default or const value of a field\n * based on the `formData` and returns 0 when there is no match. Rather than passing in all the `options` at once to\n * this utility, instead an array of valid option indexes is created by iterating over the list of options, call\n * `getFirstMatchingOptions` with a list of one junk option and one good option, seeing if the good option is considered\n * matched.\n *\n * Once the list of valid indexes is created, if there is only one valid index, just return it. Otherwise, if there are\n * no valid indexes, then fill the valid indexes array with the indexes of all the options. Next, the index of the\n * option with the highest score is determined by iterating over the list of valid options, calling\n * `calculateIndexScore()` on each, comparing it against the current best score, and returning the index of the one that\n * eventually has the best score.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param rootSchema - The root JSON schema of the entire form\n * @param formData - The form data associated with the schema\n * @param options - The list of options that can be selected from\n * @param [selectedOption=-1] - The index of the currently selected option, defaulted to -1 if not specified\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The index of the option that is the closest match to the `formData` or the `selectedOption` if no match\n */\nexport default function getClosestMatchingOption(validator, rootSchema, formData, options, selectedOption = -1, discriminatorField, experimental_customMergeAllOf) {\n // First resolve any refs in the options\n const resolvedOptions = options.map((option) => resolveAllReferences(option, rootSchema, []));\n const simpleDiscriminatorMatch = getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField);\n if (typeof simpleDiscriminatorMatch === 'number') {\n return simpleDiscriminatorMatch;\n }\n // Reduce the array of options down to a list of the indexes that are considered matching options\n const allValidIndexes = resolvedOptions.reduce((validList, option, index) => {\n const testOptions = [JUNK_OPTION, option];\n const match = getFirstMatchingOption(validator, formData, testOptions, rootSchema, discriminatorField);\n // The match is the real option, so add its index to list of valid indexes\n if (match === 1) {\n validList.push(index);\n }\n return validList;\n }, []);\n // There is only one valid index, so return it!\n if (allValidIndexes.length === 1) {\n return allValidIndexes[0];\n }\n if (!allValidIndexes.length) {\n // No indexes were valid, so we'll score all the options, add all the indexes\n allValidIndexes.push(...resolvedOptions.keys());\n }\n const scoreCount = new Set();\n // Score all the options in the list of valid indexes and return the index with the best score\n const { bestIndex } = allValidIndexes.reduce((scoreData, index) => {\n const { bestScore } = scoreData;\n const option = resolvedOptions[index];\n const score = calculateIndexScore(validator, rootSchema, option, formData, experimental_customMergeAllOf);\n scoreCount.add(score);\n if (score > bestScore) {\n return { bestIndex: index, bestScore: score };\n }\n return scoreData;\n }, { bestIndex: selectedOption, bestScore: 0 });\n // if all scores are the same go with selectedOption\n if (scoreCount.size === 1 && selectedOption >= 0) {\n return selectedOption;\n }\n return bestIndex;\n}\n//# sourceMappingURL=getClosestMatchingOption.js.map","import { CONST_KEY, getSchemaType, isObject } from \"./index.js\";\n/**\n * Checks if the schema const property value is an AJV $data reference\n * and the current schema is not an object or array\n *\n * @param schema - The schema to check if the const is an AJV $data reference\n * @returns - true if the schema const property value is an AJV $data reference otherwise false.\n */\nexport default function constIsAjvDataReference(schema) {\n const schemaConst = schema[CONST_KEY];\n const schemaType = getSchemaType(schema);\n return (isObject(schemaConst) && typeof schemaConst?.$data === 'string' && schemaType !== 'object' && schemaType !== 'array');\n}\n//# sourceMappingURL=constIsAjvDataReference.js.map","import { CONST_KEY } from \"./constants.js\";\n/** This function checks if the given `schema` matches a single constant value. This happens when either the schema has\n * an `enum` array with a single value or there is a `const` defined.\n *\n * @param schema - The schema for a field\n * @returns - True if the `schema` has a single constant value, false otherwise\n */\nexport default function isConstant(schema) {\n return (Array.isArray(schema.enum) && schema.enum.length === 1) || CONST_KEY in schema;\n}\n//# sourceMappingURL=isConstant.js.map","import isObject from \"./isObject.js\";\n/** Detects whether the given `schema` contains fixed items. This is the case when `schema.items` is an array that only\n * contains objects.\n *\n * @param schema - The schema in which to check for fixed items\n * @returns - True if there are fixed items in the schema, false otherwise\n */\nexport default function isFixedItems(schema) {\n return Array.isArray(schema.items) && schema.items.every((item) => isObject(item));\n}\n//# sourceMappingURL=isFixedItems.js.map","import isObject from \"./isObject.js\";\n/** Merges the `defaults` object of type `T` into the `formData` of type `T`\n *\n * When merging defaults and form data, we want to merge in this specific way:\n * - objects are deeply merged\n * - arrays are merged in such a way that:\n * - when the array is set in form data, only array entries set in form data\n * are deeply merged; additional entries from the defaults are ignored unless `mergeExtraArrayDefaults` is true, in\n * which case the extras are appended onto the end of the form data\n * - when the array is not set in form data, the default is copied over\n * - scalars are overwritten/set by form data unless undefined and there is a default AND `defaultSupercedesUndefined`\n * is true\n *\n * @param [defaults] - The defaults to merge\n * @param [formData] - The form data into which the defaults will be merged\n * @param [mergeExtraArrayDefaults=false] - If true, any additional default array entries are appended onto the formData\n * @param [defaultSupercedesUndefined=false] - If true, an explicit undefined value will be overwritten by the default value\n * @param [overrideFormDataWithDefaults=false] - If true, the default value will overwrite the form data value. If the value\n * doesn't exist in the default, we take it from formData and in the case where the value is set to undefined in formData.\n * This is useful when we have already merged formData with defaults and want to add an additional field from formData\n * that does not exist in defaults.\n * @returns - The resulting merged form data with defaults\n */\nexport default function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false, overrideFormDataWithDefaults = false) {\n if (Array.isArray(formData)) {\n const defaultsArray = Array.isArray(defaults) ? defaults : [];\n // If overrideFormDataWithDefaults is true, we want to override the formData with the defaults\n const overrideArray = overrideFormDataWithDefaults ? defaultsArray : formData;\n const overrideOppositeArray = overrideFormDataWithDefaults ? formData : defaultsArray;\n const mapped = overrideArray.map((value, idx) => {\n // We want to explicitly make sure that the value is NOT undefined since null, 0 and empty space are valid values\n if (overrideOppositeArray[idx] !== undefined) {\n return mergeDefaultsWithFormData(defaultsArray[idx], formData[idx], mergeExtraArrayDefaults, defaultSupercedesUndefined, overrideFormDataWithDefaults);\n }\n return value;\n });\n // Merge any extra defaults when mergeExtraArrayDefaults is true\n // Or when overrideFormDataWithDefaults is true and the default array is shorter than the formData array\n if ((mergeExtraArrayDefaults || overrideFormDataWithDefaults) && mapped.length < overrideOppositeArray.length) {\n mapped.push(...overrideOppositeArray.slice(mapped.length));\n }\n return mapped;\n }\n if (isObject(formData)) {\n // oxlint-disable-next-line prefer-object-spread -- spread loses T type, Object.assign preserves it\n const acc = Object.assign({}, defaults); // Prevent mutation of source object.\n const formDataObj = formData;\n const defaultsObj = isObject(defaults) ? defaults : undefined;\n return Object.keys(formDataObj).reduce((accumulator, key) => {\n const keyValue = formDataObj[key];\n const keyExistsInDefaults = defaultsObj !== undefined && key in defaultsObj;\n const keyExistsInFormData = key in formDataObj;\n const keyDefault = defaultsObj?.[key] ?? {};\n // If any direct child of this key's default is itself an object or array,\n // the shallow spread below would bypass its merge rules. Route those cases\n // to the recursive path; the recursive call repeats this check one level deeper.\n const defaultValueNeedsDeepMerge = keyExistsInDefaults &&\n isObject(keyDefault) &&\n Object.values(keyDefault).some((v) => isObject(v) || Array.isArray(v));\n const keyDefaultIsObject = keyExistsInDefaults && isObject(defaultsObj?.[key]);\n const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);\n if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueNeedsDeepMerge) {\n accumulator[key] = {\n ...defaultsObj?.[key],\n ...keyValue,\n };\n return accumulator;\n }\n accumulator[key] = mergeDefaultsWithFormData(defaultsObj?.[key], keyValue, mergeExtraArrayDefaults, defaultSupercedesUndefined, \n // overrideFormDataWithDefaults can be true only when the key value exists in defaults\n // Or if the key value doesn't exist in formData\n overrideFormDataWithDefaults && (keyExistsInDefaults || !keyExistsInFormData));\n return acc;\n }, acc);\n }\n /**\n * If the defaultSupercedesUndefined flag is true\n * And formData is set to undefined or null and defaults are defined\n * Or if formData is a number and is NaN return defaults\n * Or if overrideFormDataWithDefaults flag is true and formData is set to not undefined/null return defaults\n */\n if ((defaultSupercedesUndefined &&\n ((!(defaults === undefined) && formData == null) || (typeof formData === 'number' && Number.isNaN(formData)))) ||\n (overrideFormDataWithDefaults && formData != null)) {\n return defaults;\n }\n return formData;\n}\n//# sourceMappingURL=mergeDefaultsWithFormData.js.map","import isObject from \"./isObject.js\";\n/** Recursively merge deeply nested objects.\n *\n * @param obj1 - The first object to merge\n * @param obj2 - The second object to merge\n * @param [concatArrays=false] - Optional flag that, when true, will cause arrays to be concatenated. Use\n * \"preventDuplicates\" to merge arrays in a manner that prevents any duplicate entries from being merged.\n * NOTE: Uses shallow comparison for the duplicate checking.\n * @returns - A new object that is the merge of the two given objects\n */\nexport default function mergeObjects(obj1, obj2, concatArrays = false) {\n return Object.keys(obj2).reduce((acc, key) => {\n const left = obj1 ? obj1[key] : {}, right = obj2[key];\n if (obj1 && key in obj1 && isObject(right)) {\n acc[key] = mergeObjects(left, right, concatArrays);\n }\n else if (concatArrays && Array.isArray(left) && Array.isArray(right)) {\n let toMerge = right;\n if (concatArrays === 'preventDuplicates') {\n toMerge = right.reduce((result, value) => {\n if (!left.includes(value)) {\n result.push(value);\n }\n return result;\n }, []);\n }\n acc[key] = left.concat(toMerge);\n }\n else {\n acc[key] = right;\n }\n return acc;\n }, { ...obj1 }); // Prevent mutation of source object.\n}\n//# sourceMappingURL=mergeObjects.js.map","import { CONST_KEY, ENUM_KEY } from \"./constants.js\";\n/** Returns the constant value from the schema when it is either a single value enum or has a const key. Otherwise\n * throws an error.\n *\n * @param schema - The schema from which to obtain the constant value\n * @returns - The constant value for the schema\n * @throws - Error when the schema does not have a constant value\n */\nexport default function toConstant(schema) {\n if (ENUM_KEY in schema && Array.isArray(schema.enum) && schema.enum.length === 1) {\n return schema.enum[0];\n }\n if (CONST_KEY in schema) {\n return schema.const;\n }\n throw new Error('schema cannot be inferred as a constant');\n}\n//# sourceMappingURL=toConstant.js.map","import { CONST_KEY, DEFAULT_KEY } from \"./constants.js\";\nimport getDiscriminatorFieldFromSchema from \"./getDiscriminatorFieldFromSchema.js\";\nimport getPropertySchema from \"./getPropertySchema.js\";\nimport getUiOptions from \"./getUiOptions.js\";\nimport { getByPath } from \"./pathUtils.js\";\nimport toConstant from \"./toConstant.js\";\n/** Reorders `options` according to `order`, which may contain a `'*'` wildcard representing all\n * remaining options in their original order. Options not listed in `order` (and not covered by\n * a wildcard) are dropped.\n */\nfunction applyEnumOrder(options, order) {\n const optionsByValue = new Map(options.map((opt) => [String(opt.value), opt]));\n const orderedKeys = new Set(order.filter((v) => v !== '*').map(String));\n const rest = options.filter((opt) => !orderedKeys.has(String(opt.value)));\n return order.flatMap((entry) => {\n if (entry === '*') {\n return rest;\n }\n const opt = optionsByValue.get(String(entry));\n return opt ? [opt] : [];\n });\n}\n/** Gets the list of options from the `schema`. If the schema has an enum list, then those enum values are returned. The\n * label will be the same as the `value`.\n *\n * If the schema has a `oneOf` or `anyOf`, then the value is the list of either:\n * - The `const` values from the schema if present\n * - If the schema has a discriminator and the label using either the `schema.title` or the value. If a `uiSchema` is\n * provided, and it has the `ui:enumNames` matched with `enum` or it has an associated `oneOf` or `anyOf` with a list of\n * objects containing `ui:title` then the UI schema values will replace the values from the schema.\n *\n * @param schema - The schema from which to extract the options list\n * @param [uiSchema] - The optional uiSchema from which to get alternate labels for the options\n * @returns - The list of options from the schema\n */\nexport default function optionsList(schema, uiSchema) {\n if (schema.enum) {\n let enumNames;\n let enumOrder;\n if (uiSchema) {\n const { enumNames: uiEnumNames, enumOrder: uiEnumOrder } = getUiOptions(uiSchema);\n enumNames = uiEnumNames;\n enumOrder = uiEnumOrder;\n }\n let options = schema.enum.map((value, i) => {\n const label = Array.isArray(enumNames)\n ? enumNames[i] || String(value)\n : enumNames?.[String(value)] || String(value);\n return { label, value };\n });\n if (enumOrder) {\n options = applyEnumOrder(options, enumOrder);\n }\n return options;\n }\n let altSchemas = undefined;\n let altUiSchemas = undefined;\n if (schema.anyOf) {\n altSchemas = schema.anyOf;\n altUiSchemas = uiSchema?.anyOf;\n }\n else if (schema.oneOf) {\n altSchemas = schema.oneOf;\n altUiSchemas = uiSchema?.oneOf;\n }\n // See if there is a discriminator path specified in the schema, and if so, use it as the selectorField, otherwise\n // pull one from the uiSchema\n let selectorField = getDiscriminatorFieldFromSchema(schema);\n if (uiSchema) {\n const { optionsSchemaSelector = selectorField } = getUiOptions(uiSchema);\n selectorField = optionsSchemaSelector;\n }\n return altSchemas?.map((aSchemaDef, index) => {\n const { title } = getUiOptions(altUiSchemas?.[index]);\n const aSchema = aSchemaDef;\n let value;\n let label = title;\n if (selectorField) {\n const innerSchema = getPropertySchema(aSchema, selectorField);\n value = getByPath(innerSchema, DEFAULT_KEY, getByPath(innerSchema, CONST_KEY));\n // Use nullish coalescing so that an explicitly empty string title is preserved\n label = label ?? innerSchema?.title ?? aSchema.title ?? String(value);\n }\n else {\n value = toConstant(aSchema);\n label = label ?? aSchema.title ?? String(value);\n }\n return {\n schema: aSchema,\n label,\n value,\n };\n });\n}\n//# sourceMappingURL=optionsList.js.map","import isConstant from \"../isConstant.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Checks to see if the `schema` combination represents a select\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param theSchema - The schema for which check for a select flag is desired\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if schema contains a select, otherwise false\n */\nexport default function isSelect(validator, theSchema, rootSchema = {}, experimental_customMergeAllOf) {\n const schema = retrieveSchema(validator, theSchema, rootSchema, undefined, experimental_customMergeAllOf);\n const altSchemas = schema.oneOf || schema.anyOf;\n if (Array.isArray(schema.enum)) {\n return true;\n }\n if (Array.isArray(altSchemas)) {\n return altSchemas.every((altSchema) => typeof altSchema !== 'boolean' && isConstant(altSchema));\n }\n return false;\n}\n//# sourceMappingURL=isSelect.js.map","import isSelect from \"./isSelect.js\";\n/** Checks to see if the `schema` combination represents a multi-select\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which check for a multi-select flag is desired\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if schema contains a multi-select, otherwise false\n */\nexport default function isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) {\n if (!schema.uniqueItems || !schema.items || typeof schema.items === 'boolean') {\n return false;\n }\n return isSelect(validator, schema.items, rootSchema, experimental_customMergeAllOf);\n}\n//# sourceMappingURL=isMultiSelect.js.map","import { ALL_OF_KEY, ANY_OF_KEY, CONST_KEY, DEFAULT_KEY, DEPENDENCIES_KEY, IF_KEY, ONE_OF_KEY, REF_KEY, } from \"../constants.js\";\nimport constIsAjvDataReference from \"../constIsAjvDataReference.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport findSchemaDefinition from \"../findSchemaDefinition.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getPropertySchema from \"../getPropertySchema.js\";\nimport getSchemaType from \"../getSchemaType.js\";\nimport isConstant from \"../isConstant.js\";\nimport isFixedItems from \"../isFixedItems.js\";\nimport isObject from \"../isObject.js\";\nimport mergeDefaultsWithFormData from \"../mergeDefaultsWithFormData.js\";\nimport mergeObjects from \"../mergeObjects.js\";\nimport mergeSchemas from \"../mergeSchemas.js\";\nimport optionsList from \"../optionsList.js\";\nimport { getByPath } from \"../pathUtils.js\";\nimport getClosestMatchingOption from \"./getClosestMatchingOption.js\";\nimport isMultiSelect from \"./isMultiSelect.js\";\nimport isSelect from \"./isSelect.js\";\nimport retrieveSchema, { resolveDependencies, retrieveSchemaInternal } from \"./retrieveSchema.js\";\nconst PRIMITIVE_TYPES = ['string', 'number', 'integer', 'boolean', 'null'];\n/** Enum that indicates how `schema.additionalItems` should be handled by the `getInnerSchemaForArrayItem()` function.\n */\nexport var AdditionalItemsHandling;\n(function (AdditionalItemsHandling) {\n AdditionalItemsHandling[AdditionalItemsHandling[\"Ignore\"] = 0] = \"Ignore\";\n AdditionalItemsHandling[AdditionalItemsHandling[\"Invert\"] = 1] = \"Invert\";\n AdditionalItemsHandling[AdditionalItemsHandling[\"Fallback\"] = 2] = \"Fallback\";\n})(AdditionalItemsHandling || (AdditionalItemsHandling = {}));\n/** Determines whether a schema has an allOf key AND the experimental_defaultFormStateBehavior for all of is set\n * to `populateDefaults`.\n *\n * @params schema - The schema to check\n * @params defaultFormStateBehavior - The Experimental_DefaultFormStateBehavior to check\n * @returns - True if allOf defaults should be populated, false otherwise.\n */\nfunction shouldPopulateAllOfDefaults(schema, defaultFormStateBehavior) {\n return Boolean(defaultFormStateBehavior?.allOf === 'populateDefaults' && ALL_OF_KEY in schema);\n}\n/** Given a `schema` will return an inner schema that for an array item. This is computed differently based on the\n * `additionalItems` enum and the value of `idx`. There are four possible returns:\n * 1. If `idx` is >= 0, then if `schema.items` is an array the `idx`th element of the array is returned if it is a valid\n * index and not a boolean, otherwise it falls through to 3.\n * 2. If `schema.items` is not an array AND truthy and not a boolean, then `schema.items` is returned since it actually\n * is a schema, otherwise it falls through to 3.\n * 3. If `additionalItems` is not `AdditionalItemsHandling.Ignore` and `schema.additionalItems` is an object, then\n * `schema.additionalItems` is returned since it actually is a schema, otherwise it falls through to 4.\n * 4. {} is returned representing an empty schema\n *\n * @param schema - The schema from which to get the particular item\n * @param [additionalItems=AdditionalItemsHandling.Ignore] - How do we want to handle additional items?\n * @param [idx=-1] - Index, if non-negative, will be used to return the idx-th element in a `schema.items` array\n * @returns - The best fit schema object from the `schema` given the `additionalItems` and `idx` modifiers\n */\nexport function getInnerSchemaForArrayItem(schema, additionalItems = AdditionalItemsHandling.Ignore, idx = -1) {\n if (idx >= 0) {\n if (Array.isArray(schema.items) && idx < schema.items.length) {\n const item = schema.items[idx];\n if (typeof item !== 'boolean') {\n return item;\n }\n }\n }\n else if (schema.items && !Array.isArray(schema.items) && typeof schema.items !== 'boolean') {\n return schema.items;\n }\n if (additionalItems !== AdditionalItemsHandling.Ignore && isObject(schema.additionalItems)) {\n return schema.additionalItems;\n }\n return {};\n}\n/** Determines whether `value` holds anything: a non-empty string or array, or an object with at least one own key.\n * Everything else — including numbers, booleans, `null` and `undefined` — has no content.\n *\n * @param value - The value to inspect\n * @returns - True if the value holds content, otherwise false\n */\nfunction hasContent(value) {\n if (typeof value === 'string' || Array.isArray(value)) {\n return value.length > 0;\n }\n if (typeof value === 'object' && value !== null) {\n return Object.keys(value).length > 0;\n }\n return false;\n}\n/** Checks whether form data is undefined or an empty object.\n *\n * @param formData - The form data to inspect\n * @returns - True if there is no existing form data\n */\nfunction isEmptyFormData(formData) {\n return formData === undefined || (isObject(formData) && Object.keys(formData).length === 0);\n}\n/** Checks if the given `schema` contains the `null` type along with another type AND if the `default` contained within\n * the schema is `null` AND the `computedDefault` is empty. If all of those conditions are true, then the `schema`'s\n * default should be `null` rather than `computedDefault`.\n *\n * @param schema - The schema to inspect\n * @param computedDefault - The computed default for the schema\n * @returns - Flag indicating whether a null should be returned instead of the computedDefault\n */\nexport function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {\n const { default: schemaDefault, type } = schema;\n const shouldReturnNullAsDefault = Array.isArray(type) && type.includes('null') && !hasContent(computedDefault) && schemaDefault === null;\n return shouldReturnNullAsDefault ? null : computedDefault;\n}\n/** Either add `computedDefault` at `key` into `obj` or not add it based on its value, the value of\n * `includeUndefinedValues`, the value of `emptyObjectFields` and if its parent field is required. Generally undefined\n * `computedDefault` values are added only when `includeUndefinedValues` is either true/\"excludeObjectChildren\". If `\n * includeUndefinedValues` is false and `emptyObjectFields` is not \"skipDefaults\", then non-undefined and non-empty-object\n * values will be added based on certain conditions.\n *\n * @param acc - The object into which the computed default may be added\n * @param key - The key into the object at which the computed default may be added\n * @param computedDefault - The computed default value that maybe should be added to the obj\n * @param includeUndefinedValues - Optional flag, if true, cause undefined values to be added as defaults.\n * If \"excludeObjectChildren\", cause undefined values for this object and pass `includeUndefinedValues` as\n * false when computing defaults for any nested object properties. If \"allowEmptyObject\", prevents undefined\n * values in this object while allow the object itself to be empty and passing `includeUndefinedValues` as\n * false when computing defaults for any nested object properties.\n * @param isParentRequired - The optional boolean that indicates whether the parent field is required\n * @param requiredFields - The list of fields that are required\n * @param experimental_defaultFormStateBehavior - Optional configuration object, if provided, allows users to override\n * default form state behavior\n * @param isConst - Optional flag, if true, indicates that the schema has a const property defined, thus we should always return the computedDefault since it's coming from the const.\n * @param isNullType - The type of the schema is null\n */\nfunction maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false, isNullType = false) {\n const { emptyObjectFields = 'populateAllDefaults' } = experimental_defaultFormStateBehavior;\n if (includeUndefinedValues === true || isConst) {\n // If includeUndefinedValues is explicitly true\n // Or if the schema has a const property defined, then we should always return the computedDefault since it's coming from the const.\n acc[key] = computedDefault;\n }\n else if (includeUndefinedValues === 'excludeObjectChildren') {\n // Fix for Issue #4709: When in 'excludeObjectChildren' mode, don't set primitive fields to empty objects\n // Only add the computed default if it's not an empty object placeholder for a primitive field\n if ((isNullType && computedDefault !== undefined) ||\n !isObject(computedDefault) ||\n Object.keys(computedDefault).length > 0) {\n acc[key] = computedDefault;\n }\n // If computedDefault is an empty object {}, don't add it - let the field stay undefined\n }\n else if (emptyObjectFields !== 'skipDefaults') {\n // If isParentRequired is undefined, then we are at the root level of the schema so defer to the requiredness of\n // the field key itself in the `requiredField` list\n const isSelfOrParentRequired = isParentRequired === undefined ? requiredFields.includes(key) : isParentRequired;\n if (isObject(computedDefault)) {\n // If emptyObjectFields 'skipEmptyDefaults' store computedDefault if it's a non-empty object(e.g. not {})\n if (emptyObjectFields === 'skipEmptyDefaults') {\n if (Object.keys(computedDefault).length > 0) {\n acc[key] = computedDefault;\n }\n } // Else store computedDefault if it's a non-empty object(e.g. not {}) and satisfies certain conditions\n // Condition 1: If computedDefault is not empty or if the key is a required field\n // Condition 2: If the parent object is required or emptyObjectFields is not 'populateRequiredDefaults'\n else if ((Object.keys(computedDefault).length > 0 || requiredFields.includes(key)) &&\n (isSelfOrParentRequired || emptyObjectFields !== 'populateRequiredDefaults')) {\n acc[key] = computedDefault;\n }\n }\n else if (\n // Store computedDefault if it's a defined primitive (e.g., true) and satisfies certain conditions\n // Condition 1: computedDefault is not undefined\n // Condition 2: If emptyObjectFields is 'populateAllDefaults' or 'skipEmptyDefaults)\n // Or if isSelfOrParentRequired is 'true' and the key is a required field\n computedDefault !== undefined &&\n (emptyObjectFields === 'populateAllDefaults' ||\n emptyObjectFields === 'skipEmptyDefaults' ||\n (isSelfOrParentRequired && requiredFields.includes(key)))) {\n acc[key] = computedDefault;\n }\n }\n}\n/** Computes the defaults for the current `schema` given the `rawFormData` and `parentDefaults` if any. This drills into\n * each level of the schema, recursively, to fill out every level of defaults provided by the schema.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @returns - The resulting `formData` with all the defaults provided\n */\nexport function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {\n const { parentDefaults, rawFormData, rootSchema = {}, includeUndefinedValues = false, _recurseList = [], experimental_defaultFormStateBehavior, experimental_customMergeAllOf, required, shouldMergeDefaultsIntoFormData = false, initialDefaultsGenerated, } = computeDefaultsProps;\n let formData = (isObject(rawFormData) ? rawFormData : {});\n const schema = isObject(rawSchema) ? rawSchema : {};\n // Compute the defaults recursively: give highest priority to deepest nodes unless nestedDefaultsPrecedence is ancestorWins.\n let defaults = parentDefaults;\n const preferParentDefaults = defaults && experimental_defaultFormStateBehavior?.nestedDefaultsPrecedence === 'ancestorWins';\n // If we get a new schema, then we need to recompute defaults again for the new schema found.\n let schemaToCompute = null;\n let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;\n let updatedRecurseList = _recurseList;\n if (schema[CONST_KEY] !== undefined &&\n experimental_defaultFormStateBehavior?.constAsDefaults !== 'never' &&\n !constIsAjvDataReference(schema)) {\n defaults = schema[CONST_KEY];\n }\n else if (isObject(defaults) &&\n isObject(schema.default) &&\n !schema[ANY_OF_KEY] &&\n !schema[ONE_OF_KEY] &&\n !schema[REF_KEY]) {\n // For object defaults, merge defaults by precedence setting.\n // Skip this for anyOf/oneOf/$ref schemas - they need special handling.\n if (preferParentDefaults) {\n // Use schema.default as the base and only override values that are defined in parent defaults.\n defaults = mergeObjects(schema.default, defaults);\n }\n else {\n // Only override parent defaults that are defined in schema.default.\n defaults = mergeObjects(defaults, schema.default);\n }\n }\n else if (DEFAULT_KEY in schema &&\n !preferParentDefaults &&\n !schema[ANY_OF_KEY] &&\n !schema[ONE_OF_KEY] &&\n !schema[REF_KEY]) {\n // If the schema has a default value and parentDefaults does not have precedence\n // And if the schema does not have anyOf or oneOf (since we need to merge the defaults with the formData)\n // Then we should use it as the default.\n defaults = schema.default;\n }\n else if (REF_KEY in schema) {\n const refName = schema[REF_KEY];\n // Use referenced schema defaults for this node.\n if (!_recurseList.includes(refName)) {\n updatedRecurseList = _recurseList.concat(refName);\n schemaToCompute = findSchemaDefinition(refName, rootSchema);\n }\n // If the referenced schema exists and parentDefaults is not set\n // Then set the defaults from the current schema for the referenced schema.\n // Only do this if rawFormData has no meaningful data - we don't want to override user's existing values.\n // Check for undefined OR empty object - rawFormData may be coerced to {} when not an object.\n if (schemaToCompute && !defaults && isEmptyFormData(rawFormData)) {\n defaults = schema.default;\n }\n // If shouldMergeDefaultsIntoFormData is true\n // And the schemaToCompute is set and the rawFormData is not an object\n // Then set the formData to the rawFormData\n if (shouldMergeDefaultsIntoFormData && schemaToCompute && !isObject(rawFormData)) {\n formData = rawFormData;\n }\n }\n else if (DEPENDENCIES_KEY in schema) {\n // Get the default if set from properties to ensure the dependencies conditions are resolved based on it\n const defaultFormData = {\n ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults),\n ...formData,\n };\n const resolvedSchema = resolveDependencies(validator, schema, rootSchema, false, [], defaultFormData, experimental_customMergeAllOf);\n [schemaToCompute] = resolvedSchema; // pick the first element from resolve dependencies\n }\n else if (isFixedItems(schema) && !preferParentDefaults) {\n // If the schema contains fixed items and parentDefaults does not have precedence\n // Then construct defaults from defaults of array items.\n defaults = schema.items.map((itemSchema, idx) => computeDefaults(validator, itemSchema, {\n rootSchema,\n includeUndefinedValues,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n parentDefaults: Array.isArray(parentDefaults) ? parentDefaults[idx] : undefined,\n rawFormData: formData,\n required,\n shouldMergeDefaultsIntoFormData,\n }));\n }\n else if (ONE_OF_KEY in schema) {\n const { oneOf, ...remaining } = schema;\n if (oneOf.length === 0) {\n return undefined;\n }\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const { type = 'null' } = remaining;\n if (!Array.isArray(type) &&\n PRIMITIVE_TYPES.includes(type) &&\n experimental_dfsb_to_compute?.constAsDefaults === 'skipOneOf') {\n // If we are in a oneOf of a primitive type, then we want to pass constAsDefaults as 'never' for the recursion\n experimental_dfsb_to_compute = {\n ...experimental_dfsb_to_compute,\n constAsDefaults: 'never',\n };\n }\n schemaToCompute = oneOf[getClosestMatchingOption(validator, rootSchema, rawFormData ?? schema.default, oneOf, 0, discriminator, experimental_customMergeAllOf)];\n schemaToCompute = mergeSchemas(remaining, schemaToCompute);\n }\n else if (ANY_OF_KEY in schema) {\n const { anyOf, ...remaining } = schema;\n if (anyOf.length === 0) {\n return undefined;\n }\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n schemaToCompute = anyOf[getClosestMatchingOption(validator, rootSchema, rawFormData ?? schema.default, anyOf, 0, discriminator, experimental_customMergeAllOf)];\n schemaToCompute = mergeSchemas(remaining, schemaToCompute);\n }\n else if (shouldPopulateAllOfDefaults(schema, experimental_defaultFormStateBehavior) &&\n getSchemaType(schema) !== 'object') {\n // `allOf` on an object schema is already resolved by `getObjectDefaults()`. On any other schema\n // nothing resolves it, so the defaults of the subschemas are lost. This happens, for instance,\n // for a single-element `allOf` wrapping a `$ref` to a string, which is equivalent to using the\n // `$ref` directly. Merge the `allOf` here so those defaults are picked up as well.\n schemaToCompute = retrieveSchema(validator, schema, rootSchema, rawFormData, experimental_customMergeAllOf);\n }\n if (schemaToCompute) {\n return computeDefaults(validator, schemaToCompute, {\n rootSchema,\n includeUndefinedValues,\n _recurseList: updatedRecurseList,\n experimental_defaultFormStateBehavior: experimental_dfsb_to_compute,\n experimental_customMergeAllOf,\n parentDefaults: defaults,\n rawFormData: rawFormData ?? formData,\n required,\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n }\n // No defaults defined for this node, fallback to generic typed ones.\n if (defaults === undefined) {\n defaults = schema.default;\n }\n const defaultBasedOnSchemaType = getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults);\n let defaultsWithFormData = defaultBasedOnSchemaType ?? defaults;\n // if shouldMergeDefaultsIntoFormData is true, then merge the defaults into the formData.\n if (shouldMergeDefaultsIntoFormData) {\n const { arrayMinItems = {} } = experimental_defaultFormStateBehavior || {};\n const { mergeExtraDefaults } = arrayMinItems;\n const matchingFormData = ensureFormDataMatchingSchema(validator, schema, rootSchema, rawFormData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n if (!isObject(rawFormData) || ALL_OF_KEY in schema) {\n // If the formData is not an object which means it's a primitive field, then we need to merge the defaults into the formData.\n // Or if the schema has allOf, we need to merge the defaults into the formData because we don't compute the defaults for allOf.\n defaultsWithFormData = mergeDefaultsWithFormData(defaultsWithFormData, matchingFormData, mergeExtraDefaults, true);\n }\n }\n return defaultsWithFormData;\n}\n/**\n * Ensure that the formData matches the given schema. If it's not matching in the case of a selectField, we change it to match the schema.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the formData state is desired\n * @param rootSchema - The root schema, used to primarily to look up `$ref`s\n * @param formData - The current formData\n * @param [experimental_defaultFormStateBehavior] - Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - valid formData that matches schema\n */\nexport function ensureFormDataMatchingSchema(validator, schema, rootSchema, formData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {\n const shouldRetrieveAllOf = shouldPopulateAllOfDefaults(schema, experimental_defaultFormStateBehavior);\n const schemaToMatch = shouldRetrieveAllOf\n ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf)\n : schema;\n const isSelectField = !isConstant(schemaToMatch) &&\n isSelect(validator, schemaToMatch, rootSchema, experimental_customMergeAllOf);\n let validFormData = formData;\n if (isSelectField) {\n const getOptionsList = optionsList(schemaToMatch);\n const isValid = getOptionsList?.some((option) => deepEquals(option.value, formData));\n validFormData = isValid ? formData : undefined;\n }\n // Override the formData with the const if the constAsDefaults is set to always\n const constTakesPrecedence = schemaToMatch[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults === 'always';\n if (constTakesPrecedence) {\n validFormData = schemaToMatch.const;\n }\n else if (isObject(validFormData) && isObject(schemaToMatch.properties)) {\n validFormData = Object.keys(schemaToMatch.properties).reduce((acc, key) => {\n const propertySchema = getPropertySchema(schemaToMatch, key);\n if (key in acc && (shouldRetrieveAllOf || (isObject(propertySchema) && ALL_OF_KEY in propertySchema))) {\n acc[key] = ensureFormDataMatchingSchema(validator, propertySchema, rootSchema, acc[key], experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n }\n return acc;\n }, { ...validFormData });\n }\n return validFormData;\n}\n/** Computes the default value for objects.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @param defaults - Optional props for this function\n * @returns - The default value based on the schema type if they are defined for object or array schemas.\n */\nexport function getObjectDefaults(validator, rawSchema, { rawFormData, rootSchema = {}, includeUndefinedValues = false, _recurseList = [], experimental_defaultFormStateBehavior, experimental_customMergeAllOf, required, shouldMergeDefaultsIntoFormData, initialDefaultsGenerated, } = {}, defaults) {\n {\n const formData = (isObject(rawFormData) ? rawFormData : {});\n const schema = rawSchema;\n // Retrieve the schema:\n // - If schema contains `allOf` AND `experimental_defaultFormStateBehavior.allOf` is set to `populateDefaults`\n // - OR if schema contains an 'if' AND `emptyObjectFields` is not set to `skipEmptyDefaults`\n // This ensures we compute defaults correctly for schemas with these keywords.\n const shouldRetrieveSchema = shouldPopulateAllOfDefaults(schema, experimental_defaultFormStateBehavior) ||\n (experimental_defaultFormStateBehavior?.emptyObjectFields !== 'skipEmptyDefaults' && IF_KEY in schema);\n const retrievedSchema = shouldRetrieveSchema\n ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf)\n : schema;\n const parentConst = retrievedSchema[CONST_KEY];\n const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce((acc, key) => {\n const propertySchema = getPropertySchema(retrievedSchema, key);\n // Check if the parent schema has a const property defined AND we are supporting const as defaults, then we\n // should always return the computedDefault since it's coming from the const.\n const hasParentConst = isObject(parentConst) && parentConst[key] !== undefined;\n const hasConst = ((isObject(propertySchema) && CONST_KEY in propertySchema) || hasParentConst) &&\n experimental_defaultFormStateBehavior?.constAsDefaults !== 'never' &&\n !constIsAjvDataReference(propertySchema);\n // Compute the defaults for this node, with the parent defaults we might\n // have from a previous run: defaults[key].\n const computedDefault = computeDefaults(validator, propertySchema, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n includeUndefinedValues: includeUndefinedValues === true,\n parentDefaults: getByPath(defaults, key),\n rawFormData: getByPath(formData, key),\n required: retrievedSchema.required?.includes(key),\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, required, retrievedSchema.required, experimental_defaultFormStateBehavior, hasConst, propertySchema?.type === 'null');\n return acc;\n }, {});\n if (retrievedSchema.additionalProperties && !initialDefaultsGenerated) {\n // as per spec additionalProperties may be either schema or boolean\n const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties)\n ? retrievedSchema.additionalProperties\n : {};\n const keys = new Set();\n const formDataRequired = [];\n Object.keys(formData)\n .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key])\n .forEach((key) => {\n keys.add(key);\n formDataRequired.push(key);\n });\n // Only seed keys from schema defaults when formData has no additionalProperties of its own.\n // If the user already has data (e.g. after a key rename), injecting default keys would\n // re-add stale entries that no longer exist in formData.\n if (isObject(defaults) && formDataRequired.length === 0) {\n Object.keys(defaults)\n .filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key])\n .forEach((key) => keys.add(key));\n }\n keys.forEach((key) => {\n const computedDefault = computeDefaults(validator, additionalPropertiesSchema, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n includeUndefinedValues: includeUndefinedValues === true,\n parentDefaults: getByPath(defaults, key),\n rawFormData: getByPath(formData, key),\n required: retrievedSchema.required?.includes(key),\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n // Since these are additional properties we don't need to add the `experimental_defaultFormStateBehavior` prop\n maybeAddDefaultToObject(objectDefaults, key, computedDefault, includeUndefinedValues, required, formDataRequired);\n });\n }\n return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, objectDefaults);\n }\n}\n/** Computes the default value for arrays.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @param initialDefaults - Optional props for this function\n * @returns - The default value based on the schema type if they are defined for object or array schemas.\n */\nexport function getArrayDefaults(validator, rawSchema, { rawFormData, rootSchema = {}, _recurseList = [], experimental_defaultFormStateBehavior, experimental_customMergeAllOf, required, requiredAsRoot = false, shouldMergeDefaultsIntoFormData, initialDefaultsGenerated, } = {}, initialDefaults) {\n let defaults = initialDefaults;\n const schema = rawSchema;\n const arrayMinItemsStateBehavior = experimental_defaultFormStateBehavior?.arrayMinItems ?? {};\n const { populate: arrayMinItemsPopulate, mergeExtraDefaults: arrayMergeExtraDefaults } = arrayMinItemsStateBehavior;\n const neverPopulate = arrayMinItemsPopulate === 'never';\n const ignoreMinItemsFlagSet = arrayMinItemsPopulate === 'requiredOnly';\n const isPopulateAll = arrayMinItemsPopulate === 'all' || (!neverPopulate && !ignoreMinItemsFlagSet);\n const computeSkipPopulate = arrayMinItemsStateBehavior?.computeSkipPopulate ?? (() => false);\n const isSkipEmptyDefaults = experimental_defaultFormStateBehavior?.emptyObjectFields === 'skipEmptyDefaults';\n const emptyDefault = isSkipEmptyDefaults ? undefined : [];\n // Inject defaults into existing array defaults\n if (Array.isArray(defaults)) {\n defaults = defaults.map((item, idx) => {\n const schemaItem = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Fallback, idx);\n const itemFormData = Array.isArray(rawFormData) ? rawFormData[idx] : undefined;\n return computeDefaults(validator, schemaItem, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n parentDefaults: item,\n rawFormData: itemFormData,\n required,\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n });\n });\n }\n // Deeply inject defaults into already existing form data\n if (Array.isArray(rawFormData)) {\n const schemaItem = getInnerSchemaForArrayItem(schema);\n if (neverPopulate) {\n defaults = rawFormData;\n }\n else {\n const itemDefaults = rawFormData.map((item, idx) => computeDefaults(validator, schemaItem, {\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n rawFormData: item,\n parentDefaults: getByPath(defaults, idx),\n required,\n shouldMergeDefaultsIntoFormData,\n initialDefaultsGenerated,\n }));\n // If the populate 'requiredOnly' flag is set then we only merge and include extra defaults if they are required.\n // Or if populate 'all' is set we merge and include extra defaults.\n const mergeExtraDefaults = ((ignoreMinItemsFlagSet && required) || isPopulateAll) && arrayMergeExtraDefaults;\n defaults = mergeDefaultsWithFormData(defaults, itemDefaults, mergeExtraDefaults);\n }\n }\n const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;\n if (neverPopulate) {\n if (shouldMergeDefaultsIntoFormData && !required) {\n // Optional arrays with no existing data should be omitted entirely rather than defaulted to `[]`.\n // Required arrays still fall through to `defaults ?? emptyDefault` below so that `[]` is surfaced,\n // letting the validator report `minItems` violations instead of a missing-required-property error.\n return defaults;\n }\n return defaults ?? emptyDefault;\n }\n if (ignoreMinItemsFlagSet && !required) {\n // If no form data exists or defaults are set leave the field empty/non-existent, otherwise\n // return form data/defaults\n return defaults || undefined;\n }\n let arrayDefault;\n if (!schema.minItems ||\n isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) ||\n computeSkipPopulate(validator, schema, rootSchema) ||\n schema.minItems <= defaultsLength) {\n // we don't want undefined defaults unless it is both not required or not required as root\n arrayDefault = defaults || (!required && !requiredAsRoot) ? defaults : emptyDefault;\n }\n else {\n const defaultEntries = defaults || [];\n const fillerSchema = getInnerSchemaForArrayItem(schema, AdditionalItemsHandling.Invert);\n const fillerDefault = fillerSchema.default;\n // Calculate filler entries for remaining items (minItems - existing raw data/defaults)\n const fillerEntries = Array.from({ length: schema.minItems - defaultsLength }, () => computeDefaults(validator, fillerSchema, {\n parentDefaults: fillerDefault,\n rootSchema,\n _recurseList,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n required,\n shouldMergeDefaultsIntoFormData,\n }));\n // then fill up the rest with either the item default or empty, up to minItems\n arrayDefault = defaultEntries.concat(fillerEntries);\n }\n return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, arrayDefault);\n}\n/** Computes the default value based on the schema type.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be used when necessary\n * @param rawSchema - The schema for which the default state is desired\n * @param computeDefaultsProps - Optional props for this function\n * @param defaults - Optional props for this function\n * @returns - The default value based on the schema type if they are defined for object or array schemas.\n */\nexport function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {\n switch (getSchemaType(rawSchema)) {\n // We need to recurse for object schema inner default values.\n case 'object': {\n return getObjectDefaults(validator, rawSchema, computeDefaultsProps, defaults);\n }\n case 'array': {\n return getArrayDefaults(validator, rawSchema, computeDefaultsProps, defaults);\n }\n case 'boolean': {\n // A required boolean with no explicit default gets false — it must be\n // present in the submitted data, and false is the natural zero-value.\n if (computeDefaultsProps.required && defaults === undefined) {\n return false;\n }\n return undefined;\n }\n default:\n return undefined;\n }\n}\n/** Returns the superset of `formData` that includes the given set updated to include any missing fields that have\n * computed to have defaults provided in the `schema`.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param theSchema - The schema for which the default state is desired\n * @param [formData] - The current formData, if any, onto which to provide any missing defaults\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults.\n * If \"excludeObjectChildren\", cause undefined values for this object and pass `includeUndefinedValues` as\n * false when computing defaults for any nested object properties.\n * @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @param initialDefaultsGenerated - Optional flag, indicates whether or not initial defaults have been generated\n * @returns - The resulting `formData` with all the defaults provided\n */\nexport default function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, initialDefaultsGenerated) {\n if (!isObject(theSchema)) {\n throw new Error(`Invalid schema: ${theSchema}`);\n }\n // Empty formData needs the defaults that computeDefaults will generate to resolve dependencies.\n const emptyFormData = isEmptyFormData(formData);\n const [schema] = retrieveSchemaInternal(validator, theSchema, rootSchema ?? {}, formData, undefined, undefined, experimental_customMergeAllOf, undefined, emptyFormData);\n // Get the computed defaults with 'shouldMergeDefaultsIntoFormData' set to true to merge defaults into formData.\n // This is done when for example the value from formData does not exist in the schema 'enum' property, in such\n // cases we take the value from the defaults because the value from the formData is not valid.\n const defaults = computeDefaults(validator, schema, {\n // Empty data can leave dependency references unresolved, including inside oneOf/anyOf.\n rootSchema: rootSchema ?? (emptyFormData ? theSchema : undefined),\n includeUndefinedValues,\n experimental_defaultFormStateBehavior,\n experimental_customMergeAllOf,\n rawFormData: formData,\n shouldMergeDefaultsIntoFormData: true,\n initialDefaultsGenerated,\n requiredAsRoot: true,\n });\n if (schema.type !== 'object' && isObject(schema.default)) {\n return {\n ...defaults,\n ...formData,\n };\n }\n // If the formData is an object or an array, add additional properties from formData and override formData with\n // defaults since the defaults are already merged with formData.\n if (isObject(formData) || Array.isArray(formData)) {\n const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};\n const defaultSupercedesUndefined = mergeDefaultsIntoFormData === 'useDefaultIfFormDataUndefined';\n const matchingFormData = ensureFormDataMatchingSchema(validator, schema, rootSchema ?? schema, formData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n const result = mergeDefaultsWithFormData(defaults, matchingFormData, true, // set to true to add any additional default array entries.\n defaultSupercedesUndefined, true);\n return result;\n }\n return defaults;\n}\n//# sourceMappingURL=getDefaultFormState.js.map","import getUiOptions from \"./getUiOptions.js\";\n/** Checks to see if the `uiSchema` contains the `widget` field and that the widget is not `hidden`\n *\n * @param uiSchema - The UI Schema from which to detect if it is customized\n * @returns - True if the `uiSchema` describes a custom widget, false otherwise\n */\nexport default function isCustomWidget(uiSchema = {}) {\n return (\n // TODO: Remove the `&& uiSchema['ui:widget'] !== 'hidden'` once we support hidden widgets for arrays.\n // https://rjsf-team.github.io/react-jsonschema-form/docs/usage/widgets/#hidden-widgets\n 'widget' in getUiOptions(uiSchema) && getUiOptions(uiSchema).widget !== 'hidden');\n}\n//# sourceMappingURL=isCustomWidget.js.map","import { UI_WIDGET_KEY } from \"../constants.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** Checks to see if the `schema` and `uiSchema` combination represents an array of files\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which check for array of files flag is desired\n * @param [uiSchema={}] - The UI schema from which to check the widget\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if schema/uiSchema contains an array of files, otherwise false\n */\nexport default function isFilesArray(validator, schema, uiSchema = {}, rootSchema, experimental_customMergeAllOf) {\n if (uiSchema[UI_WIDGET_KEY] === 'files') {\n return true;\n }\n if (schema.items) {\n const itemsSchema = retrieveSchema(validator, schema.items, rootSchema, undefined, experimental_customMergeAllOf);\n return itemsSchema.type === 'string' && itemsSchema.format === 'data-url';\n }\n return false;\n}\n//# sourceMappingURL=isFilesArray.js.map","import { ADDITIONAL_PROPERTY_FLAG, UI_FIELD_KEY, UI_WIDGET_KEY } from \"../constants.js\";\nimport getSchemaType from \"../getSchemaType.js\";\nimport getUiOptions from \"../getUiOptions.js\";\nimport isCustomWidget from \"../isCustomWidget.js\";\nimport isFilesArray from \"./isFilesArray.js\";\nimport isMultiSelect from \"./isMultiSelect.js\";\n/** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`\n * should be displayed in a UI.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the display label flag is desired\n * @param [uiSchema={}] - The UI schema from which to derive potentially displayable information\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [globalOptions={}] - The optional Global UI Schema from which to get any fallback `xxx` options\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if the label should be displayed or false if it should not\n */\nexport default function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOptions, experimental_customMergeAllOf) {\n const uiOptions = getUiOptions(uiSchema, globalOptions);\n const { label = true } = uiOptions;\n let displayLabel = Boolean(label);\n if (displayLabel) {\n const schemaType = getSchemaType(schema);\n const addedByAdditionalProperty = Boolean(schema[ADDITIONAL_PROPERTY_FLAG]);\n if (schemaType === 'array') {\n displayLabel =\n addedByAdditionalProperty ||\n isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) ||\n isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) ||\n isCustomWidget(uiSchema);\n }\n if (schemaType === 'object') {\n displayLabel = addedByAdditionalProperty;\n }\n if (schemaType === 'boolean' && uiSchema && !uiSchema[UI_WIDGET_KEY]) {\n displayLabel = false;\n }\n if (uiSchema?.[UI_FIELD_KEY]) {\n displayLabel = false;\n }\n }\n return displayLabel;\n}\n//# sourceMappingURL=getDisplayLabel.js.map","import { NAME_KEY, RJSF_ADDITIONAL_PROPERTIES_FLAG } from \"../constants.js\";\nimport findSchemaDefinition from \"../findSchemaDefinition.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getSchemaType from \"../getSchemaType.js\";\nimport isObject from \"../isObject.js\";\nimport { getByPath, hasByPath, setByPath, toPath } from \"../pathUtils.js\";\nimport getClosestMatchingOption from \"./getClosestMatchingOption.js\";\nimport isSelect from \"./isSelect.js\";\nimport { relaxOptionsForScoring, resolveAllReferences } from \"./retrieveSchema.js\";\nimport shallowAllOfMerge from \"./shallowAllOfMerge.js\";\n/** Returns the `formData` with only the elements specified in the `fields` list\n *\n * @param formData - The data for the `Form`\n * @param fields - The fields to keep while filtering\n * @deprecated - To be removed as an exported `@rjsf/utils` function in a future release\n */\nexport function getUsedFormData(formData, fields) {\n // For the case of a single input form\n if (fields.length === 0 && typeof formData !== 'object') {\n return formData;\n }\n // Keep only the values at the given field paths; `fields` contains either dotted strings or the\n // deep path lists produced by `getFieldNames()`\n const data = {};\n fields.forEach((field) => {\n const path = Array.isArray(field) ? field : toPath(field);\n if (hasByPath(formData, path)) {\n setByPath(data, path, getByPath(formData, path));\n }\n });\n if (Array.isArray(formData)) {\n return Object.keys(data).map((key) => data[key]);\n }\n return data;\n}\n/** Returns the list of field names from inspecting the `pathSchema` as well as using the `formData`\n *\n * @param pathSchema - The `PathSchema` object for the form\n * @param [formData] - The form data to use while checking for empty objects/arrays\n * @deprecated - To be removed as an exported `@rjsf/utils` function in a future release\n */\n// oxlint-disable-next-line typescript/no-deprecated\nexport function getFieldNames(pathSchema, formData) {\n const formValueHasData = (value, isLeaf) => {\n if (typeof value !== 'object' || value === null) {\n return true;\n }\n const isEmptyValue = Array.isArray(value) ? value.length === 0 : Object.keys(value).length === 0;\n return isEmptyValue || isLeaf;\n };\n const getAllPaths = (_obj, acc = [], paths = [[]]) => {\n const objKeys = Object.keys(_obj);\n objKeys.forEach((key) => {\n const data = _obj[key];\n if (typeof data === 'object') {\n const newPaths = paths.map((path) => [...path, key]);\n // If an object is marked with additionalProperties, all its keys are valid\n if (data[RJSF_ADDITIONAL_PROPERTIES_FLAG] && data[NAME_KEY] !== '') {\n acc.push(data[NAME_KEY]);\n }\n else {\n getAllPaths(data, acc, newPaths);\n }\n }\n else if (key === NAME_KEY && data !== '') {\n paths.forEach((path) => {\n const formValue = getByPath(formData, path);\n const isLeaf = objKeys.length === 1;\n // adds path to fieldNames if it points to a value or an empty object/array which is not a leaf\n if (formValueHasData(formValue, isLeaf) ||\n (Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf)))) {\n acc.push(path);\n }\n });\n }\n });\n return acc;\n };\n return getAllPaths(pathSchema);\n}\n/** Returns true when a form value is considered empty: null/undefined/'', an empty array, or a plain\n * object whose every own value is itself empty (recursive). Scalars like `0` and `false` are not empty.\n *\n * @param value - The value to check\n * @returns - True if the value is considered empty, false otherwise\n */\nexport function isValueEmpty(value) {\n if (value == null || value === '') {\n return true;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (isObject(value)) {\n return Object.values(value).every(isValueEmpty);\n }\n return false;\n}\n/** Merges an `allOf` schema into a single flat schema, delegating to `experimental_customMergeAllOf`\n * when provided or falling back to the module-level `shallowAllOfMerge` otherwise.\n *\n * @param schema - A schema containing an `allOf` array to be merged\n * @param [experimental_customMergeAllOf] - Optional custom merge function; see `Form` documentation\n * @returns - The merged schema with `allOf` resolved into a single schema object\n */\nfunction doMergeAllOf(schema, experimental_customMergeAllOf) {\n return experimental_customMergeAllOf ? experimental_customMergeAllOf(schema) : shallowAllOfMerge(schema);\n}\n/** A recursive, schema-driven filter that walks `schema` and `formData` in lockstep, keeping only\n * values that are described by the schema. Handles `$ref`, `allOf`, `anyOf`, `oneOf`, `if/then/else`,\n * `patternProperties`, `additionalProperties`, `propertyNames`, and `dependencies`. Optional object\n * properties whose schema-filtered content is entirely empty (per `isValueEmpty`) are pruned; required\n * properties and scalar values are always kept when schema-defined.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which to filter the formData\n * @param [rootSchema] - The root schema, used primarily to look up `$ref`s\n * @param [formData] - The data for the `Form`\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The `formData` after omitting extra data, or `undefined` when `formData` is undefined\n */\nexport default function omitExtraData(validator, schema, rootSchema = {}, formData, experimental_customMergeAllOf) {\n /** Type predicate that narrows `value` to `GenericObjectType` — true when `value` is a plain,\n * non-array object (i.e. a JSON object). Used to distinguish JSON objects from arrays and primitives.\n *\n * @param value - The value to check\n * @returns - True if `value` is a plain non-array object\n */\n function isObjectValue(value) {\n return isObject(value);\n }\n /** Type predicate that narrows a `S | boolean` schema definition to `S` — true when `schemaDef` is\n * a schema object rather than a JSON Schema boolean shorthand (`true` meaning allow-all, `false`\n * meaning deny-all).\n *\n * @param schemaDef - The schema definition to check\n * @returns - True if `schemaDef` is a schema object\n */\n function isSchemaObj(schemaDef) {\n return isObject(schemaDef);\n }\n /** Copies schema-defined properties from `source` into `target`, applying `omit` recursively for\n * each value. Handles `properties`, `patternProperties`, and `additionalProperties`.\n * Optional object-valued properties are pruned when every key in the filtered result is both\n * optional (per the inner schema's `required`) and empty (per `isValueEmpty`). This preserves\n * optional objects whose required children have empty values, while still dropping objects whose\n * schema-filtered content is entirely optional-and-empty. Required properties and scalar values\n * are always written when defined. Always returns `target` — pruning of the object itself is\n * the caller's responsibility.\n *\n * @param childSchema - The object schema describing which properties are allowed\n * @param source - The source form data object to read values from\n * @param target - The accumulator object to write filtered values into\n * @returns - `target` after all schema-defined properties have been processed\n */\n function handleObject(childSchema, source, target) {\n const { properties, additionalProperties, patternProperties } = childSchema;\n const requiredSet = new Set(childSchema.required ?? []);\n /** Recursively omits extra data from `value` via `omit`, then conditionally writes the result to\n * `target[key]`. Optional object-valued properties are dropped when every key in the filtered\n * result is both optional (within the inner schema's `required` list) and has an empty value per\n * `isValueEmpty`. This per-key approach prevents required-but-empty child properties — kept by\n * inner `setProperty` calls — from inadvertently causing the parent optional object to be dropped,\n * while still pruning optional objects whose schema-filtered content is entirely empty. Vacuously\n * true for `{}`, so empty results are always dropped. Scalar and array values are not pruned here.\n *\n * @param key - The property key to write on `target`\n * @param schemaDef - The schema (or boolean shorthand) that governs the value at `key`\n * @param value - The raw source value to filter\n * @param [required=false] - When true the property is never pruned regardless of its filtered value\n */\n function setProperty(key, schemaDef, value, required = false) {\n const v = omit(schemaDef, value, target[key]);\n if (!required && isObject(v)) {\n // Resolve $ref so we can inspect the effective required list for the inner schema.\n let sd = isSchemaObj(schemaDef) ? schemaDef : {};\n if (sd.$ref !== undefined) {\n sd = findSchemaDefinition(sd.$ref, rootSchema);\n }\n const innerRequired = new Set(sd.required ?? []);\n // Drop this optional object when every key in v is both optional in the inner schema\n // and has an empty value. Vacuously true for {} so empty objects are always dropped.\n const shouldDrop = Object.entries(v).every(([k, val]) => !innerRequired.has(k) && isValueEmpty(val));\n if (shouldDrop) {\n return;\n }\n }\n if (v !== undefined) {\n // oxlint-disable-next-line no-param-reassign\n target[key] = v;\n }\n }\n if (properties !== undefined) {\n for (const [key, schemaDef] of Object.entries(properties)) {\n setProperty(key, schemaDef, source[key], requiredSet.has(key));\n }\n }\n // Track keys not handled by properties/patterns so additionalProperties can pick them up.\n let patternPropertiesRest;\n if (patternProperties !== undefined) {\n patternPropertiesRest = [];\n const patterns = Object.entries(patternProperties).map(([pattern, schemaDef]) => [\n new RegExp(pattern),\n schemaDef,\n ]);\n const knownProperties = new Set(Object.keys(properties ?? {}));\n for (const [key, value] of Object.entries(source)) {\n if (!knownProperties.has(key)) {\n const matched = patterns.find(([re]) => re.test(key));\n if (matched === undefined) {\n patternPropertiesRest.push(key);\n }\n else {\n setProperty(key, matched[1], value);\n }\n }\n }\n }\n // JSON Schema spec: absent additionalProperties defaults to true (allow all extra keys). Here\n // we treat it as false so omitExtraData never inadvertently passes through undescribed keys.\n if (additionalProperties !== undefined && additionalProperties !== false) {\n const addlSchema = additionalProperties;\n if (patternPropertiesRest !== undefined) {\n for (const key of patternPropertiesRest) {\n setProperty(key, addlSchema, source[key]);\n }\n }\n else {\n const knownProperties = new Set(Object.keys(properties ?? {}));\n for (const [key, value] of Object.entries(source)) {\n if (!knownProperties.has(key)) {\n setProperty(key, addlSchema, value);\n }\n }\n }\n }\n return target;\n }\n /** Filters array elements from `source` into `target` according to `schema.items` and\n * `schema.additionalItems`. Only called when `items` is defined (guarded in `omit`). Uses index\n * assignment (not push) so a pre-populated `target` from a prior branch is overwritten rather than\n * appended to, preventing item duplication. For tuple schemas (`items` is an array) elements up to\n * `min(items.length, source.length)` are filtered by their per-index schema; elements beyond the\n * tuple are covered by `additionalItems` when present, or the target is truncated when absent.\n * For list schemas (`items` is a single schema) every source element is filtered and `target.length`\n * is set to `source.length`.\n *\n * @param childSchema - The array schema describing `items` and optionally `additionalItems`\n * @param source - The source array to read elements from\n * @param target - The accumulator array to write filtered elements into\n * @returns - `target` after all applicable source elements have been written\n */\n function handleArray(childSchema, source, target) {\n const { items, additionalItems } = childSchema;\n if (Array.isArray(items)) {\n const tupleLength = Math.min(items.length, source.length);\n let i = 0;\n for (; i < tupleLength; i += 1) {\n // oxlint-disable-next-line no-param-reassign\n target[i] = omit(items[i], source[i]);\n }\n // Without additionalItems, truncate at the tuple boundary to drop any pre-existing items.\n if (!additionalItems) {\n // oxlint-disable-next-line no-param-reassign\n target.length = tupleLength;\n return target;\n }\n for (; i < source.length; i += 1) {\n // oxlint-disable-next-line no-param-reassign\n target[i] = omit(additionalItems, source[i]);\n }\n }\n else {\n for (let i = 0; i < source.length; i += 1) {\n // oxlint-disable-next-line no-param-reassign\n target[i] = omit(items, source[i]);\n }\n }\n // Truncate any pre-existing items beyond the source length.\n // oxlint-disable-next-line no-param-reassign\n target.length = source.length;\n return target;\n }\n /** Applies the `if/then/else` conditional keywords from `schema` to `target`. When `schema.if` is\n * absent the original `target` is returned unchanged. Otherwise the condition is evaluated — using\n * `validator.isValid` for schema conditions or the boolean value directly — and the matching branch\n * (`then` or `else`) is applied via `omit`. When the selected branch is absent, `target` is returned\n * unchanged.\n *\n * @param childSchema - The schema potentially containing `if`, `then`, and `else` keywords\n * @param source - The current form data value, passed to `validator.isValid` and the branch `omit`\n * @param target - The already-filtered value to merge the branch result into\n * @returns - The result of applying the matched branch, or `target` when no branch applies\n */\n function handleConditions(childSchema, source, target) {\n const { if: condition, then, else: otherwise } = childSchema;\n if (condition === undefined) {\n return target;\n }\n // validator.isValid signature: (schema, formData, rootSchema)\n const isThenBranch = isSchemaObj(condition)\n ? validator.isValid(condition, source, rootSchema)\n : condition;\n const branch = isThenBranch ? then : otherwise;\n return branch === undefined ? target : omit(branch, source, target, false);\n }\n /** Applies the best-matching `oneOf` option to `source`, merging the result into `target`. When\n * `oneOf` is not an array or the schema represents a select widget (enum-driven), `target` is\n * returned unchanged. `additionalProperties: false` is relaxed on each option before scoring so that\n * `getClosestMatchingOption` can validate freely, but the original option schema is used for the\n * actual `omit` call.\n *\n * @param oneOf - The `oneOf` array from the schema, or `undefined`\n * @param childSchema - The parent schema containing the `oneOf` keyword\n * @param source - The current form data value used to score each option\n * @param target - The already-filtered value to merge the winning option's result into\n * @returns - The result of applying the best-matching option, or `target` when no matching applies\n */\n function handleOneOf(oneOf, childSchema, source, target) {\n if (!Array.isArray(oneOf) || isSelect(validator, childSchema, rootSchema, experimental_customMergeAllOf)) {\n return target;\n }\n // Resolve $refs and relax additionalProperties:false → true in one pass for scoring only.\n // The unrelaxed resolved schema is re-derived for the winning option so that omit() still\n // respects additionalProperties:false during filtering.\n const scoringOptions = relaxOptionsForScoring(oneOf, true, rootSchema);\n const bestIndex = getClosestMatchingOption(validator, rootSchema, source, scoringOptions, 0, getDiscriminatorFieldFromSchema(childSchema), experimental_customMergeAllOf);\n const winning = oneOf[bestIndex];\n // For object options, re-resolve without relaxation so additionalProperties:false is respected.\n // For boolean options, scoringOptions already holds the converted schema (true→{}, false→{not:{}}).\n const resolved = isObject(winning)\n ? resolveAllReferences(winning, rootSchema, [])\n : scoringOptions[bestIndex];\n return omit(resolved, source, target, false);\n }\n /** Applies `anyOf` branches from `schema` to `source`, merging results into `target`. When `anyOf`\n * is absent or not an array, `target` is returned unchanged. For undefined or empty sources (so that\n * defaults can flow through all branches) every branch is applied in sequence. For non-empty sources\n * the best-matching branch is selected via `handleOneOf`.\n *\n * @param childSchema - The schema potentially containing an `anyOf` keyword\n * @param source - The current form data value; empty or undefined triggers all-branch application\n * @param target - The already-filtered value to merge branch results into\n * @returns - The result after applying the relevant `anyOf` branch(es), or `target` when inapplicable\n */\n function handleAnyOf(childSchema, source, target) {\n const { anyOf } = childSchema;\n if (!Array.isArray(anyOf)) {\n return target;\n }\n // For undefined or empty collections, apply every branch so defaults flow through.\n if (source === undefined ||\n (Array.isArray(source) && source.length === 0) ||\n (isObject(source) && Object.keys(source).length === 0)) {\n let result = target;\n for (const branch of anyOf) {\n result = omit(branch, source, result, false);\n }\n return result;\n }\n return handleOneOf(anyOf, childSchema, source, target);\n }\n /** Applies schema-based `dependencies` from `schema` to `source`, merging each active dependency's\n * schema into `target` via `omit`. Property dependencies (plain string arrays) are skipped — only\n * schema dependencies are processed. A dependency is considered active when its trigger key is\n * present on `source`.\n *\n * @param childSchema - The schema potentially containing a `dependencies` keyword\n * @param source - The current form data value; must be a plain object for dependencies to apply\n * @param target - The already-filtered value to merge dependency results into\n * @returns - The result after applying all active schema dependencies, or `target` when inapplicable\n */\n function handleDependencies(childSchema, source, target) {\n const { dependencies } = childSchema;\n if (dependencies === undefined || !isObjectValue(source)) {\n return target;\n }\n let result = target;\n for (const [key, deps] of Object.entries(dependencies)) {\n // Skip property dependencies (string arrays); only process schema dependencies.\n if (key in source && !Array.isArray(deps)) {\n result = omit(deps, source, result, false);\n }\n }\n return result;\n }\n /** Core recursive filter. Resolves `$ref`s, merges `allOf`, then delegates to the type-specific\n * handlers (`handleObject`, `handleArray`) and keyword handlers (`handleAnyOf`, `handleOneOf`,\n * `handleConditions`, `handleDependencies`). Returns `undefined` when `source` is undefined or\n * `schemaDef` is `false`; when `schemaDef` is `true` or empty returns `target ?? source` (when\n * `useSourceAsFallback` is true) or `target` (when false) to avoid aliasing `source` as the\n * accumulator across multiple compositional branches.\n *\n * @param schemaDef - The schema (or boolean shorthand) to filter `source` against\n * @param source - The raw form data value to filter\n * @param [target] - An optional accumulator carrying results from prior oneOf/anyOf processing\n * @param [useSourceAsFallback=true] - When false a permissive schema (`true`/`{}`) returns `target`\n * rather than `source`, preventing compositional branches from aliasing the accumulator to `source`\n * @returns - The filtered value, or `undefined` when the schema rejects the value\n */\n function omit(schemaDef, source, target, useSourceAsFallback = true) {\n if (source === undefined || schemaDef === false) {\n return undefined;\n }\n if (schemaDef === true || !schemaDef || Object.keys(schemaDef).length === 0) {\n return target ?? (useSourceAsFallback ? source : undefined);\n }\n let localSchema = schemaDef;\n const { $ref: ref, allOf } = localSchema;\n if (ref !== undefined) {\n return omit(findSchemaDefinition(ref, rootSchema), source, target, useSourceAsFallback);\n }\n if (allOf) {\n localSchema = doMergeAllOf(localSchema, experimental_customMergeAllOf);\n // Schemas whose allOf entries contain if/then/else keywords may not fully merge: the merger\n // can only hoist one if/then/else triple to the parent level, so additional entries stay in\n // allOf. Process any that remain so their conditional properties are not silently dropped.\n // See: https://github.com/rjsf-team/react-jsonschema-form/issues/5142\n const remainingAllOf = localSchema.allOf;\n if (remainingAllOf) {\n for (let i = 0; i < remainingAllOf.length; i++) {\n // oxlint-disable-next-line no-param-reassign\n target = omit(remainingAllOf[i], source, target, false);\n }\n }\n }\n let filtered = handleAnyOf(localSchema, source, handleOneOf(localSchema.oneOf, localSchema, source, target));\n const type = getSchemaType(localSchema);\n if (type === 'object') {\n if (!isObjectValue(source)) {\n return undefined;\n }\n filtered = handleObject(localSchema, source, isObjectValue(filtered) ? filtered : {});\n }\n else if (type === 'array') {\n if (!Array.isArray(source)) {\n return undefined;\n }\n if (localSchema.items !== undefined) {\n filtered = handleArray(localSchema, source, Array.isArray(filtered) ? filtered : []);\n }\n }\n // Post-prune after conditions (oneOf/anyOf/if-then) but BEFORE dependencies: keys added by\n // dependency sub-schemas are legitimate extensions of the allowed property set and must not be\n // pruned. Keys added only by winning conditional branches are still removed here so the result\n // honours additionalProperties:false.\n const afterConditions = handleConditions(localSchema, source, filtered);\n if (localSchema.additionalProperties === false && isObjectValue(afterConditions)) {\n const knownKeys = new Set(Object.keys(localSchema.properties ?? {}));\n const patterns = localSchema.patternProperties\n ? Object.keys(localSchema.patternProperties).map((p) => new RegExp(p))\n : [];\n for (const key of Object.keys(afterConditions)) {\n if (!knownKeys.has(key) && !patterns.some((re) => re.test(key))) {\n // oxlint-disable-next-line no-param-reassign\n delete afterConditions[key];\n }\n }\n }\n const result = handleDependencies(localSchema, source, afterConditions);\n return result ?? (useSourceAsFallback ? source : undefined);\n }\n return omit(schema, formData);\n}\n//# sourceMappingURL=omitExtraData.js.map","import { CONST_KEY, DEFAULT_KEY, PROPERTIES_KEY } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport getPropertySchema from \"../getPropertySchema.js\";\nimport { getByPath, hasByPath } from \"../pathUtils.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\nconst NO_VALUE = Symbol('no Value');\nfunction enumValuesForSchema(schema) {\n if (Array.isArray(schema.enum)) {\n return schema.enum;\n }\n const options = (schema.oneOf || schema.anyOf);\n if (!Array.isArray(options)) {\n return undefined;\n }\n const values = options\n .map((option) => {\n if (CONST_KEY in option) {\n return option[CONST_KEY];\n }\n return Array.isArray(option.enum) && option.enum.length === 1 ? option.enum[0] : NO_VALUE;\n })\n .filter((value) => value !== NO_VALUE);\n return values.length > 0 ? values : undefined;\n}\nfunction replacementForInvalidEnumValue(schema, formValue) {\n const enumValues = enumValuesForSchema(schema);\n if (!enumValues || enumValues.some((value) => deepEquals(value, formValue))) {\n return NO_VALUE;\n }\n const defaultValue = getByPath(schema, DEFAULT_KEY, NO_VALUE);\n if (defaultValue !== NO_VALUE && enumValues.some((value) => deepEquals(value, defaultValue))) {\n return defaultValue;\n }\n return enumValues.length === 1 ? enumValues[0] : undefined;\n}\n/** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the new\n * schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the nature\n * of schemas, this sanitization happens recursively for nested objects of data. Also, any properties in the old schema\n * that are non-existent in the new schema are set to `undefined`. The data sanitization process has the following flow:\n *\n * - If the new schema is an object that contains a `properties` object then:\n * - Create a `removeOldSchemaData` object, setting each key in the `oldSchema.properties` having `data` to undefined\n * - Create an empty `nestedData` object for use in the key filtering below:\n * - Iterate over each key in the `newSchema.properties` as follows:\n * - Get the `formValue` of the key from the `data`\n * - Get the `oldKeySchema` and `newKeyedSchema` for the key, defaulting to `{}` when it doesn't exist\n * - Retrieve the schema for any refs within each `oldKeySchema` and/or `newKeySchema`\n * - Get the types of the old and new keyed schemas and if the old doesn't exist or the old & new are the same then:\n * - If `removeOldSchemaData` has an entry for the key, delete it since the new schema has the same property\n * - If type of the key in the new schema is `object`:\n * - Store the value from the recursive `sanitizeDataForNewSchema` call in `nestedData[key]`\n * - Otherwise, check for default or const values:\n * - Get the old and new `default` values from the schema and check:\n * - If the new `default` value does not match the form value:\n * - If the key is new and its form value is undefined, or the old `default` matches the form value, then:\n * - Replace `removeOldSchemaData[key]` with the new `default`\n * - Otherwise, if the new schema is `readOnly` then replace `removeOldSchemaData[key]` with undefined\n * - Get the old and new `const` values from the schema and check:\n * - If the new `const` value does not match the form value:\n * - If the old `const` value DOES match the form value, then:\n * - Replace `removeOldSchemaData[key]` with the new `const`\n * - Otherwise, replace `removeOldSchemaData[key]` with undefined\n * - Once all keys have been processed, return an object built as follows:\n * - `{ ...data, ...removeOldSchemaData, ...nestedData }`\n * - If the new and old schema types are array and the `data` is an array then:\n * - If the type of the old and new schema `items` are a non-array objects:\n * - Retrieve the schema for any refs within each `oldKeySchema.items` and/or `newKeySchema.items`\n * - If the `type`s of both items are the same (or the old does not have a type):\n * - If the type is \"object\", then:\n * - For each element in the `data` recursively sanitize the data, stopping at `maxItems` if specified\n * - Otherwise, just return the `data` removing any values after `maxItems` if it is set\n * - If the type of the old and new schema `items` are booleans of the same value, return `data` as is\n * - Otherwise return `undefined`\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param rootSchema - The root JSON schema of the entire form\n * @param [newSchema] - The new schema for which the data is being sanitized\n * @param [oldSchema] - The old schema from which the data originated\n * @param [data={}] - The form data associated with the schema, defaulting to an empty object when undefined\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The new form data, with all the fields uniquely associated with the old schema set\n * to `undefined`. Will return `undefined` if the new schema is not an object containing properties.\n */\nexport default function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {\n // By default, we will clear the form data\n let newFormData;\n const newProperties = newSchema?.[PROPERTIES_KEY];\n // If the new schema is of type object and that object contains a list of properties\n if (newProperties) {\n // Create an object containing root-level keys in the old schema, setting each key to undefined to remove the data\n const removeOldSchemaData = {};\n const oldProperties = oldSchema?.[PROPERTIES_KEY];\n if (oldProperties) {\n Object.keys(oldProperties).forEach((key) => {\n if (hasByPath(data, key)) {\n removeOldSchemaData[key] = undefined;\n }\n });\n }\n const keys = Object.keys(newProperties);\n // Create a place to store nested data that will be a side-effect of the filter\n const nestedData = {};\n keys.forEach((key) => {\n const formValue = data?.[key];\n const isNewProperty = !hasByPath(oldSchema, [PROPERTIES_KEY, key]);\n const oldRawKeyedSchema = getPropertySchema(oldSchema, key);\n const newRawKeyedSchema = getPropertySchema(newSchema, key);\n // Resolve refs, dependencies, if/then/else and allOf so a dependency nested inside this key\n // (not just at the root schema) is taken into account when sanitizing its data (#5250)\n const oldKeyedSchema = retrieveSchema(validator, oldRawKeyedSchema, rootSchema, formValue, experimental_customMergeAllOf);\n // The old and new raw schema for a key are usually identical (most keys aren't touched by whatever changed),\n // so skip resolving (and re-running any oneOf/dependency validity checks) a second time in that common case.\n const newKeyedSchema = deepEquals(oldRawKeyedSchema, newRawKeyedSchema)\n ? oldKeyedSchema\n : retrieveSchema(validator, newRawKeyedSchema, rootSchema, formValue, experimental_customMergeAllOf);\n // Now get types and see if they are the same\n const oldSchemaTypeForKey = oldKeyedSchema.type;\n const newSchemaTypeForKey = newKeyedSchema.type;\n // Check if the old option has the same key with the same type\n if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {\n if (key in removeOldSchemaData) {\n // SIDE-EFFECT: remove the undefined value for a key that has the same type between the old and new schemas\n delete removeOldSchemaData[key];\n }\n // If it is an object, we'll recurse and store the resulting sanitized data for the key\n if (newSchemaTypeForKey === 'object' || (newSchemaTypeForKey === 'array' && Array.isArray(formValue))) {\n // SIDE-EFFECT: process the new schema type of object recursively to save iterations\n const itemData = sanitizeDataForNewSchema(validator, rootSchema, newKeyedSchema, isNewProperty && newSchemaTypeForKey === 'array' ? newKeyedSchema : oldKeyedSchema, formValue, experimental_customMergeAllOf);\n if (itemData !== undefined || newSchemaTypeForKey === 'array') {\n // only put undefined values for the array type and not the object type\n nestedData[key] = itemData;\n }\n }\n else {\n // Ok, the non-object types match, let's make sure that a default or a const of a different value is replaced\n // with the new default or const. This allows the case where two schemas differ that only by the default/const\n // value to be properly selected\n const newOptionDefault = getByPath(newKeyedSchema, DEFAULT_KEY, NO_VALUE);\n const oldOptionDefault = getByPath(oldKeyedSchema, DEFAULT_KEY, NO_VALUE);\n if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {\n if ((isNewProperty && formValue === undefined) || oldOptionDefault === formValue) {\n // Initialize a newly entered property or replace an old default with the new default.\n removeOldSchemaData[key] = newOptionDefault;\n }\n else if (newKeyedSchema.readOnly === true) {\n // If the new schema has the default set to read-only, treat it like a const and remove the value\n removeOldSchemaData[key] = undefined;\n }\n }\n const newOptionConst = getByPath(newKeyedSchema, CONST_KEY, NO_VALUE);\n const oldOptionConst = getByPath(oldKeyedSchema, CONST_KEY, NO_VALUE);\n if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {\n // Since this is a const, if the old value matches, replace the value with the new const otherwise clear it\n removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : undefined;\n }\n if (hasByPath(data, key)) {\n const enumReplacement = replacementForInvalidEnumValue(newKeyedSchema, formValue);\n if (enumReplacement !== NO_VALUE) {\n removeOldSchemaData[key] = enumReplacement;\n }\n }\n }\n }\n });\n newFormData = {\n ...(typeof data === 'string' || Array.isArray(data) ? undefined : data),\n ...removeOldSchemaData,\n ...nestedData,\n };\n // First apply removing the old schema data, then apply the nested data, then apply the old data keys to keep\n }\n else if (oldSchema?.type === 'array' && newSchema?.type === 'array' && Array.isArray(data)) {\n let oldSchemaItems = oldSchema.items;\n let newSchemaItems = newSchema.items;\n // If any of the array types `items` are arrays (remember arrays are objects) then we'll just drop the data\n // Eventually, we may want to deal with when either of the `items` are arrays since those tuple validations\n if (typeof oldSchemaItems === 'object' &&\n typeof newSchemaItems === 'object' &&\n !Array.isArray(oldSchemaItems) &&\n !Array.isArray(newSchemaItems)) {\n // Keep the raw (pre-resolution) items schema around: a conditional nested inside `items` must be\n // re-resolved per element below, against that element's own value, rather than the whole array (#5250)\n const oldSchemaItemsRaw = oldSchemaItems;\n const newSchemaItemsRaw = newSchemaItems;\n // Resolve refs, dependencies, if/then/else and allOf, not just a direct `$ref`, so the type check below\n // reflects an items schema whose object type is only reachable through one of those keywords (#5250)\n oldSchemaItems = retrieveSchema(validator, oldSchemaItemsRaw, rootSchema, data, experimental_customMergeAllOf);\n // The old and new raw items schema are usually identical, so skip resolving a second time in that common case\n newSchemaItems = deepEquals(oldSchemaItemsRaw, newSchemaItemsRaw)\n ? oldSchemaItems\n : retrieveSchema(validator, newSchemaItemsRaw, rootSchema, data, experimental_customMergeAllOf);\n // Now get types and see if they are the same\n const oldSchemaType = getByPath(oldSchemaItems, 'type');\n const newSchemaType = getByPath(newSchemaItems, 'type');\n // Check if the old option has the same key with the same type\n if (!oldSchemaType || oldSchemaType === newSchemaType) {\n const maxItems = newSchema.maxItems ?? -1;\n if (newSchemaType === 'object') {\n newFormData = data.reduce((newValue, aValue) => {\n // Resolve refs, dependencies, if/then/else and allOf against this item's own value, so a conditional\n // nested inside `items` picks the branch that matches this element rather than the whole array (#5250)\n const oldItemSchema = retrieveSchema(validator, oldSchemaItemsRaw, rootSchema, aValue, experimental_customMergeAllOf);\n const newItemSchema = deepEquals(oldSchemaItemsRaw, newSchemaItemsRaw)\n ? oldItemSchema\n : retrieveSchema(validator, newSchemaItemsRaw, rootSchema, aValue, experimental_customMergeAllOf);\n const itemValue = sanitizeDataForNewSchema(validator, rootSchema, newItemSchema, oldItemSchema, aValue, experimental_customMergeAllOf);\n if (itemValue !== undefined && (maxItems < 0 || newValue.length < maxItems)) {\n newValue.push(itemValue);\n }\n return newValue;\n }, []);\n }\n else {\n // Filter out items that are no longer valid in the new items schema (e.g., enum values that changed)\n const newItemEnumValues = enumValuesForSchema(newSchemaItems);\n const filteredData = newItemEnumValues\n ? data.filter((item) => newItemEnumValues.some((v) => deepEquals(v, item)))\n : data;\n newFormData = maxItems > 0 && filteredData.length > maxItems ? filteredData.slice(0, maxItems) : filteredData;\n }\n }\n }\n else if (typeof oldSchemaItems === 'boolean' &&\n typeof newSchemaItems === 'boolean' &&\n oldSchemaItems === newSchemaItems) {\n // If they are both booleans and have the same value just return the data as is otherwise fall-thru to undefined\n newFormData = data;\n }\n // Also probably want to deal with `prefixItems` as tuples with the latest 2020 draft\n }\n return newFormData;\n}\n//# sourceMappingURL=sanitizeDataForNewSchema.js.map","// oxlint-disable typescript/no-deprecated\nimport { ADDITIONAL_PROPERTIES_KEY, ALL_OF_KEY, ANY_OF_KEY, DEPENDENCIES_KEY, IF_KEY, ITEMS_KEY, NAME_KEY, ONE_OF_KEY, PROPERTIES_KEY, REF_KEY, RJSF_ADDITIONAL_PROPERTIES_FLAG, } from \"../constants.js\";\nimport deepEquals from \"../deepEquals.js\";\nimport getDiscriminatorFieldFromSchema from \"../getDiscriminatorFieldFromSchema.js\";\nimport getPropertySchema from \"../getPropertySchema.js\";\nimport isObject from \"../isObject.js\";\nimport { getByPath, setByPath } from \"../pathUtils.js\";\nimport getClosestMatchingOption from \"./getClosestMatchingOption.js\";\nimport retrieveSchema from \"./retrieveSchema.js\";\n/** An internal helper that generates an `PathSchema` object for the `schema`, recursively with protection against\n * infinite recursion\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the `PathSchema` is desired\n * @param [name=''] - The base name for the schema\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [_recurseList=[]] - The list of retrieved schemas currently being recursed, used to prevent infinite recursion\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The `PathSchema` object for the `schema`\n */\nfunction toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {\n if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {\n const innerSchema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);\n const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, innerSchema));\n if (sameSchemaIndex === -1) {\n return toPathSchemaInternal(validator, innerSchema, name, rootSchema, formData, _recurseList.concat(innerSchema), experimental_customMergeAllOf);\n }\n }\n let pathSchema = {\n [NAME_KEY]: name.replace(/^\\./, ''),\n };\n if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {\n const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const index = getClosestMatchingOption(validator, rootSchema, formData, xxxOf, 0, discriminator, experimental_customMergeAllOf);\n const innerSchema = xxxOf[index];\n pathSchema = {\n ...pathSchema,\n ...toPathSchemaInternal(validator, innerSchema, name, rootSchema, formData, _recurseList, experimental_customMergeAllOf),\n };\n }\n if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {\n setByPath(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);\n const additionalSchema = (isObject(schema[ADDITIONAL_PROPERTIES_KEY]) ? schema[ADDITIONAL_PROPERTIES_KEY] : {});\n const definedProperties = schema[PROPERTIES_KEY] ?? {};\n for (const key of Object.keys((formData ?? {}))) {\n if (!(key in definedProperties)) {\n pathSchema[key] = toPathSchemaInternal(validator, additionalSchema, `${name}.${key}`, rootSchema, getByPath(formData, key), _recurseList, experimental_customMergeAllOf);\n }\n }\n }\n if (ITEMS_KEY in schema && Array.isArray(formData)) {\n const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;\n if (Array.isArray(schemaItems)) {\n formData.forEach((element, i) => {\n if (schemaItems[i]) {\n pathSchema[i] = toPathSchemaInternal(validator, schemaItems[i], `${name}.${i}`, rootSchema, element, _recurseList, experimental_customMergeAllOf);\n }\n else if (schemaAdditionalItems) {\n pathSchema[i] = toPathSchemaInternal(validator, schemaAdditionalItems, `${name}.${i}`, rootSchema, element, _recurseList, experimental_customMergeAllOf);\n }\n else {\n // oxlint-disable-next-line no-console\n console.warn(`Unable to generate path schema for \"${name}.${i}\". No schema defined for it`);\n }\n });\n }\n else {\n formData.forEach((element, i) => {\n pathSchema[i] = toPathSchemaInternal(validator, schemaItems, `${name}.${i}`, rootSchema, element, _recurseList, experimental_customMergeAllOf);\n });\n }\n }\n else if (PROPERTIES_KEY in schema) {\n // This is a deprecated function that is no longer used by RJSF\n // oxlint-disable-next-line guard-for-in\n for (const property in schema.properties) {\n const field = getPropertySchema(schema, property);\n pathSchema[property] = toPathSchemaInternal(validator, field, `${name}.${property}`, rootSchema, \n // It's possible that formData is not an object -- this can happen if an\n // array item has just been added, but not populated with data yet\n getByPath(formData, property), _recurseList, experimental_customMergeAllOf);\n }\n }\n return pathSchema;\n}\n/** Generates an `PathSchema` object for the `schema`, recursively\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be used when necessary\n * @param schema - The schema for which the `PathSchema` is desired\n * @param [name=''] - The base name for the schema\n * @param [rootSchema] - The root schema, used to primarily to look up `$ref`s\n * @param [formData] - The current formData, if any, to assist retrieving a schema\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - The `PathSchema` object for the `schema`\n * @deprecated - To be removed as an exported `@rjsf/utils` function in a future release\n */\nexport default function toPathSchema(validator, schema, name = '', rootSchema, formData, experimental_customMergeAllOf) {\n return toPathSchemaInternal(validator, schema, name, rootSchema, formData, undefined, experimental_customMergeAllOf);\n}\n//# sourceMappingURL=toPathSchema.js.map","import { ID_KEY, JSON_SCHEMA_DRAFT_2020_12, SCHEMA_KEY } from \"./constants.js\";\nimport deepEquals from \"./deepEquals.js\";\nimport { makeAllReferencesAbsolute } from \"./findSchemaDefinition.js\";\nimport { findFieldInSchema, findSelectedOptionInXxxOf, getDefaultFormState, getDisplayLabel, getClosestMatchingOption, getFirstMatchingOption, getFromSchema, isFilesArray, isMultiSelect, isSelect, omitExtraData, retrieveSchema, sanitizeDataForNewSchema, toPathSchema, } from \"./schema/index.js\";\n/** The `SchemaUtils` class provides a wrapper around the publicly exported APIs in the `utils/schema` directory such\n * that one does not have to explicitly pass the `validator`, `rootSchema`, `experimental_defaultFormStateBehavior` or\n * `experimental_customMergeAllOf` to each method. Since these generally do not change across a `Form`, this allows for\n * providing a simplified set of APIs to the `@rjsf/core` components and the various themes as well. This class\n * implements the `SchemaUtilsType` interface.\n */\nclass SchemaUtils {\n rootSchema;\n validator;\n experimental_defaultFormStateBehavior;\n experimental_customMergeAllOf;\n /** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param experimental_defaultFormStateBehavior - Configuration flags to allow users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n */\n constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {\n if (rootSchema?.[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {\n this.rootSchema = makeAllReferencesAbsolute(rootSchema, rootSchema[ID_KEY] ?? '#');\n }\n else {\n this.rootSchema = rootSchema;\n }\n this.validator = validator;\n this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;\n this.experimental_customMergeAllOf = experimental_customMergeAllOf;\n }\n /** Returns the `rootSchema` in the `SchemaUtilsType`\n *\n * @returns - The `rootSchema`\n */\n getRootSchema() {\n return this.rootSchema;\n }\n /** Returns the `ValidatorType` in the `SchemaUtilsType`\n *\n * @returns - The `ValidatorType`\n */\n getValidator() {\n return this.validator;\n }\n /** Determines whether either the `validator` and `rootSchema` differ from the ones associated with this instance of\n * the `SchemaUtilsType`. If either `validator` or `rootSchema` are falsy, then return false to prevent the creation\n * of a new `SchemaUtilsType` with incomplete properties.\n *\n * @param validator - An implementation of the `ValidatorType` interface that will be compared against the current one\n * @param rootSchema - The root schema that will be compared against the current one\n * @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - True if the `SchemaUtilsType` differs from the given `validator` or `rootSchema`\n */\n doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {\n // If either validator or rootSchema are falsy, return false to prevent the creation\n // of a new SchemaUtilsType with incomplete properties.\n if (!validator || !rootSchema) {\n return false;\n }\n return (this.validator !== validator ||\n !deepEquals(this.rootSchema, rootSchema) ||\n !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior) ||\n this.experimental_customMergeAllOf !== experimental_customMergeAllOf);\n }\n /** Finds the field specified by the `path` within the root or recursed `schema`. If there is no field for the specified\n * `path`, then the default `{ field: undefined, isRequired: undefined }` is returned. It determines whether a leaf\n * field is in the `required` list for its parent and if so, it is marked as required on return.\n *\n * @param schema - The current node within the JSON schema\n * @param path - The remaining keys in the path to the desired field\n * @param [formData] - The form data that is used to determine which oneOf option\n * @returns - An object that contains the field and its required state. If no field can be found then\n * `{ field: undefined, isRequired: undefined }` is returned.\n */\n findFieldInSchema(schema, path, formData) {\n return findFieldInSchema(this.validator, this.rootSchema, schema, path, formData, this.experimental_customMergeAllOf);\n }\n /** Finds the oneOf option inside the `schema['any/oneOf']` list which has the `properties[selectorField].default` that\n * matches the `formData[selectorField]` value. For the purposes of this function, `selectorField` is either\n * `schema.discriminator.propertyName` or `fallbackField`.\n *\n * @param schema - The schema element in which to search for the selected oneOf option\n * @param fallbackField - The field to use as a backup selector field if the schema does not have a required field\n * @param xxx - Either `oneOf` or `anyOf`, defines which value is being sought\n * @param [formData={}] - The form data that is used to determine which oneOf option\n * @returns - The anyOf/oneOf option that matches the selector field in the schema or undefined if nothing is selected\n */\n findSelectedOptionInXxxOf(schema, fallbackField, xxx, formData) {\n return findSelectedOptionInXxxOf(this.validator, this.rootSchema, schema, fallbackField, xxx, formData, this.experimental_customMergeAllOf);\n }\n /** Returns the superset of `formData` that includes the given set updated to include any missing fields that have\n * computed to have defaults provided in the `schema`.\n *\n * @param schema - The schema for which the default state is desired\n * @param [formData] - The current formData, if any, onto which to provide any missing defaults\n * @param [includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults.\n * If \"excludeObjectChildren\", pass `includeUndefinedValues` as false when computing defaults for any nested\n * object properties.\n * @param initialDefaultsGenerated - Indicates whether or not initial defaults have been generated\n * @returns - The resulting `formData` with all the defaults provided\n */\n getDefaultFormState(schema, formData, includeUndefinedValues = false, initialDefaultsGenerated) {\n return getDefaultFormState(this.validator, schema, formData, this.rootSchema, includeUndefinedValues, this.experimental_defaultFormStateBehavior, this.experimental_customMergeAllOf, initialDefaultsGenerated);\n }\n /** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`\n * should be displayed in a UI.\n *\n * @param schema - The schema for which the display label flag is desired\n * @param [uiSchema] - The UI schema from which to derive potentially displayable information\n * @param [globalOptions={}] - The optional Global UI Schema from which to get any fallback `xxx` options\n * @returns - True if the label should be displayed or false if it should not\n */\n getDisplayLabel(schema, uiSchema, globalOptions) {\n return getDisplayLabel(this.validator, schema, uiSchema, this.rootSchema, globalOptions, this.experimental_customMergeAllOf);\n }\n /** Determines which of the given `options` provided most closely matches the `formData`.\n * Returns the index of the option that is valid and is the closest match, or 0 if there is no match.\n *\n * The closest match is determined using the number of matching properties, and more heavily favors options with\n * matching readOnly, default, or const values.\n *\n * @param formData - The form data associated with the schema\n * @param options - The list of options that can be selected from\n * @param [selectedOption] - The index of the currently selected option, defaulted to -1 if not specified\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The index of the option that is the closest match to the `formData` or the `selectedOption` if no match\n */\n getClosestMatchingOption(formData, options, selectedOption, discriminatorField) {\n return getClosestMatchingOption(this.validator, this.rootSchema, formData, options, selectedOption, discriminatorField, this.experimental_customMergeAllOf);\n }\n /** Given the `formData` and list of `options`, attempts to find the index of the first option that matches the data.\n * Always returns the first option if there is nothing that matches.\n *\n * @param formData - The current formData, if any, used to figure out a match\n * @param options - The list of options to find a matching options from\n * @param [discriminatorField] - The optional name of the field within the options object whose value is used to\n * determine which option is selected\n * @returns - The firstindex of the matched option or 0 if none is available\n */\n getFirstMatchingOption(formData, options, discriminatorField) {\n return getFirstMatchingOption(this.validator, formData, options, this.rootSchema, discriminatorField);\n }\n getFromSchema(schema, path, defaultValue) {\n return getFromSchema(this.validator, this.rootSchema, schema, path, \n // @ts-expect-error TS2769: No overload matches this call\n defaultValue, this.experimental_customMergeAllOf);\n }\n /** Checks to see if the `schema` and `uiSchema` combination represents an array of files\n *\n * @param schema - The schema for which check for array of files flag is desired\n * @param [uiSchema] - The UI schema from which to check the widget\n * @returns - True if schema/uiSchema contains an array of files, otherwise false\n */\n isFilesArray(schema, uiSchema) {\n return isFilesArray(this.validator, schema, uiSchema, this.rootSchema, this.experimental_customMergeAllOf);\n }\n /** Checks to see if the `schema` combination represents a multi-select\n *\n * @param schema - The schema for which check for a multi-select flag is desired\n * @returns - True if schema contains a multi-select, otherwise false\n */\n isMultiSelect(schema) {\n return isMultiSelect(this.validator, schema, this.rootSchema, this.experimental_customMergeAllOf);\n }\n /** Checks to see if the `schema` combination represents a select\n *\n * @param schema - The schema for which check for a select flag is desired\n * @returns - True if schema contains a select, otherwise false\n */\n isSelect(schema) {\n return isSelect(this.validator, schema, this.rootSchema, this.experimental_customMergeAllOf);\n }\n /**\n * The function takes a `schema` and `formData` and returns a copy of the formData with any fields not defined in the schema removed.\n * This is useful for ensuring that only data that is relevant to the schema is preserved. Objects with `additionalProperties`\n * keyword set to `true` will not have their extra fields removed.\n *\n * @param schema - The schema to use for filtering the `formData`\n * @param [formData] - The formData to filter\n * @returns The new form data, with any fields not defined in the schema removed\n */\n omitExtraData(schema, formData) {\n return omitExtraData(this.validator, schema, this.rootSchema, formData);\n }\n /** Retrieves an expanded schema that has had all of its conditions, additional properties, references and\n * dependencies resolved and merged into the `schema` given a `rawFormData` that is used to do the potentially\n * recursive resolution.\n *\n * @param schema - The schema for which retrieving a schema is desired\n * @param [rawFormData] - The current formData, if any, to assist retrieving a schema\n * @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists\n * @returns - The schema having its conditions, additional properties, references and dependencies resolved\n */\n retrieveSchema(schema, rawFormData, resolveAnyOfOrOneOfRefs) {\n return retrieveSchema(this.validator, schema, this.rootSchema, rawFormData, this.experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs);\n }\n /** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the\n * new schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the\n * nature of schemas, this sanitization happens recursively for nested objects of data. Also, any properties in the\n * old schemas that are non-existent in the new schema are set to `undefined`.\n *\n * @param [newSchema] - The new schema for which the data is being sanitized\n * @param [oldSchema] - The old schema from which the data originated\n * @param [data={}] - The form data associated with the schema, defaulting to an empty object when undefined\n * @returns - The new form data, with all the fields uniquely associated with the old schema set\n * to `undefined`. Will return `undefined` if the new schema is not an object containing properties.\n */\n sanitizeDataForNewSchema(newSchema, oldSchema, data) {\n return sanitizeDataForNewSchema(this.validator, this.rootSchema, newSchema, oldSchema, data, this.experimental_customMergeAllOf);\n }\n /** Generates an `PathSchema` object for the `schema`, recursively\n *\n * @param schema - The schema for which the display label flag is desired\n * @param [name] - The base name for the schema\n * @param [formData] - The current formData, if any, onto which to provide any missing defaults\n * @returns - The `PathSchema` object for the `schema`\n */\n // oxlint-disable-next-line typescript/no-deprecated\n toPathSchema(schema, name, formData) {\n // oxlint-disable-next-line typescript/no-deprecated\n return toPathSchema(this.validator, schema, name, this.rootSchema, formData, this.experimental_customMergeAllOf);\n }\n}\n/** Creates a `SchemaUtilsType` interface that is based around the given `validator` and `rootSchema` parameters. The\n * resulting interface implementation will forward the `validator` and `rootSchema` to all the wrapped APIs.\n *\n * @param validator - an implementation of the `ValidatorType` interface that will be forwarded to all the APIs\n * @param rootSchema - The root schema that will be forwarded to all the APIs\n * @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior\n * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas\n * @returns - An implementation of a `SchemaUtilsType` interface\n */\nexport default function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {\n return new SchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n}\n//# sourceMappingURL=createSchemaUtils.js.map","/** Given the `FileReader.readAsDataURL()` based `dataURI` extracts that data into an actual Blob along with the name\n * of that Blob if provided in the URL. If no name is provided, then the name falls back to `unknown`.\n *\n * @param dataURI - The `DataUrl` potentially containing name and raw data to be converted to a Blob\n * @returns - an object containing a Blob and its name, extracted from the URI\n */\nexport default function dataURItoBlob(dataURILike) {\n // check if is dataURI\n if (!dataURILike.includes('data:')) {\n throw new Error('File is invalid: URI must be a dataURI');\n }\n const dataURI = dataURILike.slice(5);\n // split the dataURI into media and base64, with the base64 signature\n const splitted = dataURI.split(';base64,');\n // if the base64 signature is not present, the latter part will become empty\n if (splitted.length !== 2) {\n throw new Error('File is invalid: dataURI must be base64');\n }\n // extract the mime type, media parameters including the name, and the base64 string\n const [media, base64] = splitted;\n const [mime, ...mediaparams] = media.split(';');\n const type = mime || '';\n // extract the name from the parameters\n const name = decodeURI(\n // parse the parameters into key-value pairs, find a key, and extract a value\n // if no key is found, then the name is unknown\n mediaparams.map((param) => param.split('=')).find(([key]) => key === 'name')?.[1] || 'unknown');\n // Built the Uint8Array Blob parameter from the base64 string.\n try {\n const binary = atob(base64);\n const array = new Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n array[i] = binary.charCodeAt(i);\n }\n // Create the blob object\n const blob = new window.Blob([new Uint8Array(array)], { type });\n return { blob, name };\n }\n catch (error) {\n throw new Error(`File is invalid: ${error.message}`);\n }\n}\n//# sourceMappingURL=dataURItoBlob.js.map","/** Returns a string representation of the `num` that is padded with leading \"0\"s if necessary\n *\n * @param num - The number to pad\n * @param width - The width of the string at which no lead padding is necessary\n * @returns - The number converted to a string with leading zero padding if the number of digits is less than `width`\n */\nexport default function pad(num, width) {\n let s = String(num);\n while (s.length < width) {\n s = `0${s}`;\n }\n return s;\n}\n//# sourceMappingURL=pad.js.map","import pad from \"./pad.js\";\n/** Returns a list of options for a date range between `start` and `stop`. If the start date is greater than the end\n * date, then the date range is reversed. If `start` and `stop` are negative numbers (or zero), then they will be\n * treated as relative to the current year.\n *\n * @param start - The starting point of the date range\n * @param stop - The ending point of the date range\n * @returns - The list of EnumOptionsType for the date range between `start` and `stop`\n * @throws - Error when `start` and `stop` aren't both <= 0 or > 0\n */\nexport default function dateRangeOptions(start, stop) {\n const bothRelative = start <= 0 && stop <= 0;\n const eitherNegative = start < 0 || stop < 0;\n if (!bothRelative && eitherNegative) {\n throw new Error(`Both start (${start}) and stop (${stop}) must both be <= 0 or > 0, got one of each`);\n }\n const currentYear = new Date().getFullYear();\n const resolvedStart = bothRelative ? currentYear + start : start;\n const resolvedStop = bothRelative ? currentYear + stop : stop;\n if (resolvedStart > resolvedStop) {\n return dateRangeOptions(stop, start).reverse();\n }\n const options = [];\n for (let i = resolvedStart; i <= resolvedStop; i += 1) {\n options.push({ value: i, label: pad(i, 2) });\n }\n return options;\n}\n//# sourceMappingURL=dateRangeOptions.js.map","/** Potentially substitutes all replaceable parameters with the associated value(s) from the `params` if available. When\n * a `params` array is provided, each value in the array is used to replace any of the replaceable parameters in the\n * `inputString` using the `%1`, `%2`, etc. replacement specifiers.\n *\n * @param inputString - The string which will be potentially updated with replacement parameters\n * @param params - The optional list of replaceable parameter values to substitute into the english string\n * @returns - The updated string with any replacement specifiers replaced\n */\nexport default function replaceStringParameters(inputString, params) {\n let output = inputString;\n if (Array.isArray(params)) {\n const parts = output.split(/(%\\d)/);\n params.forEach((param, index) => {\n const partIndex = parts.findIndex((part) => part === `%${index + 1}`);\n if (partIndex >= 0) {\n parts[partIndex] = param;\n }\n });\n output = parts.join('');\n }\n return output;\n}\n//# sourceMappingURL=replaceStringParameters.js.map","import replaceStringParameters from \"./replaceStringParameters.js\";\n/** Translates a `TranslatableString` value `stringToTranslate` into english. When a `params` array is provided, each\n * value in the array is used to replace any of the replaceable parameters in the `stringToTranslate` using the `%1`,\n * `%2`, etc. replacement specifiers.\n *\n * @param stringToTranslate - The `TranslatableString` value to convert to english\n * @param params - The optional list of replaceable parameter values to substitute into the english string\n * @returns - The `stringToTranslate` itself with any replaceable parameter values substituted\n */\nexport default function englishStringTranslator(stringToTranslate, params) {\n return replaceStringParameters(stringToTranslate, params);\n}\n//# sourceMappingURL=englishStringTranslator.js.map","/** Returns the value(s) from `allEnumOptions` at the index(es) provided by `valueIndex`. If `valueIndex` is not an\n * array AND the index is not valid for `allEnumOptions`, `emptyValue` is returned. If `valueIndex` is an array, AND it\n * contains an invalid index, the returned array will have the resulting undefined values filtered out, leaving only\n * valid values or in the worst case, an empty array.\n *\n * @param valueIndex - The index(es) of the value(s) that should be returned\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @param [emptyValue] - The value to return when the non-array `valueIndex` does not refer to a real option\n * @returns - The single or list of values specified by the single or list of indexes if they are valid. Otherwise,\n * `emptyValue` or an empty list.\n */\nexport default function enumOptionsValueForIndex(valueIndex, allEnumOptions = [], emptyValue) {\n if (Array.isArray(valueIndex)) {\n return (valueIndex\n .map((index) => enumOptionsValueForIndex(index, allEnumOptions))\n // The recursive call returns undefined for a bad option, filter those out\n .filter((val) => val !== undefined));\n }\n // So Number(null) and Number('') both return 0, so use emptyValue for those two values\n const index = valueIndex === '' || valueIndex === null ? -1 : Number(valueIndex);\n const option = allEnumOptions[index];\n return option ? option.value : emptyValue;\n}\n//# sourceMappingURL=enumOptionsValueForIndex.js.map","import deepEquals from \"./deepEquals.js\";\nimport enumOptionsValueForIndex from \"./enumOptionsValueForIndex.js\";\n/** Removes the enum option value at the `valueIndex` from the currently `selected` (list of) value(s). If `selected` is\n * a list, then that list is updated to remove the enum option value with the `valueIndex` in `allEnumOptions`. If it is\n * a single value, then if the enum option value with the `valueIndex` in `allEnumOptions` matches `selected`, undefined\n * is returned, otherwise the `selected` value is returned.\n *\n * @param valueIndex - The index of the value to be removed from the selected list or single value\n * @param selected - The current (list of) selected value(s)\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @returns - The updated `selected` with the enum option value at `valueIndex` in `allEnumOptions` removed from it,\n * unless `selected` is a single value. In that case, if the `valueIndex` value matches `selected`, returns\n * undefined, otherwise `selected`.\n */\nexport default function enumOptionsDeselectValue(valueIndex, selected, allEnumOptions = []) {\n const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);\n if (Array.isArray(selected)) {\n return selected.filter((v) => !deepEquals(v, value));\n }\n return deepEquals(value, selected) ? undefined : selected;\n}\n//# sourceMappingURL=enumOptionsDeselectValue.js.map","import deepEquals from \"./deepEquals.js\";\n/** Determines whether the given `value` is (one of) the `selected` value(s).\n *\n * @param value - The value being checked to see if it is selected\n * @param selected - The current selected value or list of values\n * @returns - true if the `value` is one of the `selected` ones, false otherwise\n */\nexport default function enumOptionsIsSelected(value, selected) {\n if (Array.isArray(selected)) {\n return selected.some((sel) => deepEquals(sel, value));\n }\n return deepEquals(selected, value);\n}\n//# sourceMappingURL=enumOptionsIsSelected.js.map","import enumOptionsIsSelected from \"./enumOptionsIsSelected.js\";\n/** Returns the index(es) of the options in `allEnumOptions` whose value(s) match the ones in `value`. All the\n * `enumOptions` are filtered based on whether they are a \"selected\" `value` and the index of each selected one is then\n * stored in an array. If `multiple` is true, that array is returned, otherwise the first element in the array is\n * returned.\n *\n * @param value - The single value or list of values for which indexes are desired\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @param [multiple=false] - Optional flag, if true will return a list of index, otherwise a single one\n * @returns - A single string index for the first `value` in `allEnumOptions`, if not `multiple`. Otherwise, the list\n * of indexes for (each of) the value(s) in `value`.\n */\nexport default function enumOptionsIndexForValue(value, allEnumOptions = [], multiple = false) {\n const selectedIndexes = allEnumOptions\n .map((opt, index) => (enumOptionsIsSelected(opt.value, value) ? String(index) : undefined))\n .filter((opt) => typeof opt !== 'undefined');\n if (!multiple) {\n return selectedIndexes[0];\n }\n return selectedIndexes;\n}\n//# sourceMappingURL=enumOptionsIndexForValue.js.map","import enumOptionsIndexForValue from \"./enumOptionsIndexForValue.js\";\n/** Computes the value to pass to a select element's `value` attribute.\n *\n * When `format` is `'realValue'`, converts form data values to strings.\n * When `format` is `'indexed'` (the default), resolves to index-based values via\n * `enumOptionsIndexForValue`. Returns `emptyValue` when the current value is empty.\n *\n * @param value - The current form data value\n * @param enumOptions - The available enum options\n * @param multiple - Whether the select allows multiple selections\n * @param [format='indexed'] - How option values are encoded on the DOM\n * @param emptyValue - The value to return when the selection is empty\n * @returns The value to use for the select element's `value` attribute\n */\nexport default function enumOptionSelectedValue(value, enumOptions, multiple, format = 'indexed', emptyValue) {\n const isEmpty = typeof value === 'undefined' ||\n (multiple && Array.isArray(value) && value.length < 1) ||\n (!multiple && value === emptyValue);\n if (isEmpty) {\n return emptyValue;\n }\n if (format === 'realValue') {\n return multiple ? value.map(String) : String(value);\n }\n const indexes = enumOptionsIndexForValue(value, enumOptions, multiple);\n return typeof indexes === 'undefined' ? emptyValue : indexes;\n}\n//# sourceMappingURL=enumOptionSelectedValue.js.map","import enumOptionsValueForIndex from \"./enumOptionsValueForIndex.js\";\n/** Add the enum option value at the `valueIndex` to the list of `selected` values in the proper order as defined by\n * `allEnumOptions`\n *\n * @param valueIndex - The index of the value that should be selected\n * @param selected - The current list of selected values\n * @param [allEnumOptions=[]] - The list of all the known enumOptions\n * @returns - The updated list of selected enum values with enum value at the `valueIndex` added to it\n */\nexport default function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {\n const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);\n if (value != null) {\n const index = allEnumOptions.findIndex((opt) => value === opt.value);\n const all = allEnumOptions.map(({ value: val }) => val);\n const updated = selected.slice(0, index).concat(value, selected.slice(index));\n // As inserting values at predefined index positions doesn't work with empty\n // arrays, we need to reorder the updated selection to match the initial order\n return updated.sort((a, b) => Number(all.indexOf(a) > all.indexOf(b)));\n }\n return selected;\n}\n//# sourceMappingURL=enumOptionsSelectValue.js.map","import enumOptionsValueForIndex from \"./enumOptionsValueForIndex.js\";\n/** Resolves a single DOM value string back to its typed enum value in `'realValue'` mode.\n *\n * First attempts a reverse lookup by matching `String(opt.value)` against the input.\n * If no option matches and the input parses as a valid index, falls back to the\n * option at that index — this is how object/array enum values round-trip, since\n * they are encoded as indices by the encoder.\n *\n * @param value - A single string value from a DOM attribute\n * @param enumOptions - The available enum options\n * @param emptyValue - The value to return when the input is empty, options are missing, or no match is found\n * @returns The original typed enum value, or `emptyValue`\n */\nfunction decodeSingle(value, enumOptions, emptyValue) {\n if (value === '' || !Array.isArray(enumOptions)) {\n return emptyValue;\n }\n const match = enumOptions.find((opt) => String(opt.value) === value);\n if (match) {\n return match.value;\n }\n // Fallback: value might be an index (for object/array enum values)\n const index = Number(value);\n if (!Number.isNaN(index) && index >= 0 && index < enumOptions.length) {\n return enumOptions[index].value;\n }\n return emptyValue;\n}\n/** Decodes a string from a DOM value attribute back to a typed enum value.\n *\n * When `format` is `'realValue'`, does a reverse lookup: finds the enum option\n * whose `String(value)` matches the input string and returns the original typed value.\n * For object/array values that were encoded as indices, falls back to index resolution.\n *\n * When `format` is `'indexed'` (the default), uses index-based resolution via\n * `enumOptionsValueForIndex`.\n *\n * @param value - The string value(s) from the DOM\n * @param enumOptions - The available enum options\n * @param [format='indexed'] - How the values were encoded on the DOM\n * @param emptyValue - The value to return for empty/missing selections\n * @returns The original typed enum value(s)\n */\nexport default function enumOptionValueDecoder(value, enumOptions, format = 'indexed', emptyValue) {\n if (format !== 'realValue') {\n return enumOptionsValueForIndex(value, enumOptions, emptyValue);\n }\n if (Array.isArray(value)) {\n return value.map((v) => decodeSingle(v, enumOptions, emptyValue));\n }\n return decodeSingle(value, enumOptions, emptyValue);\n}\n//# sourceMappingURL=enumOptionValueDecoder.js.map","/** Encodes an enum option value into a string for a DOM value attribute.\n *\n * When `format` is `'realValue'`, primitive values are converted via `String()`.\n * Non-primitive values (objects, arrays) fall back to the index since\n * `String()` would produce `\"[object Object]\"`.\n *\n * When `format` is `'indexed'` (the default), returns the index as a string.\n *\n * @param value - The typed enum value\n * @param index - The option's position in the enumOptions array\n * @param [format='indexed'] - How to encode the value for the DOM attribute\n * @returns The string to use as the DOM value attribute\n */\nexport default function enumOptionValueEncoder(value, index, format = 'indexed') {\n if (format !== 'realValue') {\n return String(index);\n }\n if (value == null) {\n return '';\n }\n if (typeof value === 'object') {\n return String(index);\n }\n return String(value);\n}\n//# sourceMappingURL=enumOptionValueEncoder.js.map","import { ERRORS_KEY } from \"./constants.js\";\nimport { getByPath, setByPath, toPath } from \"./pathUtils.js\";\n/** The `ErrorSchemaBuilder` is used to build an `ErrorSchema` since the definition of the `ErrorSchema` type is\n * designed for reading information rather than writing it. Use this class to add, replace or clear errors in an error\n * schema by using either dotted path or an array of path names. Once you are done building the `ErrorSchema`, you can\n * get the result and/or reset all the errors back to an initial set and start again.\n */\nexport default class ErrorSchemaBuilder {\n /** The error schema being built\n *\n * @private\n */\n errorSchema = {};\n /** Construct an `ErrorSchemaBuilder` with an optional initial set of errors in an `ErrorSchema`.\n *\n * @param [initialSchema] - The optional set of initial errors, that will be cloned into the class\n */\n constructor(initialSchema) {\n this.resetAllErrors(initialSchema);\n }\n /** Returns the `ErrorSchema` that has been updated by the methods of the `ErrorSchemaBuilder`\n */\n get ErrorSchema() {\n return this.errorSchema;\n }\n /** Will get an existing `ErrorSchema` at the specified `pathOfError` or create and return one.\n *\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to add the error(s)\n * @returns - The error block for the given `pathOfError` or the root if not provided\n * @private\n */\n getOrCreateErrorBlock(pathOfError) {\n // A string path is dotted-path notation, so parse it into its segments\n const path = typeof pathOfError === 'string' ? toPath(pathOfError) : (pathOfError ?? []);\n if (path.length === 0) {\n return this.errorSchema;\n }\n // An `ErrorSchema` only ever nests `ErrorSchema` blocks, so create any missing block along the path,\n // always as a plain object since an `ErrorSchema` is never an array\n let errorBlock = getByPath(this.errorSchema, path);\n if (!errorBlock) {\n errorBlock = {};\n setByPath(this.errorSchema, path, errorBlock, true);\n }\n return errorBlock;\n }\n /** Resets all errors in the `ErrorSchemaBuilder` back to the `initialSchema` if provided, otherwise an empty set.\n *\n * @param [initialSchema] - The optional set of initial errors, that will be cloned into the class\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n resetAllErrors(initialSchema) {\n this.errorSchema = initialSchema ? structuredClone(initialSchema) : {};\n return this;\n }\n /** Adds the `errorOrList` to the list of errors in the `ErrorSchema` at either the root level or the location within\n * the schema described by the `pathOfError`. The path is either a dotted string (with optional bracketed array\n * indexes, e.g. `'a.b[0]'`) or a list of path segments; keys containing dots require the list form.\n *\n * @param errorOrList - The error or list of errors to add into the `ErrorSchema`\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to add the error(s)\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n addErrors(errorOrList, pathOfError) {\n const errorBlock = this.getOrCreateErrorBlock(pathOfError);\n let errorsList = errorBlock[ERRORS_KEY];\n if (!Array.isArray(errorsList)) {\n errorsList = [];\n errorBlock[ERRORS_KEY] = errorsList;\n }\n if (Array.isArray(errorOrList)) {\n errorBlock[ERRORS_KEY] = [...new Set([...errorsList, ...errorOrList])];\n }\n else {\n errorBlock[ERRORS_KEY] = [...new Set([...errorsList, errorOrList])];\n }\n return this;\n }\n /** Sets/replaces the `errorOrList` as the error(s) in the `ErrorSchema` at either the root level or the location\n * within the schema described by the `pathOfError`. The path is either a dotted string (with optional bracketed array\n * indexes, e.g. `'a.b[0]'`) or a list of path segments; keys containing dots require the list form.\n *\n * @param errorOrList - The error or list of errors to set into the `ErrorSchema`\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to set the error(s)\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n setErrors(errorOrList, pathOfError) {\n const errorBlock = this.getOrCreateErrorBlock(pathOfError);\n // Effectively clone the array being given to prevent accidental outside manipulation of the given list\n const listToAdd = Array.isArray(errorOrList) ? [...new Set([...errorOrList])] : [errorOrList];\n errorBlock[ERRORS_KEY] = listToAdd;\n return this;\n }\n /** Clears the error(s) in the `ErrorSchema` at either the root level or the location within the schema described by\n * the `pathOfError`. The path is either a dotted string (with optional bracketed array\n * indexes, e.g. `'a.b[0]'`) or a list of path segments; keys containing dots require the list form.\n *\n * @param [pathOfError] - The optional path into the `ErrorSchema` at which to clear the error(s)\n * @returns - The `ErrorSchemaBuilder` object for chaining purposes\n */\n clearErrors(pathOfError) {\n const errorBlock = this.getOrCreateErrorBlock(pathOfError);\n errorBlock[ERRORS_KEY] = [];\n return this;\n }\n}\n//# sourceMappingURL=ErrorSchemaBuilder.js.map","import deepEquals from \"./deepEquals.js\";\nimport isPlainObject from \"./isPlainObject.js\";\nimport { getByPath } from \"./pathUtils.js\";\n/** Returns the paths of the changed descendants of `a` relative to `b`, relative to the node itself. An empty list\n * means the difference could not be narrowed any further, so the caller should report its own key instead.\n *\n * @param a - The first value, representing the original data to compare\n * @param b - The second value, representing the updated data to compare\n * @returns - An array of dotted paths, relative to `a`\n */\nfunction getChangedDescendants(a, b) {\n if (isPlainObject(a) && isPlainObject(b)) {\n return getChangedFields(a, b, true);\n }\n // Arrays of a different length shift their items around, so nothing below them can be matched up by index.\n if (Array.isArray(a) && Array.isArray(b) && a.length === b.length) {\n return a.flatMap((value, index) => {\n if (deepEquals(value, b[index])) {\n return [];\n }\n const descendants = getChangedDescendants(value, b[index]);\n return descendants.length ? descendants.map((path) => `${index}.${path}`) : [String(index)];\n });\n }\n return [];\n}\n/**\n * Compares two objects and returns the names of the fields that have changed.\n * This function iterates over each field of object `a`, using `deepEquals` to compare the field value\n * with the corresponding field value in object `b`. If the values are different, the field name will\n * be included in the returned array.\n *\n * @param a - The first object, representing the original data to compare.\n * @param b - The second object, representing the updated data to compare.\n * @param [deep=false] - Optional flag that, when true, descends into nested objects and same-length arrays and returns\n * the dotted path of the deepest field that changed rather than the name of the top-level field holding it.\n * @returns - An array of field names that have changed.\n *\n * @example\n * const a = { name: 'John', age: 30 };\n * const b = { name: 'John', age: 31 };\n * const changedFields = getChangedFields(a, b);\n * console.log(changedFields); // Output: ['age']\n *\n * @example\n * const a = { items: [{ qux: '', corge: '' }] };\n * const b = { items: [{ qux: 'a', corge: '' }] };\n * console.log(getChangedFields(a, b)); // Output: ['items']\n * console.log(getChangedFields(a, b, true)); // Output: ['items.0.qux']\n */\nexport default function getChangedFields(a, b, deep = false) {\n if (a === b) {\n return [];\n }\n // If only one of them is a plainObject all of its fields changed; if neither is, nothing did\n if (!isPlainObject(a)) {\n return isPlainObject(b) ? Object.keys(b) : [];\n }\n if (!isPlainObject(b)) {\n return Object.keys(a);\n }\n const aKeys = Object.keys(a);\n const aKeySet = new Set(aKeys);\n const unequalFields = aKeys\n .filter((key) => !deepEquals(a[key], getByPath(b, key)))\n .flatMap((key) => {\n if (!deep) {\n return [key];\n }\n // A key holding a `.` or a `[` is descended into like any other. The path it produces cannot be told apart from\n // a path through nested keys, but neither can the entry an `ErrorSchema` keeps for it, since `toErrorSchema()`\n // spells such a name out as a path in the same way, so the two agree on where the field lives.\n const descendants = getChangedDescendants(a[key], getByPath(b, key));\n return descendants.length ? descendants.map((path) => `${key}.${path}`) : [key];\n });\n const diffFields = Object.keys(b).filter((key) => !aKeySet.has(key));\n return [...unequalFields, ...diffFields];\n}\n//# sourceMappingURL=getChangedFields.js.map","/** Given date & time information with optional yearRange & format, returns props for DateElement\n *\n * @param date - Object containing date with optional time information\n * @param time - Determines whether to include time or not\n * @param [yearRange=[1900, new Date().getFullYear() + 2]] - Controls the list of years to be displayed\n * @param [format='YMD'] - Controls the order in which day, month and year input element will be displayed\n * @returns Array of props for DateElement\n */\nexport default function getDateElementProps(date, time, yearRange = [1900, new Date().getFullYear() + 2], format = 'YMD') {\n const { day, month, year, hour, minute, second } = date;\n const dayObj = { type: 'day', range: [1, 31], value: day };\n const monthObj = { type: 'month', range: [1, 12], value: month };\n const yearObj = { type: 'year', range: yearRange, value: year };\n const dateElementProp = [];\n switch (format) {\n case 'MDY':\n dateElementProp.push(monthObj, dayObj, yearObj);\n break;\n case 'DMY':\n dateElementProp.push(dayObj, monthObj, yearObj);\n break;\n case 'YMD':\n default:\n dateElementProp.push(yearObj, monthObj, dayObj);\n }\n if (time) {\n dateElementProp.push({ type: 'hour', range: [0, 23], value: hour }, { type: 'minute', range: [0, 59], value: minute }, { type: 'second', range: [0, 59], value: second });\n }\n return dateElementProp;\n}\n//# sourceMappingURL=getDateElementProps.js.map","/** Extracts the range spec information `{ step?: number, min?: number, max?: number }` that can be spread onto an HTML\n * input from the range analog in the schema `{ multipleOf?: number, minimum?: number, maximum?: number }`.\n *\n * @param schema - The schema from which to extract the range spec\n * @returns - A range specification from the schema\n */\nexport default function rangeSpec(schema) {\n const spec = {};\n if (schema.multipleOf) {\n spec.step = schema.multipleOf;\n }\n if (schema.minimum || schema.minimum === 0) {\n spec.min = schema.minimum;\n }\n if (schema.maximum || schema.maximum === 0) {\n spec.max = schema.maximum;\n }\n return spec;\n}\n//# sourceMappingURL=rangeSpec.js.map","import getDecimalSeparator from \"./getDecimalSeparator.js\";\nimport rangeSpec from \"./rangeSpec.js\";\n/** Using the `schema`, `defaultType` and `options`, extract out the props for the element that make sense.\n *\n * @param schema - The schema for the field provided by the widget\n * @param [defaultType] - The default type, if any, for the field provided by the widget\n * @param [options={}] - The UI Options for the field provided by the widget\n * @param [autoDefaultStepAny=true] - Determines whether to auto-default step=any when the type is number and no step\n * @returns - The extracted `InputPropsType` object\n */\nexport default function getInputProps(schema, defaultType, options = {}, autoDefaultStepAny = true) {\n const inputProps = {\n type: defaultType || 'text',\n ...rangeSpec(schema),\n };\n // If options.inputType is set use that as the input type\n if (options.inputType) {\n inputProps.type = options.inputType;\n }\n else if (!defaultType) {\n // If the schema is of type number or integer, set the input type to number\n if (schema.type === 'number') {\n // Native number inputs reject a locale decimal separator other than '.' and can discard it\n // while typing, so fall back to a text input in locales that use one.\n if (getDecimalSeparator() === '.') {\n inputProps.type = 'number';\n // Only add step if one isn't already defined and we are auto-defaulting the \"any\" step\n if (autoDefaultStepAny && inputProps.step === undefined) {\n // Setting step to 'any' fixes a bug in Safari where decimals are not\n // allowed in number inputs\n inputProps.step = 'any';\n }\n }\n else {\n inputProps.type = 'text';\n }\n }\n else if (schema.type === 'integer') {\n inputProps.type = 'number';\n // Only add step if one isn't already defined\n if (inputProps.step === undefined) {\n // Since this is integer, you always want to step up or down in multiples of 1\n inputProps.step = 1;\n }\n }\n }\n // For date/time input types, propagate formatMinimum/formatMaximum to min/max\n if (['date', 'datetime-local', 'time', 'week', 'month'].includes(inputProps.type)) {\n if (schema.formatMinimum !== undefined) {\n inputProps.min = schema.formatMinimum;\n }\n if (schema.formatMaximum !== undefined) {\n inputProps.max = schema.formatMaximum;\n }\n }\n if (options.autocomplete) {\n inputProps.autoComplete = options.autocomplete;\n }\n if (options.autocapitalize) {\n inputProps.autoCapitalize = options.autocapitalize;\n }\n if (options.accept) {\n inputProps.accept = options.accept;\n }\n return inputProps;\n}\n//# sourceMappingURL=getInputProps.js.map","/** Resolves the effective `optionValueFormat` for enum-backed widgets.\n *\n * Provides a single source of truth for the default DOM encoding format\n * (`'indexed'`) used by `SelectWidget`, `RadioWidget`, and `CheckboxesWidget`.\n * Widgets should call this helper once and pass the result to\n * `enumOptionValueEncoder`, `enumOptionValueDecoder`, and `enumOptionSelectedValue`\n * rather than reading `options.optionValueFormat` directly.\n *\n * @param options - The widget options (typically from the `options` prop, already\n * resolved from `ui:options` and `ui:globalOptions`)\n * @returns The resolved `OptionValueFormat`, defaulting to `'indexed'` when not set\n */\nexport default function getOptionValueFormat(options) {\n return options?.optionValueFormat ?? 'indexed';\n}\n//# sourceMappingURL=getOptionValueFormat.js.map","import { SUBMIT_BTN_OPTIONS_KEY } from \"./constants.js\";\nimport getUiOptions from \"./getUiOptions.js\";\n/** The default submit button options, exported for testing purposes\n */\nexport const DEFAULT_OPTIONS = {\n props: {\n disabled: false,\n },\n submitText: 'Submit',\n norender: false,\n};\n/** Extracts any `ui:submitButtonOptions` from the `uiSchema` and merges them onto the `DEFAULT_OPTIONS`\n *\n * @param [uiSchema={}] - the UI Schema from which to extract submit button props\n * @returns - The merging of the `DEFAULT_OPTIONS` with any custom ones\n */\nexport default function getSubmitButtonOptions(uiSchema = {}) {\n const uiOptions = getUiOptions(uiSchema);\n if (uiOptions?.[SUBMIT_BTN_OPTIONS_KEY]) {\n const options = uiOptions[SUBMIT_BTN_OPTIONS_KEY];\n return { ...DEFAULT_OPTIONS, ...options };\n }\n return DEFAULT_OPTIONS;\n}\n//# sourceMappingURL=getSubmitButtonOptions.js.map","/** Returns the template with the given `name` from either the `uiSchema` if it is defined or from the `registry`\n * otherwise. NOTE, since `ButtonTemplates` are not overridden in `uiSchema` only those in the `registry` are returned.\n *\n * @param name - The name of the template to fetch, restricted to the keys of `TemplatesType`\n * @param registry - The `Registry` from which to read the template\n * @param [uiOptions={}] - The `UIOptionsType` from which to read an alternate template\n * @returns - The template from either the `uiSchema` or `registry` for the `name`\n */\nexport default function getTemplate(name, registry, uiOptions = {}) {\n const { templates } = registry;\n if (name === 'ButtonTemplates') {\n return templates[name];\n }\n // Allow templates to be customized per-field by using string keys from the registry\n if (Object.hasOwn(uiOptions, name) &&\n typeof uiOptions[name] === 'string' &&\n Object.hasOwn(templates, uiOptions[name])) {\n const key = uiOptions[name];\n // Evaluating templates[key] results in TS2590: Expression produces a union type that is too complex to represent\n // To avoid that, we cast templates to `any` before accessing the key field\n return templates[key];\n }\n return (\n // Evaluating uiOptions[name] results in TS2590: Expression produces a union type that is too complex to represent\n // To avoid that, we cast uiOptions to `any` before accessing the name field\n uiOptions[name] || templates[name]);\n}\n//# sourceMappingURL=getTemplate.js.map","import { getByPath } from \"./pathUtils.js\";\nlet testIdCounter = 0;\n/** Returns an object of test IDs that can only be used in test mode. If the function is called in a test environment\n * (`NODE_ENV === 'test'`, this is set by vitest) then a Proxy object will be returned. If a key within the returned\n * object is accessed, if the value already exists the object will return that value, otherwise it will create that key\n * with a generated `uuid` value and return the generated ID. If it is called outside of a test environment, the\n * function will return an empty object, therefore returning `undefined` for any property within the object and\n * excluding the prop from the rendered output of the component in which it is used.\n * This implementation was adapted from the following blog post: https://www.matthewsessions.com/blog/react-test-id/\n * To use this helper, you will want to generate a separate object for each component to avoid potential overlapping of\n * ID names. You will also want to export the object for use in tests, because the keys will be generated in the\n * component file, and used in the test file. Within the component file, add:\n * `export const TEST_IDS = getTestIds();`\n * Then pass `TEST_IDS.examplePropertyName` as the value of the test ID attribute of the intended component. This will\n * allow you to use `TEST_IDS.examplePropertyName` within your tests, while keeping the test IDs out of your rendered\n * output.\n */\nexport default function getTestIds() {\n // For some reason, even though process.env contains the value of `test` for NODE_ENV, accessing it directly returns\n // 'development'. Using `getByPath()` does, in fact, return test so sticking with it.\n // Use globalThis to access process without requiring @types/node (TS6 compatibility).\n if (getByPath(globalThis, ['process', 'env', 'NODE_ENV']) !== 'test') {\n return {};\n }\n const ids = new Map();\n return new Proxy({}, {\n get(_obj, prop) {\n if (!ids.has(prop)) {\n testIdCounter += 1;\n ids.set(prop, `test-id-${testIdCounter}`);\n }\n return ids.get(prop);\n },\n });\n}\n//# sourceMappingURL=getTestIds.js.map","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createElement } from 'react';\nimport ReactIs from 'react-is';\nimport getSchemaType from \"./getSchemaType.js\";\n/** The map of schema types to widget type to widget name\n */\nconst widgetMap = {\n boolean: {\n checkbox: 'CheckboxWidget',\n radio: 'RadioWidget',\n select: 'SelectWidget',\n hidden: 'HiddenWidget',\n },\n string: {\n text: 'TextWidget',\n password: 'PasswordWidget',\n email: 'EmailWidget',\n hostname: 'TextWidget',\n ipv4: 'TextWidget',\n ipv6: 'TextWidget',\n uri: 'URLWidget',\n 'data-url': 'FileWidget',\n radio: 'RadioWidget',\n select: 'SelectWidget',\n textarea: 'TextareaWidget',\n hidden: 'HiddenWidget',\n date: 'DateWidget',\n datetime: 'DateTimeWidget',\n 'date-time': 'DateTimeWidget',\n 'alt-date': 'AltDateWidget',\n 'alt-datetime': 'AltDateTimeWidget',\n time: 'TimeWidget',\n color: 'ColorWidget',\n file: 'FileWidget',\n },\n number: {\n text: 'TextWidget',\n select: 'SelectWidget',\n updown: 'UpDownWidget',\n range: 'RangeWidget',\n radio: 'RadioWidget',\n hidden: 'HiddenWidget',\n },\n integer: {\n text: 'TextWidget',\n select: 'SelectWidget',\n updown: 'UpDownWidget',\n range: 'RangeWidget',\n radio: 'RadioWidget',\n hidden: 'HiddenWidget',\n },\n array: {\n select: 'SelectWidget',\n checkboxes: 'CheckboxesWidget',\n files: 'FileWidget',\n hidden: 'HiddenWidget',\n },\n};\n/** Wraps the given widget with stateless functional component that will merge any `defaultProps.options` with the\n * `options` that are provided in the props. It will add the wrapper component as a `MergedWidget` property onto the\n * `Widget` so that future attempts to wrap `AWidget` will return the already existing wrapper.\n *\n * @param AWidget - A widget that will be wrapped or one that is already wrapped\n * @returns - The wrapper widget\n */\nfunction mergeWidgetOptions(AWidget) {\n let { MergedWidget } = AWidget;\n // cache return value as property of widget for proper react reconciliation\n if (!MergedWidget) {\n // oxlint-disable-next-line typescript/no-deprecated\n const defaultOptions = AWidget.defaultProps?.options || {};\n MergedWidget = ({ options, ...props }) => _jsx(AWidget, { options: { ...defaultOptions, ...options }, ...props });\n // The mutation is deliberate: the wrapper is cached on the widget itself for React reconciliation\n // oxlint-disable-next-line no-param-reassign\n AWidget.MergedWidget = MergedWidget;\n }\n return MergedWidget;\n}\n/** Given a schema representing a field to render and either the name or actual `Widget` implementation, returns the\n * React component that is used to render the widget. If the `widget` is already a React component, then it is wrapped\n * with a `MergedWidget`. Otherwise an attempt is made to look up the widget inside of the `registeredWidgets` map based\n * on the schema type and `widget` name. If no widget component can be found an `Error` is thrown.\n *\n * @param schema - The schema for the field\n * @param [widget] - Either the name of the widget OR a `Widget` implementation to use\n * @param [registeredWidgets={}] - A registry of widget name to `Widget` implementation\n * @returns - The `Widget` component to use\n * @throws - An error if there is no `Widget` component that can be returned\n */\nexport default function getWidget(schema, widget, registeredWidgets = {}) {\n const type = getSchemaType(schema);\n if (typeof widget === 'function' ||\n (widget && ReactIs.isForwardRef(createElement(widget))) ||\n ReactIs.isMemo(widget)) {\n return mergeWidgetOptions(widget);\n }\n if (typeof widget !== 'string') {\n throw new Error(`Unsupported widget definition: ${typeof widget} in schema: ${JSON.stringify(schema)}`);\n }\n if (widget in registeredWidgets) {\n const registeredWidget = registeredWidgets[widget];\n return getWidget(schema, registeredWidget, registeredWidgets);\n }\n if (typeof type === 'string') {\n if (!(type in widgetMap)) {\n throw new Error(`No widget for type '${type}' in schema: ${JSON.stringify(schema)}`);\n }\n if (widget in widgetMap[type]) {\n const registeredWidget = registeredWidgets[widgetMap[type][widget]];\n return getWidget(schema, registeredWidget, registeredWidgets);\n }\n }\n throw new Error(`No widget '${widget}' for type '${type}' in schema: ${JSON.stringify(schema)}`);\n}\n//# sourceMappingURL=getWidget.js.map","/** Hashes a string using the algorithm based on Java's hashing function.\n * JS has no built-in hashing function, so rolling our own\n * based on Java's hashing fn:\n * http://www.java2s.com/example/nodejs-utility-method/string-hash/hashcode-4dc2b.html\n *\n * @param string - The string for which to get the hash\n * @returns - The resulting hash of the string in hex format\n */\nexport function hashString(string) {\n let hash = 0;\n for (let i = 0; i < string.length; i++) {\n const chr = string.charCodeAt(i);\n // oxlint-disable-next-line no-bitwise\n hash = (hash << 5) - hash + chr;\n // oxlint-disable-next-line no-bitwise\n hash &= hash; // Convert to 32bit integer\n }\n return hash.toString(16);\n}\n/** Recursively serializes a value to JSON with object keys sorted alphabetically to produce\n * a stable string representation.\n *\n * @param object - The object for which the sorted stringify is desired\n * @returns - The stringified object with keys sorted in a consistent order\n */\nexport function sortedJSONStringify(object) {\n function shouldIncludeValue(value) {\n return value !== undefined && typeof value !== 'function' && typeof value !== 'symbol';\n }\n if (Array.isArray(object)) {\n return `[${object.map((x) => (x === undefined ? 'undefined' : sortedJSONStringify(x))).join(',')}]`;\n }\n if (object === null || typeof object !== 'object') {\n return JSON.stringify(typeof object === 'function' ? null : object); // Normalise functions\n }\n const record = object;\n const sortedValues = Object.keys(record)\n .sort()\n .filter((key) => shouldIncludeValue(record[key]))\n .map((key) => `${JSON.stringify(key)}:${sortedJSONStringify(record[key])}`);\n return `{${sortedValues.join(',')}}`;\n}\n/** Stringifies an `object` and returns the hash of the resulting string. Sorts object fields\n * in consistent order before stringify to prevent different hash ids for the same object.\n *\n * @param object - The object for which the hash is desired\n * @returns - The string obtained from the hash of the stringified object\n */\nexport function hashObject(object) {\n return hashString(sortedJSONStringify(object));\n}\n/** Stringifies the schema and returns the hash of the resulting string. Sorts schema fields\n * in consistent order before stringify to prevent different hash ids for the same schema.\n * Symbol-keyed properties (RJSF_REF_KEY, RJSF_REF_CYCLE_KEY, ADDITIONAL_PROPERTY_FLAG) are\n * automatically excluded by JSON.stringify, so no special filtering is needed.\n *\n * @param schema - The schema for which the hash is desired\n * @returns - The string obtained from the hash of the stringified schema\n */\nexport default function hashForSchema(schema) {\n return hashString(sortedJSONStringify(schema));\n}\n//# sourceMappingURL=hashForSchema.js.map","import getWidget from \"./getWidget.js\";\n/** Detects whether the `widget` exists for the `schema` with the associated `registryWidgets` and returns true if it\n * does, or false if it doesn't.\n *\n * @param schema - The schema for the field\n * @param widget - Either the name of the widget OR a `Widget` implementation to use\n * @param [registeredWidgets={}] - A registry of widget name to `Widget` implementation\n * @returns - True if the widget exists, false otherwise\n */\nexport default function hasWidget(schema, widget, registeredWidgets = {}) {\n try {\n getWidget(schema, widget, registeredWidgets);\n return true;\n }\n catch (e) {\n const err = e;\n if (err.message && (err.message.startsWith('No widget') || err.message.startsWith('Unsupported widget'))) {\n return false;\n }\n throw e;\n }\n}\n//# sourceMappingURL=hasWidget.js.map","import { ID_KEY } from \"./constants.js\";\n/** Generates a consistent `id` pattern for a given `id` and a `suffix`\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @param suffix - The suffix to append to the id\n */\nfunction idGenerator(id, suffix) {\n const theId = typeof id === 'string' ? id : id[ID_KEY];\n return `${theId}__${suffix}`;\n}\n/** Return a consistent `id` for the field description element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field description element from the given `id`\n */\nexport function descriptionId(id) {\n return idGenerator(id, 'description');\n}\n/** Return a consistent `id` for the field error element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field error element from the given `id`\n */\nexport function errorId(id) {\n return idGenerator(id, 'error');\n}\n/** Return a consistent `id` for the field examples element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field examples element from the given `id`\n */\nexport function examplesId(id) {\n return idGenerator(id, 'examples');\n}\n/** Return a consistent `id` for the field help element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field help element from the given `id`\n */\nexport function helpId(id) {\n return idGenerator(id, 'help');\n}\n/** Return a consistent `id` for the field title element\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @returns - The consistent id for the field title element from the given `id`\n */\nexport function titleId(id) {\n return idGenerator(id, 'title');\n}\n/** Return a list of element ids that contain additional information about the field that can be used to as the aria\n * description of the field. This is correctly omitting `titleId` which would be \"labeling\" rather than \"describing\" the\n * element.\n *\n * @param id - Either simple string id or an FieldPathId from which to extract it\n * @param [includeExamples=false] - Optional flag, if true, will add the `examplesId` into the list\n * @returns - The string containing the list of ids for use in an `aria-describedBy` attribute\n */\nexport function ariaDescribedByIds(id, includeExamples = false) {\n const examples = includeExamples ? ` ${examplesId(id)}` : '';\n return `${errorId(id)} ${descriptionId(id)} ${helpId(id)}${examples}`;\n}\n/** Return a consistent `id` for the `optionIndex`s of a `Radio` or `Checkboxes` widget\n *\n * @param id - The id of the parent component for the option\n * @param optionIndex - The index of the option for which the id is desired\n * @returns - An id for the option index based on the parent `id`\n */\nexport function optionId(id, optionIndex) {\n return `${id}-${optionIndex}`;\n}\n/** Return a consistent `id` for the `btn` button element\n *\n * @param id - The id of the parent component for the option\n * @param btn - The button type for which to generate the id\n * @returns - The consistent id for the button from the given `id` and `btn` type\n */\nexport function buttonId(id, btn) {\n return idGenerator(id, btn);\n}\n/** Return a consistent `id` for the optional data controls `element`\n *\n * @param id - The id of the parent component for the option\n * @param element - The element type for which to generate the id\n * @returns - The consistent id for the optional data controls element from the given `id` and `element` type\n */\nexport function optionalControlsId(id, element) {\n return idGenerator(id, `optional${element}`);\n}\n//# sourceMappingURL=idGenerators.js.map","/** Determines whether the given `formData` represents valid form data, such as a primitive type, an array, or a\n * non-empty object.\n *\n * @param formData - The data to check\n * @returns - True if `formData` is not undefined, null, a primitive type or an array or an empty object\n */\nexport default function isFormDataAvailable(formData) {\n if (formData === undefined || formData === null) {\n return false;\n }\n if (typeof formData !== 'object' || Array.isArray(formData)) {\n return true;\n }\n return Object.keys(formData).length > 0;\n}\n//# sourceMappingURL=isFormDataAvailable.js.map","import { REF_KEY } from \"./constants.js\";\nimport deepEquals from \"./deepEquals.js\";\n/** Helper to check whether a JSON schema object is the root schema. The schema is a root schema with root `properties`\n * key or a root `$ref` key. If the `schemaToCompare` has a root `oneOf` property, the function will\n * return false. Else if `schemaToCompare` and `rootSchema` are the same object or equal, the function will return\n * `true`. Else if the `rootSchema` has a $ref, it will be resolved using `schemaUtils.resolveSchema` utility. If the\n * resolved schema matches the `schemaToCompare` the function will return `true`. Otherwise, it will return false.\n *\n * @param registry - The `Registry` used to get the `rootSchema` and `schemaUtils`\n * @param schemaToCompare - The JSON schema object to check. If `schemaToCompare` is an root schema, the\n * function will return true.\n * @returns - Flag indicating whether the `schemaToCompare` is the root schema\n */\nexport default function isRootSchema(registry, schemaToCompare) {\n const { rootSchema, schemaUtils } = registry;\n if (deepEquals(schemaToCompare, rootSchema)) {\n return true;\n }\n if (REF_KEY in rootSchema) {\n const resolvedSchema = schemaUtils.retrieveSchema(rootSchema);\n return deepEquals(schemaToCompare, resolvedSchema);\n }\n return false;\n}\n//# sourceMappingURL=isRootSchema.js.map","export default function labelValue(label, hideLabel, fallback) {\n return hideLabel ? fallback : label;\n}\n//# sourceMappingURL=labelValue.js.map","/** Converts a local Date string into a UTC date string\n *\n * @param dateString - The string representation of a date as accepted by the `Date()` constructor\n * @returns - A UTC date string if `dateString` is truthy, otherwise undefined\n */\nexport default function localToUTC(dateString) {\n return dateString ? new Date(dateString).toJSON() : undefined;\n}\n//# sourceMappingURL=localToUTC.js.map","import enumOptionsIndexForValue from \"./enumOptionsIndexForValue.js\";\n/** Logs a warning when a single-select enum widget has a schema default that is not one of its enum options.\n *\n * @param id - The field id used in the warning message\n * @param schema - The schema whose default value is checked\n * @param enumOptions - The enum options available to the widget\n * @param multiple - Whether the widget allows multiple selections\n */\nexport default function logUnsupportedDefaultForEnum(id, schema, enumOptions, multiple = false) {\n if (!multiple &&\n Array.isArray(enumOptions) &&\n schema.default !== undefined &&\n enumOptionsIndexForValue(schema.default, enumOptions, multiple) === undefined) {\n // oxlint-disable-next-line no-console\n console.error(`The schema default value \"${schema.default}\" is not one of the values in the enum options for \"${id}\"`);\n }\n}\n//# sourceMappingURL=logUnsupportedDefaultForEnum.js.map","import { FORM_CONTEXT_NAME, LOOKUP_MAP_NAME } from \"./constants.js\";\nimport { getByPath, hasByPath } from \"./pathUtils.js\";\n/** Given a React JSON Schema Form registry or formContext object, return the value associated with `toLookup`. This\n * might be contained within the lookup map in the formContext. If no such value exists, return the `fallback`\n * value.\n *\n * @param regOrFc - The @rjsf registry or form context in which the lookup will occur\n * @param toLookup - The name of the field in the lookup map in the form context to get the value for\n * @param [fallback] - The fallback value to use if the form context does not contain a value for `toLookup`\n * @returns - The value associated with `toLookup` in the form context or `fallback`\n */\nexport default function lookupFromFormContext(regOrFc, toLookup, fallback) {\n const lookupPath = [LOOKUP_MAP_NAME];\n if (hasByPath(regOrFc, FORM_CONTEXT_NAME)) {\n lookupPath.unshift(FORM_CONTEXT_NAME);\n }\n return getByPath(regOrFc, [...lookupPath, toLookup], fallback);\n}\n//# sourceMappingURL=lookupFromFormContext.js.map","/** A function that does nothing and returns `undefined`, useful as a placeholder for an optional callback or as the\n * implementation of a mocked function.\n */\nexport default function noop() { }\n//# sourceMappingURL=noop.js.map","/** Given a list of `properties` and an `order` list, returns a list that contains the `properties` ordered correctly.\n * If `order` is not an array, then the untouched `properties` list is returned. Otherwise `properties` is ordered per\n * the `order` list. If `order` contains a '*' then any `properties` that are not mentioned explicity in `order` will be\n * places in the location of the `*`.\n *\n * @param properties - The list of property keys to be ordered\n * @param order - An array of property keys to be ordered first, with an optional '*' property\n * @returns - A list with the `properties` ordered\n * @throws - Error when the properties cannot be ordered correctly\n */\nexport default function orderProperties(properties, order) {\n if (!Array.isArray(order)) {\n return properties;\n }\n const arrayToHash = (arr) => arr.reduce((acc, curr) => {\n acc[curr] = true;\n return acc;\n }, {});\n const errorPropList = (arr) => arr.length > 1 ? `properties '${arr.join(\"', '\")}'` : `property '${arr[0]}'`;\n const propertyHash = arrayToHash(properties);\n const orderFiltered = order.filter((prop) => prop === '*' || propertyHash[prop]);\n const orderHash = arrayToHash(orderFiltered);\n const rest = properties.filter((prop) => !orderHash[prop]);\n const restIndex = orderFiltered.indexOf('*');\n if (restIndex === -1) {\n if (rest.length) {\n throw new Error(`uiSchema order list does not contain ${errorPropList(rest)}`);\n }\n return orderFiltered;\n }\n if (restIndex !== orderFiltered.lastIndexOf('*')) {\n throw new Error('uiSchema order list contains more than one wildcard item');\n }\n const complete = [...orderFiltered];\n complete.splice(restIndex, 1, ...rest);\n return complete;\n}\n//# sourceMappingURL=orderProperties.js.map","/** Parses the `dateString` into a `DateObject`, including the time information when `includeTime` is true\n *\n * @param dateString - The date string to parse into a DateObject\n * @param [includeTime=true] - Optional flag, if false, will not include the time data into the object\n * @returns - The date string converted to a `DateObject`\n * @throws - Error when the date cannot be parsed from the string\n */\nexport default function parseDateString(dateString, includeTime = true) {\n if (!dateString) {\n return {\n year: -1,\n month: -1,\n day: -1,\n hour: includeTime ? -1 : 0,\n minute: includeTime ? -1 : 0,\n second: includeTime ? -1 : 0,\n };\n }\n const date = new Date(dateString);\n if (Number.isNaN(date.getTime())) {\n throw new Error(`Unable to parse date ${dateString}`);\n }\n return {\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1, // oh you, javascript.\n day: date.getUTCDate(),\n hour: includeTime ? date.getUTCHours() : 0,\n minute: includeTime ? date.getUTCMinutes() : 0,\n second: includeTime ? date.getUTCSeconds() : 0,\n };\n}\n//# sourceMappingURL=parseDateString.js.map","import hasWidget from \"./hasWidget.js\";\nimport optionsList from \"./optionsList.js\";\n/** Computes the widget name a field falls back to when no `ui:widget` is specified, along with the `enumOptions`\n * (if any) that back a `select`-like fallback. The default is `select` when `schema` has enumerable options,\n * the schema's `format` when a widget is registered for it, or `text` otherwise.\n *\n * @param schema - The schema for the field\n * @param uiSchema - The uiSchema for the field\n * @param schemaUtils - The `SchemaUtilsType` used to detect whether `schema` has enumerable options\n * @param [registeredWidgets={}] - A registry of widget name to `Widget` implementation\n * @returns - The default widget name and the `enumOptions`, if any, computed along the way\n */\nexport default function resolveDefaultWidget(schema, uiSchema, schemaUtils, registeredWidgets = {}) {\n const { format } = schema;\n const enumOptions = schemaUtils.isSelect(schema) ? optionsList(schema, uiSchema) : undefined;\n let defaultWidget = enumOptions ? 'select' : 'text';\n if (format && hasWidget(schema, format, registeredWidgets)) {\n defaultWidget = format;\n }\n return { defaultWidget, enumOptions };\n}\n//# sourceMappingURL=resolveDefaultWidget.js.map","import { ANY_OF_KEY, ONE_OF_KEY, REF_KEY, RJSF_REF_KEY } from \"./constants.js\";\nimport findSchemaDefinition from \"./findSchemaDefinition.js\";\nimport mergeObjects from \"./mergeObjects.js\";\n/** Resolves the uiSchema for a given schema, considering `ui:definitions` stored in the registry.\n *\n * Called at runtime for each field. When the schema contains a `$ref`, looks up the corresponding\n * uiSchema definition from `registry.uiSchemaDefinitions` and merges it with local overrides.\n * For schemas with `oneOf`/`anyOf` branches, also populates `uiSchema[keyword][i]` for branches\n * whose `$ref` matches a definition, so `MultiSchemaField` can read dropdown option titles.\n *\n * Resolution order (later sources override earlier):\n * 1. `ui:definitions[$ref]` - base definition from registry\n * 2. `localUiSchema` - local overrides at current path\n *\n * @param schema - The JSON schema (may contain `$ref` or `RJSF_REF_KEY`)\n * @param localUiSchema - The uiSchema at the current path (local overrides)\n * @param registry - The registry containing `uiSchemaDefinitions`\n * @returns - The resolved uiSchema with definitions merged in\n */\nexport default function resolveUiSchema(schema, localUiSchema, registry) {\n const ref = (schema[RJSF_REF_KEY] ?? schema[REF_KEY]);\n const definitions = registry.uiSchemaDefinitions;\n const definitionUiSchema = ref && definitions ? definitions[ref] : undefined;\n let result;\n if (!definitionUiSchema) {\n result = localUiSchema || {};\n }\n else if (!localUiSchema || Object.keys(localUiSchema).length === 0) {\n result = { ...definitionUiSchema };\n }\n else {\n result = mergeObjects(definitionUiSchema, localUiSchema);\n }\n // Walk oneOf/anyOf branches to populate uiSchema[keyword][i] so MultiSchemaField\n // can read dropdown option titles at the parent level.\n if (definitions) {\n let resolvedSchema = schema;\n if (ref && schema[REF_KEY] && !schema[RJSF_REF_KEY]) {\n try {\n resolvedSchema = findSchemaDefinition(ref, registry.rootSchema);\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.warn('could not resolve $ref in resolveUiSchema:\\n', e);\n return result;\n }\n }\n for (const keyword of [ONE_OF_KEY, ANY_OF_KEY]) {\n const schemaOptions = resolvedSchema[keyword];\n if (Array.isArray(schemaOptions) && schemaOptions.length > 0) {\n const currentUiSchemaArray = result[keyword];\n const uiSchemaArray = Array.isArray(currentUiSchemaArray) ? [...currentUiSchemaArray] : [];\n let hasExpanded = false;\n for (let i = 0; i < schemaOptions.length; i++) {\n const option = schemaOptions[i];\n const optionRef = (option?.[RJSF_REF_KEY] ?? option?.[REF_KEY]);\n if (optionRef && optionRef in definitions) {\n const optionUiSchema = (uiSchemaArray[i] || {});\n uiSchemaArray[i] = mergeObjects(definitions[optionRef], optionUiSchema);\n hasExpanded = true;\n }\n }\n if (hasExpanded) {\n result[keyword] = uiSchemaArray;\n }\n }\n }\n }\n return result;\n}\n//# sourceMappingURL=resolveUiSchema.js.map","import { ADDITIONAL_PROPERTIES_KEY, ALL_OF_KEY, ANY_OF_KEY, DEPENDENCIES_KEY, ELSE_KEY, IF_KEY, ITEMS_KEY, ONE_OF_KEY, PATTERN_PROPERTIES_KEY, PROPERTIES_KEY, REF_KEY, THEN_KEY, } from \"./constants.js\";\nimport findSchemaDefinition from \"./findSchemaDefinition.js\";\nimport isObject from \"./isObject.js\";\n/** Recursively checks whether the given raw `schema` contains a `dependencies` or `if` keyword anywhere below its\n * top level, e.g. inside a nested object's `properties`, a `$ref`, an array's tuple `items`, or a\n * `patternProperties` entry. `retrieveSchema()` only resolves the `dependencies`/`if` declared directly on the\n * schema it is given, so a root-level retrieved schema never reflects a conditional branch switch that happens\n * deeper in the tree. `Form` uses this to detect when a comparison of root-level retrieved schemas can't be trusted\n * to decide whether sanitization is needed.\n *\n * @param schema - The raw schema node to search\n * @param rootSchema - The root schema, used to resolve any `$ref`s encountered while searching\n * @param [atRoot=true] - Whether `schema` is the root of the search, whose own `dependencies`/`if` don't count\n * @param [seenRefs=[]] - The `$ref`s already resolved along this branch of the search, to guard against cycles\n * @returns - True if a `dependencies` or `if` keyword exists below the root of the schema\n */\nexport default function schemaHasNestedConditional(schema, rootSchema, atRoot = true, seenRefs = []) {\n if (!isObject(schema)) {\n return false;\n }\n let resolved = schema;\n let refs = seenRefs;\n if (typeof resolved[REF_KEY] === 'string') {\n const ref = resolved[REF_KEY];\n if (refs.includes(ref)) {\n return false;\n }\n refs = [...refs, ref];\n try {\n const target = findSchemaDefinition(ref, rootSchema);\n if (isObject(target)) {\n // Merge, don't replace: sibling keywords declared alongside `$ref` are preserved and applied by\n // `retrieveSchema()` (via `{ ...refSchema, ...localSchema }`), so a local `dependencies`/`if` next to a\n // `$ref` must still be seen here, not just ones found on the ref target.\n const { [REF_KEY]: _ref, ...localSchema } = resolved;\n resolved = { ...target, ...localSchema };\n }\n }\n catch {\n // An unresolvable $ref will already have surfaced elsewhere (e.g. when rendering the field); treat it as\n // having no nested conditional here rather than letting this best-effort check throw.\n return false;\n }\n }\n if (!atRoot && (DEPENDENCIES_KEY in resolved || IF_KEY in resolved)) {\n return true;\n }\n const properties = resolved[PROPERTIES_KEY];\n const patternProperties = resolved[PATTERN_PROPERTIES_KEY];\n const items = resolved[ITEMS_KEY];\n const dependencies = resolved[DEPENDENCIES_KEY];\n // A schema (as opposed to property-list) `dependencies` entry's value-schema, and an `if`'s `then`/`else`\n // branches, can themselves hide a conditional that neither `retrieveSchema()` nor the `atRoot`/direct-key check\n // above surfaces, so they must be walked into just like `properties` or `allOf` are (#5250).\n const dependentSchemas = isObject(dependencies) ? Object.values(dependencies).filter(isObject) : [];\n const nestedSchemas = [\n ...(isObject(properties) ? Object.values(properties) : []),\n ...(isObject(patternProperties) ? Object.values(patternProperties) : []),\n ...(Array.isArray(items) ? items : [items]),\n resolved[ADDITIONAL_PROPERTIES_KEY],\n ...(resolved[ALL_OF_KEY] ?? []),\n ...(resolved[ANY_OF_KEY] ?? []),\n ...(resolved[ONE_OF_KEY] ?? []),\n ...dependentSchemas,\n resolved[THEN_KEY],\n resolved[ELSE_KEY],\n ];\n return nestedSchemas.some((nested) => schemaHasNestedConditional(nested, rootSchema, false, refs));\n}\n//# sourceMappingURL=schemaHasNestedConditional.js.map","/** Check to see if a `schema` specifies that a value must be true. This happens when:\n * - `schema.const` is truthy\n * - `schema.enum` == `[true]`\n * - `schema.anyOf` or `schema.oneOf` has a single value which recursively returns true\n * - `schema.allOf` has at least one value which recursively returns true\n *\n * @param schema - The schema to check\n * @returns - True if the schema specifies a value that must be true, false otherwise\n */\nexport default function schemaRequiresTrueValue(schema) {\n // Check if const is a truthy value\n if (schema.const) {\n return true;\n }\n // Check if an enum has a single value of true\n if (schema.enum?.length === 1 && schema.enum[0] === true) {\n return true;\n }\n // If anyOf has a single value, evaluate the subschema\n if (schema.anyOf?.length === 1) {\n return schemaRequiresTrueValue(schema.anyOf[0]);\n }\n // If oneOf has a single value, evaluate the subschema\n if (schema.oneOf?.length === 1) {\n return schemaRequiresTrueValue(schema.oneOf[0]);\n }\n // Evaluate each subschema in allOf, to see if one of them requires a true value\n if (schema.allOf) {\n const schemaSome = (subSchema) => schemaRequiresTrueValue(subSchema);\n return schema.allOf.some(schemaSome);\n }\n return false;\n}\n//# sourceMappingURL=schemaRequiresTrueValue.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport enumOptionsIsSelected from \"./enumOptionsIsSelected.js\";\nimport getTemplate from \"./getTemplate.js\";\nimport getUiOptions from \"./getUiOptions.js\";\nimport { descriptionId } from \"./idGenerators.js\";\n/** Renders the description associated with the selected oneOf or anyOf option in a single-select widget. */\nexport default function SelectedOptionDescription({ hideLabel, id, multiple, options, registry, uiSchema, value }) {\n if (multiple || hideLabel) {\n return null;\n }\n const { label = true } = getUiOptions(uiSchema, registry.globalUiOptions);\n if (!label) {\n return null;\n }\n const option = options.enumOptions?.find(({ value: enumValue }) => enumOptionsIsSelected(enumValue, value));\n const description = option?.schema?.description;\n if (!description) {\n return null;\n }\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, options);\n return (_jsx(DescriptionFieldTemplate, { id: descriptionId(id), description: description, schema: option.schema, uiSchema: uiSchema, registry: registry }));\n}\n//# sourceMappingURL=SelectedOptionDescription.js.map","/** Implements a shallow equals comparison that uses Object.is() for comparing values.\n * This function compares objects by checking if all keys and their values are equal using Object.is().\n *\n * @param a - The first element to compare\n * @param b - The second element to compare\n * @returns - True if the `a` and `b` are shallow equal, false otherwise\n */\nexport default function shallowEquals(a, b) {\n // If they're the same reference, they're equal\n if (Object.is(a, b)) {\n return true;\n }\n // If either is null or undefined, they're not equal (since we know they're not the same reference)\n if (a == null || b == null) {\n return false;\n }\n // If they're not objects, they're not equal (since Object.is already checked)\n if (typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n // Different number of keys means not equal\n if (keysA.length !== keysB.length) {\n return false;\n }\n // Check if all keys and values are equal\n for (let i = 0; i < keysA.length; i += 1) {\n const key = keysA[i];\n if (!Object.hasOwn(b, key) || !Object.is(a[key], b[key])) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=shallowEquals.js.map","import deepEquals from \"./deepEquals.js\";\nimport shallowEquals from \"./shallowEquals.js\";\n/** Determines whether the given `component` should be rerendered by comparing its current set of props and state\n * against the next set. The comparison strategy can be controlled via the `updateStrategy` parameter.\n *\n * @param component - A React component being checked\n * @param nextProps - The next set of props against which to check\n * @param nextState - The next set of state against which to check\n * @param updateStrategy - The strategy to use for comparison:\n * - 'customDeep': Uses RJSF's custom deep equality checks (default)\n * - 'shallow': Uses shallow comparison of props and state\n * - 'always': Always returns true (React's default behavior)\n * @returns - True if the component should be re-rendered, false otherwise\n */\nexport default function shouldRender(component, nextProps, nextState, updateStrategy = 'customDeep') {\n if (updateStrategy === 'always') {\n // Use React's default behavior: always update if state or props change (no shouldComponentUpdate optimization)\n return true;\n }\n if (updateStrategy === 'shallow') {\n // Use shallow comparison for props and state\n const { props, state } = component;\n return !shallowEquals(props, nextProps) || !shallowEquals(state, nextState);\n }\n // Use custom deep equality checks (default 'customDeep' strategy)\n const { props, state } = component;\n return !deepEquals(props, nextProps) || !deepEquals(state, nextState);\n}\n//# sourceMappingURL=shouldRender.js.map","import { ANY_OF_KEY, ONE_OF_KEY } from \"./constants.js\";\nimport getSchemaType from \"./getSchemaType.js\";\nimport getUiOptions from \"./getUiOptions.js\";\nimport isObject from \"./isObject.js\";\nimport isRootSchema from \"./isRootSchema.js\";\n/** Returns the unique list of schema types for all of the options in a anyOf/oneOf\n *\n * @param schemas - The list of schemas representing the XxxOf options\n * @returns - All of the unique types contained within the oneOf list\n */\nexport function getSchemaTypesForXxxOf(schemas) {\n const allTypes = [\n ...new Set(schemas\n .map((s) => (isObject(s) ? getSchemaType(s) : undefined))\n .flat()\n .filter((t) => t !== undefined)),\n ];\n return allTypes.length === 1 ? allTypes[0] : allTypes;\n}\n/** Determines whether the field information from the combination of `schema` and `required` along with the\n * `enableOptionalDataFieldForType` settings from the global UI options in the `registry` all indicate that this field\n * should be rendered with the Optional Data Controls UI.\n *\n * @param registry - The `registry` object\n * @param schema - The schema for the field\n * @param required - Flag indicating whether the field is required\n * @param [uiSchema] - The uiSchema for the field\n * @return - True if the field should be rendered with the optional field UI, otherwise false\n */\nexport default function shouldRenderOptionalField(registry, schema, required, uiSchema) {\n const { enableOptionalDataFieldForType = [] } = getUiOptions(uiSchema, registry.globalUiOptions);\n let schemaType;\n if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {\n schemaType = getSchemaTypesForXxxOf(schema[ANY_OF_KEY]);\n }\n else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {\n schemaType = getSchemaTypesForXxxOf(schema[ONE_OF_KEY]);\n }\n else {\n schemaType = getSchemaType(schema);\n }\n return (!isRootSchema(registry, schema) &&\n !required &&\n !!schemaType &&\n !Array.isArray(schemaType) &&\n !!enableOptionalDataFieldForType.find((val) => val === schemaType));\n}\n//# sourceMappingURL=shouldRenderOptionalField.js.map","/** Returns a UTC date string for the given `dateObject`. If `time` is false, then the time portion of the string is\n * removed.\n *\n * @param dateObject - The `DateObject` to convert to a date string\n * @param [time=true] - Optional flag used to remove the time portion of the date string if false\n * @returns - The UTC date string\n */\nexport default function toDateString(dateObject, time = true) {\n const { year, month, day, hour = 0, minute = 0, second = 0 } = dateObject;\n const utcTime = Date.UTC(year, month - 1, day, hour, minute, second);\n const datetime = new Date(utcTime).toJSON();\n return time ? datetime : datetime.slice(0, 10);\n}\n//# sourceMappingURL=toDateString.js.map","import { ERRORS_KEY } from \"./constants.js\";\nimport isPlainObject from \"./isPlainObject.js\";\n/** Converts an `errorSchema` into a list of `RJSFValidationErrors`\n *\n * @param errorSchema - The `ErrorSchema` instance to convert\n * @param [fieldPath=[]] - The current field path, defaults to [] if not specified\n * @returns - The list of `RJSFValidationErrors` extracted from the `errorSchema`\n */\nexport default function toErrorList(errorSchema, fieldPath = []) {\n return errorSchema ? errorsFrom(errorSchema, fieldPath) : [];\n}\n/** Does the actual conversion, working on the plain-object shape of an `ErrorSchema` so that the recursive call for a\n * nested error schema does not need an assertion back to `ErrorSchema`.\n *\n * @param errorSchema - The error schema, viewed as the plain object it is at runtime\n * @param fieldPath - The current field path\n * @returns - The list of `RJSFValidationErrors` extracted from the `errorSchema`\n */\nfunction errorsFrom(errorSchema, fieldPath) {\n const errors = errorSchema[ERRORS_KEY];\n const property = `.${fieldPath.join('.')}`;\n const errorList = Array.isArray(errors)\n ? errors.map((message) => ({ property, message, stack: `${property} ${message}` }))\n : [];\n return Object.keys(errorSchema).reduce((currentList, key) => {\n const childSchema = errorSchema[key];\n if (key !== ERRORS_KEY && isPlainObject(childSchema)) {\n return currentList.concat(errorsFrom(childSchema, [...fieldPath, key]));\n }\n return currentList;\n }, errorList);\n}\n//# sourceMappingURL=toErrorList.js.map","import ErrorSchemaBuilder from \"./ErrorSchemaBuilder.js\";\nimport { toPath } from \"./pathUtils.js\";\n/** Transforms a rjsf validation errors list:\n * [\n * {property: '.level1.level2[2].level3', message: 'err a'},\n * {property: '.level1.level2[2].level3', message: 'err b'},\n * {property: '.level1.level2[4].level3', message: 'err b'},\n * ]\n * Into an error tree:\n * {\n * level1: {\n * level2: {\n * 2: {level3: {errors: ['err a', 'err b']}},\n * 4: {level3: {errors: ['err b']}},\n * }\n * }\n * };\n *\n * @param errors - The list of RJSFValidationError objects\n * @returns - The `ErrorSchema` built from the list of `RJSFValidationErrors`\n */\nexport default function toErrorSchema(errors) {\n const builder = new ErrorSchemaBuilder();\n if (errors.length) {\n errors.forEach((error) => {\n const { property, message } = error;\n // When the property is missing or the root element ('.'), toPath produces an empty path\n const path = property ? toPath(property) : [];\n if (message) {\n builder.addErrors(message, path);\n }\n });\n }\n return builder.ErrorSchema;\n}\n//# sourceMappingURL=toErrorSchema.js.map","import { ID_KEY } from \"./constants.js\";\n/** Constructs the `FieldPathId` for `fieldPath`. If `parentPathId` is provided, the `fieldPath` is appended to the end\n * of the parent path. Then the `ID_KEY` of the resulting `FieldPathId` is constructed from the `idPrefix` and\n * `idSeparator` contained within the `globalFormOptions`. If `fieldPath` is passed as an empty string, it will simply\n * generate the path from the `parentPath` (if provided) and the `idPrefix` and `idSeparator`. If a `nameGenerator`\n * is provided in `globalFormOptions`, it will also generate the HTML `name` attribute.\n *\n * @param fieldPath - The property name or array index of the current field element\n * @param globalFormOptions - The `GlobalFormOptions` used to get the `idPrefix` and `idSeparator`\n * @param [parentPath] - The optional `FieldPathId` or `FieldPathList` of the parent element for this field element\n * @param [isMultiValue] - Optional flag indicating this field accepts multiple values\n * @returns - The `FieldPathId` for the given `fieldPath` and the optional `parentPathId`\n */\nexport default function toFieldPathId(fieldPath, globalFormOptions, parentPath, isMultiValue) {\n const basePath = Array.isArray(parentPath) ? parentPath : parentPath?.path;\n const childPath = fieldPath === '' ? [] : [fieldPath];\n const path = basePath ? basePath.concat(...childPath) : childPath;\n const id = [globalFormOptions.idPrefix, ...path].join(globalFormOptions.idSeparator);\n // Generate name attribute if nameGenerator is provided\n let name;\n if (globalFormOptions.nameGenerator && path.length > 0) {\n name = globalFormOptions.nameGenerator(path, globalFormOptions.idPrefix, isMultiValue);\n }\n return { path, [ID_KEY]: id, ...(name !== undefined && { name }) };\n}\n//# sourceMappingURL=toFieldPathId.js.map","import isPlainObject from \"./isPlainObject.js\";\n/** Unwraps the `errorHandler` structure into the associated `ErrorSchema`, stripping the `addError()` functions from it\n *\n * @param errorHandler - The `FormValidation` error handling structure\n * @returns - The `ErrorSchema` resulting from the stripping of the `addError()` function\n */\nexport default function unwrapErrorHandler(errorHandler) {\n return unwrapErrors(errorHandler);\n}\n/** Does the actual unwrapping, working on the plain-object shape of a `FormValidation` so that the recursive call for\n * a nested error handler does not need an assertion back to `FormValidation`.\n *\n * @param errors - The error handling structure, viewed as the plain object it is at runtime\n * @returns - The `ErrorSchema` resulting from the stripping of the `addError()` function\n */\nfunction unwrapErrors(errors) {\n return Object.keys(errors).reduce((acc, key) => {\n if (key === 'addError') {\n return acc;\n }\n const childSchema = errors[key];\n if (isPlainObject(childSchema)) {\n return {\n ...acc,\n [key]: unwrapErrors(childSchema),\n };\n }\n return { ...acc, [key]: childSchema };\n }, {});\n}\n//# sourceMappingURL=unwrapErrorHandler.js.map","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport dateRangeOptions from \"./dateRangeOptions.js\";\nimport getDateElementProps from \"./getDateElementProps.js\";\nimport { ariaDescribedByIds } from \"./idGenerators.js\";\nimport parseDateString from \"./parseDateString.js\";\nimport toDateString from \"./toDateString.js\";\n/** Function that checks to see if a `DateObject` is ready for the onChange callback to be triggered\n *\n * @param state - The current `DateObject`\n * @returns - True if the `state` is ready to trigger an onChange\n */\nfunction readyForChange(state) {\n return Object.values(state).every((value) => value !== -1);\n}\n/** The `DateElement` component renders one of the 6 date element selectors for an `AltDateWidget`, using the `select`\n * widget from the registry.\n *\n * @param props - The `DateElementProps` for the date element\n */\nexport function DateElement(props) {\n const { className = 'form-control', type, range, value, select, rootId, name, disabled, readonly, autofocus, registry, onBlur, onFocus, } = props;\n const id = `${rootId}_${type}`;\n const { SelectWidget } = registry.widgets;\n const onChange = useCallback((newValue) => select(type, newValue), [select, type]);\n return (_jsx(SelectWidget, { schema: { type: 'integer' }, id: id, name: name, className: className, options: { enumOptions: dateRangeOptions(range[0], range[1]) }, placeholder: type, value: value, disabled: disabled, readonly: readonly, autofocus: autofocus, onChange: onChange, onBlur: onBlur, onFocus: onFocus, registry: registry, label: '', \"aria-describedby\": ariaDescribedByIds(rootId) }));\n}\n/** Hook which encapsulates the logic needed to render an `AltDateWidget` with optional `time` elements. It contains\n * the `state` of the current date(/time) selections in the widget. It returns a `UseAltDateWidgetResult` object\n * that contains the `elements: DateElementProp[]` and three callbacks needed to change one of the rendered `elements`,\n * and to handle the clicking of the `clear` and `setNow` buttons.\n *\n * @param props - The `WidgetProps` for the `AltDateWidget`\n */\nexport default function useAltDateWidgetProps(props) {\n const { time = false, disabled = false, readonly = false, options, onChange, value } = props;\n const [state, setState] = useState(parseDateString(value, time));\n useEffect(() => {\n setState(parseDateString(value, time));\n }, [time, value]);\n const handleChange = useCallback((property, newValue) => {\n const nextState = {\n ...state,\n [property]: typeof newValue === 'undefined' ? -1 : newValue,\n };\n if (readyForChange(nextState)) {\n onChange(toDateString(nextState, time));\n }\n else {\n setState(nextState);\n }\n }, [state, onChange, time]);\n const handleClear = useCallback((event) => {\n event.preventDefault();\n if (disabled || readonly) {\n return;\n }\n onChange(undefined);\n }, [disabled, readonly, onChange]);\n const handleSetNow = useCallback((event) => {\n event.preventDefault();\n if (disabled || readonly) {\n return;\n }\n const nextState = parseDateString(new Date().toJSON(), time);\n onChange(toDateString(nextState, time));\n }, [disabled, readonly, time, onChange]);\n const elements = useMemo(() => getDateElementProps(state, time, options.yearsRange, options.format), [state, time, options.yearsRange, options.format]);\n return { elements, handleChange, handleClear, handleSetNow };\n}\n//# sourceMappingURL=useAltDateWidgetProps.js.map","'use client';\nimport { useRef } from 'react';\nimport deepEquals from \"./deepEquals.js\";\n/** Hook that stores and returns a `T` value. If `newValue` is the same as the stored one, then the stored one is\n * returned to avoid having a component rerender due it being a different object. Otherwise, the `newValue` is stored\n * and returned.\n *\n * @param newValue - The potential new `T` value\n * @returns - The latest stored `T` value\n */\nexport default function useDeepCompareMemo(newValue) {\n const valueRef = useRef(newValue);\n if (!deepEquals(newValue, valueRef.current)) {\n valueRef.current = newValue;\n }\n return valueRef.current;\n}\n//# sourceMappingURL=useDeepCompareMemo.js.map","'use client';\nimport { useCallback, useMemo } from 'react';\nimport dataURItoBlob from \"./dataURItoBlob.js\";\n/** Updated the given `dataUrl` to add the `name` to it\n *\n * @param dataURL - The url description string\n * @param name - The name of the file to add to the dataUrl\n * @returns - The `dataUrl` updated to include the name\n */\nfunction addNameToDataURL(dataURL, name) {\n return dataURL.replace(';base64', `;name=${encodeURIComponent(name)};base64`);\n}\n/** Returns a promise that will read the file from the browser and return it as the result of the promise.\n *\n * @param file - The `File` information to read\n * @returns - A promise that resolves to the read file.\n */\nasync function processFile(file) {\n const { name, size, type } = file;\n return new Promise((resolve, reject) => {\n const reader = new window.FileReader();\n reader.onerror = reject;\n reader.onload = (event) => {\n if (typeof event.target?.result === 'string') {\n resolve({\n dataURL: addNameToDataURL(event.target.result, name),\n name,\n size,\n type,\n });\n }\n else {\n resolve({\n dataURL: null,\n name,\n size,\n type,\n });\n }\n };\n reader.readAsDataURL(file);\n });\n}\n/** Reads a list of files from the browser, returning the results of the promises of each individual file read.\n *\n * @param files - The list of files to read\n * @returns - The list of read files\n */\nasync function processFiles(files) {\n return Promise.all(Array.from(files).map(processFile));\n}\n/** Extracts the file information from the data URLs\n *\n * @param dataURLs - The information about the files\n * @returns - The list of `FileInfoType` objects extracted from the data urls\n */\nfunction extractFileInfo(dataURLs) {\n return dataURLs.reduce((acc, dataURL) => {\n if (!dataURL) {\n return acc;\n }\n try {\n const { blob, name } = dataURItoBlob(dataURL);\n return [\n ...acc,\n {\n dataURL,\n name,\n size: blob.size,\n type: blob.type,\n },\n ];\n }\n catch {\n // Invalid dataURI, so just ignore it.\n return acc;\n }\n }, []);\n}\n/** Hook which encapsulates the logic needed to read and convert a `value` of `File` or `File[]` into the\n * `filesInfo: FileInfoType[]` and the two callback implementations needed to change the list or to remove a\n * `File` from the list. To be used by theme specific `FileWidget` implementations.\n *\n * @param value - The current value of the `FileWidget`\n * @param onChange - The onChange handler for the `FileWidget`\n * @param [multiple=false] - Flag indicating whether the control supports multiple selections\n * @returns - The `UseFileWidgetPropsResult` to be used within a `FileWidget` implementation\n */\nexport default function useFileWidgetProps(value, onChange, multiple = false) {\n const values = useMemo(() => {\n if (multiple && value) {\n return Array.isArray(value) ? value : [value];\n }\n return [];\n }, [value, multiple]);\n const filesInfo = useMemo(() => (Array.isArray(value) ? extractFileInfo(value) : extractFileInfo([value || ''])), [value]);\n const handleChange = useCallback(async (files) => {\n const filesInfoEvent = await processFiles(files);\n const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL || null);\n if (multiple) {\n onChange(values.concat(...newValue));\n }\n else {\n onChange(newValue[0]);\n }\n }, [values, multiple, onChange]);\n const handleRemove = useCallback((index) => {\n if (multiple) {\n const newValue = values.filter((_, i) => i !== index);\n onChange(newValue);\n }\n else {\n onChange(undefined);\n }\n }, [values, multiple, onChange]);\n return { filesInfo, handleChange, handleRemove };\n}\n//# sourceMappingURL=useFileWidgetProps.js.map","import pad from \"./pad.js\";\n/** Converts a UTC date string into a local Date format\n *\n * @param jsonDate - A UTC date string\n * @returns - An empty string when `jsonDate` is falsey, otherwise a date string in local format\n */\nexport default function utcToLocal(jsonDate) {\n if (!jsonDate) {\n return '';\n }\n // required format of `'yyyy-MM-ddThh:mm' followed by optional ':ss' or ':ss.SSS'\n // https://html.spec.whatwg.org/multipage/input.html#local-date-and-time-state-(type%3Ddatetime-local)\n // > should be a _valid local date and time string_ (not GMT)\n // Note - date constructor passed local ISO-8601 does not correctly\n // change time to UTC in node pre-8\n const date = new Date(jsonDate);\n const yyyy = pad(date.getFullYear(), 4);\n const MM = pad(date.getMonth() + 1, 2);\n const dd = pad(date.getDate(), 2);\n const hh = pad(date.getHours(), 2);\n const mm = pad(date.getMinutes(), 2);\n const ss = pad(date.getSeconds(), 2);\n const SSS = pad(date.getMilliseconds(), 3);\n return `${yyyy}-${MM}-${dd}T${hh}:${mm}:${ss}.${SSS}`;\n}\n//# sourceMappingURL=utcToLocal.js.map","import mergeObjects from \"./mergeObjects.js\";\nimport toErrorList from \"./toErrorList.js\";\n/** Merges the errors in `additionalErrorSchema` into the existing `validationData` by combining the hierarchies in the\n * two `ErrorSchema`s and then appending the error list from the `additionalErrorSchema` obtained by calling\n * `toErrorList()` on the `errors` in the `validationData`. If no `additionalErrorSchema` is passed, then\n * `validationData` is returned.\n *\n * @param validationData - The current `ValidationData` into which to merge the additional errors\n * @param [additionalErrorSchema] - The optional additional set of errors in an `ErrorSchema`\n * @param [preventDuplicates=false] - Optional flag, if true, will call `mergeObjects()` with `preventDuplicates`\n * @returns - The `validationData` with the additional errors from `additionalErrorSchema` merged into it, if provided.\n */\nexport default function validationDataMerge(validationData, additionalErrorSchema, preventDuplicates = false) {\n if (!additionalErrorSchema) {\n return validationData;\n }\n const { errors: oldErrors, errorSchema: oldErrorSchema } = validationData;\n let errors = toErrorList(additionalErrorSchema);\n let errorSchema = additionalErrorSchema;\n if (oldErrorSchema && Object.keys(oldErrorSchema).length > 0) {\n errorSchema = mergeObjects(oldErrorSchema, additionalErrorSchema, preventDuplicates ? 'preventDuplicates' : true);\n errors = [...oldErrors].concat(errors);\n }\n return { errorSchema, errors };\n}\n//# sourceMappingURL=validationDataMerge.js.map","import { REF_KEY, ROOT_SCHEMA_PREFIX } from \"./constants.js\";\nimport isObject from \"./isObject.js\";\n/** Takes a `node` object and transforms any contained `$ref` node variables with a prefix, recursively calling\n * `withIdRefPrefix` for any other elements.\n *\n * @param node - The object node to which a ROOT_SCHEMA_PREFIX is added when a REF_KEY is part of it\n */\nfunction withIdRefPrefixObject(node) {\n const realObj = node;\n for (const key in realObj) {\n /* v8 ignore next -- spread in caller guarantees only own properties reach this loop */\n if (Object.hasOwn(realObj, key)) {\n const value = realObj[key];\n if (key === REF_KEY && typeof value === 'string' && value.startsWith('#')) {\n realObj[key] = ROOT_SCHEMA_PREFIX + value;\n }\n else {\n realObj[key] = withIdRefPrefix(value);\n }\n }\n }\n return node;\n}\n/** Takes a `node` object list and transforms any contained `$ref` node variables with a prefix, recursively calling\n * `withIdRefPrefix` for any other elements.\n *\n * @param node - The list of object nodes to which a ROOT_SCHEMA_PREFIX is added when a REF_KEY is part of it\n */\nfunction withIdRefPrefixArray(node) {\n return node.map((item) => withIdRefPrefix(item));\n}\n/** Recursively prefixes all `$ref`s in a schema with the value of the `ROOT_SCHEMA_PREFIX` constant.\n * This is used in isValid to make references to the rootSchema\n *\n * @param schemaNode - The object node to which a ROOT_SCHEMA_PREFIX is added when a REF_KEY is part of it\n * @returns - A copy of the `schemaNode` with updated `$ref`s\n */\nexport default function withIdRefPrefix(schemaNode) {\n if (Array.isArray(schemaNode)) {\n return withIdRefPrefixArray([...schemaNode]);\n }\n if (isObject(schemaNode)) {\n return withIdRefPrefixObject({ ...schemaNode });\n }\n return schemaNode;\n}\n//# sourceMappingURL=withIdRefPrefix.js.map","/** An enumeration of all the translatable strings used by `@rjsf/core` and its themes. The value of each of the\n * enumeration keys is expected to be the actual english string. Some strings contain replaceable parameter values\n * as indicated by `%1`, `%2`, etc. The number after the `%` indicates the order of the parameter. The ordering of\n * parameters is important because some languages may choose to put the second parameter before the first in its\n * translation. Also, some strings are rendered using `markdown-to-jsx` and thus support markdown and inline html.\n */\nexport var TranslatableString;\n(function (TranslatableString) {\n /** Fallback title of an array item, used by ArrayField */\n TranslatableString[\"ArrayItemTitle\"] = \"Item\";\n /** Missing items reason, used by ArrayField */\n TranslatableString[\"MissingItems\"] = \"Missing items definition\";\n /** Empty array message, used by ArrayField */\n TranslatableString[\"EmptyArray\"] = \"No items yet. Use the button below to add some.\";\n /** Yes label, used by BooleanField */\n TranslatableString[\"YesLabel\"] = \"Yes\";\n /** No label, used by BooleanField */\n TranslatableString[\"NoLabel\"] = \"No\";\n /** Close label, used by ErrorList */\n TranslatableString[\"CloseLabel\"] = \"Close\";\n /** Errors label, used by ErrorList */\n TranslatableString[\"ErrorsLabel\"] = \"Errors\";\n /** New additionalProperties string default value, used by ObjectField */\n TranslatableString[\"NewStringDefault\"] = \"New Value\";\n /** Add button title, used by AddButton */\n TranslatableString[\"AddButton\"] = \"Add\";\n /** Add button title, used by AddButton */\n TranslatableString[\"AddItemButton\"] = \"Add Item\";\n /** Copy button title, used by IconButton */\n TranslatableString[\"CopyButton\"] = \"Copy\";\n /** Expand cycle button title */\n TranslatableString[\"ExpandButton\"] = \"Expand Cycle\";\n /** Move down button title, used by IconButton */\n TranslatableString[\"MoveDownButton\"] = \"Move down\";\n /** Move up button title, used by IconButton */\n TranslatableString[\"MoveUpButton\"] = \"Move up\";\n /** Remove button title, used by IconButton */\n TranslatableString[\"RemoveButton\"] = \"Remove\";\n /** Now label, used by AltDateWidget */\n TranslatableString[\"NowLabel\"] = \"Now\";\n /** Clear label, used by AltDateWidget */\n TranslatableString[\"ClearLabel\"] = \"Clear\";\n /** Aria date label, used by DateWidget */\n TranslatableString[\"AriaDateLabel\"] = \"Select a date\";\n /** File preview label, used by FileWidget */\n TranslatableString[\"PreviewLabel\"] = \"Preview\";\n /** Decrement button aria label, used by UpDownWidget */\n TranslatableString[\"DecrementAriaLabel\"] = \"Decrease value by 1\";\n /** Increment button aria label, used by UpDownWidget */\n TranslatableString[\"IncrementAriaLabel\"] = \"Increase value by 1\";\n /** The label for the Add button in for an optional object field */\n TranslatableString[\"OptionalObjectAdd\"] = \"Add data for optional field\";\n /** The label for the Remove button in for an optional object field */\n TranslatableString[\"OptionalObjectRemove\"] = \"Remove data for optional field\";\n /** The label for when displaying a non-editable form with missing optional field data */\n TranslatableString[\"OptionalObjectEmptyMsg\"] = \"No data for optional field\";\n /** Label for the schema type selector, used by FallbackField */\n TranslatableString[\"Type\"] = \"Type\";\n /** Label for the 'value' field, used by FallbackField */\n TranslatableString[\"Value\"] = \"Value\";\n /** Clear button title, used by IconButton */\n TranslatableString[\"ClearButton\"] = \"clear input\";\n // Strings with replaceable parameters\n /** Unknown field type reason, where %1 will be replaced with the type as provided by SchemaField */\n TranslatableString[\"UnknownFieldType\"] = \"Unknown field type %1\";\n /** Option prefix, where %1 will be replaced with the option index as provided by MultiSchemaField */\n TranslatableString[\"OptionPrefix\"] = \"Option %1\";\n /** Option prefix, where %1 and %2 will be replaced by the schema title and option index, respectively as provided by\n * MultiSchemaField\n */\n TranslatableString[\"TitleOptionPrefix\"] = \"%1 option %2\";\n /** Key label, where %1 will be replaced by the label as provided by WrapIfAdditionalTemplate */\n TranslatableString[\"KeyLabel\"] = \"%1 Key\";\n /** Deprecated label, where %1 will be replaced by the label as provided by SchemaField */\n TranslatableString[\"DeprecatedLabel\"] = \"%1 (deprecated)\";\n /** Cyclic schema message */\n TranslatableString[\"CycleDetected\"] = \"Circular reference ($ref cycle) detected for field \\\"%1\\\". You may choose to expand to the next cycle break\";\n // Strings with replaceable parameters AND/OR that support markdown and html\n /** Invalid object field configuration as provided by the ObjectField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"InvalidObjectField\"] = \"Invalid \\\"%1\\\" object field configuration: _%2_.\";\n /** Unsupported field schema, used by UnsupportedField */\n TranslatableString[\"UnsupportedField\"] = \"Unsupported field schema.\";\n /** Unsupported field schema, where %1 will be replaced by the FieldPathId.$id as provided by UnsupportedField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"UnsupportedFieldWithId\"] = \"Unsupported field schema for field `%1`.\";\n /** Unsupported field schema, where %1 will be replaced by the reason string as provided by UnsupportedField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"UnsupportedFieldWithReason\"] = \"Unsupported field schema: _%1_.\";\n /** Unsupported field schema, where %1 and %2 will be replaced by the FieldPathId.$id and reason strings,\n * respectively, as provided by UnsupportedField.\n * NOTE: Use markdown notation rather than html tags.\n */\n TranslatableString[\"UnsupportedFieldWithIdAndReason\"] = \"Unsupported field schema for field `%1`: _%2_.\";\n /** File name, type and size info, where %1, %2 and %3 will be replaced by the file name, file type and file size as\n * provided by FileWidget\n */\n TranslatableString[\"FilesInfo\"] = \"**%1** (%2, %3 bytes)\";\n})(TranslatableString || (TranslatableString = {}));\n//# sourceMappingURL=enums.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { memo, useCallback, useMemo, useRef, useState } from 'react';\nimport { setByPath, allowAdditionalItems, getTemplate, getUiOptions, getWidget, hashObject, isCustomWidget, isFixedItems, isFormDataAvailable, isObject, optionsList, shouldRenderOptionalField, toFieldPathId, useDeepCompareMemo, ITEMS_KEY, ID_KEY, TranslatableString, } from '@rjsf/utils';\n/** Used to generate a unique ID for an element in a row */\nlet rowIdCounter = 0;\nfunction generateRowId() {\n rowIdCounter += 1;\n return `rjsf-array-item-${rowIdCounter}`;\n}\n/** Converts the `formData` into `KeyedFormDataType` data, using the `generateRowId()` function to create the key\n *\n * @param formData - The data for the form\n * @returns - The `formData` converted into a `KeyedFormDataType` element\n */\nfunction generateKeyedFormData(formData) {\n return !Array.isArray(formData)\n ? []\n : formData.map((item) => ({\n key: generateRowId(),\n item,\n }));\n}\n/** Converts `KeyedFormDataType` data into the inner `formData`\n *\n * @param keyedFormData - The `KeyedFormDataType` to be converted\n * @returns - The inner `formData` item(s) in the `keyedFormData`\n */\nfunction keyedToPlainFormData(keyedFormData) {\n if (Array.isArray(keyedFormData)) {\n return keyedFormData.map((keyedItem) => keyedItem.item);\n }\n return [];\n}\n/** Determines whether the item described in the schema is always required, which is determined by whether any item\n * may be null.\n *\n * @param itemSchema - The schema for the item\n * @return - True if the item schema type does not contain the \"null\" type\n */\nfunction isItemRequired(itemSchema) {\n if (Array.isArray(itemSchema.type)) {\n // While we don't yet support composite/nullable jsonschema types, it's\n // future-proof to check for requirement against these.\n return !itemSchema.type.includes('null');\n }\n // All non-null array item types are inherently required by design\n return itemSchema.type !== 'null';\n}\n/** Determines whether more items can be added to the array. If the uiSchema indicates the array doesn't allow adding\n * then false is returned. Otherwise, if the schema indicates that there are a maximum number of items and the\n * `formData` matches that value, then false is returned, otherwise true is returned.\n *\n * @param registry - The registry\n * @param schema - The schema for the field\n * @param formItems - The list of items in the form\n * @param [uiSchema] - The UiSchema for the field\n * @returns - True if the item is addable otherwise false\n */\nfunction canAddItem(registry, schema, formItems, uiSchema) {\n let { addable } = getUiOptions(uiSchema, registry.globalUiOptions);\n if (addable !== false) {\n // if ui:options.addable was not explicitly set to false, we can add\n // another item if we have not exceeded maxItems yet\n if (schema.maxItems !== undefined) {\n addable = formItems.length < schema.maxItems;\n }\n else {\n addable = true;\n }\n }\n return addable;\n}\n/** Helper method to compute item UI schema for both normal and fixed arrays\n * Handles both static object and dynamic function cases\n *\n * @param uiSchema - The parent UI schema containing items definition\n * @param item - The item data\n * @param index - The index of the item\n * @param formContext - The form context\n * @returns The computed UI schema for the item\n */\nfunction computeItemUiSchema(uiSchema, item, index, formContext) {\n if (typeof uiSchema.items === 'function') {\n try {\n // Call the function with item data, index, and form context\n // TypeScript now correctly infers the types thanks to the ArrayElement type in UiSchema\n const result = uiSchema.items(item, index, formContext);\n // Only use the result if it's truthy\n return result;\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.error(`Error executing dynamic uiSchema.items function for item at index ${index}:`, e);\n // Fall back to undefined to allow the field to still render\n return undefined;\n }\n }\n else {\n // Static object case - preserve undefined to maintain backward compatibility\n return uiSchema.items;\n }\n}\n/** Returns the default form information for an item based on the schema for that item. Deals with the possibility\n * that the schema is fixed and allows additional items.\n */\nfunction getNewFormDataRow(registry, schema) {\n const { schemaUtils, globalFormOptions } = registry;\n let itemSchema = schema.items;\n if (globalFormOptions.useFallbackUiForUnsupportedType && !itemSchema) {\n // If we don't have itemSchema and useFallbackUiForUnsupportedType is on, use an empty schema\n itemSchema = {};\n }\n else if (isFixedItems(schema) && allowAdditionalItems(schema)) {\n itemSchema = schema.additionalItems;\n }\n // Cast this as a T to work around schema utils being for T[] caused by the FieldProps call on the class\n return schemaUtils.getDefaultFormState(itemSchema);\n}\n/** Renders an array as a set of checkboxes using the 'select' widget\n */\nfunction ArrayAsMultiSelect(props) {\n const { schema, fieldPathId, uiSchema, formData: items = [], disabled = false, readonly = false, autofocus = false, required = false, placeholder, onBlur, onFocus, registry, rawErrors, name, onSelectChange, } = props;\n const { widgets, schemaUtils, globalFormOptions, globalUiOptions } = registry;\n const itemsSchema = schemaUtils.retrieveSchema(schema.items, items);\n // For computing `enumOptions`, fallback to the array property's uiSchema if there is no `items` schema\n // Avoids a breaking change reported in https://github.com/rjsf-team/react-jsonschema-form/issues/4985\n const itemsUiSchema = (uiSchema?.items ?? uiSchema);\n const enumOptions = optionsList(itemsSchema, itemsUiSchema);\n const { widget = 'select', title: uiTitle, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const label = uiTitle ?? schema.title ?? name;\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n // For custom widgets with multiple=true, generate a fieldPathId with isMultiValue flag\n const multiValueFieldPathId = useDeepCompareMemo(toFieldPathId('', globalFormOptions, fieldPathId, true));\n return (_jsx(Widget, { id: multiValueFieldPathId[ID_KEY], name: name, multiple: true, onChange: onSelectChange, onBlur: onBlur, onFocus: onFocus, options: { ...options, enumOptions }, schema: schema, uiSchema: uiSchema, registry: registry, value: items, disabled: disabled, readonly: readonly, required: required, label: label, hideLabel: !displayLabel, placeholder: placeholder, autofocus: autofocus, rawErrors: rawErrors, htmlName: multiValueFieldPathId.name }));\n}\n/** Renders an array using the custom widget provided by the user in the `uiSchema`\n */\nfunction ArrayAsCustomWidget(props) {\n const { schema, fieldPathId, uiSchema, disabled = false, readonly = false, autofocus = false, required = false, hideError, placeholder, onBlur, onFocus, formData: items = [], registry, rawErrors, name, onSelectChange, } = props;\n const { widgets, schemaUtils, globalFormOptions, globalUiOptions } = registry;\n const { widget, title: uiTitle, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const label = uiTitle ?? schema.title ?? name;\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n // For custom widgets with multiple=true, generate a fieldPathId with isMultiValue flag\n const multiValueFieldPathId = useDeepCompareMemo(toFieldPathId('', globalFormOptions, fieldPathId, true));\n return (_jsx(Widget, { id: multiValueFieldPathId[ID_KEY], name: name, multiple: true, onChange: onSelectChange, onBlur: onBlur, onFocus: onFocus, options: options, schema: schema, uiSchema: uiSchema, registry: registry, value: items, disabled: disabled, readonly: readonly, hideError: hideError, required: required, label: label, hideLabel: !displayLabel, placeholder: placeholder, autofocus: autofocus, rawErrors: rawErrors, htmlName: multiValueFieldPathId.name }));\n}\n/** Renders an array of files using the `FileWidget`\n */\nfunction ArrayAsFiles(props) {\n const { schema, uiSchema, fieldPathId, name, disabled = false, readonly = false, autofocus = false, required = false, onBlur, onFocus, registry, formData: items = [], rawErrors, onSelectChange, } = props;\n const { widgets, schemaUtils, globalFormOptions, globalUiOptions } = registry;\n const { widget = 'files', title: uiTitle, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const label = uiTitle ?? schema.title ?? name;\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n // For custom widgets with multiple=true, generate a fieldPathId with isMultiValue flag\n const multiValueFieldPathId = useDeepCompareMemo(toFieldPathId('', globalFormOptions, fieldPathId, true));\n return (_jsx(Widget, { options: options, id: multiValueFieldPathId[ID_KEY], name: name, multiple: true, onChange: onSelectChange, onBlur: onBlur, onFocus: onFocus, schema: schema, uiSchema: uiSchema, value: items, disabled: disabled, readonly: readonly, required: required, registry: registry, autofocus: autofocus, rawErrors: rawErrors, label: label, hideLabel: !displayLabel, htmlName: multiValueFieldPathId.name }));\n}\n/** Renders the individual array item using a `SchemaField` along with the additional properties that are needed to\n * render the whole of the `ArrayFieldItemTemplate`.\n */\nfunction ArrayFieldItemInner(props) {\n const { itemKey, index, name, disabled, hideError, readonly, registry, uiOptions, parentUiSchema, canAdd, canRemove = true, canMoveUp, canMoveDown, rawItemSchema, itemData, itemUiSchema, parentFieldPathId, itemErrorSchema, autofocus, onBlur, onFocus, onChange, rawErrors, totalItems, title, handleAddItem, handleCopyItem, handleRemoveItem, handleReorderItems, } = props;\n const { schemaUtils, fields: { ArraySchemaField, SchemaField }, globalUiOptions, globalFormOptions, } = registry;\n const itemSchema = useMemo(() => schemaUtils.retrieveSchema(rawItemSchema, itemData), [schemaUtils, rawItemSchema, itemData]);\n // parentFieldPathId is the same stable reference for all items; index is a stable number.\n // useMemo avoids creating a new FieldPathId object on every render, letting React.memo bail out.\n const fieldPathId = useMemo(() => toFieldPathId(index, globalFormOptions, parentFieldPathId), [index, globalFormOptions, parentFieldPathId]);\n const ItemSchemaField = ArraySchemaField || SchemaField;\n const ArrayFieldItemTemplate = getTemplate('ArrayFieldItemTemplate', registry, uiOptions);\n const displayLabel = schemaUtils.getDisplayLabel(itemSchema, itemUiSchema, globalUiOptions);\n const { description } = getUiOptions(itemUiSchema);\n const hasDescription = !!description || !!itemSchema.description;\n const { orderable = true, removable = true, copyable = false } = uiOptions;\n const has = {\n moveUp: orderable && canMoveUp,\n moveDown: orderable && canMoveDown,\n copy: copyable && canAdd,\n remove: removable && canRemove,\n toolbar: false,\n };\n has.toolbar = Object.keys(has).some((key) => has[key]);\n const onAddItem = useCallback((event) => {\n handleAddItem(event, index + 1);\n }, [handleAddItem, index]);\n const onCopyItem = useCallback((event) => {\n handleCopyItem(event, index);\n }, [handleCopyItem, index]);\n const onRemoveItem = useCallback((event) => {\n handleRemoveItem(event, index);\n }, [handleRemoveItem, index]);\n const onMoveUpItem = useCallback((event) => {\n handleReorderItems(event, index, index - 1);\n }, [handleReorderItems, index]);\n const onMoveDownItem = useCallback((event) => {\n handleReorderItems(event, index, index + 1);\n }, [handleReorderItems, index]);\n const templateProps = {\n children: (_jsx(ItemSchemaField, { name: name, title: title, index: index, schema: itemSchema, uiSchema: itemUiSchema, formData: itemData, errorSchema: itemErrorSchema, fieldPathId: fieldPathId, required: isItemRequired(itemSchema), onChange: onChange, onBlur: onBlur, onFocus: onFocus, registry: registry, disabled: disabled, readonly: readonly, hideError: hideError, autofocus: autofocus, rawErrors: rawErrors })),\n buttonsProps: {\n fieldPathId,\n disabled,\n readonly,\n canAdd,\n hasCopy: has.copy,\n hasMoveUp: has.moveUp,\n hasMoveDown: has.moveDown,\n hasRemove: has.remove,\n index,\n totalItems,\n onAddItem,\n onCopyItem,\n onRemoveItem,\n onMoveUpItem,\n onMoveDownItem,\n registry,\n schema: itemSchema,\n uiSchema: itemUiSchema,\n },\n itemKey,\n className: 'rjsf-array-item',\n disabled,\n hasToolbar: has.toolbar,\n index,\n totalItems,\n readonly,\n registry,\n schema: itemSchema,\n uiSchema: itemUiSchema,\n parentUiSchema,\n displayLabel,\n hasDescription,\n };\n return _jsx(ArrayFieldItemTemplate, { ...templateProps });\n}\nconst ArrayFieldItem = memo(ArrayFieldItemInner);\n/** Renders a normal array without any limitations of length\n */\nfunction NormalArray(props) {\n const { schema, uiSchema = {}, errorSchema, fieldPathId, formData: formDataFromProps, name, title, disabled = false, readonly = false, autofocus = false, required = false, hideError = false, registry, onBlur, onFocus, rawErrors, onChange, keyedFormData, handleAddItem, handleCopyItem, handleRemoveItem, handleReorderItems, } = props;\n const fieldTitle = schema.title || title || name;\n const { schemaUtils, fields, formContext, globalUiOptions } = registry;\n const { OptionalDataControlsField } = fields;\n const uiOptions = useMemo(() => getUiOptions(uiSchema, globalUiOptions), [uiSchema, globalUiOptions]);\n // Memoize schemaItems to avoid a new `{}` object identity on every render (which would bust retrieveSchema cache)\n const schemaItems = useMemo(() => (isObject(schema.items) ? schema.items : {}), [schema.items]);\n const itemsSchema = useMemo(() => schemaUtils.retrieveSchema(schemaItems), [schemaUtils, schemaItems]);\n const formData = useMemo(() => keyedToPlainFormData(keyedFormData), [keyedFormData]);\n const renderOptionalField = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formDataFromProps);\n const canAdd = useMemo(() => canAddItem(registry, schema, formData, uiSchema) && (!renderOptionalField || hasFormData), [registry, schema, formData, uiSchema, renderOptionalField, hasFormData]);\n const actualFormData = hasFormData ? keyedFormData : [];\n const extraClass = renderOptionalField ? ' rjsf-optional-array-field' : '';\n // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId\n const childFieldPathId = props.childFieldPathId ?? fieldPathId;\n const optionalDataControl = renderOptionalField ? (_jsx(OptionalDataControlsField, { ...props, fieldPathId: childFieldPathId })) : undefined;\n const arrayProps = {\n canAdd,\n items: actualFormData.map((keyedItem, index) => {\n const { key, item } = keyedItem;\n // While we are actually dealing with a single item of type T, the types require a T[], so cast\n const itemCast = item;\n const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;\n // Compute the item UI schema using the helper method\n const itemUiSchema = computeItemUiSchema(uiSchema, item, index, formContext);\n const itemProps = {\n itemKey: key,\n index,\n name: name && `${name}-${index}`,\n registry,\n uiOptions,\n parentUiSchema: uiSchema,\n hideError,\n readonly,\n disabled,\n required,\n title: fieldTitle ? `${fieldTitle}-${index + 1}` : undefined,\n canAdd,\n canMoveUp: index > 0,\n canMoveDown: index < formData.length - 1,\n rawItemSchema: schemaItems,\n parentFieldPathId: childFieldPathId,\n itemErrorSchema,\n itemData: itemCast,\n itemUiSchema,\n autofocus: autofocus && index === 0,\n onBlur,\n onFocus,\n rawErrors,\n totalItems: keyedFormData.length,\n handleAddItem,\n handleCopyItem,\n handleRemoveItem,\n handleReorderItems,\n onChange,\n };\n return _jsx(ArrayFieldItem, { ...itemProps }, key);\n }),\n className: `rjsf-field rjsf-field-array rjsf-field-array-of-${itemsSchema.type}${extraClass}`,\n disabled,\n fieldPathId,\n uiSchema,\n onAddClick: handleAddItem,\n readonly,\n required,\n schema,\n title: fieldTitle,\n formData,\n rawErrors,\n registry,\n optionalDataControl,\n };\n const Template = getTemplate('ArrayFieldTemplate', registry, uiOptions);\n return _jsx(Template, { ...arrayProps });\n}\n/** Renders an array that has a maximum limit of items\n */\nfunction FixedArray(props) {\n const { schema, uiSchema = {}, formData, errorSchema, fieldPathId, name, title, disabled = false, readonly = false, autofocus = false, required = false, hideError = false, registry, onBlur, onFocus, rawErrors, keyedFormData, onChange, handleAddItem, handleCopyItem, handleRemoveItem, handleReorderItems, } = props;\n let { formData: items = [] } = props;\n const fieldTitle = schema.title || title || name;\n const { fields, formContext, globalUiOptions } = registry;\n const uiOptions = useMemo(() => getUiOptions(uiSchema, globalUiOptions), [uiSchema, globalUiOptions]);\n const { OptionalDataControlsField } = fields;\n const renderOptionalField = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formData);\n const schemaItems = useMemo(() => (Array.isArray(schema.items) ? schema.items : []), [schema.items]);\n const hasAdditionalItems = isObject(schema.additionalItems);\n // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId\n const childFieldPathId = props.childFieldPathId ?? fieldPathId;\n if (items.length < schemaItems.length) {\n // to make sure at least all fixed items are generated\n items = items.concat(new Array(schemaItems.length - items.length));\n }\n const actualFormData = hasFormData ? keyedFormData : [];\n const extraClass = renderOptionalField ? ' rjsf-optional-array-field' : '';\n const optionalDataControl = renderOptionalField ? (_jsx(OptionalDataControlsField, { ...props, fieldPathId: childFieldPathId })) : undefined;\n // These are the props passed into the render function\n const canAdd = canAddItem(registry, schema, items, uiSchema) &&\n hasAdditionalItems &&\n (!renderOptionalField || hasFormData);\n const arrayProps = {\n canAdd,\n className: `rjsf-field rjsf-field-array rjsf-field-array-fixed-items${extraClass}`,\n disabled,\n fieldPathId,\n formData,\n items: actualFormData.map((keyedItem, index) => {\n const { key, item } = keyedItem;\n // While we are actually dealing with a single item of type T, the types require a T[], so cast\n const itemCast = item;\n const additional = index >= schemaItems.length;\n const rawItemSchema = (additional && isObject(schema.additionalItems) ? schema.additionalItems : schemaItems[index]) ||\n {};\n // Compute the item UI schema - handle both static and dynamic cases\n let itemUiSchema;\n if (additional) {\n // For additional items, use additionalItems uiSchema\n itemUiSchema = uiSchema.additionalItems;\n }\n else if (Array.isArray(uiSchema.items)) {\n // For fixed items, uiSchema.items can be an array, a function, or a single object\n itemUiSchema = uiSchema.items[index];\n }\n else {\n // Use the helper method for function or static object cases\n itemUiSchema = computeItemUiSchema(uiSchema, item, index, formContext);\n }\n const itemErrorSchema = errorSchema ? errorSchema[index] : undefined;\n const itemProps = {\n index,\n itemKey: key,\n name: name && `${name}-${index}`,\n registry,\n uiOptions,\n parentUiSchema: uiSchema,\n hideError,\n readonly,\n disabled,\n required,\n title: fieldTitle ? `${fieldTitle}-${index + 1}` : undefined,\n canAdd,\n canRemove: additional,\n canMoveUp: index >= schemaItems.length + 1,\n canMoveDown: additional && index < items.length - 1,\n rawItemSchema,\n itemData: itemCast,\n itemUiSchema,\n parentFieldPathId: childFieldPathId,\n itemErrorSchema,\n autofocus: autofocus && index === 0,\n onBlur,\n onFocus,\n rawErrors,\n totalItems: keyedFormData.length,\n onChange,\n handleAddItem,\n handleCopyItem,\n handleRemoveItem,\n handleReorderItems,\n };\n return _jsx(ArrayFieldItem, { ...itemProps }, key);\n }),\n onAddClick: handleAddItem,\n readonly,\n required,\n registry,\n schema,\n uiSchema,\n title: fieldTitle,\n errorSchema,\n rawErrors,\n optionalDataControl,\n };\n const Template = getTemplate('ArrayFieldTemplate', registry, uiOptions);\n return _jsx(Template, { ...arrayProps });\n}\n/** A custom hook that handles the updating of the keyedFormData from an external `formData` change as well as\n * internally by the `ArrayField`. If there was an external `formData` change, then the `keyedFormData` is recomputed\n * in order to preserve the unique keys from the old `keyedFormData` to the new `formData`. Along with the\n * `keyedFormData` this hook also returns an `updateKeyedFormData()` function for use by the `ArrayField`. The detection\n * of external `formData` are handled by storing the hash of that `formData` along with the `keyedFormData` associated\n * with it. The `updateKeyedFormData()` will update that hash whenever the `keyedFormData` is modified and as well as\n * returning the plain `formData` from the `keyedFormData`.\n */\nfunction useKeyedFormData(formData = []) {\n const newHash = useMemo(() => hashObject(formData), [formData]);\n const [state, setState] = useState(() => ({\n formDataHash: newHash,\n keyedFormData: generateKeyedFormData(formData),\n }));\n let { keyedFormData, formDataHash } = state;\n if (newHash !== formDataHash) {\n const nextFormData = Array.isArray(formData) ? formData : [];\n const previousKeyedFormData = keyedFormData || [];\n keyedFormData =\n nextFormData.length === previousKeyedFormData.length\n ? previousKeyedFormData.map((previousKeyedFormDatum, index) => ({\n key: previousKeyedFormDatum.key,\n item: nextFormData[index],\n }))\n : generateKeyedFormData(nextFormData);\n formDataHash = newHash;\n setState({ formDataHash, keyedFormData });\n }\n const updateKeyedFormData = useCallback((newData) => {\n const plainFormData = keyedToPlainFormData(newData);\n const updatedHash = hashObject(plainFormData);\n setState({ formDataHash: updatedHash, keyedFormData: newData });\n return plainFormData;\n }, []);\n return { keyedFormData, updateKeyedFormData };\n}\n/** The `ArrayField` component is used to render a field in the schema that is of type `array`. It supports both normal\n * and fixed array, allowing user to add and remove elements from the array data.\n */\nexport default function ArrayField(props) {\n const { schema, uiSchema, errorSchema, fieldPathId, registry, formData, onChange } = props;\n const { globalFormOptions, schemaUtils, translateString } = registry;\n const { keyedFormData, updateKeyedFormData } = useKeyedFormData(formData);\n // Refs keep the latest values accessible inside stable useCallback closures without being in the dep array,\n // so the four mutation handlers don't get new references on every keyedFormData / errorSchema change.\n const keyedFormDataRef = useRef(keyedFormData);\n keyedFormDataRef.current = keyedFormData;\n const errorSchemaRef = useRef(errorSchema);\n errorSchemaRef.current = errorSchema;\n // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId\n const childFieldPathId = props.childFieldPathId ?? fieldPathId;\n /** Callback handler for when the user clicks on the add or add at index buttons. Creates a new row of keyed form data\n * either at the end of the list (when index is not specified) or inserted at the `index` when it is, adding it into\n * the state, and then returning `onChange()` with the plain form data converted from the keyed data\n *\n * @param event - The event for the click\n * @param [index] - The optional index at which to add the new data\n */\n const handleAddItem = useCallback((event, index) => {\n if (event) {\n event.preventDefault();\n }\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (index === undefined || i < index) {\n setByPath(newErrorSchema, i, errorSchemaRef.current[i]);\n }\n else if (i >= index) {\n setByPath(newErrorSchema, i + 1, errorSchemaRef.current[i]);\n }\n }\n }\n const newKeyedFormDataRow = {\n key: generateRowId(),\n item: getNewFormDataRow(registry, schema),\n };\n const newKeyedFormData = [...keyedFormDataRef.current];\n if (index !== undefined) {\n newKeyedFormData.splice(index, 0, newKeyedFormDataRow);\n }\n else {\n newKeyedFormData.push(newKeyedFormDataRow);\n }\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [registry, schema, onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler for when the user clicks on the copy button on an existing array element. Clones the row of\n * keyed form data at the `index` into the next position in the state, and then returning `onChange()` with the plain\n * form data converted from the keyed data\n *\n * @param index - The index at which the copy button is clicked\n */\n const handleCopyItem = useCallback((event, index) => {\n if (event) {\n event.preventDefault();\n }\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (i <= index) {\n setByPath(newErrorSchema, i, errorSchemaRef.current[i]);\n }\n else if (i > index) {\n setByPath(newErrorSchema, i + 1, errorSchemaRef.current[i]);\n }\n }\n }\n const newKeyedFormDataRow = {\n key: generateRowId(),\n item: structuredClone(keyedFormDataRef.current[index].item),\n };\n const newKeyedFormData = [...keyedFormDataRef.current];\n if (index !== undefined) {\n newKeyedFormData.splice(index + 1, 0, newKeyedFormDataRow);\n }\n else {\n newKeyedFormData.push(newKeyedFormDataRow);\n }\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler for when the user clicks on the remove button on an existing array element. Removes the row of\n * keyed form data at the `index` in the state, and then returning `onChange()` with the plain form data converted\n * from the keyed data\n *\n * @param index - The index at which the remove button is clicked\n */\n const handleRemoveItem = useCallback((event, index) => {\n if (event) {\n event.preventDefault();\n }\n // refs #195: revalidate to ensure properly reindexing errors\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (i < index) {\n setByPath(newErrorSchema, i, errorSchemaRef.current[i]);\n }\n else if (i > index) {\n setByPath(newErrorSchema, i - 1, errorSchemaRef.current[i]);\n }\n }\n }\n const newKeyedFormData = keyedFormDataRef.current.filter((_, i) => i !== index);\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler for when the user clicks on one of the move item buttons on an existing array element. Moves the\n * row of keyed form data at the `index` to the `newIndex` in the state, and then returning `onChange()` with the\n * plain form data converted from the keyed data\n *\n * @param index - The index of the item to move\n * @param newIndex - The index to where the item is to be moved\n */\n const handleReorderItems = useCallback((event, index, newIndex) => {\n if (event) {\n event.preventDefault();\n event.currentTarget.blur();\n }\n let newErrorSchema;\n if (errorSchemaRef.current) {\n newErrorSchema = {};\n for (const idx of Object.keys(errorSchemaRef.current)) {\n const i = parseInt(idx, 10);\n if (i === index) {\n setByPath(newErrorSchema, newIndex, errorSchemaRef.current[index]);\n }\n else if (i === newIndex) {\n setByPath(newErrorSchema, index, errorSchemaRef.current[newIndex]);\n }\n else {\n setByPath(newErrorSchema, idx, errorSchemaRef.current[i]);\n }\n }\n }\n function reOrderArray() {\n const newKeyedFormData = keyedFormDataRef.current.slice();\n newKeyedFormData.splice(index, 1);\n newKeyedFormData.splice(newIndex, 0, keyedFormDataRef.current[index]);\n return newKeyedFormData;\n }\n const newKeyedFormData = reOrderArray();\n onChange(updateKeyedFormData(newKeyedFormData), childFieldPathId.path, newErrorSchema);\n }, [onChange, updateKeyedFormData, childFieldPathId]);\n /** Callback handler used to deal with changing the value of the data in the array at the `index`. Calls the\n * `onChange` callback with the updated form data\n *\n * @param index - The index of the item being changed\n */\n const handleChange = useCallback((value, path, newErrorSchema, id) => {\n const lastPathIsItemIndex = typeof path.at(-1) === 'number';\n onChange(\n // We need to treat undefined items as nulls to have validation.\n // See https://github.com/tdegrunt/jsonschema/issues/206\n // Only set to null for array items, and not for object properties within array items\n lastPathIsItemIndex && value === undefined ? null : value, path, newErrorSchema, id);\n }, [onChange]);\n /** Callback handler used to change the value for a checkbox */\n const onSelectChange = useCallback((value) => {\n onChange(value, childFieldPathId.path, undefined, childFieldPathId?.[ID_KEY]);\n }, [onChange, childFieldPathId]);\n const arrayAsMultiProps = {\n ...props,\n formData,\n fieldPathId: childFieldPathId,\n onSelectChange,\n };\n const arrayProps = {\n ...props,\n handleAddItem,\n handleCopyItem,\n handleRemoveItem,\n handleReorderItems,\n keyedFormData,\n onChange: handleChange,\n };\n if (!(ITEMS_KEY in schema)) {\n if (!globalFormOptions.useFallbackUiForUnsupportedType) {\n const uiOptions = getUiOptions(uiSchema);\n const UnsupportedFieldTemplate = getTemplate('UnsupportedFieldTemplate', registry, uiOptions);\n return (_jsx(UnsupportedFieldTemplate, { schema: schema, fieldPathId: fieldPathId, reason: translateString(TranslatableString.MissingItems), registry: registry }));\n }\n // Add an items schema with type as undefined so it triggers FallbackField later on\n const fallbackSchema = { ...schema, [ITEMS_KEY]: { type: undefined } };\n arrayAsMultiProps.schema = fallbackSchema;\n arrayProps.schema = fallbackSchema;\n }\n if (schemaUtils.isMultiSelect(arrayAsMultiProps.schema)) {\n // If array has enum or uniqueItems set to true, call renderMultiSelect() to render the default multiselect widget or a custom widget, if specified.\n return _jsx(ArrayAsMultiSelect, { ...arrayAsMultiProps });\n }\n if (isCustomWidget(uiSchema)) {\n return _jsx(ArrayAsCustomWidget, { ...arrayAsMultiProps });\n }\n if (isFixedItems(arrayAsMultiProps.schema)) {\n return _jsx(FixedArray, { ...arrayProps });\n }\n if (schemaUtils.isFilesArray(arrayAsMultiProps.schema, uiSchema)) {\n return _jsx(ArrayAsFiles, { ...arrayAsMultiProps });\n }\n return _jsx(NormalArray, { ...arrayProps });\n}\n//# sourceMappingURL=ArrayField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { getWidget, getUiOptions, isObject, optionsList, TranslatableString } from '@rjsf/utils';\n/** The `BooleanField` component is used to render a field in the schema is boolean. It constructs `enumOptions` for the\n * two boolean values based on the various alternatives in the schema.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction BooleanField(props) {\n const { schema, name, uiSchema, fieldPathId, formData, registry, required, disabled, readonly, hideError, autofocus, title, onChange, onFocus, onBlur, rawErrors, } = props;\n const { title: schemaTitle } = schema;\n const { widgets, translateString, globalUiOptions } = registry;\n const { widget = 'checkbox', title: uiTitle, \n // Unlike the other fields, don't use `getDisplayLabel()` since it always returns false for the boolean type\n label: displayLabel = true, enumNames, ...options } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget(schema, widget, widgets);\n const yes = translateString(TranslatableString.YesLabel);\n const no = translateString(TranslatableString.NoLabel);\n let enumOptions;\n const label = uiTitle ?? schemaTitle ?? title ?? name;\n if (Array.isArray(schema.oneOf)) {\n enumOptions = optionsList({\n oneOf: schema.oneOf\n .map((option) => {\n if (isObject(option)) {\n return {\n ...option,\n title: option.title || (option.const === true ? yes : no),\n };\n }\n return undefined;\n })\n .filter((o) => o), // cast away the error that typescript can't grok is fixed\n }, uiSchema);\n }\n else {\n const enums = schema.enum ?? [true, false];\n if (!enumNames && enums.length === 2 && enums.every((v) => typeof v === 'boolean')) {\n enumOptions = [\n {\n value: enums[0],\n label: enums[0] ? yes : no,\n },\n {\n value: enums[1],\n label: enums[1] ? yes : no,\n },\n ];\n }\n else {\n enumOptions = optionsList({ enum: enums }, uiSchema);\n }\n }\n const onWidgetChange = useCallback((value, errorSchema, id) => onChange(value, fieldPathId.path, errorSchema, id), [onChange, fieldPathId]);\n return (_jsx(Widget, { options: { ...options, enumOptions }, schema: schema, uiSchema: uiSchema, id: fieldPathId.$id, name: name, onChange: onWidgetChange, onFocus: onFocus, onBlur: onBlur, label: label, hideLabel: !displayLabel, value: formData, required: required, disabled: disabled, readonly: readonly, hideError: hideError, registry: registry, autofocus: autofocus, rawErrors: rawErrors, htmlName: fieldPathId.name }));\n}\nexport default BooleanField;\n//# sourceMappingURL=BooleanField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nimport { getTemplate, getUiOptions, RJSF_REF_CYCLE_KEY } from '@rjsf/utils';\n/** The `CyclicSchemaField` component is used to render a field in the schema that is marked with RJSF_REF_CYCLE_KEY ===\n * true\n *\n * @param props - The `FieldProps` for this template\n */\nexport default function CyclicSchemaField(props) {\n const [expanded, setExpanded] = useState(false);\n const { name, registry, schema, uiSchema, fieldPathId } = props;\n const { globalUiOptions } = registry;\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n const CyclicSchemaExpandTemplate = getTemplate('CyclicSchemaExpandTemplate', registry, uiOptions);\n if (!expanded) {\n return (_jsx(CyclicSchemaExpandTemplate, { registry: registry, schema: schema, uiSchema: uiSchema, name: name, fieldPathId: fieldPathId, onExpand: () => setExpanded(true) }));\n }\n const { fields } = registry;\n const { SchemaField } = fields;\n return _jsx(SchemaField, { ...props, schema: { ...schema, [RJSF_REF_CYCLE_KEY]: false } });\n}\n//# sourceMappingURL=CyclicSchemaField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useMemo, useState } from 'react';\nimport { getTemplate, getUiOptions, hashObject, toFieldPathId, TranslatableString, useDeepCompareMemo, } from '@rjsf/utils';\n/**\n * Get the schema for the type selection component.\n * @param title - The translated title for the type selection schema.\n */\nfunction getFallbackTypeSelectionSchema(title) {\n return {\n type: 'string',\n enum: ['string', 'number', 'boolean', 'object', 'array'],\n default: 'string',\n title,\n };\n}\n/**\n * Determines the JSON Schema type of the given formData.\n * @param formData - The form data whose type is to be determined.\n */\nfunction getTypeOfFormData(formData) {\n const dataType = typeof formData;\n if (dataType === 'string' || dataType === 'number' || dataType === 'boolean') {\n return dataType;\n }\n if (dataType === 'object') {\n return Array.isArray(formData) ? 'array' : 'object';\n }\n // Treat everything else as a string\n return 'string';\n}\n/**\n * Casts the given formData to the specified type.\n * @param formData - The form data to be casted.\n * @param newType - The target type to which the form data should be casted.\n */\nfunction castToNewType(formData, newType) {\n switch (newType) {\n case 'string':\n return String(formData);\n case 'number': {\n const castedNumber = Number(formData);\n return (Number.isNaN(castedNumber) ? 0 : castedNumber);\n }\n case 'boolean':\n return Boolean(formData);\n default:\n return formData;\n }\n}\n/**\n * The `FallbackField` component is used to render a field for unsupported or unknown schema types. If\n * `useFallbackUiForUnsupportedType` is enabled in the `globalUiOptions`, it provides a type selector\n */\nexport default function FallbackField(props) {\n const { id, formData, displayLabel = true, schema, name, uiSchema, required, disabled = false, readonly = false, onBlur, onFocus, registry, fieldPathId, onChange, errorSchema, } = props;\n const { translateString, fields, globalFormOptions } = registry;\n const [type, setType] = useState(getTypeOfFormData(formData));\n const uiOptions = getUiOptions(uiSchema);\n const typeSelectorInnerFieldPathId = useDeepCompareMemo(toFieldPathId('__internal_type_selector', globalFormOptions, fieldPathId));\n const schemaTitle = translateString(TranslatableString.Type);\n const typesOptionSchema = useMemo(() => getFallbackTypeSelectionSchema(schemaTitle), [schemaTitle]);\n const onTypeChange = (newType) => {\n if (newType != null) {\n setType(newType);\n onChange(castToNewType(formData, newType), fieldPathId.path, errorSchema, id);\n }\n };\n if (!globalFormOptions.useFallbackUiForUnsupportedType) {\n const { reason = translateString(TranslatableString.UnknownFieldType, [String(schema.type)]) } = props;\n const UnsupportedFieldTemplate = getTemplate('UnsupportedFieldTemplate', registry, uiOptions);\n return _jsx(UnsupportedFieldTemplate, { schema: schema, fieldPathId: fieldPathId, reason: reason, registry: registry });\n }\n const FallbackFieldTemplate = getTemplate('FallbackFieldTemplate', registry, uiOptions);\n const { SchemaField } = fields;\n return (_jsx(FallbackFieldTemplate, { schema: schema, registry: registry, typeSelector: _jsx(SchemaField, { fieldPathId: typeSelectorInnerFieldPathId, name: `${name}__fallback_type`, schema: typesOptionSchema, formData: type, onChange: onTypeChange, onBlur: onBlur, onFocus: onFocus, registry: registry, hideLabel: !displayLabel, disabled: disabled, readonly: readonly, required: required }, formData ? hashObject(formData) : '__empty__'), schemaField: _jsx(SchemaField, { ...props, schema: {\n type,\n title: translateString(TranslatableString.Value),\n ...(type === 'object' && { additionalProperties: true }),\n } }) }));\n}\n//# sourceMappingURL=FallbackField.js.map","import { createElement as _createElement } from \"react\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getByPath, toPath, ANY_OF_KEY, deepEquals, getDiscriminatorFieldFromSchema, getTemplate, getTestIds, getPropertySchema, getUiOptions, hashObject, ID_KEY, isObject, isPlainObject, lookupFromFormContext, ONE_OF_KEY, PROPERTIES_KEY, READONLY_KEY, toFieldPathId, UI_OPTIONS_KEY, UI_GLOBAL_OPTIONS_KEY, ITEMS_KEY, useDeepCompareMemo, } from '@rjsf/utils';\n/** The enumeration of the three different Layout GridTemplate type values\n */\nexport var GridType;\n(function (GridType) {\n GridType[\"ROW\"] = \"ui:row\";\n GridType[\"COLUMN\"] = \"ui:col\";\n GridType[\"COLUMNS\"] = \"ui:columns\";\n GridType[\"CONDITION\"] = \"ui:condition\";\n})(GridType || (GridType = {}));\n/** The enumeration of the different operators within a condition\n */\nexport var Operators;\n(function (Operators) {\n Operators[\"ALL\"] = \"all\";\n Operators[\"SOME\"] = \"some\";\n Operators[\"NONE\"] = \"none\";\n})(Operators || (Operators = {}));\n/** The regular expression that is used to detect whether a string contains a lookup key\n */\nexport const LOOKUP_REGEX = /^\\$lookup=(.+)/;\n/** The constant representing the main layout grid schema option name in the `uiSchema`\n */\nexport const LAYOUT_GRID_UI_OPTION = 'layoutGrid';\n/** The constant representing the main layout grid schema option name in the `uiSchema`\n */\nexport const LAYOUT_GRID_OPTION = `ui:${LAYOUT_GRID_UI_OPTION}`;\n/** Returns either the `value` if it is non-nullish or the fallback\n *\n * @param [value] - The potential value to return if it is non-nullish\n * @param [fallback] - The fallback value to return if `value` is nullish\n * @returns - `value` if it is non-nullish otherwise `fallback`\n */\nfunction getNonNullishValue(value, fallback) {\n return value ?? fallback;\n}\n/** Detects if a `str` is made up entirely of numeric characters\n *\n * @param str - The string to check to see if it is a numeric index\n * @return - True if the string consists entirely of numeric characters\n */\nfunction isNumericIndex(str) {\n return /^\\d+?$/.test(str); // Matches positive integers\n}\nconst LAYOUT_GRID_FIELD_TEST_IDS = getTestIds();\n/** Computes the uiSchema for the field with `name` from the `uiProps` and `uiSchema` provided. The field UI Schema\n * will always contain a copy of the global options from the `uiSchema` (so they can be passed down) as well as\n * copying them into the local ui options. When the `forceReadonly` flag is true, then the field UI Schema is\n * updated to make \"readonly\" be true. When the `schemaReadonly` flag is true AND the field UI Schema does NOT have\n * the flag already provided, then we also make \"readonly\" true. We always make sure to return the final value of the\n * field UI Schema's \"readonly\" flag as `uiReadonly` along with the `fieldUiSchema` in the return value.\n *\n * @param field - The name of the field to pull the existing UI Schema for\n * @param uiProps - Any props that should be put into the field's uiSchema\n * @param [uiSchema] - The optional UI Schema from which to get the UI schema for the field\n * @param [schemaReadonly] - Optional flag indicating whether the schema indicates the field is readonly\n * @param [forceReadonly] - Optional flag indicating whether the Form itself is in readonly mode\n */\nexport function computeFieldUiSchema(field, uiProps, uiSchema, schemaReadonly, forceReadonly) {\n const globalUiOptions = uiSchema?.[UI_GLOBAL_OPTIONS_KEY] ?? {};\n const localUiSchema = getByPath(uiSchema, toPath(field));\n const localUiOptions = { ...(localUiSchema?.[UI_OPTIONS_KEY] ?? {}), ...uiProps, ...globalUiOptions };\n const fieldUiSchema = { ...localUiSchema };\n if (Object.keys(localUiOptions).length > 0) {\n fieldUiSchema[UI_OPTIONS_KEY] = localUiOptions;\n }\n if (Object.keys(globalUiOptions).length > 0) {\n // pass the global uiOptions down to the field uiSchema so that they can be applied to all nested fields\n fieldUiSchema[UI_GLOBAL_OPTIONS_KEY] = globalUiOptions;\n }\n let { readonly: uiReadonly } = getUiOptions(fieldUiSchema);\n if (forceReadonly === true || (uiReadonly === undefined && schemaReadonly === true)) {\n // If we are forcing all widgets to be readonly, OR the schema indicates it is readonly AND the uiSchema does not\n // have an overriding value, then update the uiSchema to set readonly to true. Doing this will\n uiReadonly = true;\n const fieldUiOptions = fieldUiSchema[UI_OPTIONS_KEY];\n if (fieldUiOptions && READONLY_KEY in fieldUiOptions) {\n // If the local options has the key value provided in it, then set that one to true\n fieldUiOptions[READONLY_KEY] = true;\n }\n else {\n // otherwise set the `ui:` version\n fieldUiSchema[`ui:${READONLY_KEY}`] = true;\n }\n }\n return { fieldUiSchema, uiReadonly };\n}\n/** Given an `operator`, `datum` and `value` determines whether this condition is considered matching. Matching\n * depends on the `operator`. The `datum` and `value` are converted into arrays if they aren't already and then the\n * contents of the two arrays are compared using the `operator`. When `operator` is All, then the two arrays must be\n * equal to match. When `operator` is SOME then the intersection of the two arrays must have at least one value in\n * common to match. When `operator` is NONE then the intersection of the two arrays must not have any values in common\n * to match.\n *\n * @param [operator] - The optional operator for the condition\n * @param [datum] - The optional datum for the condition, this can be an item or a list of items of type unknown\n * @param [value='$0m3tH1nG Un3xP3cT3d'] The optional value for the condition, defaulting to a highly unlikely value\n * to avoid comparing two undefined elements when `value` was forgotten in the condition definition.\n * This can be an item or a list of items of type unknown\n * @returns - True if the condition matches, false otherwise\n */\nexport function conditionMatches(operator, datum, value = '$0m3tH1nG Un3xP3cT3d') {\n const data = [datum].flat().sort();\n const values = [value].flat().sort();\n switch (operator) {\n case Operators.ALL:\n return deepEquals(data, values);\n case Operators.SOME:\n return data.some((entry) => values.includes(entry));\n case Operators.NONE:\n return !data.some((entry) => values.includes(entry));\n default:\n return false;\n }\n}\n/** From within the `layoutGridSchema` finds the `children` and any extra `gridProps` from the object keyed by\n * `schemaKey`. If the `children` contains extra `gridProps` and those props contain a `className` string, try to\n * lookup whether that `className` has a replacement value in the `registry` using the `FORM_CONTEXT_LOOKUP_BASE`.\n * When the `className` value contains multiple classNames separated by a space, the lookup will look for a\n * replacement value for each `className` and combine them into one.\n *\n * @param layoutGridSchema - The GridSchemaType instance from which to obtain the `schemaKey` children and extra props\n * @param schemaKey - A `GridType` value, used to get the children and extra props from within the `layoutGridSchema`\n * @param registry - The `@rjsf` Registry from which to look up `classNames` if they are present in the extra props\n * @returns - An object containing the list of `LayoutGridSchemaType` `children` and any extra `gridProps`\n * @throws - A `TypeError` when the `children` is not an array\n */\nexport function findChildrenAndProps(layoutGridSchema, schemaKey, registry) {\n let gridProps = {};\n let children = layoutGridSchema[schemaKey];\n if (isPlainObject(children)) {\n const { children: elements, className: toMapClassNames, ...otherProps } = children;\n children = elements;\n if (toMapClassNames) {\n const classes = toMapClassNames.split(' ');\n const className = classes.map((ele) => lookupFromFormContext(registry, ele, ele)).join(' ');\n gridProps = { ...otherProps, className };\n }\n else {\n gridProps = otherProps;\n }\n }\n if (!Array.isArray(children)) {\n throw new TypeError(`Expected array for \"${schemaKey}\" in ${JSON.stringify(layoutGridSchema)}`);\n }\n return { children: children, gridProps };\n}\n/** Computes the `rawSchema` and `fieldPathId` for a `schema` and a `potentialIndex`. If the `schema` is of type array,\n * has an `ITEMS_KEY` element and `potentialIndex` represents a numeric value, the element at `ITEMS_KEY` is checked\n * to see if it is an array. If it is AND the `potentialIndex`th element is available, it is used as the `rawSchema`,\n * otherwise the last value of the element is used. If it is not, then the element is used as the `rawSchema`. In\n * either case, an `fieldPathId` is computed for the array index. If the `schema` does not represent an array or the\n * `potentialIndex` is not a numeric value, then `rawSchema` is returned as undefined and given `fieldPathId` is returned\n * as is.\n *\n * @param schema - The schema to generate the fieldPathId for\n * @param fieldPathId - The FieldPathId for the schema\n * @param potentialIndex - A string containing a potential index\n * @returns - An object containing the `rawSchema` and `fieldPathId` of an array item, otherwise an undefined `rawSchema`\n */\nexport function computeArraySchemasIfPresent(schema, fieldPathId, potentialIndex) {\n let rawSchema;\n let resultPathId = fieldPathId;\n if (isNumericIndex(potentialIndex) && schema && schema?.type === 'array' && ITEMS_KEY in schema) {\n const index = Number(potentialIndex);\n const items = schema[ITEMS_KEY];\n if (Array.isArray(items)) {\n if (index > items.length) {\n rawSchema = items.at(-1);\n }\n else {\n rawSchema = items[index];\n }\n }\n else {\n rawSchema = items;\n }\n resultPathId = {\n [ID_KEY]: fieldPathId[ID_KEY],\n path: [...fieldPathId.path.slice(0, fieldPathId.path.length - 1), index],\n };\n }\n return { rawSchema, fieldPathId: resultPathId };\n}\n/** Given a `dottedPath` to a field in the `initialSchema`, iterate through each individual path in the schema until\n * the leaf path is found and returned (along with whether that leaf path `isRequired`) OR no schema exists for an\n * element in the path. If the leaf schema element happens to be a oneOf/anyOf then also return the oneOf/anyOf as\n * `options`.\n *\n * @param registry - The registry\n * @param dottedPath - The dotted-path to the field for which to get the schema\n * @param initialSchema - The initial schema to start the search from\n * @param formData - The formData, useful for resolving a oneOf/anyOf selection in the path hierarchy\n * @param initialFieldIdPath - The initial fieldPathId to start the search from\n * @returns - An object containing the destination schema, isRequired and isReadonly flags for the field and options\n * info if a oneOf/anyOf\n */\nexport function getSchemaDetailsForField(registry, dottedPath, initialSchema, formData, initialFieldIdPath) {\n const { schemaUtils, globalFormOptions } = registry;\n let rawSchema = initialSchema;\n let fieldPathId = initialFieldIdPath;\n const parts = dottedPath.split('.');\n const leafPath = parts.pop(); // pop off the last element in the list as the leaf\n let schema = schemaUtils.retrieveSchema(rawSchema, formData); // always returns an object\n let innerData = formData;\n let isReadonly = schema.readOnly;\n // For all the remaining path parts\n parts.forEach((part) => {\n // dive into the properties of the current schema (when it exists) and get the schema for the next part\n fieldPathId = toFieldPathId(part, globalFormOptions, fieldPathId);\n const schemaProperties = schema?.[PROPERTIES_KEY];\n if (schemaProperties) {\n rawSchema = (schemaProperties[part] ?? {});\n }\n else if (schema && (ONE_OF_KEY in schema || ANY_OF_KEY in schema)) {\n const xxx = ONE_OF_KEY in schema ? ONE_OF_KEY : ANY_OF_KEY;\n // When the schema represents a oneOf/anyOf, find the selected schema for it and grab the inner part\n const selectedSchema = schemaUtils.findSelectedOptionInXxxOf(schema, part, xxx, innerData);\n rawSchema = getPropertySchema(selectedSchema, part);\n }\n else {\n const result = computeArraySchemasIfPresent(schema, fieldPathId, part);\n rawSchema = result.rawSchema ?? {};\n fieldPathId = result.fieldPathId;\n }\n // Now drill into the innerData for the part, returning an empty object by default if it doesn't exist\n innerData = getByPath(innerData, part, {});\n // Resolve any `$ref`s for the current rawSchema\n schema = schemaUtils.retrieveSchema(rawSchema, innerData);\n isReadonly = getNonNullishValue(schema.readOnly, isReadonly);\n });\n let optionsInfo;\n let isRequired = false;\n // retrieveSchema will return an empty schema in the worst case scenario, convert it to undefined\n if (!schema || Object.keys(schema).length === 0) {\n schema = undefined;\n }\n if (schema && leafPath) {\n // When we have both a schema and a leafPath...\n if (schema && (ONE_OF_KEY in schema || ANY_OF_KEY in schema)) {\n const xxx = ONE_OF_KEY in schema ? ONE_OF_KEY : ANY_OF_KEY;\n // Grab the selected schema for the oneOf/anyOf value for the leafPath using the innerData\n schema = schemaUtils.findSelectedOptionInXxxOf(schema, leafPath, xxx, innerData);\n }\n fieldPathId = toFieldPathId(leafPath, globalFormOptions, fieldPathId);\n isRequired = schema !== undefined && Array.isArray(schema.required) && schema.required.includes(leafPath);\n const result = computeArraySchemasIfPresent(schema, fieldPathId, leafPath);\n if (result.rawSchema) {\n schema = result.rawSchema;\n fieldPathId = result.fieldPathId;\n }\n else {\n // Now grab the schema from the leafPath of the current schema properties\n schema = schema?.[PROPERTIES_KEY]?.[leafPath];\n // Resolve any `$ref`s for the current schema\n schema = schema ? schemaUtils.retrieveSchema(schema) : schema;\n }\n isReadonly = getNonNullishValue(schema?.readOnly, isReadonly);\n if (schema && (ONE_OF_KEY in schema || ANY_OF_KEY in schema)) {\n const xxx = ONE_OF_KEY in schema ? ONE_OF_KEY : ANY_OF_KEY;\n // Set the options if we have a schema with a oneOf/anyOf\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n optionsInfo = { options: schema[xxx], hasDiscriminator: !!discriminator };\n }\n }\n return { schema, isRequired, isReadonly, optionsInfo, fieldPathId };\n}\n/** Gets the custom render component from the `render`, by either determining that it is either already a function or\n * it is a non-function value that can be used to look up the function in the registry. If no function can be found,\n * null is returned.\n *\n * @param render - The potential render function or lookup name to one\n * @param registry - The `@rjsf` Registry from which to look up `classNames` if they are present in the extra props\n * @returns - Either a render function if available, or null if not\n */\nexport function getCustomRenderComponent(render, registry) {\n let customRenderer = render;\n if (typeof customRenderer === 'string') {\n customRenderer = lookupFromFormContext(registry, customRenderer);\n }\n if (typeof customRenderer === 'function') {\n return customRenderer;\n }\n return null;\n}\n/** Extract the `name`, and optional `render` and all other props from the `gridSchema`. We look up the `render` to\n * see if can be resolved to a UIComponent. If `name` does not exist and there is an optional `render` UIComponent, we\n * set the `rendered` component with only specified props for that component in the object.\n *\n * @param registry - The `@rjsf` Registry from which to look up `classNames` if they are present in the extra props\n * @param gridSchema - The string or object that represents the configuration for the grid field\n * @returns - The UIComponentPropsType computed from the gridSchema\n */\nexport function computeUIComponentPropsFromGridSchema(registry, gridSchema) {\n let name;\n let UIComponent = null;\n let uiProps = {};\n let rendered;\n if (typeof gridSchema === 'string' || gridSchema === undefined) {\n name = gridSchema ?? '';\n }\n else {\n const { name: innerName = '', render, ...innerProps } = gridSchema;\n name = innerName;\n uiProps = innerProps;\n // Transform any `$lookup=` in the uiProps props with the appropriate value\n Object.entries(uiProps).forEach(([key, prop]) => {\n if (typeof prop === 'string') {\n const match = LOOKUP_REGEX.exec(prop);\n if (Array.isArray(match) && match.length > 1) {\n const lookupName = match[1];\n uiProps[key] = lookupFromFormContext(registry, lookupName, lookupName);\n }\n }\n });\n UIComponent = getCustomRenderComponent(render, registry);\n if (!innerName && UIComponent) {\n rendered = _jsx(UIComponent, { ...innerProps, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.uiComponent });\n }\n }\n return { name, UIComponent, uiProps, rendered };\n}\n/** Iterates through all the `childrenLayoutGridSchemaId`, rendering a nested `LayoutGridField` for each item in the\n * list, passing all the props for the current `LayoutGridField` along, updating the `schema` by calling\n * `retrieveSchema()` on it to resolve any `$ref`s. In addition to the updated `schema`, each item in\n * `childrenLayoutGridSchemaId` is passed as `layoutGridSchema`.\n *\n * @returns - The nested `LayoutGridField`s\n */\nfunction LayoutGridFieldChildren(props) {\n const { childrenLayoutGridSchemaId, ...layoutGridFieldProps } = props;\n const { registry, schema: rawSchema, formData } = layoutGridFieldProps;\n const { schemaUtils } = registry;\n const schema = schemaUtils.retrieveSchema(rawSchema, formData);\n return childrenLayoutGridSchemaId.map((layoutGridSchema) => (_createElement(LayoutGridField, { ...layoutGridFieldProps, key: `layoutGrid-${hashObject(layoutGridSchema)}`, schema: schema, layoutGridSchema: layoutGridSchema })));\n}\n/** Renders the `children` of the `GridType.CONDITION` if it passes. The `layoutGridSchema` for the\n * `GridType.CONDITION` is separated into the `children` and other `gridProps`. The `gridProps` are used to extract\n * the `operator`, `field` and `value` of the condition. If the condition matches, then all of the `children` are\n * rendered, otherwise null is returned.\n *\n * @returns - The rendered the children for the `GridType.CONDITION` or null\n */\nfunction LayoutGridCondition(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { formData, registry } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.CONDITION, registry);\n const { operator, field = '', value } = gridProps;\n const fieldData = getByPath(formData, toPath(field), null);\n if (conditionMatches(operator, fieldData, value)) {\n return _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: children });\n }\n return null;\n}\n/** Renders a `GridTemplate` as an item. The `layoutGridSchema` for the `GridType.COLUMN` is separated into the\n * `children` and other `gridProps`. The `gridProps` will be spread onto the outer `GridTemplate`. Inside the\n * `GridTemplate` all the `children` are rendered.\n *\n * @returns - The rendered `GridTemplate` containing the children for the `GridType.COLUMN`\n */\nfunction LayoutGridCol(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { registry, uiSchema } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.COLUMN, registry);\n const uiOptions = getUiOptions(uiSchema);\n const GridTemplate = getTemplate('GridTemplate', registry, uiOptions);\n return (_jsx(GridTemplate, { column: true, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.col, ...gridProps, children: _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: children }) }));\n}\n/** Renders a `GridTemplate` as an item. The `layoutGridSchema` for the `GridType.COLUMNS` is separated into the\n * `children` and other `gridProps`. The `children` is iterated on and `gridProps` will be spread onto the outer\n * `GridTemplate`. Each child will have their own rendered `GridTemplate`.\n *\n * @returns - The rendered `GridTemplate` containing the children for the `GridType.COLUMNS`\n */\nfunction LayoutGridColumns(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { registry, uiSchema } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.COLUMNS, registry);\n const uiOptions = getUiOptions(uiSchema);\n const GridTemplate = getTemplate('GridTemplate', registry, uiOptions);\n return children.map((child) => (_jsx(GridTemplate, { column: true, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.col, ...gridProps, children: _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: [child] }) }, `column-${hashObject(child)}`)));\n}\n/** Renders a `GridTemplate` as a container. The `layoutGridSchema` for the `GridType.ROW` is separated into the\n * `children` and other `gridProps`. The `gridProps` will be spread onto the outer `GridTemplate`. Inside of the\n * `GridTemplate` all of the `children` are rendered.\n *\n * @returns - The rendered `GridTemplate` containing the children for the `GridType.ROW`\n */\nfunction LayoutGridRow(props) {\n const { layoutGridSchema, ...layoutGridFieldProps } = props;\n const { registry, uiSchema } = layoutGridFieldProps;\n const { children, gridProps } = findChildrenAndProps(layoutGridSchema, GridType.ROW, registry);\n const uiOptions = getUiOptions(uiSchema);\n const GridTemplate = getTemplate('GridTemplate', registry, uiOptions);\n return (_jsx(GridTemplate, { ...gridProps, \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.row, children: _jsx(LayoutGridFieldChildren, { ...layoutGridFieldProps, childrenLayoutGridSchemaId: children }) }));\n}\n/** Renders the field described by `gridSchema`. If `gridSchema` is not an object, then is will be assumed\n * to be the dotted-path to the field in the schema. Otherwise, we extract the `name`, and optional `render` and all\n * other props. If `name` does not exist and there is an optional `render`, we return the `render` component with only\n * specified props for that component. If `name` exists, we take the name, the initial & root schemas and the formData\n * and get the destination schema, is required state and optional oneOf/anyOf options for it. If the destination\n * schema was located along with oneOf/anyOf options then a `LayoutMultiSchemaField` will be rendered with the\n * `uiSchema`, `errorSchema`, `fieldPathId` and `formData` drilled down to the dotted-path field, spreading any other\n * props from `gridSchema` into the `ui:options`. If the destination schema located without any oneOf/anyOf options,\n * then a `SchemaField` will be rendered with the same props as mentioned in the previous sentence. If no destination\n * schema was located, but a custom render component was found, then it will be rendered with many of the non-event\n * handling props. If none of the previous render paths are valid, then a null is returned.\n *\n * @returns - One of `LayoutMultiSchemaField`, `SchemaField`, a custom render component or null, depending\n */\nfunction LayoutGridFieldComponent(props) {\n const { gridSchema, schema: initialSchema, uiSchema, errorSchema, fieldPathId, onBlur, onFocus, formData, readonly, registry, layoutGridSchema, // Used to pull this out of otherProps since we don't want to pass it through\n ...otherProps } = props;\n const { onChange } = otherProps;\n const { fields } = registry;\n const { SchemaField, LayoutMultiSchemaField } = fields;\n const uiComponentProps = computeUIComponentPropsFromGridSchema(registry, gridSchema);\n const { name, UIComponent, uiProps } = uiComponentProps;\n const { schema, isRequired, isReadonly, optionsInfo, fieldPathId: fieldIdSchema, } = getSchemaDetailsForField(registry, name, initialSchema, formData, fieldPathId);\n const memoFieldPathId = useDeepCompareMemo(fieldIdSchema);\n if (uiComponentProps.rendered) {\n return uiComponentProps.rendered;\n }\n if (schema) {\n const Field = optionsInfo?.hasDiscriminator ? LayoutMultiSchemaField : SchemaField;\n // Call this function to get the appropriate UISchema, which will always have its `readonly` state matching the\n // `uiReadonly` flag that it returns. This is done since the `SchemaField` will always defer to the `readonly`\n // state in the uiSchema over anything in the props or schema. Because we are implementing the \"readonly\" state of\n // the `Form` via the prop passed to `LayoutGridField` we need to make sure the uiSchema always has a true value\n // when it is needed\n const { fieldUiSchema, uiReadonly } = computeFieldUiSchema(name, uiProps, uiSchema, isReadonly, readonly);\n const namePath = toPath(name);\n return (_jsx(Field, { \"data-testid\": optionsInfo?.hasDiscriminator\n ? LAYOUT_GRID_FIELD_TEST_IDS.layoutMultiSchemaField\n : LAYOUT_GRID_FIELD_TEST_IDS.field, ...otherProps, name: name, required: isRequired, readonly: uiReadonly, schema: schema, uiSchema: fieldUiSchema, errorSchema: getByPath(errorSchema, namePath), fieldPathId: memoFieldPathId, formData: getByPath(formData, namePath), onChange: onChange, onBlur: onBlur, onFocus: onFocus, options: optionsInfo?.options, registry: registry }));\n }\n if (UIComponent) {\n return (_jsx(UIComponent, { \"data-testid\": LAYOUT_GRID_FIELD_TEST_IDS.uiComponent, ...otherProps, name: name, required: isRequired, formData: formData, readOnly: !!isReadonly || readonly, errorSchema: errorSchema, uiSchema: uiSchema, schema: initialSchema, fieldPathId: fieldPathId, onBlur: onBlur, onFocus: onFocus, registry: registry, ...uiProps }));\n }\n return null;\n}\n/** The `LayoutGridField` will render a schema, uiSchema and formData combination out into a GridTemplate in the shape\n * described in the uiSchema. To define the grid to use to render the elements within a field in the schema, provide in\n * the uiSchema for that field the object contained under a `ui:layoutGrid` element. E.g. (as a JSON object):\n *\n * ```\n * {\n * \"field1\" : {\n * \"ui:field\": \"LayoutGridField\",\n * \"ui:layoutGrid\": {\n * \"ui:row\": { ... }\n * }\n * }\n * }\n * ```\n *\n * The outermost level of a `LayoutGridField` is the `ui:row` that defines the nested rows, columns, and/or condition\n * elements (i.e. \"grid elements\") in the grid. This definition is either a simple \"grid elements\" OR an object with\n * native `GridTemplate` implementation specific props and a `children` array of \"grid elements\". E.g. (as JSON objects):\n *\n * Simple `ui:row` definition, without additional `GridTemplate` props:\n * ```\n * \"ui:row\": [\n * { \"ui:row\"|\"ui:col\"|\"ui:columns\"|\"ui:condition\": ... },\n * ...\n * ]\n * ```\n *\n * Complex `ui:row` definition, with additional `GridTemplate` (this example uses @mui/material/Grid2 native props):\n * ```\n * \"ui:row\": {\n * \"spacing\": 2,\n * \"size\": { md\": 4 },\n * \"alignContent\": \"flex-start\",\n * \"className\": \"GridRow\",\n * \"children\": [\n * { \"ui:row\"|\"ui:col\"|\"ui:columns\"|\"ui:condition\": ... },\n * ...\n * ]\n * }\n * ```\n *\n * NOTE: Special note about the native `className` prop values. All className values will automatically be looked up in\n * the `formContext.lookupMap` in case they have been defined using a CSS-in-JS approach. In other words, from the\n * example above, if the `Form` was constructed with a `lookupMap` set to `{ GridRow: cssInJs.GridRowClass }`\n * then when rendered, the native `GridTemplate` will get the `className` with the value from\n * `cssInJs.GridRowClass`. This automatic lookup will happen for any of the \"grid elements\" when rendering with\n * `GridTemplate` props. If multiple className values are present, for example:\n * `{ className: 'GridRow GridColumn' }`, the classNames are split apart, looked up individually, and joined\n * together to form one className with the values from `cssInJs.GridRowClass` and `cssInJs.GridColumnClass`.\n *\n * The `ui:col` grid element is used to specify the list of columns within a grid row. A `ui:col` element can take on\n * several forms: 1) a simple list of dotted-path field names within the root field; 2) a list of objects containing the\n * dotted-path field `name` any other props that are gathered into `ui:options` for the field; 3) a list with a one-off\n * `render` functional component with or without a non-field `name` identifier and any other to-be-spread props; and\n * 4) an object with native `GridTemplate` implementation specific props and a `children` array with 1) or 2) or even a\n * nested `ui:row` or a `ui:condition` containing a `ui:row` (although this should be used carefully). E.g.\n * (as JSON objects):\n *\n * Simple `ui:col` definition, without additional `GridTemplate` props and form 1 only children:\n * ```\n * \"ui:col\": [\"innerField\", \"inner.grandChild\", ...]\n * ```\n *\n * Complicated `ui:col` definition, without additional `GridTemplate` props and form 2 only children:\n * ```\n * \"ui:col\": [\n * { \"name\": \"innerField\", \"fullWidth\": true },\n * { \"name\": \"inner.grandChild\", \"convertOther\": true },\n * ...\n * ]\n * ```\n *\n * More complicated `ui:col` definition, without additional `GridTemplate` props and form 2 children, one being a\n * one-off `render` functional component without a non-field `name` identifier\n * ```\n * \"ui:col\": [\n * \"innerField\",\n * {\n * \"render\": \"WizardNavButton\",\n * \"isNext\": true,\n * \"size\": \"large\"\n * }\n * ]\n * ```\n *\n * Most complicated `ui:col` definition, additional `GridTemplate` props and form 1, 2 and 3 children (this example\n * uses @mui/material/Grid2 native props):\n * ```\n * \"ui:col\": {\n * \"size\": { \"md\": 4 },\n * \"className\": \"GridColumn\",\n * \"children\": [\n * \"innerField\",\n * { \"name\": \"inner.grandChild\", \"convertOther\": true },\n * { \"name\": \"customRender\", \"render\": \"CustomRender\", toSpread: \"prop-value\" }\n * { \"ui:row|ui:condition\": ... }\n * ...\n * ]\n * }\n * ```\n *\n * NOTE: If a `name` prop does not exist or its value does not match any field in a schema, then it is assumed to be a\n * custom `render` component. If the `render` prop does not exist, a null render will occur. If `render` is a\n * string, its value will be looked up in the `formContext.lookupMap` first before defaulting to a null render.\n *\n * The `ui:columns` grid element is syntactic sugar to specify a set of `ui:col` columns that all share the same set of\n * native `GridTemplate` props. In other words rather than writing the following configuration that renders a\n * `` element with 3 `` nodes and 2\n * `` nodes within it (one for each of the fields contained in the `children`\n * list):\n *\n * ```\n * \"ui:row\": {\n * \"children\": [\n * {\n * \"ui:col\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [\"innerField\"],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [\"inner.grandChild\"],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [{ \"name\": \"inner.grandChild2\" }],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"col-md-6\",\n * \"children\": [\"innerField2\"],\n * }\n * },\n * {\n * \"ui:col\": {\n * \"className\": \"col-md-6\",\n * \"children\": [\"inner.grandChild3\"],\n * }\n * },\n\n * ]\n * }\n * ```\n *\n * One can write this instead:\n * ```\n * \"ui:row\": {\n * \"children\": [\n * {\n * \"ui:columns\": {\n * \"className\": \"GridColumn col-md-4\",\n * \"children\": [\"innerField\", \"inner.grandChild\", { \"name\": \"inner.grandChild2\", \"convertOther\": true }],\n * }\n * },\n * {\n * \"ui:columns\": {\n * \"className\": \"col-md-6\",\n * \"children\": [\"innerField2\", \"inner.grandChild3\"],\n * }\n * }\n * ]\n * }\n * ```\n *\n * NOTE: This syntax differs from\n * `\"ui:col\": { \"className\": \"col-md-6\", \"children\": [\"innerField2\", \"inner.grandChild3\"] }` in that\n * the `ui:col` will render the two children fields inside a single ``\n * element.\n *\n * The final grid element, `ui:condition`, allows for conditionally displaying \"grid elements\" within a row based on the\n * current value of a field as it relates to a (list of) hard-coded value(s). There are four elements that make up a\n * `ui:condition`: 1) the dotted-path `field` name within the root field that makes up the left-side of the condition;\n * 2) the hard-coded `value` (single or list) that makes up the right-side of the condition; 3) the `operator` that\n * controls how the left and right sides of the condition are compared; and 4) the `children` array that defines the\n * \"grid elements\" to display if the condition passes.\n *\n * A `ui:condition` uses one of three `operators` when deciding if a condition passes: 1) The `all` operator will pass\n * when the right-side and left-side contains all the same value(s); 2) the `some` operator will pass when the\n * right-side and left-side contain as least one value in common; 3) the `none` operator will pass when the right-side\n * and left-side do not contain any values in common. E.g. (as JSON objects):\n *\n * Here is how to render an if-then-else for `field2` which is an enum that has 3 known values and supports allowing\n * any other value:\n * ```\n * \"ui:row\": [\n * {\n * \"ui:condition\": {\n * \"field\": \"field2\",\n * \"operator\": \"all\",\n * \"value\": \"value1\",\n * \"children\": [\n * { \"ui:row\": [...] },\n * ],\n * }\n * },\n * {\n * \"ui:condition\": {\n * \"field\": \"field2\",\n * \"operator\": \"some\",\n * \"value\": [\"value2\", \"value3\"],\n * \"children\": [\n * { \"ui:row\": [...] },\n * ],\n * }\n * },\n * {\n * \"ui:condition\": {\n * \"field\": \"field2\",\n * \"operator\": \"none\",\n * \"value\": [\"value1\", \"value2\", \"value3\"],\n * \"children\": [\n * { \"ui:row\": [...] },\n * ],\n * }\n * }\n * ]\n * ```\n */\nexport default function LayoutGridField(props) {\n /** Render the `LayoutGridField`. If there isn't a `layoutGridSchema` prop defined, then try pulling it out of the\n * `uiSchema` via `ui:LayoutGridField`. If `layoutGridSchema` is an object, then check to see if any of the properties\n * match one of the `GridType`s. If so, call the appropriate render function for the type. Otherwise, just call the\n * generic `renderField()` function with the `layoutGridSchema`.\n */\n const { uiSchema } = props;\n let { layoutGridSchema } = props;\n const uiOptions = getUiOptions(uiSchema);\n if (!layoutGridSchema && LAYOUT_GRID_UI_OPTION in uiOptions && isObject(uiOptions[LAYOUT_GRID_UI_OPTION])) {\n layoutGridSchema = uiOptions[LAYOUT_GRID_UI_OPTION];\n }\n if (isObject(layoutGridSchema)) {\n if (GridType.ROW in layoutGridSchema) {\n return _jsx(LayoutGridRow, { ...props, layoutGridSchema: layoutGridSchema });\n }\n if (GridType.COLUMN in layoutGridSchema) {\n return _jsx(LayoutGridCol, { ...props, layoutGridSchema: layoutGridSchema });\n }\n if (GridType.COLUMNS in layoutGridSchema) {\n return _jsx(LayoutGridColumns, { ...props, layoutGridSchema: layoutGridSchema });\n }\n if (GridType.CONDITION in layoutGridSchema) {\n return _jsx(LayoutGridCondition, { ...props, layoutGridSchema: layoutGridSchema });\n }\n }\n return _jsx(LayoutGridFieldComponent, { ...props, gridSchema: layoutGridSchema });\n}\nLayoutGridField.TEST_IDS = LAYOUT_GRID_FIELD_TEST_IDS;\n//# sourceMappingURL=LayoutGridField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate, getUiOptions, titleId } from '@rjsf/utils';\n/** The `LayoutHeaderField` component renders a `TitleFieldTemplate` with an `id` derived from the `fieldPathId`\n * and whether it is `required` from the props. The `title` is derived from the props as follows:\n * - If there is a title in the `uiSchema`, it is displayed\n * - Else, if there is an explicit `title` passed in the props, it is displayed\n * - Otherwise, if there is a title in the `schema`, it is displayed\n * - Finally, the `name` prop is displayed as the title\n *\n * @param props - The `LayoutHeaderField` for the component\n */\nexport default function LayoutHeaderField(props) {\n const { fieldPathId, title, schema, uiSchema, required, registry, name } = props;\n const options = getUiOptions(uiSchema, registry.globalUiOptions);\n const { title: uiTitle } = options;\n const { title: schemaTitle } = schema;\n const fieldTitle = uiTitle || title || schemaTitle || name;\n if (!fieldTitle) {\n return null;\n }\n const TitleFieldTemplate = getTemplate('TitleFieldTemplate', registry, options);\n return (_jsx(TitleFieldTemplate, { id: titleId(fieldPathId), title: fieldTitle, required: required, schema: schema, uiSchema: uiSchema, registry: registry }));\n}\n//# sourceMappingURL=LayoutHeaderField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useState, useEffect } from 'react';\nimport { getByPath, setByPath, ANY_OF_KEY, CONST_KEY, DEFAULT_KEY, ERRORS_KEY, getDiscriminatorFieldFromSchema, hashObject, ID_KEY, ONE_OF_KEY, optionsList, PROPERTIES_KEY, getTemplate, getPropertySchema, getUiOptions, getWidget, noop, } from '@rjsf/utils';\n/** Gets the selected option from the list of `options`, using the `selectorField` to search inside each `option` for\n * the `properties[selectorField].default(or const)` that matches the given `value`.\n *\n * @param options - The list of schemas each representing a choice in the `oneOf`\n * @param selectorField - The name of the field that is common in all of the schemas that represents the selector field\n * @param value - The current value of the selector field from the data\n */\nexport function getSelectedOption(options, selectorField, value) {\n const defaultValue = '!@#!@$@#$!@$#';\n const schemaOptions = options.map(({ schema }) => schema);\n return schemaOptions.find((option) => {\n const selector = option[PROPERTIES_KEY]?.[selectorField];\n const result = getByPath(selector, DEFAULT_KEY, getByPath(selector, CONST_KEY, defaultValue));\n return result === value;\n });\n}\n/** Computes the `enumOptions` array from the schema and options.\n *\n * @param schema - The schema that contains the `options`\n * @param options - The options from the `schema`\n * @param schemaUtils - The SchemaUtilsType object used to call retrieveSchema,\n * @param [uiSchema] - The optional uiSchema for the schema\n * @param [formData] - The optional formData associated with the schema\n * @returns - The list of enumOptions for the `schema` and `options`\n * @throws - Error when no enum options were computed\n */\nexport function computeEnumOptions(schema, options, schemaUtils, uiSchema, formData) {\n const realOptions = options.map((opt) => schemaUtils.retrieveSchema(opt, formData));\n let tempSchema = schema;\n if (ONE_OF_KEY in schema) {\n tempSchema = { ...schema, [ONE_OF_KEY]: realOptions };\n }\n else if (ANY_OF_KEY in schema) {\n tempSchema = { ...schema, [ANY_OF_KEY]: realOptions };\n }\n const enumOptions = optionsList(tempSchema, uiSchema);\n if (!enumOptions) {\n throw new Error(`No enumOptions were computed from the schema ${JSON.stringify(tempSchema)}`);\n }\n return enumOptions;\n}\n/** The `LayoutMultiSchemaField` is an adaptation of the `MultiSchemaField` but changed considerably to only\n * support `anyOf`/`oneOf` fields that are being displayed in a `LayoutGridField` where the field selection is shown as\n * a radio group by default. It expects that a `selectorField` is provided (either directly via the `discriminator`\n * field or indirectly via `ui:optionsSchemaSelector` in the `uiSchema`) to help determine which `anyOf`/`oneOf` schema\n * is active. If no `selectorField` is specified, then an error is thrown.\n */\nexport default function LayoutMultiSchemaField(props) {\n const { name, baseType, disabled = false, formData, fieldPathId, onBlur, onChange, options, onFocus, registry, uiSchema, schema, autofocus, readonly, required, errorSchema, hideError = false, } = props;\n const { widgets, schemaUtils, globalUiOptions } = registry;\n const [enumOptions, setEnumOptions] = useState(computeEnumOptions(schema, options, schemaUtils, uiSchema, formData));\n const id = fieldPathId[ID_KEY];\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const FieldErrorTemplate = getTemplate('FieldErrorTemplate', registry, options);\n const FieldTemplate = getTemplate('FieldTemplate', registry, options);\n const schemaHash = hashObject(schema);\n const optionsHash = hashObject(options);\n const uiSchemaHash = uiSchema ? hashObject(uiSchema) : '';\n const formDataHash = formData ? hashObject(formData) : '';\n useEffect(() => {\n setEnumOptions(computeEnumOptions(schema, options, schemaUtils, uiSchema, formData));\n // We are using hashes in place of the dependencies\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [schemaHash, optionsHash, schemaUtils, uiSchemaHash, formDataHash]);\n const { widget = discriminator ? 'radio' : 'select', title = '', placeholder = '', optionsSchemaSelector: selectorField = discriminator, hideError: uiSchemaHideError, ...uiOptions } = getUiOptions(uiSchema);\n if (!selectorField) {\n throw new Error('No selector field provided for the LayoutMultiSchemaField');\n }\n const selectedOption = getByPath(formData, selectorField);\n let optionSchema = getPropertySchema(enumOptions[0]?.schema, selectorField);\n const option = getSelectedOption(enumOptions, selectorField, selectedOption);\n // If the subschema doesn't declare a type, infer the type from the parent schema\n optionSchema = optionSchema?.type ? optionSchema : { ...optionSchema, type: option?.type || baseType };\n const Widget = getWidget(optionSchema, widget, widgets);\n // The following code was copied from `@rjsf`'s `SchemaField`\n // Set hideError to the value provided in the uiSchema, otherwise stick with the prop to propagate to children\n const hideFieldError = uiSchemaHideError === undefined ? hideError : Boolean(uiSchemaHideError);\n const rawErrors = errorSchema?.[ERRORS_KEY] ?? [];\n const fieldErrorSchema = { ...errorSchema };\n delete fieldErrorSchema[ERRORS_KEY];\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n /** Callback function that updates the selected option and adjusts the form data based on the structure of the new\n * option, calling the `onChange` callback with the adjusted formData.\n *\n * @param opt - If the option is undefined, we are going to clear the selection otherwise we\n * will use it as the index of the new option to select\n */\n const onOptionChange = (opt) => {\n if (disabled || readonly) {\n return;\n }\n const newOption = getSelectedOption(enumOptions, selectorField, opt);\n const oldOption = getSelectedOption(enumOptions, selectorField, selectedOption);\n let newFormData = schemaUtils.sanitizeDataForNewSchema(newOption, oldOption, formData);\n if (newFormData && newOption) {\n // Call getDefaultFormState to make sure defaults are populated on change.\n newFormData = schemaUtils.getDefaultFormState(newOption, newFormData, 'excludeObjectChildren');\n }\n if (newFormData) {\n setByPath(newFormData, selectorField, opt);\n }\n // Pass the component name in the path\n onChange(newFormData, fieldPathId.path, undefined, id);\n };\n // filtering the options based on the type of widget because `selectField` does not recognize the `convertOther` prop\n const widgetOptions = { enumOptions, ...uiOptions };\n const errors = !hideFieldError && rawErrors.length > 0 ? (_jsx(FieldErrorTemplate, { fieldPathId: fieldPathId, schema: schema, errors: rawErrors, registry: registry })) : undefined;\n return (_jsx(FieldTemplate, { fieldPathId: fieldPathId, id: id, schema: schema, label: (title || schema.title) ?? '', disabled: disabled || (Array.isArray(enumOptions) && enumOptions.length === 0), uiSchema: uiSchema, required: required, readonly: !!readonly, registry: registry, displayLabel: displayLabel, errors: errors, onChange: onChange, onKeyRename: noop, onKeyRenameBlur: noop, onRemoveProperty: noop, children: _jsx(Widget, { id: id, name: name, schema: schema, label: (title || schema.title) ?? '', disabled: disabled || (Array.isArray(enumOptions) && enumOptions.length === 0), uiSchema: uiSchema, autofocus: autofocus, readonly: readonly, required: required, registry: registry, multiple: false, rawErrors: rawErrors, hideError: hideFieldError, hideLabel: !displayLabel, errorSchema: fieldErrorSchema, placeholder: placeholder, onChange: onOptionChange, onBlur: onBlur, onFocus: onFocus, value: selectedOption, options: widgetOptions, htmlName: fieldPathId.name }) }));\n}\n//# sourceMappingURL=LayoutMultiSchemaField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ANY_OF_KEY, deepEquals, ERRORS_KEY, getDiscriminatorFieldFromSchema, getTemplate, getUiOptions, getWidget, hashObject, isFormDataAvailable, mergeSchemas, ONE_OF_KEY, shouldRenderOptionalField, TranslatableString, } from '@rjsf/utils';\n/** The `AnyOfField` component is used to render a field in the schema that is an `anyOf`, `allOf` or `oneOf`. It tracks\n * the currently selected option and cleans up any irrelevant data in `formData`.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction AnyOfField(props) {\n const { name, disabled = false, errorSchema, formData, fieldPathId, onBlur, onChange, onFocus, options, readonly, registry, required = false, schema, uiSchema, } = props;\n const { schemaUtils } = registry;\n // Hash formData by value so the memo only invalidates when data actually changes, not on every\n // new object reference. hashObject(undefined) throws, so null is used as the fallback.\n const formDataHash = hashObject(formData ?? null);\n // retrievedOptions is purely derived from options — useMemo handles re-derivation automatically\n // when options, schemaUtils, or formData's value changes, with no render-phase dispatch needed.\n const retrievedOptions = useMemo(() => options.map((opt) => schemaUtils.retrieveSchema(opt, formData)), \n // oxlint-disable-next-line react-hooks/exhaustive-deps -- formDataHash is the value-stable proxy for formData\n [options, schemaUtils, formDataHash]);\n const [selectedOption, setSelectedOption] = useState(() => {\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n return schemaUtils.getClosestMatchingOption(formData, retrievedOptions, 0, discriminator);\n });\n /** Flag to skip the formData-change-driven option recalculation when the user just selected an option.\n * Set to true in onOptionChange (before onChange is called), consumed and reset in the update effect.\n * This prevents the matching-option recalculation from overriding a user's explicit choice when\n * getDefaultFormState populates undefined properties that make deepEquals see a false formData change.\n */\n const skipNextOptionRecalculation = useRef(false);\n const prevFormDataRef = useRef(formData);\n const prevFieldIdRef = useRef(fieldPathId.$id);\n // Mirrors componentDidUpdate: re-match selectedOption when formData changes on the same field.\n // Runs after every render (no deps array) to compare against prev values stored in refs.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n const prevFormData = prevFormDataRef.current;\n const prevFieldId = prevFieldIdRef.current;\n prevFormDataRef.current = formData;\n prevFieldIdRef.current = fieldPathId.$id;\n if (!deepEquals(formData, prevFormData) && fieldPathId.$id === prevFieldId) {\n if (skipNextOptionRecalculation.current) {\n skipNextOptionRecalculation.current = false;\n return;\n }\n const discriminator = getDiscriminatorFieldFromSchema(schema);\n const matchingOption = schemaUtils.getClosestMatchingOption(formData, retrievedOptions, selectedOption, discriminator);\n if (matchingOption !== selectedOption) {\n setSelectedOption(matchingOption);\n }\n }\n });\n const fieldId = `${fieldPathId.$id}${schema.oneOf ? '__oneof_select' : '__anyof_select'}`;\n /** Callback handler to remember what the currently selected option is. In addition to that the `formData` is updated\n * to remove properties that are not part of the newly selected option schema, and then the updated data is passed to\n * the `onChange` handler.\n *\n * @param option - The new option value being selected\n */\n const onOptionChange = useCallback((option) => {\n if (disabled || readonly) {\n return;\n }\n const intOption = option !== undefined ? parseInt(option, 10) : -1;\n if (intOption === selectedOption) {\n return;\n }\n const newOption = intOption >= 0 ? retrievedOptions[intOption] : undefined;\n const oldOption = selectedOption >= 0 ? retrievedOptions[selectedOption] : undefined;\n let newFormData = schemaUtils.sanitizeDataForNewSchema(newOption, oldOption, formData);\n if (newOption) {\n // Call getDefaultFormState to make sure defaults are populated on change. Pass \"excludeObjectChildren\"\n // so that only the root objects themselves are created without adding undefined children properties\n newFormData = schemaUtils.getDefaultFormState(newOption, newFormData, 'excludeObjectChildren');\n }\n setSelectedOption(intOption);\n skipNextOptionRecalculation.current = true;\n onChange(newFormData, fieldPathId.path, undefined, fieldId);\n }, \n // setSelectedOption is stable (guaranteed by useState); skipNextOptionRecalculation is a ref\n [selectedOption, retrievedOptions, disabled, readonly, schemaUtils, formData, fieldPathId, onChange, fieldId]);\n const { widgets, fields, translateString, globalUiOptions } = registry;\n const { SchemaField: SchemaFieldComponent } = fields;\n const MultiSchemaFieldTemplate = getTemplate('MultiSchemaFieldTemplate', registry, globalUiOptions);\n const isOptionalRender = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formData);\n const { widget = 'select', placeholder, autofocus, autocomplete, title = schema.title, ...uiOptions } = getUiOptions(uiSchema, globalUiOptions);\n const Widget = getWidget({ type: 'number' }, widget, widgets);\n const rawErrors = errorSchema?.[ERRORS_KEY] ?? [];\n const fieldErrorSchema = { ...errorSchema };\n delete fieldErrorSchema[ERRORS_KEY];\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n const option = selectedOption >= 0 ? retrievedOptions[selectedOption] || null : null;\n let optionSchema;\n if (option) {\n const { required: schemaRequired, type: schemaType } = schema;\n const parentProps = {};\n if (schemaRequired) {\n parentProps.required = schemaRequired;\n }\n // Propagate the parent schema type to options that don't define their own.\n // This is necessary when the parent constrains the type (e.g. { type: 'string',\n // oneOf: [{ pattern: '...' }, { pattern: '...' }] }) but the option sub-schemas\n // omit the type — without it, getSchemaType returns undefined and the option\n // renders as FallbackField instead of the correct widget (e.g. StringField).\n if (schemaType !== undefined && !('type' in option)) {\n parentProps.type = schemaType;\n }\n // Merge in all the non-oneOf/anyOf properties and also skip the special ADDITIONAL_PROPERTY_FLAG property\n optionSchema = Object.keys(parentProps).length > 0 ? mergeSchemas(parentProps, option) : option;\n }\n // First we will check to see if there is an anyOf/oneOf override for the UI schema\n let optionsUiSchema = [];\n if (ONE_OF_KEY in schema && uiSchema && ONE_OF_KEY in uiSchema) {\n if (Array.isArray(uiSchema[ONE_OF_KEY])) {\n optionsUiSchema = uiSchema[ONE_OF_KEY];\n }\n else {\n // oxlint-disable-next-line no-console\n console.warn(`uiSchema.oneOf is not an array for \"${title || name}\"`);\n }\n }\n else if (ANY_OF_KEY in schema && uiSchema && ANY_OF_KEY in uiSchema) {\n if (Array.isArray(uiSchema[ANY_OF_KEY])) {\n optionsUiSchema = uiSchema[ANY_OF_KEY];\n }\n else {\n // oxlint-disable-next-line no-console\n console.warn(`uiSchema.anyOf is not an array for \"${title || name}\"`);\n }\n }\n // Then we pick the one that matches the selected option index, if one exists otherwise default to the main uiSchema\n let optionUiSchema = uiSchema;\n if (selectedOption >= 0 && optionsUiSchema.length > selectedOption) {\n optionUiSchema = optionsUiSchema[selectedOption];\n }\n const translateEnum = title\n ? TranslatableString.TitleOptionPrefix\n : TranslatableString.OptionPrefix;\n const translateParams = title ? [title] : [];\n const enumOptions = retrievedOptions.map((opt, index) => {\n const { title: uiTitle = opt.title } = getUiOptions(optionsUiSchema[index]);\n return {\n label: uiTitle || translateString(translateEnum, translateParams.concat(String(index + 1))),\n value: index,\n };\n });\n const selector = !isOptionalRender || hasFormData ? (_jsx(Widget, { id: fieldId, name: `${name}${schema.oneOf ? '__oneof_select' : '__anyof_select'}`, schema: { type: 'number', default: 0 }, onChange: onOptionChange, onBlur: onBlur, onFocus: onFocus, disabled: disabled || enumOptions.length === 0, multiple: false, rawErrors: rawErrors, errorSchema: fieldErrorSchema, value: selectedOption >= 0 ? selectedOption : undefined, options: { enumOptions, ...uiOptions }, registry: registry, placeholder: placeholder, autocomplete: autocomplete, autofocus: autofocus, label: title ?? name, hideLabel: !displayLabel, readonly: readonly })) : undefined;\n const optionsSchemaField = (optionSchema && optionSchema.type !== 'null' && (_jsx(SchemaFieldComponent, { ...props, schema: optionSchema, uiSchema: optionUiSchema }))) ||\n null;\n return (_jsx(MultiSchemaFieldTemplate, { schema: schema, registry: registry, uiSchema: uiSchema, selector: selector, optionSchemaField: optionsSchemaField }));\n}\nexport default AnyOfField;\n//# sourceMappingURL=MultiSchemaField.js.map","import { useEffect } from 'react';\n/** The `NullField` component is used to render a field in the schema is null. It also ensures that the `formData` is\n * also set to null if it has no value.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction NullField(props) {\n const { formData, onChange, fieldPathId } = props;\n useEffect(() => {\n if (formData === undefined) {\n onChange(null, fieldPathId.path);\n }\n }, [fieldPathId, formData, onChange]);\n return null;\n}\nexport default NullField;\n//# sourceMappingURL=NullField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useState, useCallback } from 'react';\nimport { asNumber, getDecimalSeparator, getUiOptions, resolveDefaultWidget } from '@rjsf/utils';\n// Static matchers for standard '.' separator used during normalization inside handleChange\nconst trailingCharMatcherWithPrefix = /\\.([0-9]*0)*$/;\nconst trailingCharMatcher = /[0.]0*$/;\n/**\n * The NumberField class has some special handling for dealing with trailing\n * decimal points and/or zeroes. This logic is designed to allow trailing values\n * to be visible in the input element, but not be represented in the\n * corresponding form data.\n *\n * The algorithm is as follows:\n *\n * 1. When the input value changes the value is cached in the component state\n *\n * 2. The value is then normalized, removing trailing decimal points and zeros,\n * then passed to the \"onChange\" callback\n *\n * 3. When the component is rendered, the formData value is checked against the\n * value cached in the state. If it matches the cached value, the cached\n * value is passed to the input instead of the formData value\n */\nfunction NumberField(props) {\n const { registry, onChange, formData, value: initialValue } = props;\n const [lastValue, setLastValue] = useState(initialValue);\n const { StringField } = registry.fields;\n const separator = getDecimalSeparator();\n let value = formData;\n /** Handle the change from the `StringField` to properly convert to a number\n *\n * @param value - The current value for the change occurring\n */\n const handleChange = useCallback((newValue, path, errorSchema, id) => {\n // Cache the original value in component state\n setLastValue(newValue);\n // Convert locale separator to standard '.' first\n const standardValue = typeof newValue === 'string' ? newValue.replace(separator, '.') : newValue;\n // Normalize decimals that don't start with a zero character in advance so\n // that the rest of the normalization logic is simpler\n const normalizedValue = `${standardValue}`.startsWith('.') ? `0${standardValue}` : standardValue;\n // Check that the value is a string (this can happen if the widget used is a\n // `; skip the comma formatting there. Every other inputType\n // (including the default 'text', and any other value like 'tel' or 'email') renders as a\n // plain text input that displays a locale-formatted string just fine.\n if (widget === 'text' && inputType !== 'number') {\n displayValue = String(value).replace('.', separator);\n }\n }\n return _jsx(StringField, { ...props, formData: displayValue, onChange: handleChange });\n}\nexport default NumberField;\n//# sourceMappingURL=NumberField.js.map","var e;function t(r){if(!e){if(typeof document>\"u\")return;e=document.createElement(\"textarea\")}var n=`&${r};`;e.innerHTML=n;var d=e.value;return d===n?void 0:d}var i={};export{i as NAMED_CODES_TO_UNICODE,t as decodeEntity};\n","import*as Ye from\"react\";var N=32,k=9,Sr=13,M=10,re=96,Oe=126,_e=91,cr=94,U=62,lr=35,Ht=37,F=45,Cr=61,me=92,ke=42,he=95,ae=60,yt=64,je=93,Ke=33,ht=38,Ge=58,st=70,pr=102,$t=104,Pr=119,qr=116,xt=112,on=115,Wn=160,zn=12,Zn=44,gt=59,jr=63,ar=46,ge=47,Dr=39,Ir=34,Or=43,ye=124,Lr=123,Mt=125,ir=40,fr=41,Qn=78,Vn=110,Yn=79,qn=111,An=120,ln=88,Bt=30,W=48,z=57,J=65,G=90,ie=97,ce=122,Ct=128,_r=32,ki={blockQuote:0,breakLine:1,breakThematic:2,codeBlock:3,codeInline:4,footnote:5,footnoteReference:6,frontmatter:7,gfmTask:8,heading:9,htmlBlock:10,htmlComment:11,htmlSelfClosing:12,image:13,link:14,orderedList:15,paragraph:16,ref:17,refCollection:18,table:19,text:20,textFormatted:21,unorderedList:22},v=ki;import{decodeEntity as wi}from\"markdown-to-jsx/entities\";function oa(e){if(!ea(e,\"---\"))return null;let t=3;for(;t=e.length||e[t]!==`\n`)return null;t++;let r=!1;for(;t=e.length)break;let a=t;if(e[t]===\"\\r\"&&t++,t=ie&&o<=ce||o>=J&&o<=G||o>=W&&o<=z||o===he){for(i++;i=ie&&o<=ce||o>=J&&o<=G||o>=W&&o<=z||o===he||o===F||o===ar);)i++;i=a?r=!0:(o=e.charCodeAt(i),(o===N||o===k)&&(r=!0)))}}}}return null}var mi=/&([a-zA-Z0-9]+|#[0-9]{1,7}|#x[0-9a-fA-F]{1,6});/gi,bi={class:\"className\",for:\"htmlFor\",allowfullscreen:\"allowFullScreen\",allowtransparency:\"allowTransparency\",autocomplete:\"autoComplete\",autofocus:\"autoFocus\",autoplay:\"autoPlay\",cellpadding:\"cellPadding\",cellspacing:\"cellSpacing\",charset:\"charSet\",classid:\"classId\",colspan:\"colSpan\",contenteditable:\"contentEditable\",contextmenu:\"contextMenu\",crossorigin:\"crossOrigin\",enctype:\"encType\",formaction:\"formAction\",formenctype:\"formEncType\",formmethod:\"formMethod\",formnovalidate:\"formNoValidate\",formtarget:\"formTarget\",frameborder:\"frameBorder\",hreflang:\"hrefLang\",inputmode:\"inputMode\",keyparams:\"keyParams\",keytype:\"keyType\",marginheight:\"marginHeight\",marginwidth:\"marginWidth\",maxlength:\"maxLength\",mediagroup:\"mediaGroup\",minlength:\"minLength\",novalidate:\"noValidate\",radiogroup:\"radioGroup\",readonly:\"readOnly\",rowspan:\"rowSpan\",spellcheck:\"spellCheck\",srcdoc:\"srcDoc\",srclang:\"srcLang\",srcset:\"srcSet\",tabindex:\"tabIndex\",usemap:\"useMap\",viewbox:\"viewBox\"},pi={};function fn(e){if(!e)return pi;var t={};for(var r in e){var n=r.toLowerCase(),a=bi[n];if(a)t[a]=e[r];else{var i=r.indexOf(\":\");i===-1?t[r]=e[r]:t[r.slice(0,i)+r[i+1].toUpperCase()+r.slice(i+2)]=e[r]}}return t}var Aa=/(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s|^<(div|p|h[1-6]|ul|ol|li|blockquote|pre|table|thead|tbody|tr|td|th|dl|dt|dd|hr|address|article|aside|details|dialog|figure|figcaption|footer|form|header|main|menu|nav|section|summary|textarea|fieldset|legend|center|dir|hgroup|marquee|search|output|template)\\b)/i;function Er(e){return e.indexOf(\"&\")===-1?e:e.replace(mi,(t,r)=>{var n=wi(r);if(n)return n;if(r[0]===\"#\"){var a=r[1]===\"x\"||r[1]===\"X\"?Number.parseInt(r.slice(2),16):Number.parseInt(r.slice(1),10);return a===0||a>=55296&&a<=57343||a>1114111?\"\\uFFFD\":a<=65535?String.fromCharCode(a):String.fromCharCode(55296+(a-65536>>10),56320+(a-65536&1023))}return t})}var jn=/(javascript|vbscript|data(?!:image)):/i;function Rr(e){if(jn.test(e))return null;if(e.indexOf(\"%\")===-1)return e;try{let t=decodeURIComponent(e).replace(/[^A-Za-z0-9/:]/g,\"\");if(jn.test(t))return null}catch{return null}return e}var Ve={},er,xe;for(er=[192,193,194,195,196,197,224,225,226,227,228,229,230,198],xe=0;xe=ie&&i<=ce||i>=W&&i<=z){r<0&&(r=a);continue}if(i>=J&&i<=G){r>=0&&(t+=e.slice(r,a),r=-1),t+=String.fromCharCode(i+_r);continue}if(i===N||i===F){r>=0&&(t+=e.slice(r,a),r=-1),t+=\"-\";continue}r>=0&&(t+=e.slice(r,a),r=-1);var o=Ve[i];o&&(t+=o)}return r>=0&&(t+=e.slice(r)),t}function ea(e,t,r){return e.startsWith(t,r)}var ra=new Set([\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\",\"circle\",\"ellipse\",\"line\",\"path\",\"polygon\",\"polyline\",\"rect\",\"use\",\"stop\",\"animate\",\"set\"]);function nt(e){let t=e.toLowerCase();if(ra.has(t))return!0;let r=t.indexOf(\":\");return r!==-1?(t=t.slice(r+1),ra.has(t)):!1}var Xr=1,ta=2,rt=4,na=8,Ii=16,ur=32,yr=64,la=(()=>{var e=new Uint8Array(128),t;for(e[k]=Xr,e[M]=Xr|ta,e[zn]=Xr,e[Sr]=Xr|ta,e[N]=Xr,t=Ke;t<=ge;t++)e[t]=rt;for(t=Ge;t<=yt;t++)e[t]=rt;for(t=_e;t<=re;t++)e[t]=rt;for(t=Lr;t<=Oe;t++)e[t]=rt;for(t=W;t<=z;t++)e[t]=Ii;for(t=J;t<=G;t++)e[t]=na;for(t=ie;t<=ce;t++)e[t]=na;return e})(),Ca=/[\\p{P}\\p{S}]/u,fa=/\\p{Zs}/u,et=[];function _a(e){var t=e.indexOf(\"\\r\"),r=e.indexOf(\"\\0\");if(t===-1&&r===-1)return e;var n=e.length;et.length=0;var a=0,i=0;for(t===-1?i=r:r===-1?i=t:i=t\\s+<\").replace(/\\n+/g,\" \").trim()}function Oi(e,t,r){let n=r??e.length;for(;t0&&(e[t-1]===`\n`||e[t-1]===\"\\r\");)t--;return`${e.slice(0,t).replace(Li,\"\")}\n\n`}function tt(e){if((e.type===v.htmlSelfClosing||e.type===v.htmlBlock)&&e.a)return[];if(e.type===v.paragraph){var t=e.children;return t?t.flatMap(tt):[]}return e.type===v.text?e.text?.trim()?[e]:[]:e.type===v.htmlBlock&&e.children?[{...e,children:e.children?.flatMap(tt)}]:[e]}function _n(e){for(var t=0;t`,o=a.toLowerCase().indexOf(i);if(o!==-1){var A=a.slice(o+i.length).replace(/<\\/[a-z][a-z0-9-]*\\s*>/gi,\"\");A.trim()&&(n=!0)}}n||(r.c=!1)}\"children\"in e[t]&&e[t].children&&_n(e[t].children)}}function ua(e,t){for(var r=0;r0&&A.push({type:v.paragraph,children:a.slice(0,i)});var C=[];if(i+1!(_.type===v.htmlSelfClosing&&_.a));l.length>0&&(C=l)}return C=C.concat(e.slice(r+1)),{found:!0,beforeClose:A,afterClose:C}}}if((n.type===v.htmlSelfClosing||n.type===v.htmlBlock)&&n.a&&n.tag.toLowerCase()===t)return{found:!0,beforeClose:e.slice(0,r),afterClose:e.slice(r+1)}}return{found:!1,beforeClose:e,afterClose:[]}}function yi(e){var t=\"\";for(var r in e){var n=e[r];n===!0?t+=` ${r}`:n!==void 0&&n!=null&&n!==!1&&(t+=` ${r}=\"${String(n)}\"`)}return t}function aa(e,t,r,n){var a;return t===void 0?a=yi(r):a=t.length>0&&t.charCodeAt(0)>N?` ${t}`:t,`<${e}${a}${n}`}function dn(e){var t=e.tag,r=e.type===v.htmlSelfClosing,n=e,a=n.b,i=``;if(!r&&n.a)return{kind:\"literal\",literal:(n.h||i)+(n.e||\"\")};if(r){var o=e;return o.a?{kind:\"literal\",literal:o.h||i}:o.m?{kind:\"literal\",literal:o.m}:{kind:\"literal\",literal:aa(t,a,e.attrs,\" />\")}}var A=aa(t,a,e.attrs,\">\"),C=n.children,l=C!=null&&C.length>0;if(n.c&&n.j!==void 0)return l?{kind:\"sandwich\",open:A,close:i}:{kind:\"literal\",literal:n.j};if(n.c&&!l)return{kind:\"literal\",literal:A+(n.e||\"\")+(n.h||i)};if(C!=null&&C.length>0){for(var _=\"\",d=0;d0&&typeof A.at(-1)==\"string\"?A[A.length-1]=A.at(-1)+l:A.push(l)}return A}function Jr(e){return e==null||e.tagfilter!==!1}function ha(e,t,r,n){var a=t(e,r,n);return a===null?null:xi(a)}function sa(e){var t=[];if(!e)return t;for(var r in e)r.charCodeAt(0)===94&&t.push({identifier:r,footnote:e[r].target});return t}function ia(e){for(var t=0,r=e.length;t=J&&n<=G)return e.toLowerCase();t++}return e}function Xt(e,t,r){if(t.indexOf(\".\")===-1){var n=e?.[t];if(n)return n;if(e){var a=ia(t);if(a!==t){var i=e[a];if(i)return i}}return r}for(var o=e,A=t.split(\".\"),C=0,l=!1;C=123){t=!0;break}}if(!t)return e;for(var a=\"\",r=0;r=W&&i<=z||i>=J&&i<=st||i>=ie&&i<=pr)&&(o>=W&&o<=z||o>=J&&o<=st||o>=ie&&o<=pr)){a+=e[r]+e[r+1]+e[r+2],r+=2;continue}}if(n>=55296&&n<=57343){if(n<=56319&&r+1=56320&&A<=57343){a+=encodeURI(e[r]+e[r+1]),r++;continue}}a+=e[r];continue}a+=encodeURI(e[r])}return a}function $a(...e){return e.filter(Boolean).join(\" \")}var Mi=new Set([\"title\",\"textarea\",\"style\",\"xmp\",\"iframe\",\"noembed\",\"noframes\",\"script\",\"plaintext\"]),Pt=/<(\\/?)(title|textarea|style|xmp|iframe|noembed|noframes|script|plaintext)(\\s|>|\\/)/gi;function cn(e){return Mi.has(e.toLowerCase())}function ga(e){return Pt.lastIndex=0,Pt.test(e)}function Rn(e){return Pt.lastIndex=0,e.replace(Pt,(t,r,n,a)=>`<${r}${n}${a}`)}function Et(e,t){var r=e||{},n=r.slugify,a;if(n){var i=n;a=o=>i(o,Nr)}else a=Nr;return{disableAutoLink:r.disableAutoLink,disableFrontmatter:r.disableFrontmatter,disableParsingRawHTML:r.disableParsingRawHTML,enforceAtxHeadings:r.enforceAtxHeadings,evalUnserializableExpressions:r.evalUnserializableExpressions,forceBlock:r.forceBlock,forceInline:t===void 0?r.forceInline:t,ignoreHTMLBlocks:r.ignoreHTMLBlocks,optimizeForStreaming:r.optimizeForStreaming,preserveFrontmatter:r.preserveFrontmatter,sanitizer:r.sanitizer||Rr,slugify:a,tagfilter:Jr(r)}}var Ka=/^<([a-zA-Z][a-zA-Z0-9-]*)\\s[^>]*>/,Ga=/^<[A-Z]/,$n=[\"script\",\"pre\",\"style\",\"textarea\"],Nt=new Set($n),Bi=/<(?:pre|script|style|textarea)\\b/i,Ta=/<(?:pre|script|style|textarea)\\b/iy,un=/^(\\s{0,3}#[#\\s]|\\s{0,3}[-*+]\\s|\\s{0,3}\\d+\\.\\s|\\s{0,3}>\\s|\\s{0,3}```)/m,Sa=/^<([a-z][^ >/\\n\\r]*) ?([^>]*?)>/im,Fa=new Uint8Array(128);(()=>{for(var e=[re,ke,he,Oe,Cr,_e,Ke,ae,me,ht,M,$t,Pr,pr],t=0;t=a)return!1;e.charCodeAt(n)===ye&&n++;for(var i=0;n=a)break;if(e.charCodeAt(n)===ye&&i>0){for(var o=n+1;o=a)return!0}if(e.charCodeAt(n)===Ge&&n++,n>=a||e.charCodeAt(n)!==F)return!1;for(;n0}var Pi=/[\\u0000-\\u001F\\u007F]/g,Di={action:1,background:1,cite:1,data:1,formaction:1,href:1,longdesc:1,poster:1,src:1,\"xlink:href\":1},Xi=/&#(x[0-9a-f]+|[0-9]+);?/gi;function Ji(e){return e.indexOf(\"&#\")===-1?e:e.replace(Xi,(t,r)=>{var n=r.charCodeAt(0)===An||r.charCodeAt(0)===ln?Number.parseInt(r.slice(1),16):Number.parseInt(r,10);return n>0&&n<=1114111?String.fromCodePoint(n):t})}function Ki(e,t,r){if(r&&t.charCodeAt(0)===Lr)return!1;var n=e.charCodeAt(0),a=e.charCodeAt(1);if((n===qn||n===Yn)&&(a===Vn||a===Qn))return!(r&&t===\"\");var i=e.toLowerCase();if(i===\"srcdoc\")return!0;if(i===\"style\")return/url\\s*\\(\\s*(javascript|vbscript|data:(?!image\\/))/i.test(t);if(Di[i]===1){var o=Ji(Er(t));if(Rr(o)===null)return!0;var A=o.replace(Pi,\"\");return A!==o&&Rr(A)===null}return!1}function gn(e){return\"<\"+(e.f?\"/\":\"\")+e.tag+e.g+e.b+(e.n?e.r?\" />\":\"/>\":\">\")}function Na(e,t,r,n){for(var a=[],i=t,o=0;oi){var C=e.slice(i,A).trim();C&&a.push(C)}i=n[o+1]}if(i=ie&&o<=ce||o>=J&&o<=G))return null;for(;r=ie&&e.charCodeAt(r)<=ce||e.charCodeAt(r)>=J&&e.charCodeAt(r)<=G||e.charCodeAt(r)>=W&&e.charCodeAt(r)<=z||e.charCodeAt(r)===F);)r++;let A=e.slice(i,r);if(!A)return null;let C=A.charCodeAt(0),l=C>=J&&C<=G||A.indexOf(\"-\")!==-1,_=r;for(;rc&&e.charCodeAt(r-1)===N;let O=T?Na(e,c,r,T):e.slice(c,r);return{r:s,u:l,f:a,b:O,q:T!=null,n:!0,g:d,attrs:u,end:r+2,tag:A}}var f=r,h=e.charCodeAt(r);if(!(h>=ie&&h<=ce||h>=J&&h<=G||h===he||h===Ge))return null;for(r++;r=ie&&g<=ce||g>=J&&g<=G||g>=W&&g<=z||g===he||g===ar||g===Ge||g===F)r++;else break}for(var S=e.slice(f,r),p=r;r=n)return null;if(H=e.slice(m,r),r++,r0;){var g=e.charCodeAt(r);g===Lr?x++:g===Mt&&x--,r++}H=e.slice(m,r),w=r}else{for(var m=r;r=C){i=!1,n=A<0?a:A+1;continue}if(_<4){var d=e.charCodeAt(l);if(d===re||d===Oe){for(var R=d,c=0,u=l;u=3){var s=!0;if(R===re){for(var T=u;T=c){for(;h=a||e.charCodeAt(h)===M){n=h>=a?a:h+1;break}}}for(;f=a&&(n=a,o=!0);continue}}}}for(var H=l;H=4)break;i=!1}if(!i&&_<4&&H=3&&y>=C)}else i=!0;n=A<0?a:A+1}return o}function Za(e,t,r){let n=e.length;if(e.charCodeAt(t)!==_e)return null;let a=t+1n||e.charCodeAt(i-1)!==je)return null;let A=e.slice(t+1,i-1);if(A.length>999)return null;let C=Gt(A);if(!C||i>=n||e.charCodeAt(i)!==Ge)return null;i++;let l=!1;for(;i=n||e.charCodeAt(i)!==U)return null;_=e.slice(d,i),i++;for(var R=e.indexOf(`\n`,i),c=R<0?n:R,u=i;u=n||e.charCodeAt(B)===M)&&(g=e.slice(y,m),S=!0,p=B0,a=0;a126||i>=J&&i<=G){n=!1;break}else r=!1}if(n&&!r)return e;var o=e.replace(/\\s+/g,\" \").trim();return o.indexOf(\"\\u1E9E\")!==-1?o.replace(/\\u1E9E/g,\"ss\").toLowerCase():o.toLowerCase()}function bn(e){return e?@[\\\\\\]^_`{|}~])/g,\"$1\")}var vn=null,Tn=-1,Ft=-1;function Ae(e,t){if(t>=Tn&&t<=Ft&&e===vn)return Ft;var r=e.indexOf(`\n`,t),n=r<0?e.length:r;return vn=e,Tn=t,Ft=n,n}function q(e,t){let r=Ae(e,t);return r=r}function Fi(e,t){if(!e)return e;var r=t.v||(t.v=Object.create(null)),n=r[e];if(n===void 0)return r[e]=0,e;for(var a=n+1,i=`${e}-${a}`;r[i]!==void 0;)a++,i=`${e}-${a}`;return r[e]=a,r[i]=0,i}function Ui(e,t,r,n){let a=Ae(e,t);if(Le(e,t,a),oe>3)return null;let i=t+te;if(e.charCodeAt(i)!==lr)return null;let o=Wr(e,i,a,35);if(o<1||o>6||(i+=o,ii&&e.charCodeAt(A-1)===N;)A--;for(var C=A;A>i&&e.charCodeAt(A-1)===lr;)A--;if(Ai&&e.charCodeAt(A-1)===N;)A--;else A=C;let l=e.slice(i,A),_=dt(l,!1,r,n);return{node:{type:v.heading,level:o,children:_,id:\"\"},end:q(e,a)}}function Wi(e,t,r){var n=e.charCodeAt(t);if(n!==Cr&&n!==F)return!1;for(var a=t;a=r}function Fr(e,t){let r=Ae(e,t);if(Le(e,t,r),oe>3)return null;let n=t+te,a=e.charCodeAt(n);if(a!==F&&a!==ke&&a!==he)return null;let i=0;for(;n3)return null;let a=oe,i=te,o=t+te,A=e.charCodeAt(o);if(A!==re&&A!==Oe)return null;let C=Wr(e,o,n,A);if(C<3)return null;o+=C;let l=St(e,o,n),_=n;if(A===re){for(let D=l;Dl&&(e.charCodeAt(_-1)===N||e.charCodeAt(_-1)===k);)_--;let d=e.slice(l,_),R=\"\",c=\"\",u=d.indexOf(\" \");u===-1?R=d:(R=d.slice(0,u),c=d.slice(u+1).trim()),R=_t(R);var s;if(c){Ea.lastIndex=0;for(var T;(T=Ea.exec(c))!=null;)s||(s={}),s[T[1]]=T[2]===void 0?T[3]:T[2]}let f=q(e,n),{length:h,length:g}=e;var S;A===ma&&C===ba?S=pa:(S=String.fromCharCode(A).repeat(C),ma=A,ba=C,pa=S);for(var p=f;p0&&E<4&&e.charCodeAt(w-1)===N;)w--,E++;if(E<=3&&(w===0||e.charCodeAt(w-1)===M)){for(var m=H+C;mf&&e.charCodeAt(h-1)===M?e.slice(f,h-1):e.slice(f,h);else{x=\"\";for(var B=f;B0&&x.charCodeAt(x.length-1)===M&&(x=x.slice(0,-1))}return{node:{type:v.codeBlock,lang:R||void 0,text:x,infoString:c||void 0,attrs:s},end:g}}function Ia(e,t,r){for(var n=0,a=t;a=4&&(n+=i,a=o);break}if(a!==o)break;continue}if(oe<4)break;let c=0,u=0;var C=0;for(let s=a;s4&&(C=u+l-4),u+=l}else u++;c++}var _=\"\";if(C>0)for(var d=0;d0&&n.charCodeAt(n.length-1)===M;)n=n.slice(0,-1);return n?{node:{type:v.codeBlock,lang:void 0,text:n,infoString:void 0,attrs:void 0},end:a}:null}function Qi(e,t,r,n){let a=Ae(e,t);if(Le(e,t,a),oe>3)return null;let i=t+te;if(e.charCodeAt(i)!==U)return null;let o=\"\",A=t,C,l=!1,_=!1,d=!1;for(;A0,A=q(e,L)}else if(o&&!rr(e,A,L)&&_){if(oe<4){var m=A+te,y=m=W&&y<=z){for(var x=m;x=W&&e.charCodeAt(x)<=z;)x++;if(x3)return null;var n=t+te;if(n>=r)return null;var a=e.charCodeAt(n),i=oe,o=n,A=n;if(a===F||a===ke||a===Or){if(o=n+1,o=W&&a<=z){for(;Az)break;A++}if(A>n&&A=r)return{ordered:a>=W&&a<=z,marker:a>=W&&a<=z?e[A]:e[n],start:a>=W&&a<=z?Number.parseInt(e.slice(n,A),10):void 0,contentStart:_,contentCol:d+1,markerCol:i,isEmpty:!0};for(;c=r,f=u-d;return T||f>4?(u=d+1,c=_+1,R=1):R===0&&(u=d+1,c=_,R=1),{ordered:a>=W&&a<=z,marker:a>=W&&a<=z?e[A]:e[n],start:a>=W&&a<=z?Number.parseInt(e.slice(n,A),10):void 0,contentStart:c,contentCol:u,markerCol:i,isEmpty:T}}var ft=0;function Oa(e,t,r,n){var a=0,i=t;for(ft=0;in){ft=a+A-n,i++,a=n;break}a+=A}else if(o===N)a++;else break;i++}return i}function La(e,t,r,n){var a=Ae(e,t),i=Kr(e,t,a);if(!i)return null;var o=[],A=t,C=i.contentCol,l=\"\",_=i.isEmpty,d=!1,R=!1;if(!i.isEmpty){for(var c=!1,u=i.contentStart;u0)for(var h=0;h0||m=C){var ve=Oa(e,A,H,C);if(ft>0){for(var Q=\"\",Pe=C,Ee=0;Ee=W&&le<=z&&Kr(e,A,H)!=null;if(!Ue){l+=`\u001e${e.slice(se,H)}\n`,A=q(e,H);continue}}break}if(o.push({contentCol:C,raw:l,hasBlankAfter:d,isEmpty:_}),o.length===0)return null;var K=R;if(!K)for(var we=0;we=V&&pe.slice(Ze).trim()===\"\"&&(Be=!1),ue=Y=0?Me=!0:We&&(Te=!0),ue=Y=0){if(oe>=Ne){ue=Y=3){if(Te&&We){K=!0;break}Be=!0,ze=tr,V=ee,We=!0,ue=Y0&&De.charCodeAt(Xe-1)===M;)Xe--;var Je=Xe=3&&Je.charCodeAt(0)===_e){var xr=Je[1];(xr===\" \"||xr===\"x\"||xr===\"X\")&&Je.charCodeAt(2)===je&&(zr={type:v.gfmTask,completed:xr===\"x\"||xr===\"X\"},Je=Je.slice(3))}var Ie;if(qe.isEmpty&&Je.trim()===\"\")Ie=[];else if(K){var Zr=r.inList;r.inList=!0;var wt=r.i;r.i=wt||Se!==o.length-1,Ie=Ur(Je,r,n),r.i=wt,r.inList=Zr}else{var br=r.inList;r.inList=!0;var Qr=r.i;if(r.i=Qr||Se!==o.length-1,Ie=Ur(Je,r,n),r.i=Qr,r.inList=br,Ie.length===1&&Ie[0].type===v.paragraph)Ie=Ie[0].children;else if(r.p){var Mr=[];r.p.push({src:Ie,dest:Mr,unwrap:!0}),Ie=Mr}else{for(var gr=[],nr=0;nr{let s=u.indexOf(\":\");if(s===-1)return;let T=u.slice(0,s).trim(),f=u.slice(s+1).trim();if(T&&f){if(/url\\s*\\(\\s*(javascript|vbscript|data:(?!image\\/))/i.test(f)){c=!0;return}let h=T.indexOf(\"-\")===-1?T:T.replace(/-([a-z])/g,(g,S)=>S.toUpperCase());l[h]=f}}),!c&&Object.keys(l).length>0&&(n[o]=l)}else if((C===\"href\"||C===\"src\")&&r?.sanitizer){let l=r.sanitizer(A,t,C);l!=null&&(n[o]=l)}else if(A===\"\")n[o]=!0;else if(A.length>=2&&A.charCodeAt(0)===Lr&&A.charCodeAt(A.length-1)===Mt){var a=A.slice(1,-1);if(a.length>0){var i=a.charCodeAt(0);if(i===_e||i===Lr)try{n[o]=JSON.parse(a);continue}catch{}}if(a===\"true\"){n[o]=!0;continue}if(a===\"false\"){n[o]=!1;continue}if(r?.evalUnserializableExpressions)try{n[o]=(0,eval)(`(${a})`);continue}catch{}n[o]=a}else n[o]=A}return n}function Gr(e,t,r){let n=t.length;if(n===0)return r;var a=t.charCodeAt(0),i=a>=J&&a<=G||a>=ie&&a<=ce;if(!i){for(var o=String.fromCharCode(a),A=e.length-n,C=r;C<=A;){var l=e.indexOf(o,C);if(l===-1||l>A)return-1;for(var _=!0,d=1;d=J&&R<=G&&(R+=_r),c>=J&&c<=G&&(c+=_r),R!==c){_=!1;break}}if(_)return l;C=l+1}return-1}a>=J&&a<=G&&(a+=_r);for(let s=r;s<=e.length-n;s++){var u=e.charCodeAt(s);if(u>=J&&u<=G&&(u+=_r),u!==a)continue;let T=!0;for(let f=1;f=J&&h<=G&&(h+=_r),g>=J&&g<=G&&(g+=_r),h!==g){T=!1;break}}if(T)return s}return-1}function Vi(e,t,r){let n=t.length;var a=t.charCodeAt(0);a>=J&&a<=G&&(a+=_r);for(let o=Math.min(r,e.length-n);o>=0;o--){var i=e.charCodeAt(o);if(i>=J&&i<=G&&(i+=_r),i!==a)continue;let A=!0;for(let C=1;C=J&&l<=G&&(l+=_r),_>=J&&_<=G&&(_+=_r),l!==_){A=!1;break}}if(A)return o}return-1}var zt=-1;function Sn(e,t,r){let n=r.toLowerCase(),a=`<${n}`,i=`0;){let d=Gr(e,a,A),R=Gr(e,i,A);if(R===-1)return-1;if(d!==-1&&d3&&!r.inHTML)return null;var i=t+te;if(e.charCodeAt(i)!==ae)return null;var o=e.indexOf(\">\",i+1);if(o!==-1&&o=1&&C<=5){var l=e.length;if(C===1){for(var _=e.length,d=0;d<$n.length;d++){var R=Gr(e,``,i);R>=0&&R<_&&(_=R)}if(_\",_);l=c>=0?q(e,c+1):e.length}}else{var u=C===2?\"-->\":C===3?\"?>\":C===4?\">\":\"]]>\",s=e.indexOf(u,i);s>=0&&(l=q(e,s+u.length))}var T=e.slice(i,l);if(C>=2)return{node:{type:v.htmlComment,text:T,s:!1,raw:!0},end:l};var f=\"div\",h=T.match(/^<\\/?([a-zA-Z][a-zA-Z0-9-]*)/);h&&(f=h[1]);var g=wr(e,i),S={},p;g&&!g.f&&(S=kr(g.attrs,f,n),p=g.g+g.b);var H=[],w=f.toLowerCase(),E=`0&&O.charCodeAt(O.length-1)===M;)O=O.slice(0,-1);O&&(B=dr(O))}else if(g&&!g.f){var D=g.end-i;if(m===-1){for(var P=T;P.length>0&&P.charCodeAt(P.length-1)===M;)P=P.slice(0,-1);x=dr(P)}else{var L=D;T.charCodeAt(L)===M&&L++;for(var Z=m;Z>L;){var ne=T.charCodeAt(Z-1);if(ne!==N&&ne!==k&&ne!==M&&ne!==Sr)break;Z--}var ve=T.slice(L,Z);ve&&(B=dr(ve));for(var Q=T.slice(m);Q.length>0&&Q.charCodeAt(Q.length-1)===M;)Q=Q.slice(0,-1);I=dr(Q),y=T.slice(D,m).trim()}}var Pe=g?g.f:!1;return{node:{type:v.htmlBlock,tag:f,attrs:S,b:p,children:H,e:B,h:I,j:x,text:y,c:!0,a:Pe},end:l}}if(C===6||C===7){var Ee=wa(e,t),Re=Ee0;){var Be=Gr(K,`<${j}`,Me),ze=Gr(K,ue,Me);if(ze===-1)break;if(Be!==-1&&Be=2&&Je===ae)){de=!0;break}if(De=!1,Je===ae){var zr=e.charCodeAt(Xe+1)|32;if((zr===xt||zr===on||zr===qr)&&(Ta.lastIndex=Xe,Ta.test(e))){sr=!0;break}}Xe++}}if(ee&&!de&&!sr){var xr=Ae(e,b);Re=xr,Fe=q(e,xr),K=e.slice(i,Re),He=e.slice(i,Re),we=fe-i,$e=b-i,Ce=!0}}}}var Ie=X.b.indexOf(`\n`)!==-1||X.g.indexOf(`\n`)!==-1,Zr=!1;if(we!==-1){var wt=K.slice($e).trim();Zr=wt.length===0}var br=!1,Qr=Re,Mr=Fe;if(we!==-1){var gr=i+$e,nr=Ae(e,gr-1);if(gr=2&&Ar.charCodeAt(0)===M&&Ar.charCodeAt(Ar.length-1)===M&&!yn;Ai&&!xn&&!Vt?At=[{type:v.text,text:lt}]:oi||Vt?(r.inline=!1,At=Ur(Ar,r,n)):(r.inline=!0,At=dt(lt,!1,r,n))}r.inline=ti,r.inHTML=ni,r.d=ai}}var Mn=!1;if(C===6&&we!==-1&&!r.inHTML&&!Ie){var li=/<[a-zA-Z][^>]*>/.test(Ar),Ci=Ar.indexOf(`\n\n`)!==-1||un.test(Ar);li&&!Ci&&(Mn=!0)}var fi=!Ce&&(r.inHTML||C===7||Ie||!Zr||Mn);if(fi){var ct,Tr,Bn=!1;if(we!==-1&&br){var Pn=!1;if(r.inHTML&&$e1&&Yt.charCodeAt(0)===ae&&Yt.charCodeAt(1)!==ge}Tr=Pn?K.slice(X.end-i):Ar,Bn=!0}else(C===7||r.inHTML)&&we!==-1?(Tr=K.slice(X.end-i),Tr.charCodeAt(0)===M&&(Tr=Tr.slice(1))):br?ct=e.slice(i,Qr):Ie?ct=He:(Tr=K.slice(X.end-i),Tr.charCodeAt(0)===M&&(Tr=Tr.slice(1)));var Dn=ct!==void 0,qt=dr(ct===void 0?Tr||\"\":ct),Xn={type:v.htmlBlock,tag:be,attrs:kr(X.attrs,be,n),b:X.g+X.b,children:At,e:Dn?void 0:qt,j:Dn?qt:void 0,text:qt,c:!0,a:!1};return Bn&&(Xn.x=!0),{node:Xn,end:Mr}}var Jn=dr(Ar);return{node:{type:v.htmlBlock,tag:be,attrs:kr(X.attrs,be,n),b:X.g+X.b,children:At,e:Ce?void 0:Jn,text:Jn,c:!1,a:!1},end:Mr}}var bt=He.match(/^<(\\/?)([a-zA-Z][a-zA-Z0-9-]*)/),_i=bt?bt[2]:\"div\",jt=bt?bt[1]===\"/\":!1,en,Kn,Gn,pt=\"\";if(jt){var rn=He.indexOf(\">\");rn===-1?en=He:(en=He.slice(0,rn+1),pt=He.slice(rn+1),pt&&(Kn=dr(pt)))}else Gn=dr(He);return{node:{type:v.htmlBlock,tag:_i,attrs:{},children:[],e:Kn,h:en,j:Gn,text:jt?pt:He,c:!0,a:jt},end:Fe}}var Qe=wr(e,i);if(!Qe)return null;var Br=Qe.tag,tn=Br.toLowerCase(),Fn=Br.charCodeAt(0),It=Fn>=J&&Fn<=G;if(!(It||Wt.has(tn)||Nt.has(tn)||tn.includes(\"-\")))return null;if(Qe.f)return{node:{type:v.htmlSelfClosing,tag:Br,attrs:{},h:e.slice(i,Qe.end),a:!0},end:Qe.end};var Yr=Sn(e,Qe.end,Br),Rt=[];if(Yr!==-1){var di=zt,Ot=e.slice(Qe.end,di),Lt=Ot.trim();if(Lt){var ci=Ot.indexOf(`\n\n`)!==-1,Ri=un.test(Lt),ui=Sa.test(Lt),{inline:Hi,inHTML:hi,d:si}=r;r.inHTML=!0,r.d=(r.d||0)+1,ci||Ri||ui?(r.inline=!1,Rt=Ur(Ot,r,n)):(r.inline=!0,Rt=dt(Lt,!1,r,n)),r.inline=Hi,r.inHTML=hi,r.d=si}var $i=Ae(e,Yr),gi=e.slice(Yr,$i).trim(),nn=gi?Yr:q(e,Yr),Un=It?e.slice(i,Yr):e.slice(i,nn),Eo=It?Yr:nn;return{node:{type:v.htmlBlock,tag:Br,attrs:kr(Qe.attrs,Br,n),b:Qe.g+Qe.b,children:Rt,j:dr(Un),text:It?Ot:Un,c:!0,a:!1},end:nn}}var ut=wa(e,Qe.end),vi=ut=J&&a<=G)return 4;if(e.slice(r+1,r+8)===\"[CDATA[\")return 5}for(var i=e.charCodeAt(r)===ge,o=i?r+1:r,A=o;A=J&&C<=G||C>=ie&&C<=ce||C>=W&&C<=z||C===F)A++;else break}if(A===o)return 0;var l=e.slice(o,A);if(Nt.has(l.toLowerCase())){if(i)return 0;var _=e.charCodeAt(A);return _===N||_===k||_===U||_===M||A>=n?1:0}if(Wt.has(l.toLowerCase())){if(i){for(var d=A;dn&&(e.charCodeAt(a-1)===N||e.charCodeAt(a-1)===k);)a--;nn&&e.charCodeAt(a-1)===ye&&(a-2{var f=T.indexOf(\"\\\\|\")===-1?T:T.replace(/\\\\\\|/g,\"|\");return f?dt(f,!1,t,r):[]})}function xa(e,t,r,n){let a=Ae(e,t);var i=e.indexOf(\"|\",t);if(i<0||i>=a)return null;let o=q(e,a);if(o>=e.length)return null;let A=Ae(e,o);if(!za(e,o,A))return null;let C=e.slice(t,a),l=e.slice(o,A);for(var _=[],d=0,R=l.length;d=R||l.charCodeAt(d)===ye)break;var c=l.charCodeAt(d)===Ge;for(c&&d++;d=3)break}}T.push(ya(E,r,n)),f=q(e,w)}if(n.optimizeForStreaming&&T.length===0)return null;for(var p=s.length,H=0;Hp&&(T[H].length=p);return{node:{type:v.table,header:s,cells:T,align:_},end:f}}function qi(e,t,r){var n=Ae(e,t);if(Le(e,t,n),oe>3)return null;var a=t+te;if(e.charCodeAt(a)!==_e)return null;if(a+1=n||e.charCodeAt(t+1)!==cr)return null;for(var a=t+2,i=a;a=n)return null;var o=`^${e.slice(i,a)}`.toLowerCase();if(a++,a>=n||e.charCodeAt(a)!==Ge)return null;for(a++;a=2&&!rr(e,l,_))C+=`\n${e.slice(l,_)}`,l=q(e,_);else if(rr(e,l,_)){var d=q(e,_);if(d=2){C+=`\n`,l=q(e,_);continue}}break}else break}var c=r.refs;return c&&!c[o]&&(c[o]={target:C,title:void 0}),{node:{type:v.footnote},end:l}}function eo(e,t,r,n){let a=t,i=0,o=0,A=-1;for(;a=0?A:Ae(e,a);if(A=-1,rr(e,a,I))break;if(Le(e,a,I),oe<4&&o>0&&!r.l){let D=e.charCodeAt(a+te);if(D===Cr||D===F){let P=a+te;for(;P=I){i=D===Cr?1:2,a=q(e,I);break}}}o=I;let O=q(e,I);if(O=1&&_<=6&&(l>=D||e.charCodeAt(l)===N||e.charCodeAt(l)===k)){a=O;break}}if(P===re||P===Oe){for(var d=O+te,R=0;d=3){a=O;break}}if(P===ae){var c=O+te+1,u=c=J&&e.charCodeAt(f)<=G||e.charCodeAt(f)>=ie&&e.charCodeAt(f)<=ce||e.charCodeAt(f)>=W&&e.charCodeAt(f)<=z||e.charCodeAt(f)===F);)f++;f>T&&(s=Wt.has(e.slice(T,f).toLowerCase()))}else if(!s){for(var h=c;h=J&&e.charCodeAt(h)<=G||e.charCodeAt(h)>=ie&&e.charCodeAt(h)<=ce||e.charCodeAt(h)>=W&&e.charCodeAt(h)<=z||e.charCodeAt(h)===F);)h++;if(h>c){var g=e.slice(c,h).toLowerCase();s=Wt.has(g)||Nt.has(g)}}if(s&&Va(e,O,r,n)){a=O;break}}if(P===F||P===ke||P===Or){let L=O+te+1;if(L=W&&P<=z){let L=O+te;for(;L=W&&e.charCodeAt(L)<=z;)L++;if(Lt&&(e.charCodeAt(w-1)===M||e.charCodeAt(w-1)===Sr||e.charCodeAt(w-1)===N||e.charCodeAt(w-1)===k);)w--;for(var E=t;E=w)return null;for(var m=!1,y=E;y=r)return null;let o=Wr(e,i,r,96);if(o===n){let A=e.slice(t+n,i);return A.indexOf(`\n`)!==-1&&(A=A.replace(/\\n/g,\" \")),A.length>0&&A[0]===\" \"&&A.at(-1)===\" \"&&A.trim().length>0&&(A=A.slice(1,-1)),{node:{type:v.codeInline,text:A},end:i+o}}a=i+o}return null}function pn(e,t,r){if(e.charCodeAt(t)!==re)return t;let n=Wr(e,t,r,96),a=t+n;for(;a=r)return t;let o=Wr(e,i,r,96);if(o===n)return i+o;a=i+o}return t}function to(e,t,r){if(e.charCodeAt(t)!==ae)return t;if(t+1\",t+4);return l>=0?l+3:t}let n=t+1,a=n;for(;n=J&&l<=G||l>=ie&&l<=ce||l>=W&&l<=z||l===F)n++;else break}if(n===a)return t;let i=e.slice(a,n).toLowerCase(),o=!1;for(;n0;)if(e.charCodeAt(n)===ae)if(n+1=J&&e.charCodeAt(_)<=G||e.charCodeAt(_)>=ie&&e.charCodeAt(_)<=ce);)_++;if(e.slice(l,_).toLowerCase()===i){for(;_=J&&e.charCodeAt(_)<=G||e.charCodeAt(_)>=ie&&e.charCodeAt(_)<=ce);)_++;e.slice(l,_).toLowerCase()===i&&C++,n++}else n++;return n}function no(e,t,r){let a=e.charCodeAt(t)===Ke?t+1:t;if(e.charCodeAt(a)!==_e)return t;let i=1,o=a+1;for(;o0;){let C=e.charCodeAt(o);if(C===me&&o+1=r)return t;let A=e.charCodeAt(o);if(A===ir){let C=1;for(o++;o0;){let l=e.charCodeAt(o);if(l===me&&o+10;){let l=e.charCodeAt(o);l===_e?C++:l===je&&C--,o++}return C===0?o:t}return t}function ao(e,t,r,n,a){if(e.charCodeAt(t)!==Oe||t+1>=r||e.charCodeAt(t+1)!==Oe)return null;let i=t+2;for(;i+1i){i=A;continue}}if(o===Oe&&e.charCodeAt(i+1)===Oe){let A=e.slice(t+2,i),C=mr(A,0,A.length,n,a);return{node:{type:v.textFormatted,tag:\"del\",children:C},end:i+2}}o===me&&i+1=r||e.charCodeAt(t+1)!==Cr)return null;let i=t+2;for(;i+1i){i=A;continue}}if(o===Cr&&e.charCodeAt(i+1)===Cr&&i>t+2){let A=e.slice(t+2,i),C=mr(A,0,A.length,n,a);return{node:{type:v.textFormatted,tag:\"mark\",children:C},end:i+2}}o===me&&i+10?e.charCodeAt(t-1):32,o=t+a0?Ma(i,e,t-1):!1,_=t+ah;S--){var p=t[S];if(!(!p.active||p.ch!==s.ch||!p.canOpen)&&!((s.canOpen||p.canClose)&&(p.len+s.len)%3===0&&p.len%3!==0)){g=S;break}}if(g<0){R[f]=u-1,!s.canOpen&&(s.active=!1),u++;continue}var H=t[g],w=H.len>=2&&s.len>=2,E=w?2:1;H.len-=E,s.len-=E;var m=_[g],y=_[u],x=m.node,B=y.node;x.text=x.text.slice(0,x.text.length-E),B.text=B.text.slice(E);for(var I=[],O=m.next;O&&O!==y;)I.push(O.node),O=O.next;var D={type:v.textFormatted,tag:w?\"strong\":\"em\",children:I},P={node:D,prev:m,next:y};m.next=P,y.prev=P;for(var L=g+1;L0&&e[ve-1].type===v.text){e[ve-1].text+=Ee.text,Q=Q.next;continue}}e[ve++]=Pe,Q=Q.next}e.length=ve}}function Jt(e,t,r,n){return t(e,r,n)===null?null:e}var Pa=0,En=0,Da=0,Nn=0,Xa=0,kn=0,Hn=0,Hr=0;function lo(){return Hn===2147483647&&(En=0,Nn=0,kn=0,Ut=0,Hn=0),++Hn}var hn=null,Ut=0,Kt=[],sn=256;function Ja(e,t,r,n,a){let i=e.charCodeAt(t)===Ke,o=i?t+1:t;if(e.charCodeAt(o)!==_e||Nn===Hr&&o>=Da)return null;var A=Ut===Hr?hn:null,C=A===null?0:A[o];if(C<0)return null;var l=C;if(C===0){var _=e.indexOf(\"]\",o+1);if(_<0||_>=r)return Da=o,Nn=Hr,null;l=o+1;var d=0;Kt[d++]=o;for(var R=r-o>=sn;l0;){var c=e.charCodeAt(l);if(c===me&&l+1l){l=u;continue}}if(c===ae){var s=Ya(e,l,r);if(s){l=s.end;continue}var T=to(e,l,r);if(T>l){l=T;continue}}if(c===_e)Kt[d++]=l;else if(c===je){var f=Kt[--d];A===null&&R&&l-o>=sn&&(A=hn=new Int32Array(r),Ut=Hr),A!==null&&(A[f]=l+1)}l++}if(d>0){if(A===null&&R&&l-o>=sn&&(A=hn=new Int32Array(r),Ut=Hr),A!==null)for(;d>0;)A[Kt[--d]]=-1;return null}}var h=l-1,g=e.slice(o+1,h),S=l=r||e.charCodeAt(E)!==U)&&(H=!1),H&&(w=e.slice(l,E),E++)}else if(H){var m=En===Hr?Pa:-1;if(m>=0&&l>=m)H=!1;else{for(var y=0,x=!1;E=r&&!x&&(m<0||l=r?H=!1:(I=e.slice(P,l),l++)}}if(H){for(;l=r||e.charCodeAt(l)!==fr)&&(H=!1)}}if(H){if(l++,w=Er(_t(w)),I!==void 0&&(I=Er(_t(I))),i){var L=mr(g,0,g.length,n,a),Z=Zt(L);return{node:{type:v.image,target:Jt(w,a?.sanitizer||Rr,\"img\",\"src\"),alt:Z,title:I},end:l}}var ne=n.inAnchor;n.inAnchor=!0;var X=ne?[{type:v.text,text:g}]:mr(g,0,g.length,n,a);return n.inAnchor=ne,!n.inAnchor&&wn(X)?null:{node:{type:v.link,target:Jt(w,a?.sanitizer||Rr,\"a\",\"href\"),title:I,children:X},end:l}}l=h+1,p=!0}var ve=\"\",Q=l;if(!p&&S===_e){var Pe=l+1;Q=Pe;for(var Ee=!1;Q=r)return null;var Re=e.slice(Pe,Q);if(Re.trim())ve=Gt(Re);else{if(ka(g))return null;ve=Gt(g)}Q+=1}else{if(ka(g))return null;ve=Gt(g)}var He=n.refs?.[ve];if(!He)return null;if(i)return{node:{type:v.image,target:Jt(He.target,a?.sanitizer||Rr,\"img\",\"src\"),alt:Zt(mr(g,0,g.length,n,a)),title:He.title},end:Q};var Fe=n.inAnchor;n.inAnchor=!0;var X=Fe?[{type:v.text,text:g}]:mr(g,0,g.length,n,a);return n.inAnchor=Fe,!n.inAnchor&&wn(X)?null:{node:{type:v.link,target:Jt(He.target,a?.sanitizer||Rr,\"a\",\"href\"),title:He.title,children:X},end:Q}}function Ya(e,t,r){if(e.charCodeAt(t)!==ae)return null;for(var n=t+1;n=r||e.charCodeAt(n)!==U)return null;var i=e.slice(t+1,n),o=i.match(/^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^\\x00-\\x20]*)$/);return o?{node:{type:v.link,target:i,title:void 0,children:[{type:v.text,text:i}]},end:n+1}:i.indexOf(\"@\")!==-1&&/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(i)?{node:{type:v.link,target:`mailto:${i}`,title:void 0,children:[{type:v.text,text:i}]},end:n+1}:null}function Co(e,t,r,n){if(e.charCodeAt(t)!==_e||t+1>=r||e.charCodeAt(t+1)!==cr||kn===Hr&&t>=Xa)return null;let a=t+2;for(;a=r)return Xa=t,kn=Hr,null;if(e.charCodeAt(a)!==je)return null;let i=e.slice(t+2,a);return i?{node:{type:v.footnoteReference,target:`#${Nr(i)}`,text:i},end:a+1}:null}function fo(e,t,r,n){if(n.disableBareUrls)return null;var a=\"\",i=!1,o=e.charCodeAt(t);if(o===$t||o===72?t+8<=r&&e.charCodeAt(t+1)===qr&&e.charCodeAt(t+2)===qr&&e.charCodeAt(t+3)===xt&&(e.charCodeAt(t+4)===on&&e.charCodeAt(t+5)===Ge&&e.charCodeAt(t+6)===ge&&e.charCodeAt(t+7)===ge?a=\"https://\":e.charCodeAt(t+4)===Ge&&e.charCodeAt(t+5)===ge&&e.charCodeAt(t+6)===ge&&(a=\"http://\")):o===pr||o===70?t+6<=r&&e.charCodeAt(t+1)===qr&&e.charCodeAt(t+2)===xt&&e.charCodeAt(t+3)===Ge&&e.charCodeAt(t+4)===ge&&e.charCodeAt(t+5)===ge&&(a=\"ftp://\"):(o===Pr||o===87)&&t+4<=r&&e.charCodeAt(t+1)===Pr&&e.charCodeAt(t+2)===Pr&&e.charCodeAt(t+3)===ar&&(a=\"www.\",i=!0),!a)return null;let A=t+a.length;for(;At+a.length;){let H=e.charCodeAt(R-1);if(H===ar||H===Zn||H===Ge||H===Ke||H===jr||H===fr||H===ke||H===he||H===Oe){if(H===fr){if(C>=l)break;l--}R--}else if(H===gt){for(var c=R-2;c>t&&(e.charCodeAt(c)>=J&&e.charCodeAt(c)<=G||e.charCodeAt(c)>=ie&&e.charCodeAt(c)<=ce||e.charCodeAt(c)>=W&&e.charCodeAt(c)<=z);)c--;c>=t&&e.charCodeAt(c)===ht?R=c:R--}else break}if(R<=t+a.length)return null;var u=t+(i?4:a.length),s=e.indexOf(\"/\",u);if((s<0||s>R)&&(s=R),i&&e.indexOf(\".\",u)===-1)return null;for(var T=-1,f=-1,h=s-1;h>=u;h--)if(e.charCodeAt(h)===ar)if(T<0)T=h;else{f=h;break}for(var g=f>=0?f+1:u,h=g;h=J&&o<=G||o>=ie&&o<=ce||o>=W&&o<=z||o===ar||o===Ke||o===lr||o===36||o===Ht||o===ht||o===Dr||o===ke||o===Or||o===ge||o===Cr||o===jr||o===cr||o===he||o===re||o===Lr||o===ye||o===Mt||o===Oe||o===F)a++;else break}if(a===i||a>=r||e.charCodeAt(a)!==yt)return null;a++;for(var A=a,C=-1,l=a;a=J&&o<=G||o>=ie&&o<=ce||o>=W&&o<=z)a++;else if((o===F||o===he)&&a>A)a++;else if(o===ar){if(a===A)break;var _=e.charCodeAt(a-1);if(_===F||_===he||a-l>63)break;if(a+1=J&&d<=G||d>=ie&&d<=ce||d>=W&&d<=z)C=a,l=a+1,a++;else break}else break}else break}if(a-l>63||C<0)return null;var R=e.charCodeAt(a-1);if(!(R>=J&&R<=G||R>=ie&&R<=ce||R>=W&&R<=z)||a<=C+1)return null;for(var c=-1,u=C-1;u>=A;u--)if(e.charCodeAt(u)===ar){c=u;break}for(var s=c>=0?c+1:A,u=s;u=r)return-1;if(e.charCodeAt(n)===lr){n++;var a=n=W&&A<=z||a&&(A>=J&&A<=st||A>=ie&&A<=pr);if(!C)break;n++}return n===i||n-i>o?-1:n=J&&_<=G||_>=ie&&_<=ce||_>=W&&_<=z){n++;continue}break}return n===l?-1:n=r)return null;var o=e.charCodeAt(i);if(o===Ke&&i+1\",A);return C!==-1&&C<=r-3?{node:{type:v.htmlComment,text:e.slice(t+4,C),s:!1},end:C+3}:null}if(o===jr){var l=e.indexOf(\"?>\",i+1);return l!==-1&&l\",i+8);return d!==-1&&d=J&&_<=G){var R=e.indexOf(\">\",i+2);return R!==-1&&R=r)return null;var u=e.charCodeAt(c);if(!(u>=J&&u<=G||u>=ie&&u<=ce))return null;for(c++;c=J&&s<=G||s>=ie&&s<=ce||s>=W&&s<=z||s===F)c++;else break}for(;c=J&&o<=G||o>=ie&&o<=ce))return null;var f=wr(e,t);if(!f)return null;var h=f.tag,g=h.toLowerCase(),S=f.n;if(S||nt(h))return{node:{type:v.htmlSelfClosing,tag:h,attrs:kr(f.attrs,h,a),m:f.q?gn(f):e.slice(t,f.end),a:!1},end:f.end};var p=Nt.has(g),H=Sn(e.slice(0,r),f.end,h);if(H===-1)return{node:{type:v.htmlSelfClosing,tag:h,attrs:kr(f.attrs,h,a),m:f.q?gn(f):e.slice(t,f.end),a:!1},end:f.end};var w=Vi(e,`uo)return Tt--,[{type:v.text,text:e.slice(t,r)}];var i=Hr;Hr=lo();let o=n;if(a.optimizeForStreaming){let sr=function(Se,qe){for(var De=1,Xe=qe+1;Xef){f=g-1;continue}}h===ke?f+1=0&&S.push([T,2]),l%2===1&&u>=0&&S.push([u,2]),_%2===1&&s>=0&&S.push([s,1]),A%2===1&&R>=0&&S.push([R,2]),C%2===1&&c>=0&&S.push([c,1]),S.sort((Se,qe)=>qe[0]-Se[0]);for(var p=0;p0&&b.charCodeAt(I-1)===Ke,P=D?I-1:I,L=sr(b,I);if(L===-1)m=P,B=D,y=I+1,x=b.length;else{var Z=L+1;if(Z>=b.length)m=P,B=D,y=I+1,x=L;else if(b.charCodeAt(Z)===ir){var ne=b.indexOf(\")\",Z+1);ne===-1?(m=P,B=D,y=I+1,x=L,I=b.length):I=ne}else if(b.charCodeAt(Z)===_e){var ve=b.indexOf(\"]\",Z+1);ve===-1?(m=P,B=D,y=I+1,x=L,I=b.length):I=ve}else I=L}}}if(m>=0){var Q=B?\"\":b.slice(y,x);b=b.slice(0,m)+Q,E=!0}}let de=b.match(/<([A-Z][A-Za-z0-9]*)(?:\\s[^>]*)?>([^<]*)$/);if(de&&de.index!==void 0){var Pe=de[0].length-de[2].length,Ee=Pe>=2&&de[0].charCodeAt(Pe-2)===ge;if(!Ee){for(var Re=!1,He=0,Fe=0;Fe=r&&(le=-1);tj)&&(X.push(at(se+e.slice(j,t))),se=\"\");var we=e.slice(t,t+K.len),$e=at(we);be.push({idx:X.length,ch:b,len:K.len,canOpen:K.canOpen,canClose:K.canClose,active:!0}),X.push($e),t+=K.len,j=t;continue}t+=K.len-1}}else if(b===Oe)fe=ao(e,t,r,o,a);else if(b===Cr)fe=io(e,t,r,o,a);else if(b===_e)t+1=0&&le-t<=64&&!o.inAnchor&&!a.disableAutoLink&&!a.disableBareUrls&&(b>=J&&b<=G||b>=ie&&b<=ce||b>=W&&b<=z)&&(fe=_o(e,t,r,a),!fe&&t>=le&&(le=e.indexOf(\"@\",t+1),le>=r&&(le=-1))),b===M&&o.k){var Me=!1,Be=0;if(t>j&&e.charCodeAt(t-1)===me)Me=!0,Be=1;else{for(var ze=0,V=t-1;V>=j&&e.charCodeAt(V)===N;)ze++,V--;ze>=2&&(Me=!0,Be=ze)}if(Me){for((se||t-Be>j)&&(X.push(at(se+e.slice(j,t-Be))),se=\"\"),X.push({type:v.breakLine}),t++;tj&&e.charCodeAt(t-1)===N,Y=t+1j&&e.charCodeAt(pe-1)===N;)pe--;for(se+=`${e.slice(j,pe)}\n`,t++;tj)&&(X.push(at(se+e.slice(j,t))),se=\"\"),X.push(fe.node),t=fe.end,j=t;else{if(b===me&&t+1j)&&(X.push(at(se+e.slice(j,t))),se=\"\"),X.push(at(e[t+1])),t+=2,j=t;continue}}if(t++,le<0||le-t>64)for(;t=0&&le-t<=64);){var Ze=e.charCodeAt(t);if(Zej)&&(X.push(at(se+e.slice(j,r))),se=\"\"),be.length>0&&Ao(X,be,n,a),Hr=i,Tt--,X}var Ho=500;function Ur(e,t,r){var n=t.o||0;if(n>Ho)return[{type:v.text,text:e}];t.o=n+1;let a=t;if(r.optimizeForStreaming&&!(t.i||t.w)){for(var i=e.length;i>0&&e.charCodeAt(i-1)===M;)i--;for(var o=i;o>0&&e.charCodeAt(o-1)!==M;)o--;if(i>o&&e.charCodeAt(o)===ye){for(var A=!1,C=o+1;C0;){for(var s=u;s>0&&e.charCodeAt(s-1)!==M;)s--;if(e.charCodeAt(s)!==ye)break;c=s;for(var T=!0,f=!1,h=s;h0?e.slice(0,o).trimEnd():e.slice(0,c).trimEnd()}for(var S=-1,p=-1,H=-1,w=!1,E=e.length-1;E>=0;E--)if(e.charCodeAt(E)===ae){for(var m=E+1=J&&m<=G||m>=ie&&m<=ce,x=m===ge&&E+2=J&&e.charCodeAt(E+2)<=G||e.charCodeAt(E+2)>=ie&&e.charCodeAt(E+2)<=ce),B=m===Ke||m===jr,I=e.length;I>E+1&&e.charCodeAt(I-1)===M;)I--;var O=E+1>=I;if(y||x||B||O){var D=E+1;if((x||y)&&(D=E+2),y||x)for(;D=J&&P<=G||P>=ie&&P<=ce||P>=W&&P<=z)D++;else break}for(var L=y||x?D:E+2;L=e.length)S=E,w=!0;else if((y||x)&&e.charCodeAt(L-1)!==ge){for(var Z=!1,ne=L+1;ne=0){for(var ve=0,Q=0;Q0&&e.charCodeAt(Ee-1)===M;)Ee--;if(Ee>0){for(var Re=Ee;Re>0&&e.charCodeAt(Re-1)!==M;)Re--;for(var He=Re,Fe=0;He0&&He0&&e.charCodeAt(be-1)!==M;)be--;rr(e,be,X)||(e=e.slice(0,Re).trimEnd())}}var j=e.length;if(j>0){for(var se=e.lastIndexOf(`\n`),le=se===-1?0:se+1,Ue=j,K=le,we=0;K=Ue||e.charCodeAt(ue)===N||e.charCodeAt(ue)===k){for(var We=ue;We=Ue&&(Ce=!0)}}else if($e>=W&&$e<=z){for(var Te=K;Te=W&&e.charCodeAt(Te)<=z;)Te++;if(Te=Ue||e.charCodeAt(Me)===N||e.charCodeAt(Me)===k){for(var Be=Me;Be=Ue&&(Ce=!0)}}}Ce&&(e=e.slice(0,le).trimEnd())}}}if(t.inline)return mr(e,0,e.length,t,r);let ze=[],V=0,Ne=e.length;if(V===0&&!r.disableFrontmatter&&e.startsWith(\"---\")){let ee=oa(e);if(ee?.hasValidYaml){if(r.preserveFrontmatter!==!1){let sr=e.slice(0,ee.endPos).trimEnd();ze.push({type:v.frontmatter,text:sr})}V=ee.endPos}}for(;V=Ne)break;var Ze=e.charCodeAt(V)===Bt;Le(e,V,pe);let ee=null;if(vn=e,Tn=V,Ft=pe,!Ze&&oe>=4&&!t.inHTML)ee=Zi(e,V);else if(!Ze){let sr=V+te,de=e.charCodeAt(sr);de===lr?ee=Ui(e,V,t,r):de===U?ee=Qi(e,V,t,r):de===re||de===Oe?ee=zi(e,V,t):de===F||de===ke||de===he?(ee=Fr(e,V),!ee&&(ee=La(e,V,t,r))):de===Or||de>=W&&de<=z?ee=La(e,V,t,r):de===ae?ee=Va(e,V,t,r):de===ye?ee=xa(e,V,t,r):de===_e&&(ee=qi(e,V,t))}if(!ee){for(var b=!1,fe=V;fe\"u\"?void 0:Ye.createContext(void 0);function ja(e,t,r,n,a,i,o,A,C){switch(e.type){case v.blockQuote:{let f={key:r.key};return e.alert&&(f.className=`markdown-alert-${i(e.alert.toLowerCase(),Nr)}`,e.children.unshift(ca(e.alert))),n(\"blockquote\",f,t(e.children,r))}case v.breakLine:return n(\"br\",{key:r.key});case v.breakThematic:return n(\"hr\",{key:r.key});case v.frontmatter:return A.preserveFrontmatter?n(\"pre\",{key:r.key},e.text):null;case v.codeBlock:{let f=e.lang?Er(e.lang):\"\";var l=e.attrs?fn(e.attrs):{};return l.className=f?`language-${f} lang-${f}`:\"\",n(\"pre\",{key:r.key},n(\"code\",l,e.text))}case v.codeInline:return n(\"code\",{key:r.key},e.text);case v.footnoteReference:return n(\"a\",{key:r.key,href:a(e.target,\"a\",\"href\")||void 0},n(\"sup\",null,e.text));case v.gfmTask:return n(\"input\",{checked:e.completed,key:r.key,readOnly:!0,type:\"checkbox\"});case v.heading:return n(`h${e.level}`,{id:e.id,key:r.key},t(e.children,r));case v.htmlBlock:{let f=e;if(Jr(A)&&cn(f.tag)){var _=dn(f);return _.kind===\"literal\"?n(\"span\",{key:r.key},_.literal):n(\"span\",{key:r.key},...Ha(_.open,f.children?t(f.children,r):null,_.close))}let h=f.j,g=h!==void 0,S=g?h:f.a?f.e||\"\":(f.e||\"\")+(f.h||\"\");if(S&&f.c){let p=f.tag.toLowerCase(),H=Ua(p),w=f.children,E=w!=null&&w.length>0;if(H){let L=g?h:f.e||\"\",Z=Jr(A)?Rn(L):L;if(/<[a-z][^>]{0,100}>/i.test(S)){var d=hr(r.key,e.attrs);return d.dangerouslySetInnerHTML={__html:Z},C(e.tag,d)}return C(e.tag,hr(r.key,e.attrs),Z)}let m=new RegExp(`^<${f.tag}(\\\\s|>)`,\"i\");if(E&&!m.test(S)&&Jr(A)&&ga(S))return C(e.tag,hr(r.key,e.attrs),t(w,r));if(Wa(S)){let L=Jr(A)?Rn(S):S;var R=hr(r.key,e.attrs);return R.dangerouslySetInnerHTML={__html:L},C(e.tag,R)}let x=Et({slugify:A.slugify,sanitizer:a,tagfilter:!0}),B=da(S);if(new RegExp(`^<${f.tag}(\\\\s[^>]*)?>(\\\\s*)?$`,\"i\").test(B))return f.children&&f.children.length>0?C(e.tag,hr(r.key,e.attrs),t(f.children,r)):C(e.tag,hr(r.key,e.attrs));let O=kt(B,{inline:!1,refs:o,inHTML:!1},x);_n(O);let D=f.tag.toLowerCase(),P=g;if(P&&E)return C(e.tag,hr(r.key,e.attrs),t(w,r));if(P)return t(O.flatMap(tt),r);var c=ua(O,D);if(c.found&&c.afterClose.length>0){var u=c.beforeClose.flatMap(tt),s=c.afterClose.flatMap(tt);return On(Ye.Fragment,{children:[C(e.tag,hr(r.key,e.attrs),t(u,r)),t(s,r)]},r.key)}return C(e.tag,hr(r.key,e.attrs),t(O.flatMap(tt),r))}return nt(e.tag)?C(e.tag,hr(r.key,e.attrs)):C(e.tag,hr(r.key,e.attrs),e.children?t(e.children,r):\"\")}case v.htmlSelfClosing:{let f=e;if(Jr(A)&&cn(f.tag)){var T=dn(f);return n(\"span\",{key:r.key},T.kind===\"literal\"?T.literal:T.open+(T.close||\"\"))}return C(e.tag,hr(r.key,e.attrs))}case v.image:{let f=e.target===null?null:a(e.target,\"img\",\"src\");return n(\"img\",{key:r.key,alt:e.alt&&e.alt.length>0?e.alt:void 0,title:e.title||void 0,src:f||void 0})}case v.link:{let f={key:r.key};if(e.target!=null){let h=ha(e.target,a,\"a\",\"href\");h!=null&&(f.href=h)}return e.title&&(f.title=e.title),n(\"a\",f,t(e.children,r))}case v.table:{let f=e;return n(\"table\",{key:r.key},n(\"thead\",{key:\"thead\"},n(\"tr\",null,f.header.map(function(g,S){return n(\"th\",{key:S,style:f.align[S]===null?{}:{textAlign:f.align[S]}},t(g,r))}))),f.cells.length>0&&n(\"tbody\",{key:\"tbody\"},f.cells.map(function(g,S){return n(\"tr\",{key:S},g.map(function(H,w){return n(\"td\",{key:w,style:f.align[w]===null?{}:{textAlign:f.align[w]}},t(H,r))}))})))}case v.text:return e.text;case v.textFormatted:return n(e.tag,{key:r.key},t(e.children,r));case v.orderedList:case v.unorderedList:{let f=e.type===v.orderedList?\"ol\":\"ul\";return n(f,{key:r.key,start:e.type===v.orderedList?e.start:void 0},e.items.map(function(g,S){return n(\"li\",{key:S},t(g,r))}))}case v.paragraph:return n(\"p\",{key:r.key},t(e.children,r));case v.ref:return null;default:return null}}var $o=(e,t,r,n,a,i,o)=>{var A=l=>l.map(_=>\"text\"in _?_.text:\"\"),C=(l,_={})=>{var d=Array.isArray(l)?l:[l],R=(_.renderDepth||0)+1;if(R>2500)return A(d);_.renderDepth=R;for(var c=_.key,u=[],s=!1,T=0;T{let r=Xt(t,e,void 0);return r?typeof r==\"function\"||typeof r==\"object\"&&\"render\"in r?r:Xt(t,`${e}.component`,e):e};function vo(e,t){let r={...t||{}};r.overrides=r.overrides||{};let n=r.slugify||Nr,a=r.sanitizer||Rr,i=r.createElement,o=Dt(r.overrides),A=g=>Ln(g,{...r,wrapper:null});function C(g){for(var S in g){var p=g[S];if(typeof p==\"string\"&&p.length>0&&p.charCodeAt(0)===ae&&(Ka.test(p)||Ga.test(p)||qa(p,0))){var H=A(p.trim());g[S]=S===\"innerHTML\"&&Array.isArray(H)?H[0]:H}}}function l(g,S,...p){var H=S||{},w=g;if(o){var E=Xt(r.overrides,`${g}.props`,{});w=go(g,r.overrides),H={...H,...E,className:$a(H.className,E.className)||void 0}}if(!i){var m=H.key;return m!=null&&delete H.key,p.length===1?H.children=p[0]:p.length>1&&(H.children=p),On(w,H,m)}return i(w,H,...p)}function _(g,S,...p){return S&&C(S),l(g,S,...p)}let d=Et(r,r.forceInline),R=e[0]&&e[0].type===v.refCollection?e[0].refs:Object.create(null),c=$o(r.renderRule,l,a,n,R,r,_),u=c(e,{inline:r.forceInline,refs:R}),s=sa(R);if(s.length>0&&u.push(l(\"footer\",{key:\"footer\"},s.map(function(S){let p=S.identifier.charCodeAt(0)===cr?S.identifier.slice(1):S.identifier,H=kt(S.footnote,{inline:!0,refs:R},d);return l(\"div\",{id:n(p,Nr),key:S.identifier},`${p}: `,c(H,{inline:!0,refs:R}))}))),r.wrapper===null)return u;let T=r.wrapper||(r.forceInline?\"span\":\"div\"),f;if(u.length>1||r.forceWrapper)f=u;else return u.length===1?u[0]:null;var h=r.wrapperProps?{...r.wrapperProps}:{};return h.children=f,On(T,h,\"outer\")}function Ln(e=\"\",t={}){let r={...t||{}};r.overrides=r.overrides||{};let n=r.slugify||Nr,a=r.sanitizer||Rr;function i(A){let C=r.forceInline||!(r.forceBlock||Aa.test(A)),l=Et(r,C),_=C?A:Ra(A),d=kt(_,{inline:C,refs:o},l);return vo(d,{...r,forceInline:C})}let o=Object.create(null);return i(e)}var Oo=({options:e,children:t})=>Qt?Ye.createElement(Qt.Provider,{value:e},t):t;function To(e){let t=Ye.useRef(e),r=t.current;if(r!==e){var n=!0,a=0;for(var i in e)if(a++,!Object.is(r[i],e[i])){n=!1;break}if(n){var o=0;for(var A in r)o++;n=o===a}n||(t.current=e)}return t.current}var So=({children:e,options:t,...r})=>{if(!(typeof Ye.useContext<\"u\")){let l={...t,overrides:{...t?.overrides},wrapperProps:{...t?.wrapperProps,...r}};return Ln(e??\"\",l)}let a=Qt?Ye.useContext(Qt):void 0,i=To(r),o=Ye.useMemo(()=>({...a,...t,overrides:{...a?.overrides,...t?.overrides},wrapperProps:{...a?.wrapperProps,...t?.wrapperProps,...i}}),[a,t,i]),A=e??\"\";return Ye.useMemo(()=>Ln(A,o),[A,o])},Bo=So;export{So as Markdown,Qt as MarkdownContext,Oo as MarkdownProvider,v as RuleType,vo as astToJSX,Ln as compiler,Bo as default,ho as parser,Rr as sanitizer,Nr as slugify};\n","/** Internal only symbol used by `Form` & `ObjectField` to mark an additional property element to be removed */\nexport const ADDITIONAL_PROPERTY_KEY_REMOVE = Symbol('remove-this-key');\n/** Internal only symbol used by the `reset()` function to indicate that a reset operation is happening */\nexport const IS_RESET = Symbol('reset');\n//# sourceMappingURL=constants.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { memo, useCallback, useMemo, useRef, useState } from 'react';\nimport { getByPath, hasByPath, setByPath, ADDITIONAL_PROPERTY_FLAG, ANY_OF_KEY, deepEquals, getTemplate, getPropertySchema, getUiOptions, isFormDataAvailable, orderProperties, shouldRenderOptionalField, toFieldPathId, useDeepCompareMemo, ONE_OF_KEY, REF_KEY, isObject, TranslatableString, } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\nimport { ADDITIONAL_PROPERTY_KEY_REMOVE } from \"../constants.js\";\n/** Returns a flag indicating whether the `name` field is required in the object schema\n *\n * @param schema - The schema to check\n * @param name - The name of the field to check for required-ness\n * @returns - True if the field `name` is required, false otherwise\n */\nfunction isRequired(schema, name) {\n return Array.isArray(schema.required) && schema.required.includes(name);\n}\n/** Returns a default value to be used for a new additional schema property of the given `type`\n *\n * @param translateString - The string translation function from the registry\n * @param type - The type of the new additional schema property\n */\nfunction getDefaultValue(translateString, type) {\n switch (type) {\n case 'array':\n return [];\n case 'boolean':\n return false;\n case 'null':\n return null;\n case 'number':\n return 0;\n case 'object':\n return {};\n case 'string':\n default:\n // We don't have a datatype for some reason (perhaps additionalProperties was true)\n return translateString(TranslatableString.NewStringDefault);\n }\n}\nfunction isAdditionalPropertySchema(schema) {\n return Boolean(schema?.[ADDITIONAL_PROPERTY_FLAG]);\n}\nfunction getAdditionalPropertyOrder(schemaProperties) {\n return Object.keys(schemaProperties).filter((property) => isAdditionalPropertySchema(schemaProperties[property]));\n}\n/** The `ObjectFieldProperty` component is used to render the `SchemaField` for a child property of an object\n */\nfunction ObjectFieldPropertyFn(props) {\n const { fieldPathId, schema, registry, uiSchema, errorSchema, formData, onChange, onBlur, onFocus, disabled, readonly, required, hideError, propertyName, handleKeyRename, handleRemoveProperty, addedByAdditionalProperties, } = props;\n const [wasPropertyKeyModified, setWasPropertyKeyModified] = useState(false);\n const { globalFormOptions, fields } = registry;\n const { SchemaField } = fields;\n const innerFieldIdPathId = useDeepCompareMemo(toFieldPathId(propertyName, globalFormOptions, fieldPathId.path));\n /** The `onChange` handler installed on this property's `SchemaField`. Handles the special case where the user\n * clears a value at this property's own path when it was added as an additional property, coercing `undefined`\n * to the empty string so the property's key input survives. Every other change, including any change to a\n * descendant of this property, is forwarded to `onChange()` untouched.\n */\n const onPropertyChange = useCallback((value, path, newErrorSchema, id) => {\n // An `additionalProperties` value lives at this property's own path, so clearing its widget to `undefined`\n // would drop the key from the formData and take the key input with it. Coerce that one case to the empty\n // string.\n // A descendant's path is this property's path plus at least one segment, so comparing to this\n // property's own path (rather than merely its length) tells apart \"this property changed\" from \"a\n // descendant changed\"; a cleared descendant must stay `undefined` so it is omitted from the formData\n // exactly like a cleared property declared in `properties` (#5222).\n let normalizedValue = value;\n if (value === undefined && addedByAdditionalProperties && deepEquals(path, innerFieldIdPathId.path)) {\n normalizedValue = '';\n }\n onChange(normalizedValue, path, newErrorSchema, id);\n }, [onChange, addedByAdditionalProperties, innerFieldIdPathId]);\n /** The key change event handler; Called when the key associated with a field is changed for an additionalProperty.\n * simply returns a function that call the `handleKeyChange()` event with the value\n */\n const onKeyRename = useCallback((value) => {\n if (propertyName !== value) {\n setWasPropertyKeyModified(true);\n }\n handleKeyRename(propertyName, value);\n }, [propertyName, handleKeyRename]);\n /** Returns a callback the handle the blur event, getting the value from the target and passing that along to the\n * `handleKeyChange` function\n */\n const onKeyRenameBlur = useCallback((event) => {\n const { target: { value }, } = event;\n onKeyRename(value);\n }, [onKeyRename]);\n /** The property drop/removal event handler; Called when a field is removed in an additionalProperty context\n */\n const onRemoveProperty = useCallback(() => {\n handleRemoveProperty(propertyName);\n }, [propertyName, handleRemoveProperty]);\n return (_jsx(SchemaField, { name: propertyName, required: required, schema: schema, uiSchema: uiSchema, errorSchema: errorSchema, fieldPathId: innerFieldIdPathId, formData: formData, wasPropertyKeyModified: wasPropertyKeyModified, onKeyRename: onKeyRename, onKeyRenameBlur: onKeyRenameBlur, onRemoveProperty: onRemoveProperty, onChange: onPropertyChange, onBlur: onBlur, onFocus: onFocus, registry: registry, disabled: disabled, readonly: readonly, hideError: hideError }));\n}\nconst ObjectFieldProperty = memo(ObjectFieldPropertyFn);\n/** The `ObjectField` component is used to render a field in the schema that is of type `object`. It tracks whether an\n * additional property key was modified and what it was modified to\n *\n * @param props - The `FieldProps` for this template\n */\nexport default function ObjectField(props) {\n const { schema: rawSchema, uiSchema = {}, formData, errorSchema, fieldPathId, name, required = false, disabled, readonly, hideError, onBlur, onFocus, onChange, registry, title, } = props;\n const { fields, schemaUtils, translateString, globalUiOptions } = registry;\n const { OptionalDataControlsField } = fields;\n const formDataRef = useRef(formData);\n formDataRef.current = formData;\n const schema = useMemo(() => schemaUtils.retrieveSchema(rawSchema, formData, true), [schemaUtils, rawSchema, formData]);\n const uiOptions = useMemo(() => getUiOptions(uiSchema, globalUiOptions), [uiSchema, globalUiOptions]);\n const schemaProperties = useMemo(() => schema.properties ?? {}, [schema.properties]);\n // All the children will use childFieldPathId if present in the props, falling back to the fieldPathId\n const childFieldPathId = props.childFieldPathId ?? fieldPathId;\n const lastRenamedProperty = useRef({ previousKey: '', currentKey: undefined });\n const [additionalPropertyOrder, setAdditionalPropertyOrder] = useState(() => getAdditionalPropertyOrder(schemaProperties));\n const definedPropertyOrder = useMemo(() => {\n const additionalPropertySet = new Set(getAdditionalPropertyOrder(schemaProperties));\n return Object.keys(schemaProperties).filter((property) => !additionalPropertySet.has(property));\n }, [schemaProperties]);\n const templateTitle = uiOptions.title ?? schema.title ?? title ?? name;\n const description = uiOptions.description ?? schema.description;\n const renderOptionalField = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formData);\n let orderedProperties = [];\n /** Computes the next available key name from the `preferredKey`, indexing through the already existing keys until one\n * that is already not assigned is found.\n *\n * @param preferredKey - The preferred name of a new key\n * @param [formData] - The form data in which to check if the desired key already exists\n * @returns - The name of the next available key from `preferredKey`\n */\n const getAvailableKey = useCallback((preferredKey, existingFormData) => {\n const { duplicateKeySuffixSeparator = '-' } = getUiOptions(uiSchema, globalUiOptions);\n let index = 0;\n let newKey = preferredKey;\n while (hasByPath(existingFormData, newKey)) {\n index += 1;\n newKey = `${preferredKey}${duplicateKeySuffixSeparator}${index}`;\n }\n return newKey;\n }, [uiSchema, globalUiOptions]);\n /** Handles the adding of a new additional property on the given `schema`. Calls the `onChange` callback once the new\n * default data for that field has been added to the formData.\n */\n const onAddProperty = useCallback(() => {\n if (!(schema.additionalProperties || schema.patternProperties)) {\n return;\n }\n const newFormData = { ...formData };\n const newKey = getAvailableKey('newKey', newFormData);\n if (schema.patternProperties) {\n setByPath(newFormData, newKey, null);\n }\n else {\n let type = undefined;\n let constValue = undefined;\n let defaultValue = undefined;\n if (isObject(schema.additionalProperties)) {\n type = schema.additionalProperties.type;\n constValue = schema.additionalProperties.const;\n defaultValue = schema.additionalProperties.default;\n let apSchema = schema.additionalProperties;\n if (REF_KEY in apSchema) {\n apSchema = schemaUtils.retrieveSchema({ [REF_KEY]: apSchema[REF_KEY] }, formData);\n type = apSchema.type;\n constValue = apSchema.const;\n defaultValue = schemaUtils.getDefaultFormState(apSchema, defaultValue);\n }\n if (!type && (ANY_OF_KEY in apSchema || ONE_OF_KEY in apSchema)) {\n type = 'object';\n }\n }\n const newValue = constValue ?? defaultValue ?? getDefaultValue(translateString, type);\n setByPath(newFormData, newKey, newValue);\n }\n if (lastRenamedProperty.current.previousKey === newKey) {\n lastRenamedProperty.current.currentKey = newKey;\n lastRenamedProperty.current.previousKey = getAvailableKey(newKey, newFormData);\n }\n setAdditionalPropertyOrder((order) => [...order, newKey]);\n onChange(newFormData, childFieldPathId.path);\n }, [formData, onChange, translateString, schemaUtils, childFieldPathId, getAvailableKey, schema]);\n /** Returns a callback function that deals with the rename of a key for an additional property for a schema. That\n * callback will attempt to rename the key and move the existing data to that key, calling `onChange` when it does.\n *\n * @param oldKey - The old key for the field\n * @param newKey - The new key for the field\n * @returns - The key change callback function\n */\n const handleKeyRename = useCallback((oldKey, newKey) => {\n if (oldKey !== newKey) {\n const currentFormData = formDataRef.current;\n const actualNewKey = getAvailableKey(newKey, currentFormData);\n const newFormData = {\n ...currentFormData,\n };\n const newKeys = { [oldKey]: actualNewKey };\n const keyValues = Object.keys(newFormData).map((key) => {\n // `Object.hasOwn` so a falsy rename target (e.g. `\"\"`) isn't dropped.\n const mappedKey = Object.hasOwn(newKeys, key) ? newKeys[key] : key;\n return { [mappedKey]: newFormData[key] };\n });\n const renamedObj = Object.assign({}, ...keyValues);\n formDataRef.current = renamedObj;\n if (oldKey !== lastRenamedProperty.current.currentKey) {\n lastRenamedProperty.current.previousKey = oldKey;\n }\n lastRenamedProperty.current.currentKey = actualNewKey;\n setAdditionalPropertyOrder((order) => order.map((property) => (property === oldKey ? actualNewKey : property)));\n onChange(renamedObj, childFieldPathId.path);\n }\n }, [onChange, childFieldPathId, getAvailableKey]);\n /** Handles the remove click which calls the `onChange` callback with the special ADDITIONAL_PROPERTY_FIELD_REMOVE\n * value for the path plus the key to be removed\n */\n const handleRemoveProperty = useCallback((key) => {\n setAdditionalPropertyOrder((order) => order.filter((property) => property !== key));\n onChange(ADDITIONAL_PROPERTY_KEY_REMOVE, [...childFieldPathId.path, key]);\n }, [onChange, childFieldPathId]);\n /** Returns the stable React key for a property. For the most recently renamed\n * additional property, returns the previous key so that React reuses the\n * existing component instance instead of unmounting/remounting it. This\n * preserves DOM focus naturally without manual focus management.\n */\n const getStableKey = useCallback((property) => {\n if (lastRenamedProperty.current.currentKey === property) {\n return lastRenamedProperty.current.previousKey;\n }\n return property;\n }, []);\n if (!renderOptionalField || hasFormData) {\n try {\n const definedPropertySet = new Set(definedPropertyOrder);\n const currentAdditionalProperties = additionalPropertyOrder.filter((property) => Object.hasOwn(schemaProperties, property) && !definedPropertySet.has(property));\n orderedProperties = orderProperties([...definedPropertyOrder, ...currentAdditionalProperties], uiOptions.order);\n }\n catch (err) {\n return (_jsxs(\"div\", { children: [_jsx(\"p\", { className: 'rjsf-config-error', style: { color: 'red' }, children: _jsx(Markdown, { options: { disableParsingRawHTML: true }, children: translateString(TranslatableString.InvalidObjectField, [name || 'root', err.message]) }) }), _jsx(\"pre\", { children: JSON.stringify(schema) })] }));\n }\n }\n const Template = getTemplate('ObjectFieldTemplate', registry, uiOptions);\n const optionalDataControl = renderOptionalField ? (_jsx(OptionalDataControlsField, { ...props, fieldPathId: childFieldPathId, schema: schema })) : undefined;\n const templateProps = {\n // getDisplayLabel() always returns false for object types, so just check the `uiOptions.label`\n title: uiOptions.label === false ? '' : templateTitle,\n description: uiOptions.label === false ? undefined : description,\n properties: orderedProperties.map((propertyName) => {\n const addedByAdditionalProperties = isAdditionalPropertySchema(schema.properties?.[propertyName]);\n const fieldUiSchema = addedByAdditionalProperties ? uiSchema.additionalProperties : uiSchema[propertyName];\n const hidden = getUiOptions(fieldUiSchema).widget === 'hidden';\n const content = (_jsx(ObjectFieldProperty, { propertyName: propertyName, required: isRequired(schema, propertyName), schema: getPropertySchema(schema, propertyName), uiSchema: fieldUiSchema, errorSchema: getByPath(errorSchema, propertyName), fieldPathId: childFieldPathId, formData: getByPath(formData, propertyName), handleKeyRename: handleKeyRename, handleRemoveProperty: handleRemoveProperty, addedByAdditionalProperties: addedByAdditionalProperties, onChange: onChange, onBlur: onBlur, onFocus: onFocus, registry: registry, disabled: disabled, readonly: readonly, hideError: hideError }, getStableKey(propertyName)));\n return {\n content,\n name: propertyName,\n readonly,\n disabled,\n required,\n hidden,\n };\n }),\n readonly,\n disabled,\n required,\n fieldPathId,\n uiSchema,\n errorSchema,\n schema,\n formData,\n registry,\n optionalDataControl,\n className: renderOptionalField ? 'rjsf-optional-object-field' : undefined,\n };\n return _jsx(Template, { ...templateProps, onAddProperty: onAddProperty });\n}\n//# sourceMappingURL=ObjectField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getSchemaType, getTemplate, getUiOptions, isFormDataAvailable, optionalControlsId, TranslatableString, } from '@rjsf/utils';\n/** The `OptionalDataControlsField` component is used to render the optional data controls for the field associated\n * with the given props.\n *\n * @param props - The `FieldProps` for this template\n */\nexport default function OptionalDataControlsField(props) {\n const { schema, uiSchema = {}, formData, disabled = false, readonly = false, onChange, errorSchema, fieldPathId, registry, } = props;\n const { globalUiOptions = {}, schemaUtils, translateString } = registry;\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n const OptionalDataControlsTemplate = getTemplate('OptionalDataControlsTemplate', registry, uiOptions);\n const hasFormData = isFormDataAvailable(formData);\n let id;\n let label;\n let onAddClick;\n let onRemoveClick;\n if (disabled || readonly) {\n id = optionalControlsId(fieldPathId, 'Msg');\n label = hasFormData ? undefined : translateString(TranslatableString.OptionalObjectEmptyMsg);\n }\n else {\n const labelEnum = hasFormData ? TranslatableString.OptionalObjectRemove : TranslatableString.OptionalObjectAdd;\n label = translateString(labelEnum);\n if (hasFormData) {\n id = optionalControlsId(fieldPathId, 'Remove');\n onRemoveClick = () => onChange(undefined, fieldPathId.path, errorSchema);\n }\n else {\n id = optionalControlsId(fieldPathId, 'Add');\n onAddClick = () => {\n // If it has form data, store an empty object, otherwise get the default form state and use it\n let newFormData = schemaUtils.getDefaultFormState(schema, formData, 'excludeObjectChildren');\n if (newFormData === undefined) {\n // If new form data ended up being undefined, and we have pushed the add button we need to actually add data\n newFormData = getSchemaType(schema) === 'array' ? [] : {};\n }\n onChange(newFormData, fieldPathId.path, errorSchema);\n };\n }\n }\n return (label && (_jsx(OptionalDataControlsTemplate, { id: id, registry: registry, schema: schema, uiSchema: uiSchema, label: label, onAddClick: onAddClick, onRemoveClick: onRemoveClick })));\n}\n//# sourceMappingURL=OptionalDataControlsField.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback, memo } from 'react';\nimport { ADDITIONAL_PROPERTY_FLAG, ANY_OF_KEY, deepEquals, descriptionId, getSchemaType, getTemplate, getUiOptions, ID_KEY, isFormDataAvailable, ONE_OF_KEY, resolveUiSchema, RJSF_REF_CYCLE_KEY, shallowEquals, shouldRenderOptionalField, toFieldPathId, isObject, TranslatableString, UI_OPTIONS_KEY, } from '@rjsf/utils';\n/** The map of component type to FieldName */\nconst COMPONENT_TYPES = {\n array: 'ArrayField',\n boolean: 'BooleanField',\n integer: 'NumberField',\n number: 'NumberField',\n object: 'ObjectField',\n string: 'StringField',\n null: 'NullField',\n};\n/** Computes and returns which `Field` implementation to return in order to render the field represented by the\n * `schema`. The `uiOptions` are used to alter what potential `Field` implementation is actually returned. If no\n * appropriate `Field` implementation can be found then a wrapper around `UnsupportedFieldTemplate` is used.\n *\n * @param schema - The schema from which to obtain the type\n * @param uiOptions - The UI Options that may affect the component decision\n * @param registry - The registry from which fields and templates are obtained\n * @returns - The `Field` component that is used to render the actual field data\n */\nfunction getFieldComponent(schema, uiOptions, registry) {\n const { field } = uiOptions;\n const { fields, schemaUtils } = registry;\n if (typeof field === 'function') {\n return field;\n }\n if (typeof field === 'string' && field in fields) {\n return fields[field];\n }\n const schemaType = getSchemaType(schema);\n const type = Array.isArray(schemaType) ? schemaType[0] : schemaType || '';\n const schemaId = schema.$id;\n let componentName = COMPONENT_TYPES[type];\n if (schemaId && schemaId in fields) {\n componentName = schemaId;\n }\n // If the schema uses 'anyOf' or 'oneOf' and is not a pure select (all-constant options),\n // let the MultiSchemaField component handle the form display entirely.\n // ObjectField is excluded: it renders shared properties (defined at the parent schema\n // level) alongside the XxxOfField option selector.\n // All other field types — including primitives and arrays — have no shared renderable\n // properties, so the outer FieldComponent would only produce a spurious duplicate input.\n if ((schema.anyOf || schema.oneOf) && !schemaUtils.isSelect(schema) && componentName !== 'ObjectField') {\n return () => null;\n }\n return componentName in fields ? fields[componentName] : fields.FallbackField;\n}\n/** The `SchemaFieldRender` component is the work-horse of react-jsonschema-form, determining what kind of real field to\n * render based on the `schema`, `uiSchema` and all the other props. It also deals with rendering the `anyOf` and\n * `oneOf` fields.\n *\n * @param props - The `FieldProps` for this component\n */\nfunction SchemaFieldRender(props) {\n const { schema: _schema, fieldPathId, uiSchema: _uiSchema, formData, errorSchema, name, onChange, onKeyRename, onKeyRenameBlur, onRemoveProperty, required = false, registry, wasPropertyKeyModified = false, } = props;\n const { schemaUtils, globalFormOptions, globalUiOptions, fields } = registry;\n const { AnyOfField: _AnyOfField, OneOfField: _OneOfField, CyclicSchemaField } = fields;\n const fieldId = fieldPathId[ID_KEY];\n /** Intermediary `onChange` handler for field components that will inject the `id` of the current field into the\n * `onChange` chain if it is not already being provided from a deeper level in the hierarchy\n */\n const handleFieldComponentChange = useCallback((newFormData, path, newErrorSchema, id) => {\n const theId = id || fieldId;\n return onChange(newFormData, path, newErrorSchema, theId);\n }, [fieldId, onChange]);\n // Stop $ref cycles: when resolveAllReferences detects a repeated property $ref it tags the schema with this flag.\n // The check must come after all hook calls to satisfy React's rules of hooks.\n if (_schema[RJSF_REF_CYCLE_KEY]) {\n return _jsx(CyclicSchemaField, { ...props });\n }\n const uiSchema = resolveUiSchema(_schema, _uiSchema, registry);\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n const FieldTemplate = getTemplate('FieldTemplate', registry, uiOptions);\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, uiOptions);\n const FieldHelpTemplate = getTemplate('FieldHelpTemplate', registry, uiOptions);\n const FieldErrorTemplate = getTemplate('FieldErrorTemplate', registry, uiOptions);\n const schema = schemaUtils.retrieveSchema(_schema, formData);\n const FieldComponent = getFieldComponent(schema, uiOptions, registry);\n const isDeprecated = Boolean(schema.deprecated);\n const deprecatedHandling = isDeprecated ? (uiOptions.deprecatedHandling ?? 'label') : undefined;\n const disabled = Boolean(uiOptions.disabled ?? props.disabled) || deprecatedHandling === 'disable';\n const readonly = Boolean(uiOptions.readonly ?? (props.readonly || props.schema.readOnly || schema.readOnly));\n const uiSchemaHideError = uiOptions.hideError;\n // Set hideError to the value provided in the uiSchema, otherwise stick with the prop to propagate to children\n const hideError = uiSchemaHideError === undefined ? props.hideError : Boolean(uiSchemaHideError);\n const autofocus = Boolean(uiOptions.autofocus ?? props.autofocus);\n if (Object.keys(schema).length === 0) {\n return null;\n }\n let displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n /** If the schema `anyOf` or 'oneOf' can be rendered as a select control, don't render the selection and let\n * `StringField` component handle rendering unless there is a field override and that field replaces the any or one of\n */\n const isReplacingAnyOrOneOf = uiOptions.field && uiOptions.fieldReplacesAnyOrOneOf === true;\n let XxxOfField;\n let XxxOfOptions;\n // When rendering the `XxxOfField` we'll need to change the fieldPathId of the main component, remembering the\n // fieldPathId of the children for the ObjectField and ArrayField\n let fieldPathIdProps = { fieldPathId };\n if ((ANY_OF_KEY in schema || ONE_OF_KEY in schema) && !isReplacingAnyOrOneOf && !schemaUtils.isSelect(schema)) {\n if (schema[ANY_OF_KEY]) {\n XxxOfField = _AnyOfField;\n XxxOfOptions = schema[ANY_OF_KEY].map((xxxOfSchema) => schemaUtils.retrieveSchema(isObject(xxxOfSchema) ? xxxOfSchema : {}, formData));\n }\n else if (schema[ONE_OF_KEY]) {\n XxxOfField = _OneOfField;\n XxxOfOptions = schema[ONE_OF_KEY].map((xxxOfSchema) => schemaUtils.retrieveSchema(isObject(xxxOfSchema) ? xxxOfSchema : {}, formData));\n }\n // When the anyOf/oneOf is an optional data control render AND it does not have form data, hide the label\n const isOptionalRender = shouldRenderOptionalField(registry, schema, required, uiSchema);\n const hasFormData = isFormDataAvailable(formData);\n displayLabel = displayLabel && (!isOptionalRender || hasFormData);\n fieldPathIdProps = {\n childFieldPathId: fieldPathId,\n // The main FieldComponent will add `XxxOf` onto the fieldPathId to avoid duplication with the rendering of the\n // same FieldComponent by the `XxxOfField`\n fieldPathId: toFieldPathId('XxxOf', globalFormOptions, fieldPathId),\n };\n }\n const { __errors, ...fieldErrorSchema } = errorSchema || {};\n // See #439: uiSchema: Don't pass consumed class names or style to child components\n const { 'ui:classNames': consumedUiClassNames, classNames: consumedClassNames, 'ui:style': consumedUiStyle, ...fieldUiSchema } = uiSchema;\n if (UI_OPTIONS_KEY in fieldUiSchema) {\n const { classNames: consumedOptionClassNames, style: consumedOptionStyle, ...fieldUiOptions } = fieldUiSchema[UI_OPTIONS_KEY];\n fieldUiSchema[UI_OPTIONS_KEY] = fieldUiOptions;\n }\n const field = (_jsx(FieldComponent, { ...props, onChange: handleFieldComponentChange, ...fieldPathIdProps, schema: schema, uiSchema: fieldUiSchema, disabled: disabled, readonly: readonly, hideError: hideError, autofocus: autofocus, errorSchema: fieldErrorSchema, rawErrors: __errors }));\n const id = fieldPathId[ID_KEY];\n // If this schema has a title defined, but the user has set a new key/label, retain their input.\n let label;\n if (wasPropertyKeyModified) {\n label = name;\n }\n else {\n label =\n ADDITIONAL_PROPERTY_FLAG in schema\n ? name\n : uiOptions.title || props.schema.title || schema.title || props.title || name;\n }\n if (deprecatedHandling === 'label') {\n label = registry.translateString(TranslatableString.DeprecatedLabel, [label]);\n }\n const description = uiOptions.description || props.schema.description || schema.description || '';\n const { help } = uiOptions;\n const hidden = uiOptions.widget === 'hidden' || deprecatedHandling === 'hide';\n const classNames = ['rjsf-field', `rjsf-field-${getSchemaType(schema)}`];\n if (!hideError && __errors && __errors.length > 0) {\n classNames.push('rjsf-field-error');\n }\n if (uiOptions.classNames) {\n classNames.push(uiOptions.classNames);\n }\n const helpComponent = (_jsx(FieldHelpTemplate, { help: help, fieldPathId: fieldPathId, schema: schema, uiSchema: uiSchema, hasErrors: !hideError && __errors && __errors.length > 0, registry: registry }));\n /*\n * AnyOf/OneOf errors handled by child schema\n * unless it can be rendered as select control\n */\n const errorsComponent = hideError || (XxxOfField && !schemaUtils.isSelect(schema)) ? undefined : (_jsx(FieldErrorTemplate, { errors: __errors, errorSchema: errorSchema, fieldPathId: fieldPathId, schema: schema, uiSchema: uiSchema, registry: registry }));\n const fieldProps = {\n description: (_jsx(DescriptionFieldTemplate, { id: descriptionId(id), description: description, schema: schema, uiSchema: uiSchema, registry: registry })),\n rawDescription: description,\n help: helpComponent,\n rawHelp: typeof help === 'string' ? help : undefined,\n errors: errorsComponent,\n rawErrors: hideError ? undefined : __errors,\n fieldPathId,\n id,\n label,\n hidden,\n onChange,\n onKeyRename,\n onKeyRenameBlur,\n onRemoveProperty,\n required,\n disabled,\n readonly,\n hideError,\n displayLabel,\n classNames: classNames.join(' ').trim(),\n style: uiOptions.style,\n formData,\n schema,\n uiSchema,\n registry,\n };\n return (_jsx(FieldTemplate, { ...fieldProps, children: _jsxs(_Fragment, { children: [field, XxxOfField && (_jsx(XxxOfField, { name: name, disabled: disabled, readonly: readonly, hideError: hideError, errorSchema: errorSchema, formData: formData, fieldPathId: fieldPathId, onBlur: props.onBlur, onChange: props.onChange, onFocus: props.onFocus, options: XxxOfOptions, registry: registry, required: required, schema: schema, uiSchema: uiSchema }))] }) }));\n}\n/** The `SchemaField` component wraps `SchemaFieldRender` with a custom memoization comparator that determines whether it is necessary to rerender the component based on any props changes\n * using `experimental_componentUpdateStrategy`.\n *\n * The cast to `typeof SchemaFieldRender` preserves the generic type signature () for consumers,\n * since React.memo's return type erases generic parameters.\n */\nconst SchemaField = memo(SchemaFieldRender, (prevProps, nextProps) => {\n const { experimental_componentUpdateStrategy = 'customDeep' } = nextProps.registry.globalFormOptions;\n if (experimental_componentUpdateStrategy === 'always') {\n return false; // always re-render — never consider props equal\n }\n if (experimental_componentUpdateStrategy === 'shallow') {\n return shallowEquals(prevProps, nextProps);\n }\n // default: 'customDeep'\n return deepEquals(prevProps, nextProps);\n});\nexport default SchemaField;\n//# sourceMappingURL=SchemaField.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { getWidget, getUiOptions, resolveDefaultWidget } from '@rjsf/utils';\n/** The `StringField` component is used to render a schema field that represents a string type\n *\n * @param props - The `FieldProps` for this template\n */\nfunction StringField(props) {\n const { schema, name, uiSchema, fieldPathId, formData, required, disabled = false, readonly = false, autofocus = false, onChange, onBlur, onFocus, registry, rawErrors, hideError, title, } = props;\n const { title: schemaTitle } = schema;\n const { widgets, schemaUtils, globalUiOptions } = registry;\n const { defaultWidget, enumOptions } = resolveDefaultWidget(schema, uiSchema, schemaUtils, widgets);\n const { widget = defaultWidget, placeholder = '', title: uiTitle, ...options } = getUiOptions(uiSchema);\n const displayLabel = schemaUtils.getDisplayLabel(schema, uiSchema, globalUiOptions);\n const label = uiTitle ?? title ?? schemaTitle ?? name;\n const Widget = getWidget(schema, widget, widgets);\n const onWidgetChange = useCallback((value, errorSchema, id) => onChange(value, fieldPathId.path, errorSchema, id), [onChange, fieldPathId]);\n return (_jsx(Widget, { options: { ...options, enumOptions }, schema: schema, uiSchema: uiSchema, id: fieldPathId.$id, name: name, label: label, hideLabel: !displayLabel, hideError: hideError, value: formData, onChange: onWidgetChange, onBlur: onBlur, onFocus: onFocus, required: required, disabled: disabled, readonly: readonly, autofocus: autofocus, registry: registry, placeholder: placeholder, rawErrors: rawErrors, htmlName: fieldPathId.name }));\n}\nexport default StringField;\n//# sourceMappingURL=StringField.js.map","import ArrayField from \"./ArrayField.js\";\nimport BooleanField from \"./BooleanField.js\";\nimport CyclicSchemaField from \"./CyclicSchemaField.js\";\nimport FallbackField from \"./FallbackField.js\";\nimport LayoutGridField from \"./LayoutGridField.js\";\nimport LayoutHeaderField from \"./LayoutHeaderField.js\";\nimport LayoutMultiSchemaField from \"./LayoutMultiSchemaField.js\";\nimport MultiSchemaField from \"./MultiSchemaField.js\";\nimport NullField from \"./NullField.js\";\nimport NumberField from \"./NumberField.js\";\nimport ObjectField from \"./ObjectField.js\";\nimport OptionalDataControlsField from \"./OptionalDataControlsField.js\";\nimport SchemaField from \"./SchemaField.js\";\nimport StringField from \"./StringField.js\";\nfunction fields() {\n return {\n AnyOfField: MultiSchemaField,\n ArrayField: ArrayField,\n // ArrayField falls back to SchemaField if ArraySchemaField is not defined, which it isn't by default\n BooleanField,\n CyclicSchemaField,\n FallbackField,\n LayoutGridField,\n LayoutHeaderField,\n LayoutMultiSchemaField,\n NumberField,\n ObjectField,\n OneOfField: MultiSchemaField,\n OptionalDataControlsField,\n SchemaField,\n StringField,\n NullField,\n };\n}\nexport default fields;\n//# sourceMappingURL=index.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { descriptionId, getTemplate, getUiOptions } from '@rjsf/utils';\n/** The `ArrayFieldDescriptionTemplate` component renders a `DescriptionFieldTemplate` with an `id` derived from\n * the `fieldPathId`.\n *\n * @param props - The `ArrayFieldDescriptionProps` for the component\n */\nexport default function ArrayFieldDescriptionTemplate(props) {\n const { fieldPathId, description, registry, schema, uiSchema } = props;\n const options = getUiOptions(uiSchema, registry.globalUiOptions);\n const { label: displayLabel = true } = options;\n if (!description || !displayLabel) {\n return null;\n }\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, options);\n return (_jsx(DescriptionFieldTemplate, { id: descriptionId(fieldPathId), description: description, schema: schema, uiSchema: uiSchema, registry: registry }));\n}\n//# sourceMappingURL=ArrayFieldDescriptionTemplate.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { buttonId } from '@rjsf/utils';\n/** The `ArrayFieldTemplateItemButtons` component is the template used to render the buttons associate3d with items of\n * an array.\n *\n * @param props - The `ArrayFieldItemButtonsTemplateProps` props for the component\n */\nexport default function ArrayFieldItemButtonsTemplate(props) {\n const { disabled, hasCopy, hasMoveDown, hasMoveUp, hasRemove, fieldPathId, onCopyItem, onRemoveItem, onMoveDownItem, onMoveUpItem, readonly, registry, uiSchema, } = props;\n const { CopyButton, MoveDownButton, MoveUpButton, RemoveButton } = registry.templates.ButtonTemplates;\n return (_jsxs(_Fragment, { children: [(hasMoveUp || hasMoveDown) && (_jsx(MoveUpButton, { id: buttonId(fieldPathId, 'moveUp'), className: 'rjsf-array-item-move-up', disabled: disabled || readonly || !hasMoveUp, onClick: onMoveUpItem, uiSchema: uiSchema, registry: registry })), (hasMoveUp || hasMoveDown) && (_jsx(MoveDownButton, { id: buttonId(fieldPathId, 'moveDown'), className: 'rjsf-array-item-move-down', disabled: disabled || readonly || !hasMoveDown, onClick: onMoveDownItem, uiSchema: uiSchema, registry: registry })), hasCopy && (_jsx(CopyButton, { id: buttonId(fieldPathId, 'copy'), className: 'rjsf-array-item-copy', disabled: disabled || readonly, onClick: onCopyItem, uiSchema: uiSchema, registry: registry })), hasRemove && (_jsx(RemoveButton, { id: buttonId(fieldPathId, 'remove'), className: 'rjsf-array-item-remove', disabled: disabled || readonly, onClick: onRemoveItem, uiSchema: uiSchema, registry: registry }))] }));\n}\n//# sourceMappingURL=ArrayFieldItemButtonsTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTemplate, getUiOptions } from '@rjsf/utils';\n/** The `ArrayFieldItemTemplate` component is the template used to render an items of an array.\n *\n * @param props - The `ArrayFieldItemTemplateProps` props for the component\n */\nexport default function ArrayFieldItemTemplate(props) {\n const { children, className, buttonsProps, displayLabel, hasDescription, hasToolbar, registry, uiSchema } = props;\n const uiOptions = getUiOptions(uiSchema);\n const ArrayFieldItemButtonsTemplate = getTemplate('ArrayFieldItemButtonsTemplate', registry, uiOptions);\n const btnStyle = {\n flex: 1,\n paddingLeft: 6,\n paddingRight: 6,\n fontWeight: 'bold',\n };\n const margin = hasDescription ? 31 : 9;\n const containerStyle = { display: 'flex', alignItems: displayLabel ? 'center' : 'baseline' };\n const toolbarStyle = { display: 'flex', justifyContent: 'flex-end', marginTop: displayLabel ? `${margin}px` : 0 };\n return (_jsxs(\"div\", { className: className, style: containerStyle, children: [_jsx(\"div\", { className: hasToolbar ? 'col-xs-9 col-md-10 col-xl-11' : 'col-xs-12', children: children }), hasToolbar && (_jsx(\"div\", { className: 'col-xs-3 col-md-2 col-xl-1 array-item-toolbox', children: _jsx(\"div\", { className: 'btn-group', style: toolbarStyle, children: _jsx(ArrayFieldItemButtonsTemplate, { ...buttonsProps, style: btnStyle }) }) }))] }));\n}\n//# sourceMappingURL=ArrayFieldItemTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTemplate, getUiOptions, buttonId } from '@rjsf/utils';\n/** The `ArrayFieldTemplate` component is the template used to render all items in an array.\n *\n * @param props - The `ArrayFieldTemplateProps` props for the component\n */\nexport default function ArrayFieldTemplate(props) {\n const { canAdd, className, disabled, fieldPathId, uiSchema, items, optionalDataControl, onAddClick, readonly, registry, required, schema, title, } = props;\n const uiOptions = getUiOptions(uiSchema);\n const ArrayFieldDescriptionTemplate = getTemplate('ArrayFieldDescriptionTemplate', registry, uiOptions);\n const ArrayFieldTitleTemplate = getTemplate('ArrayFieldTitleTemplate', registry, uiOptions);\n // Button templates are not overridden in the uiSchema\n const showOptionalDataControlInTitle = !readonly && !disabled;\n const { ButtonTemplates: { AddButton }, } = registry.templates;\n return (_jsxs(\"fieldset\", { className: className, id: fieldPathId.$id, children: [_jsx(ArrayFieldTitleTemplate, { fieldPathId: fieldPathId, title: uiOptions.title || title, required: required, schema: schema, uiSchema: uiSchema, registry: registry, optionalDataControl: showOptionalDataControlInTitle ? optionalDataControl : undefined }), _jsx(ArrayFieldDescriptionTemplate, { fieldPathId: fieldPathId, description: uiOptions.description || schema.description, schema: schema, uiSchema: uiSchema, registry: registry }), !showOptionalDataControlInTitle ? optionalDataControl : undefined, _jsx(\"div\", { className: 'row array-item-list', children: items }), canAdd && (_jsx(AddButton, { id: buttonId(fieldPathId, 'add'), className: 'rjsf-array-item-add', onClick: onAddClick, disabled: disabled || readonly, uiSchema: uiSchema, registry: registry }))] }));\n}\n//# sourceMappingURL=ArrayFieldTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate, getUiOptions, titleId } from '@rjsf/utils';\n/** The `ArrayFieldTitleTemplate` component renders a `TitleFieldTemplate` with an `id` derived from\n * the `fieldPathId`.\n *\n * @param props - The `ArrayFieldTitleProps` for the component\n */\nexport default function ArrayFieldTitleTemplate(props) {\n const { fieldPathId, title, schema, uiSchema, required, registry, optionalDataControl } = props;\n const options = getUiOptions(uiSchema, registry.globalUiOptions);\n const { label: displayLabel = true } = options;\n if (!title || !displayLabel) {\n return null;\n }\n const TitleFieldTemplate = getTemplate('TitleFieldTemplate', registry, options);\n return (_jsx(TitleFieldTemplate, { id: titleId(fieldPathId), title: title, required: required, schema: schema, uiSchema: uiSchema, registry: registry, optionalDataControl: optionalDataControl }));\n}\n//# sourceMappingURL=ArrayFieldTitleTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { examplesId } from '@rjsf/utils';\n/** Renders a `` element containing options from schema examples and default value.\n * Normalizes types to prevent duplicate keys when examples and default have different types.\n * For example, if examples are strings [\"5432\"] and default is number 5432, the default\n * will not be added as a duplicate option.\n *\n * @param props - The `SchemaExamplesProps` for this component\n */\nexport default function SchemaExamples(props) {\n const { id, schema } = props;\n const { examples, default: schemaDefault } = schema;\n if (!Array.isArray(examples)) {\n return null;\n }\n return (_jsx(\"datalist\", { id: examplesId(id), children: examples\n .concat(schemaDefault !== undefined && !examples.map(String).includes(String(schemaDefault))\n ? [schemaDefault]\n : [])\n .map((example) => (_jsx(\"option\", { value: example }, String(example)))) }, `datalist_${id}`));\n}\n//# sourceMappingURL=SchemaExamples.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, examplesId, getInputProps } from '@rjsf/utils';\nimport SchemaExamples from \"../SchemaExamples.js\";\n/** The `BaseInputTemplate` is the template to use to render the basic `` component for the `core` theme.\n * It is used as the template for rendering many of the based widgets that differ by `type` and callbacks only.\n * It can be customized/overridden for other themes or individual implementations as needed.\n *\n * @param props - The `WidgetProps` for this template\n */\nexport default function BaseInputTemplate(props) {\n const { id, name, // remove this from ...rest\n htmlName, value, readonly, disabled, autofocus, onBlur, onFocus, onChange, onChangeOverride, options, schema, uiSchema, registry, rawErrors, type, hideLabel, // remove this from ...rest\n hideError, // remove this from ...rest\n ...rest } = props;\n const { ClearButton } = registry.templates.ButtonTemplates;\n // Note: since React 15.2.0 we can't forward unknown element attributes, so we\n // exclude the \"options\" and \"schema\" ones here.\n if (!id) {\n // oxlint-disable-next-line no-console\n console.log('No id for', props);\n throw new Error(`no id for props ${JSON.stringify(props)}`);\n }\n const inputProps = {\n ...rest,\n ...getInputProps(schema, type, options),\n };\n let inputValue;\n if (inputProps.type === 'number' || inputProps.type === 'integer') {\n inputValue = value || value === 0 ? value : '';\n }\n else {\n inputValue = value == null ? '' : value;\n }\n const handleChange = useCallback(({ target: { value: newValue } }) => onChange(newValue === '' ? options.emptyValue : newValue), [onChange, options]);\n const handleBlur = useCallback(({ target }) => onBlur(id, target?.value), [onBlur, id]);\n const handleFocus = useCallback(({ target }) => onFocus(id, target?.value), [onFocus, id]);\n const handleClear = useCallback((e) => {\n e.preventDefault();\n e.stopPropagation();\n onChange(options.emptyValue);\n }, [onChange, options.emptyValue]);\n return (_jsxs(_Fragment, { children: [_jsx(\"input\", { id: id, name: htmlName || id, className: 'form-control', readOnly: readonly, disabled: disabled, autoFocus: autofocus, value: inputValue, ...inputProps, list: schema.examples ? examplesId(id) : undefined, onChange: onChangeOverride || handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id, !!schema.examples) }), options.allowClearTextInputs && !readonly && !disabled && inputValue && (_jsx(ClearButton, { registry: registry, onClick: handleClear })), _jsx(SchemaExamples, { id: id, schema: schema })] }));\n}\n//# sourceMappingURL=BaseInputTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { memo } from 'react';\nimport { TranslatableString } from '@rjsf/utils';\nfunction IconButtonFn(props) {\n const { iconType = 'default', icon, className, uiSchema, registry, ...otherProps } = props;\n return (_jsx(\"button\", { type: 'button', className: `btn btn-${iconType} ${className}`, ...otherProps, children: _jsx(\"i\", { className: `glyphicon glyphicon-${icon}` }) }));\n}\nconst IconButton = memo(IconButtonFn);\nexport default IconButton;\nfunction CopyButtonFn(props) {\n const { registry: { translateString }, } = props;\n return _jsx(IconButton, { title: translateString(TranslatableString.CopyButton), ...props, icon: 'copy' });\n}\nexport const CopyButton = memo(CopyButtonFn);\nfunction MoveDownButtonFn(props) {\n const { registry: { translateString }, } = props;\n return _jsx(IconButton, { title: translateString(TranslatableString.MoveDownButton), ...props, icon: 'arrow-down' });\n}\nexport const MoveDownButton = memo(MoveDownButtonFn);\nfunction MoveUpButtonFn(props) {\n const { registry: { translateString }, } = props;\n return _jsx(IconButton, { title: translateString(TranslatableString.MoveUpButton), ...props, icon: 'arrow-up' });\n}\nexport const MoveUpButton = memo(MoveUpButtonFn);\nfunction RemoveButtonFn(props) {\n const { registry: { translateString }, } = props;\n return (_jsx(IconButton, { title: translateString(TranslatableString.RemoveButton), ...props, iconType: 'danger', icon: 'remove' }));\n}\nexport const RemoveButton = memo(RemoveButtonFn);\nfunction ClearButtonFn({ id, className, onClick, disabled, registry, ...props }) {\n const { translateString } = registry;\n return (_jsx(IconButton, { id: id, iconType: 'default', icon: 'remove', className: 'btn-clear col-xs-12', title: translateString(TranslatableString.ClearButton), onClick: onClick, disabled: disabled, registry: registry, ...props }));\n}\nexport const ClearButton = memo(ClearButtonFn);\n//# sourceMappingURL=IconButton.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { TranslatableString } from '@rjsf/utils';\nimport IconButton from \"./IconButton.js\";\n/** The `AddButton` renders a button that represent the `Add` action on a form\n */\nexport default function AddButton({ id, className, onClick, disabled, registry, }) {\n const { translateString } = registry;\n return (_jsx(\"div\", { className: 'row', children: _jsx(\"p\", { className: `col-xs-4 col-sm-2 col-lg-1 col-xs-offset-8 col-sm-offset-10 col-lg-offset-11 text-right ${className}`, children: _jsx(IconButton, { id: id, iconType: 'info', icon: 'plus', className: 'btn-add col-xs-12', title: translateString(TranslatableString.AddButton), onClick: onClick, disabled: disabled, registry: registry }) }) }));\n}\n//# sourceMappingURL=AddButton.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getSubmitButtonOptions } from '@rjsf/utils';\n/** The `SubmitButton` renders a button that represent the `Submit` action on a form\n */\nexport default function SubmitButton({ uiSchema }) {\n const { submitText, norender, props: submitButtonProps = {} } = getSubmitButtonOptions(uiSchema);\n if (norender) {\n return null;\n }\n return (_jsx(\"div\", { children: _jsx(\"button\", { type: 'submit', ...submitButtonProps, className: `btn btn-info ${submitButtonProps.className || ''}`, children: submitText }) }));\n}\n//# sourceMappingURL=SubmitButton.js.map","import AddButton from \"./AddButton.js\";\nimport { CopyButton, MoveDownButton, MoveUpButton, RemoveButton, ClearButton } from \"./IconButton.js\";\nimport SubmitButton from \"./SubmitButton.js\";\nfunction buttonTemplates() {\n return {\n SubmitButton,\n AddButton,\n CopyButton,\n MoveDownButton,\n MoveUpButton,\n RemoveButton,\n ClearButton,\n };\n}\nexport default buttonTemplates;\n//# sourceMappingURL=index.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ID_KEY, TranslatableString } from '@rjsf/utils';\n/** The `CyclicSchemaExpandTemplate` is the template to use to render the cyclic schema expand message and controls\n *\n * @param props - The `DescriptionFieldProps` for this component\n */\nexport default function CyclicSchemaExpandTemplate(props) {\n const { name, fieldPathId, registry, onExpand } = props;\n const { translateString } = registry;\n const buttonId = `${fieldPathId[ID_KEY]}-button`;\n return (_jsxs(\"div\", { style: { marginTop: '1rem' }, children: [_jsx(\"div\", { className: 'text-danger', children: translateString(TranslatableString.CycleDetected, [name]) }), _jsxs(\"div\", { children: [_jsx(\"button\", { id: buttonId, type: 'button', className: 'btn btn-sm btn-warning', onClick: () => onExpand(fieldPathId[ID_KEY]), children: translateString(TranslatableString.ExpandButton) }), ' '] })] }));\n}\n//# sourceMappingURL=CyclicSchemaExpandTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTestIds, getUiOptions } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\nconst TEST_IDS = getTestIds();\n/** Renders the given `description` in the props as\n *\n * @param props - The `RichDescriptionProps` for this component\n */\nexport default function RichDescription({ description, registry, uiSchema = {} }) {\n const { globalUiOptions } = registry;\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n if (uiOptions.enableMarkdownInDescription && typeof description === 'string') {\n return (_jsx(Markdown, { options: { disableParsingRawHTML: true }, \"data-testid\": TEST_IDS.markdown, children: description }));\n }\n return description;\n}\nRichDescription.TEST_IDS = TEST_IDS;\n//# sourceMappingURL=RichDescription.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport RichDescription from \"../RichDescription.js\";\n/** The `DescriptionField` is the template to use to render the description of a field\n *\n * @param props - The `DescriptionFieldProps` for this component\n */\nexport default function DescriptionField(props) {\n const { id, description, registry, uiSchema } = props;\n if (!description) {\n return null;\n }\n return (_jsx(\"div\", { id: id, className: 'field-description', children: _jsx(RichDescription, { description: description, registry: registry, uiSchema: uiSchema }) }));\n}\n//# sourceMappingURL=DescriptionField.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { TranslatableString } from '@rjsf/utils';\n/** The `ErrorList` component is the template that renders the all the errors associated with the fields in the `Form`\n *\n * @param props - The `ErrorListProps` for this component\n */\nexport default function ErrorList({ errors, registry, }) {\n const { translateString } = registry;\n return (_jsxs(\"div\", { className: 'panel panel-danger errors', children: [_jsx(\"div\", { className: 'panel-heading', children: _jsx(\"h3\", { className: 'panel-title', children: translateString(TranslatableString.ErrorsLabel) }) }), _jsx(\"ul\", { className: 'list-group', children: errors.map((error, i) => (_jsx(\"li\", { className: 'list-group-item text-danger', children: error.stack }, i))) })] }));\n}\n//# sourceMappingURL=ErrorList.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/**\n * The `FallbackFieldTemplate` is used to render a field when no field matches. The field renders a type selector and\n * the schema field for the form data.\n */\nexport default function FallbackFieldTemplate(props) {\n const { schema, registry, typeSelector, schemaField } = props;\n // By default, use the MultiSchemaFieldTemplate, which handles the same basic requirements.\n const MultiSchemaFieldTemplate = getTemplate('MultiSchemaFieldTemplate', registry);\n return (_jsx(MultiSchemaFieldTemplate, { selector: typeSelector, optionSchemaField: schemaField, schema: schema, registry: registry }));\n}\n//# sourceMappingURL=FallbackFieldTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { errorId } from '@rjsf/utils';\n/** The `FieldErrorTemplate` component renders the errors local to the particular field\n *\n * @param props - The `FieldErrorProps` for the errors being rendered\n */\nexport default function FieldErrorTemplate(props) {\n const { errors = [], fieldPathId } = props;\n if (errors.length === 0) {\n return null;\n }\n const id = errorId(fieldPathId);\n return (_jsx(\"div\", { children: _jsx(\"ul\", { id: id, className: 'error-detail bs-callout bs-callout-info', children: errors\n .filter((elem) => !!elem)\n .map((error, index) => (_jsx(\"li\", { className: 'text-danger', children: error }, index))) }) }));\n}\n//# sourceMappingURL=FieldErrorTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTestIds, getUiOptions } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\nconst TEST_IDS = getTestIds();\n/** Renders the given `description` in the props as\n *\n * @param props - The `RichHelpProps` for this component\n */\nexport default function RichHelp({ help, registry, uiSchema = {}, }) {\n const { globalUiOptions } = registry;\n const uiOptions = getUiOptions(uiSchema, globalUiOptions);\n if (uiOptions.enableMarkdownInHelp && typeof help === 'string') {\n return (_jsx(Markdown, { options: { disableParsingRawHTML: true }, \"data-testid\": TEST_IDS.markdown, children: help }));\n }\n return help;\n}\nRichHelp.TEST_IDS = TEST_IDS;\n//# sourceMappingURL=RichHelp.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { helpId } from '@rjsf/utils';\nimport RichHelp from \"../RichHelp.js\";\n/** The `FieldHelpTemplate` component renders any help desired for a field\n *\n * @param props - The `FieldHelpProps` to be rendered\n */\nexport default function FieldHelpTemplate(props) {\n const { fieldPathId, help, uiSchema, registry } = props;\n if (!help) {\n return null;\n }\n return (_jsx(\"div\", { id: helpId(fieldPathId), className: 'help-block', children: _jsx(RichHelp, { help: help, registry: registry, uiSchema: uiSchema }) }));\n}\n//# sourceMappingURL=FieldHelpTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst REQUIRED_FIELD_SYMBOL = '*';\n/** Renders a label for a field\n *\n * @param props - The `LabelProps` for this component\n */\nexport default function Label(props) {\n const { label, required, id } = props;\n if (!label) {\n return null;\n }\n return (_jsxs(\"label\", { className: 'control-label', htmlFor: id, children: [label, required && _jsx(\"span\", { className: 'required', children: REQUIRED_FIELD_SYMBOL })] }));\n}\n//# sourceMappingURL=Label.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTemplate, getUiOptions } from '@rjsf/utils';\nimport Label from \"./Label.js\";\n/** The `FieldTemplate` component is the template used by `SchemaField` to render any field. It renders the field\n * content, (label, description, children, errors and help) inside of a `WrapIfAdditional` component.\n *\n * @param props - The `FieldTemplateProps` for this component\n */\nexport default function FieldTemplate(props) {\n const { id, label, children, errors, help, description, hidden, required, displayLabel, registry, uiSchema } = props;\n const uiOptions = getUiOptions(uiSchema);\n const WrapIfAdditionalTemplate = getTemplate('WrapIfAdditionalTemplate', registry, uiOptions);\n if (hidden) {\n return _jsx(\"div\", { className: 'hidden', children: children });\n }\n const isCheckbox = uiOptions.widget === 'checkbox';\n return (_jsxs(WrapIfAdditionalTemplate, { ...props, children: [displayLabel && !isCheckbox && _jsx(Label, { label: label, required: required, id: id }), displayLabel && description ? description : null, children, errors, help] }));\n}\n//# sourceMappingURL=FieldTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/** Renders a `GridTemplate` for bootstrap 3, which is expecting the column information coming in via the `className`\n * prop. Also spreads all the other props provided by the user directly on the div.\n *\n * @param props - The GridTemplateProps, including the expected className for the bootstrap 3 grid behavior\n */\nexport default function GridTemplate(props) {\n const { children, column, className, ...rest } = props;\n return (_jsx(\"div\", { className: className, ...rest, children: children }));\n}\n//# sourceMappingURL=GridTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** The `MultiSchemaFieldTemplate` component renders the layout for the MultiSchemaField, which supports choosing\n * a schema from a list of schemas defined using `anyOf` or `oneOf`.\n *\n * @param props - The `MultiSchemaFieldTemplate` to be rendered\n */\nexport default function MultiSchemaFieldTemplate(props) {\n const { selector, optionSchemaField } = props;\n return (_jsxs(\"div\", { className: 'panel panel-default panel-body', children: [_jsx(\"div\", { className: 'form-group', children: selector }), optionSchemaField] }));\n}\n//# sourceMappingURL=MultiSchemaFieldTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { canExpand, descriptionId, getTemplate, getUiOptions, titleId, buttonId } from '@rjsf/utils';\n/** The `ObjectFieldTemplate` is the template to use to render all the inner properties of an object along with the\n * title and description if available. If the object is expandable, then an `AddButton` is also rendered after all\n * the properties.\n *\n * @param props - The `ObjectFieldTemplateProps` for this component\n */\nexport default function ObjectFieldTemplate(props) {\n const { className, description, disabled, formData, fieldPathId, onAddProperty, optionalDataControl, properties, readonly, registry, required, schema, title, uiSchema, } = props;\n const options = getUiOptions(uiSchema);\n const TitleFieldTemplate = getTemplate('TitleFieldTemplate', registry, options);\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, options);\n // For \"pure union\" schemas (oneOf/anyOf without properties), skip rendering the empty fieldset wrapper.\n // The AnyOfField/OneOfField will handle rendering the union selector and selected variant's content directly.\n const isPureUnionSchema = (schema.oneOf || schema.anyOf) && !schema.properties && properties.length === 0;\n if (isPureUnionSchema) {\n return null;\n }\n const showOptionalDataControlInTitle = !readonly && !disabled;\n // Button templates are not overridden in the uiSchema\n const { ButtonTemplates: { AddButton }, } = registry.templates;\n return (_jsxs(\"fieldset\", { className: className, id: fieldPathId.$id, children: [title && (_jsx(TitleFieldTemplate, { id: titleId(fieldPathId), title: title, required: required, schema: schema, uiSchema: uiSchema, registry: registry, optionalDataControl: showOptionalDataControlInTitle ? optionalDataControl : undefined })), description && (_jsx(DescriptionFieldTemplate, { id: descriptionId(fieldPathId), description: description, schema: schema, uiSchema: uiSchema, registry: registry })), !showOptionalDataControlInTitle ? optionalDataControl : undefined, properties.map((prop) => prop.content), canExpand(schema, uiSchema, formData) && (_jsx(AddButton, { id: buttonId(fieldPathId, 'add'), className: 'rjsf-object-property-expand', onClick: onAddProperty, disabled: disabled || readonly, uiSchema: uiSchema, registry: registry }))] }));\n}\n//# sourceMappingURL=ObjectFieldTemplate.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport IconButton from \"./ButtonTemplates/IconButton.js\";\n/** The OptionalDataControlsTemplate renders one of three different states. If\n * there is an `onAddClick()` function, it renders the \"Add\" button. If there is\n * an `onRemoveClick()` function, it renders the \"Remove\" button. Otherwise it\n * renders the \"No data found\" section. All of them use the `label` as either\n * the `title` of buttons or simply outputting it.\n *\n * @param props - The `OptionalDataControlsTemplateProps` for the template\n */\nexport default function OptionalDataControlsTemplate(props) {\n const { id, registry, label, onAddClick, onRemoveClick } = props;\n if (onAddClick) {\n return (_jsx(IconButton, { id: id, registry: registry, icon: 'plus', className: 'rjsf-add-optional-data btn-sm', onClick: onAddClick, title: label }));\n }\n if (onRemoveClick) {\n return (_jsx(IconButton, { id: id, registry: registry, icon: 'remove', className: 'rjsf-remove-optional-data btn-sm', onClick: onRemoveClick, title: label }));\n }\n return _jsx(\"em\", { id: id, children: label });\n}\n//# sourceMappingURL=OptionalDataControlsTemplate.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst REQUIRED_FIELD_SYMBOL = '*';\n/** The `TitleField` is the template to use to render the title of a field\n *\n * @param props - The `TitleFieldProps` for this component\n */\nexport default function TitleField(props) {\n const { id, title, required, optionalDataControl } = props;\n return (_jsxs(\"legend\", { id: id, children: [title, required && _jsx(\"span\", { className: 'required', children: REQUIRED_FIELD_SYMBOL }), optionalDataControl && (_jsx(\"span\", { className: 'pull-right', style: { marginBottom: '2px' }, children: optionalDataControl }))] }));\n}\n//# sourceMappingURL=TitleField.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { TranslatableString } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\n/** The `UnsupportedField` component is used to render a field in the schema is one that is not supported by\n * react-jsonschema-form.\n *\n * @param props - The `FieldProps` for this template\n */\nfunction UnsupportedField(props) {\n const { schema, fieldPathId, reason, registry } = props;\n const { translateString } = registry;\n let translateEnum = TranslatableString.UnsupportedField;\n const translateParams = [];\n if (fieldPathId?.$id) {\n translateEnum = TranslatableString.UnsupportedFieldWithId;\n translateParams.push(fieldPathId.$id);\n }\n if (reason) {\n translateEnum =\n translateEnum === TranslatableString.UnsupportedField\n ? TranslatableString.UnsupportedFieldWithReason\n : TranslatableString.UnsupportedFieldWithIdAndReason;\n translateParams.push(reason);\n }\n return (_jsxs(\"div\", { className: 'unsupported-field', children: [_jsx(\"p\", { children: _jsx(Markdown, { options: { disableParsingRawHTML: true }, children: translateString(translateEnum, translateParams) }) }), schema && _jsx(\"pre\", { children: JSON.stringify(schema, null, 2) })] }));\n}\nexport default UnsupportedField;\n//# sourceMappingURL=UnsupportedField.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { ADDITIONAL_PROPERTY_FLAG, buttonId, TranslatableString } from '@rjsf/utils';\nimport Label from \"./FieldTemplate/Label.js\";\n/** The `WrapIfAdditional` component is used by the `FieldTemplate` to rename, or remove properties that are\n * part of an `additionalProperties` part of a schema.\n *\n * @param props - The `WrapIfAdditionalProps` for this component\n */\nexport default function WrapIfAdditionalTemplate(props) {\n const { id, classNames, style, disabled, displayLabel, label, onKeyRenameBlur, onRemoveProperty, rawDescription, readonly, required, schema, hideError, rawErrors, children, uiSchema, registry, } = props;\n const { templates, translateString } = registry;\n // Button templates are not overridden in the uiSchema\n const { RemoveButton } = templates.ButtonTemplates;\n const keyLabel = translateString(TranslatableString.KeyLabel, [label]);\n const additional = ADDITIONAL_PROPERTY_FLAG in schema;\n const hasDescription = !!rawDescription;\n const classNamesList = ['form-group', classNames];\n if (!hideError && rawErrors && rawErrors.length > 0) {\n classNamesList.push('has-error has-danger');\n }\n const uiClassNames = classNamesList.join(' ').trim();\n if (!additional) {\n return (_jsx(\"div\", { className: uiClassNames, style: style, children: children }));\n }\n const margin = hasDescription ? 46 : 26;\n return (_jsx(\"div\", { className: uiClassNames, style: style, children: _jsxs(\"div\", { className: 'row', children: [_jsx(\"div\", { className: 'col-xs-5 form-additional', children: _jsxs(\"div\", { className: 'form-group', children: [displayLabel && _jsx(Label, { label: keyLabel, required: required, id: `${id}-key` }), displayLabel && rawDescription && _jsx(\"div\", { children: \"\\u00A0\" }), _jsx(\"input\", { className: 'form-control', type: 'text', id: `${id}-key`, onBlur: onKeyRenameBlur, defaultValue: label }, label)] }) }), _jsx(\"div\", { className: 'form-additional form-group col-xs-5', children: children }), _jsx(\"div\", { className: 'col-xs-2', style: { marginTop: displayLabel ? `${margin}px` : undefined }, children: _jsx(RemoveButton, { id: buttonId(id, 'remove'), className: 'rjsf-object-property-remove btn-block', style: { border: '0' }, disabled: disabled || readonly, onClick: onRemoveProperty, uiSchema: uiSchema, registry: registry }) })] }) }));\n}\n//# sourceMappingURL=WrapIfAdditionalTemplate.js.map","import ArrayFieldDescriptionTemplate from \"./ArrayFieldDescriptionTemplate.js\";\nimport ArrayFieldItemButtonsTemplate from \"./ArrayFieldItemButtonsTemplate.js\";\nimport ArrayFieldItemTemplate from \"./ArrayFieldItemTemplate.js\";\nimport ArrayFieldTemplate from \"./ArrayFieldTemplate.js\";\nimport ArrayFieldTitleTemplate from \"./ArrayFieldTitleTemplate.js\";\nimport BaseInputTemplate from \"./BaseInputTemplate.js\";\nimport ButtonTemplates from \"./ButtonTemplates/index.js\";\nimport CyclicSchemaExpandTemplate from \"./CyclicSchemaExpandTemplate.js\";\nimport DescriptionField from \"./DescriptionField.js\";\nimport ErrorList from \"./ErrorList.js\";\nimport FallbackFieldTemplate from \"./FallbackFieldTemplate.js\";\nimport FieldErrorTemplate from \"./FieldErrorTemplate.js\";\nimport FieldHelpTemplate from \"./FieldHelpTemplate.js\";\nimport FieldTemplate from \"./FieldTemplate/index.js\";\nimport GridTemplate from \"./GridTemplate.js\";\nimport MultiSchemaFieldTemplate from \"./MultiSchemaFieldTemplate.js\";\nimport ObjectFieldTemplate from \"./ObjectFieldTemplate.js\";\nimport OptionalDataControlsTemplate from \"./OptionalDataControlsTemplate.js\";\nimport TitleField from \"./TitleField.js\";\nimport UnsupportedField from \"./UnsupportedField.js\";\nimport WrapIfAdditionalTemplate from \"./WrapIfAdditionalTemplate.js\";\nfunction templates() {\n return {\n ArrayFieldDescriptionTemplate,\n ArrayFieldItemTemplate,\n ArrayFieldItemButtonsTemplate,\n ArrayFieldTemplate,\n ArrayFieldTitleTemplate,\n ButtonTemplates: ButtonTemplates(),\n BaseInputTemplate,\n CyclicSchemaExpandTemplate,\n DescriptionFieldTemplate: DescriptionField,\n ErrorListTemplate: ErrorList,\n FallbackFieldTemplate,\n FieldTemplate,\n FieldErrorTemplate,\n FieldHelpTemplate,\n GridTemplate,\n MultiSchemaFieldTemplate,\n ObjectFieldTemplate,\n OptionalDataControlsTemplate,\n TitleFieldTemplate: TitleField,\n UnsupportedFieldTemplate: UnsupportedField,\n WrapIfAdditionalTemplate,\n };\n}\nexport default templates;\n//# sourceMappingURL=index.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/** The `AltDateTimeWidget` is an alternative widget for rendering datetime properties.\n * It uses the AltDateWidget for rendering, with the `time` prop set to true by default.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction AltDateTimeWidget({ time = true, ...props }) {\n const { AltDateWidget } = props.registry.widgets;\n return _jsx(AltDateWidget, { time: time, ...props });\n}\nexport default AltDateTimeWidget;\n//# sourceMappingURL=AltDateTimeWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { DateElement, TranslatableString, useAltDateWidgetProps } from '@rjsf/utils';\n/** The `AltDateWidget` is an alternative widget for rendering date properties.\n * @param props - The `WidgetProps` for this component\n */\nfunction AltDateWidget(props) {\n const { disabled = false, readonly = false, autofocus = false, options, id, name, registry, onBlur, onFocus } = props;\n const { translateString } = registry;\n const { elements, handleChange, handleClear, handleSetNow } = useAltDateWidgetProps(props);\n return (_jsxs(\"ul\", { className: 'list-inline', children: [elements.map((elemProps, i) => (_jsx(\"li\", { className: 'list-inline-item', children: _jsx(DateElement, { rootId: id, name: name, select: handleChange, ...elemProps, disabled: disabled, readonly: readonly, registry: registry, onBlur: onBlur, onFocus: onFocus, autofocus: autofocus && i === 0 }) }, i))), (options.hideNowButton !== 'undefined' ? !options.hideNowButton : true) && (_jsx(\"li\", { className: 'list-inline-item', children: _jsx(\"button\", { type: 'button', className: 'btn btn-info btn-now', onClick: handleSetNow, children: translateString(TranslatableString.NowLabel) }) })), (options.hideClearButton !== 'undefined' ? !options.hideClearButton : true) && (_jsx(\"li\", { className: 'list-inline-item', children: _jsx(\"button\", { type: 'button', className: 'btn btn-warning btn-clear', onClick: handleClear, children: translateString(TranslatableString.ClearLabel) }) }))] }));\n}\nexport default AltDateWidget;\n//# sourceMappingURL=AltDateWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, enumOptionValueDecoder, enumOptionValueEncoder, enumOptionsDeselectValue, enumOptionsIsSelected, enumOptionsSelectValue, getOptionValueFormat, optionId, } from '@rjsf/utils';\n/** The `CheckboxesWidget` is a widget for rendering checkbox groups.\n * It is typically used to represent an array of enums.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction CheckboxesWidget({ id, disabled, options, value, autofocus = false, readonly, onChange, onBlur, onFocus, htmlName, }) {\n const { inline = false, enumOptions, enumDisabled, emptyValue } = options;\n const optionValueFormat = getOptionValueFormat(options);\n const checkboxesValues = Array.isArray(value) ? value : [value];\n const handleBlur = useCallback(({ target }) => onBlur(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onBlur, id, enumOptions, emptyValue, optionValueFormat]);\n const handleFocus = useCallback(({ target }) => onFocus(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onFocus, id, enumOptions, emptyValue, optionValueFormat]);\n return (_jsx(\"div\", { className: 'checkboxes', id: id, children: Array.isArray(enumOptions) &&\n enumOptions.map((option, index) => {\n const checked = enumOptionsIsSelected(option.value, checkboxesValues);\n const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.includes(option.value);\n const disabledCls = disabled || itemDisabled || readonly ? 'disabled' : '';\n const handleChange = (event) => {\n if (event.target.checked) {\n onChange(enumOptionsSelectValue(index, checkboxesValues, enumOptions));\n }\n else {\n onChange(enumOptionsDeselectValue(index, checkboxesValues, enumOptions));\n }\n };\n const checkbox = (_jsxs(\"span\", { children: [_jsx(\"input\", { type: 'checkbox', id: optionId(id, index), name: htmlName || id, checked: checked, value: enumOptionValueEncoder(option.value, index, optionValueFormat), disabled: disabled || itemDisabled || readonly, autoFocus: autofocus && index === 0, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id) }), _jsx(\"span\", { children: option.label })] }));\n return inline ? (_jsx(\"label\", { className: `checkbox-inline ${disabledCls}`, children: checkbox }, String(option.value))) : (_jsx(\"div\", { className: `checkbox ${disabledCls}`, children: _jsx(\"label\", { children: checkbox }) }, String(option.value)));\n }) }));\n}\nexport default CheckboxesWidget;\n//# sourceMappingURL=CheckboxesWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, descriptionId, getTemplate, labelValue, schemaRequiresTrueValue, getUiOptions, } from '@rjsf/utils';\n/** The `CheckBoxWidget` is a widget for rendering boolean properties.\n * It is typically used to represent a boolean.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction CheckboxWidget({ schema, uiSchema, options, id, value, disabled, readonly, label, hideLabel, autofocus = false, onBlur, onFocus, onChange, registry, htmlName, required, }) {\n const DescriptionFieldTemplate = getTemplate('DescriptionFieldTemplate', registry, options);\n // Because an unchecked checkbox will cause html5 validation to fail, only add\n // the \"required\" attribute if the field value must be \"true\", due to the\n // \"const\" or \"enum\" keywords\n const trueValueRequired = schemaRequiresTrueValue(schema) && required;\n const handleChange = useCallback((event) => onChange(event.target.checked), [onChange]);\n const handleBlur = useCallback((event) => onBlur(id, event.target.checked), [onBlur, id]);\n const handleFocus = useCallback((event) => onFocus(id, event.target.checked), [onFocus, id]);\n const uiOptions = getUiOptions(uiSchema);\n const isCheckboxWidget = uiOptions.widget === 'checkbox';\n const description = isCheckboxWidget ? undefined : (options.description ?? schema.description);\n return (_jsxs(\"div\", { className: `checkbox ${disabled || readonly ? 'disabled' : ''}`, children: [!hideLabel && description && (_jsx(DescriptionFieldTemplate, { id: descriptionId(id), description: description, schema: schema, uiSchema: uiSchema, registry: registry })), _jsxs(\"label\", { children: [_jsx(\"input\", { type: 'checkbox', id: id, name: htmlName || id, checked: typeof value === 'undefined' ? false : value, required: required, disabled: disabled || readonly, autoFocus: autofocus, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id) }), labelValue(_jsxs(\"span\", { children: [label, trueValueRequired && _jsx(\"span\", { className: 'required', children: \"*\" })] }), hideLabel)] })] }));\n}\nexport default CheckboxWidget;\n//# sourceMappingURL=CheckboxWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `ColorWidget` component uses the `BaseInputTemplate` changing the type to `color` and disables it when it is\n * either disabled or readonly.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function ColorWidget(props) {\n const { disabled, readonly, options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'color', ...props, disabled: disabled || readonly });\n}\n//# sourceMappingURL=ColorWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate, localToUTC, utcToLocal } from '@rjsf/utils';\n/** The `DateTimeWidget` component uses the `BaseInputTemplate` changing the type to `datetime-local` and transforms\n * the value to/from utc using the appropriate utility functions.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function DateTimeWidget(props) {\n const { onChange, value, options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return (_jsx(BaseInputTemplate, { type: 'datetime-local', ...props, value: utcToLocal(value), onChange: (newValue) => onChange(localToUTC(newValue)) }));\n}\n//# sourceMappingURL=DateTimeWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { getTemplate } from '@rjsf/utils';\n/** The `DateWidget` component uses the `BaseInputTemplate` changing the type to `date` and transforms\n * the value to undefined when it is falsy during the `onChange` handling.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function DateWidget(props) {\n const { onChange, options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n const handleChange = useCallback((value) => onChange(value || undefined), [onChange]);\n return _jsx(BaseInputTemplate, { type: 'date', ...props, onChange: handleChange });\n}\n//# sourceMappingURL=DateWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `EmailWidget` component uses the `BaseInputTemplate` changing the type to `email`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function EmailWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'email', ...props });\n}\n//# sourceMappingURL=EmailWidget.js.map","import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { getTemplate, TranslatableString, useFileWidgetProps } from '@rjsf/utils';\nimport { Markdown } from 'markdown-to-jsx/react';\nfunction FileInfoPreview({ fileInfo, registry, }) {\n const { translateString } = registry;\n const { dataURL, type, name } = fileInfo;\n if (!dataURL) {\n return null;\n }\n const previewLabel = translateString(TranslatableString.PreviewLabel);\n // If type is JPEG or PNG then show image preview.\n // Originally, any type of image was supported, but this was changed into a whitelist\n // since SVGs and animated GIFs are also images, which are generally considered a security risk.\n if (['image/jpeg', 'image/png'].includes(type)) {\n return _jsx(\"img\", { src: dataURL, alt: previewLabel, style: { maxWidth: '100%' }, className: 'file-preview' });\n }\n // otherwise, let users download file\n return (_jsxs(_Fragment, { children: [' ', _jsx(\"a\", { download: `preview-${name}`, href: dataURL, className: 'file-download', children: previewLabel })] }));\n}\nfunction FilesInfo({ filesInfo, registry, preview, onRemove, options, }) {\n if (filesInfo.length === 0) {\n return null;\n }\n const { translateString } = registry;\n const { RemoveButton } = getTemplate('ButtonTemplates', registry, options);\n return (_jsx(\"ul\", { className: 'file-info', children: filesInfo.map((fileInfo, key) => {\n const { name, size, type } = fileInfo;\n const handleRemove = () => onRemove(key);\n return (_jsxs(\"li\", { children: [_jsx(Markdown, { children: translateString(TranslatableString.FilesInfo, [name, type, String(size)]) }), preview && _jsx(FileInfoPreview, { fileInfo: fileInfo, registry: registry }), _jsx(RemoveButton, { onClick: handleRemove, registry: registry })] }, key));\n }) }));\n}\n/**\n * The `FileWidget` is a widget for rendering file upload fields.\n * It is typically used with a string property with data-url format.\n */\nfunction FileWidget(props) {\n const { disabled, readonly, required, multiple, onChange, value, options, registry } = props;\n const { filesInfo, handleChange, handleRemove } = useFileWidgetProps(value, onChange, multiple);\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n const handleOnChangeEvent = (event) => {\n if (event.target.files) {\n // handleChange is async; DOM event handlers are void-returning, so we intentionally don't await\n // oxlint-disable-next-line no-floating-promises, no-void\n void handleChange(event.target.files);\n }\n };\n return (_jsxs(\"div\", { children: [_jsx(BaseInputTemplate, { ...props, disabled: disabled || readonly, type: 'file', required: value ? false : required, onChangeOverride: handleOnChangeEvent, value: '', accept: options.accept ? String(options.accept) : undefined }), _jsx(FilesInfo, { filesInfo: filesInfo, onRemove: handleRemove, registry: registry, preview: options.filePreview, options: options })] }));\n}\nexport default FileWidget;\n//# sourceMappingURL=FileWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\n/** The `HiddenWidget` is a widget for rendering a hidden input field.\n * It is typically used by setting type to \"hidden\".\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction HiddenWidget({ id, value, htmlName, }) {\n return _jsx(\"input\", { type: 'hidden', id: id, name: htmlName || id, value: typeof value === 'undefined' ? '' : value });\n}\nexport default HiddenWidget;\n//# sourceMappingURL=HiddenWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `PasswordWidget` component uses the `BaseInputTemplate` changing the type to `password`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function PasswordWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'password', ...props });\n}\n//# sourceMappingURL=PasswordWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, enumOptionValueDecoder, enumOptionValueEncoder, enumOptionsIsSelected, getOptionValueFormat, optionId, } from '@rjsf/utils';\n/** The `RadioWidget` is a widget for rendering a radio group.\n * It is typically used with a string property constrained with enum options.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction RadioWidget({ options, value, required, disabled, readonly, autofocus = false, onBlur, onFocus, onChange, id, htmlName, }) {\n const { enumOptions, enumDisabled, inline, emptyValue } = options;\n const optionValueFormat = getOptionValueFormat(options);\n const handleBlur = useCallback(({ target }) => onBlur(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onBlur, enumOptions, emptyValue, id, optionValueFormat]);\n const handleFocus = useCallback(({ target }) => onFocus(id, enumOptionValueDecoder(target?.value, enumOptions, optionValueFormat, emptyValue)), [onFocus, enumOptions, emptyValue, id, optionValueFormat]);\n return (_jsx(\"div\", { className: 'field-radio-group', id: id, role: 'radiogroup', children: Array.isArray(enumOptions) &&\n enumOptions.map((option, i) => {\n const checked = enumOptionsIsSelected(option.value, value);\n const itemDisabled = Array.isArray(enumDisabled) && enumDisabled.includes(option.value);\n const disabledCls = disabled || itemDisabled || readonly ? 'disabled' : '';\n const handleChange = () => onChange(option.value);\n const radio = (_jsxs(\"span\", { children: [_jsx(\"input\", { type: 'radio', id: optionId(id, i), checked: checked, name: htmlName || id, required: required, value: enumOptionValueEncoder(option.value, i, optionValueFormat), disabled: disabled || itemDisabled || readonly, autoFocus: autofocus && i === 0, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, \"aria-describedby\": ariaDescribedByIds(id) }), _jsx(\"span\", { children: option.label })] }));\n return inline ? (_jsx(\"label\", { className: `radio-inline ${disabledCls}`, children: radio }, String(option.value))) : (_jsx(\"div\", { className: `radio ${disabledCls}`, children: _jsx(\"label\", { children: radio }) }, String(option.value)));\n }) }));\n}\nexport default RadioWidget;\n//# sourceMappingURL=RadioWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/** The `RangeWidget` component uses the `BaseInputTemplate` changing the type to `range` and wrapping the result\n * in a div, with the value along side it.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function RangeWidget(props) {\n const { value, registry: { templates: { BaseInputTemplate }, }, } = props;\n return (_jsxs(\"div\", { className: 'field-range-wrapper', children: [_jsx(BaseInputTemplate, { type: 'range', ...props }), _jsx(\"span\", { className: 'range-view', children: value })] }));\n}\n//# sourceMappingURL=RangeWidget.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\n/** The `RatingWidget` component renders a star or heart rating input\n *\n * Features:\n * - Configurable number of stars/hearts (1-5) with default of 5\n * - Supports different shapes (star, heart)\n * - Supports minimum and maximum values from schema\n * - Handles required, disabled, and readonly states\n * - Provides focus and blur event handling for accessibility\n * - Uses Unicode characters for better visual representation\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function RatingWidget({ id, value, required, disabled, readonly, onChange, onFocus, onBlur, schema, options, htmlName, }) {\n const { stars = 5, shape = 'star' } = options;\n // Use schema.maximum if provided, otherwise use stars option (limited to 1-5)\n const numStars = schema.maximum ? Math.min(schema.maximum, 5) : Math.min(Math.max(stars, 1), 5);\n const min = schema.minimum || 0;\n /** Handles clicking on a star to set the rating */\n const handleStarClick = useCallback((starValue) => {\n if (!disabled && !readonly) {\n onChange(starValue);\n }\n }, [onChange, disabled, readonly]);\n /** Handles focus events for accessibility */\n const handleFocus = useCallback((event) => {\n if (onFocus) {\n // Get the star value from the data attribute\n const starValue = Number(event.target.dataset.value);\n onFocus(id, starValue);\n }\n }, [onFocus, id]);\n /** Handles blur events for accessibility */\n const handleBlur = useCallback((event) => {\n if (onBlur) {\n // Get the star value from the data attribute\n const starValue = Number(event.target.dataset.value);\n onBlur(id, starValue);\n }\n }, [onBlur, id]);\n // Get the appropriate Unicode character based on shape option\n const getSymbol = (isFilled) => {\n if (shape === 'heart') {\n return isFilled ? '♥' : '♡';\n }\n return isFilled ? '★' : '☆';\n };\n return (_jsxs(\"div\", { className: 'rating-widget', style: {\n display: 'inline-flex',\n fontSize: '1.5rem',\n cursor: disabled || readonly ? 'default' : 'pointer',\n }, children: [[...Array(numStars)].map((_, index) => {\n const starValue = min + index;\n const isFilled = starValue <= value;\n return (_jsx(\"span\", { onClick: () => handleStarClick(starValue), onKeyDown: (e) => (e.key === 'Enter' || e.key === ' ') && handleStarClick(starValue), onFocus: handleFocus, onBlur: handleBlur, \"data-value\": starValue, tabIndex: disabled || readonly ? -1 : 0, role: 'radio', \"aria-checked\": starValue === value, \"aria-label\": `${starValue} ${shape === 'heart' ? 'heart' : 'star'}${starValue === 1 ? '' : 's'}`, style: {\n color: isFilled ? '#FFD700' : '#ccc',\n padding: '0 0.2rem',\n transition: 'color 0.2s',\n userSelect: 'none',\n }, children: getSymbol(isFilled) }, index));\n }), _jsx(\"input\", { type: 'hidden', id: id, name: htmlName || id, value: value || '', required: required, disabled: disabled || readonly, \"aria-hidden\": 'true' })] }));\n}\n//# sourceMappingURL=RatingWidget.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds, enumOptionSelectedValue, enumOptionValueDecoder, enumOptionValueEncoder, getOptionValueFormat, logUnsupportedDefaultForEnum, SelectedOptionDescription, } from '@rjsf/utils';\nfunction getValue(event, multiple) {\n if (multiple) {\n return Array.from(event.target.options)\n .slice()\n .filter((o) => o.selected)\n .map((o) => o.value);\n }\n return event.target.value;\n}\n/** The `SelectWidget` is a widget for rendering dropdowns.\n * It is typically used with string properties constrained with enum options.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction SelectWidget({ schema, id, options, value, required, disabled, readonly, multiple = false, autofocus = false, onChange, onBlur, onFocus, placeholder, htmlName, registry, uiSchema, }) {\n const { enumOptions, enumDisabled, emptyValue: optEmptyVal } = options;\n const emptyValue = multiple ? [] : '';\n const optionValueFormat = getOptionValueFormat(options);\n const handleFocus = useCallback((event) => {\n const newValue = getValue(event, multiple);\n return onFocus(id, enumOptionValueDecoder(newValue, enumOptions, optionValueFormat, optEmptyVal));\n }, [onFocus, id, multiple, enumOptions, optEmptyVal, optionValueFormat]);\n const handleBlur = useCallback((event) => {\n const newValue = getValue(event, multiple);\n return onBlur(id, enumOptionValueDecoder(newValue, enumOptions, optionValueFormat, optEmptyVal));\n }, [onBlur, id, multiple, enumOptions, optEmptyVal, optionValueFormat]);\n const handleChange = useCallback((event) => {\n const newValue = getValue(event, multiple);\n return onChange(enumOptionValueDecoder(newValue, enumOptions, optionValueFormat, optEmptyVal));\n }, [onChange, multiple, enumOptions, optEmptyVal, optionValueFormat]);\n const selectValue = enumOptionSelectedValue(value, enumOptions, multiple, optionValueFormat, emptyValue);\n const showPlaceholderOption = !multiple && schema.default === undefined;\n logUnsupportedDefaultForEnum(id, schema, enumOptions, multiple);\n return (_jsxs(_Fragment, { children: [_jsx(SelectedOptionDescription, { id: id, multiple: multiple, options: options, registry: registry, uiSchema: uiSchema, value: value }), _jsxs(\"select\", { id: id, name: htmlName || id, multiple: multiple, className: 'form-control', value: selectValue, required: required, disabled: disabled || readonly, autoFocus: autofocus, onBlur: handleBlur, onFocus: handleFocus, onChange: handleChange, \"aria-describedby\": ariaDescribedByIds(id), children: [showPlaceholderOption && _jsx(\"option\", { value: '', children: placeholder }), Array.isArray(enumOptions) &&\n enumOptions.map(({ value: enumValue, label: enumLabel }, i) => {\n const isDisabled = enumDisabled && enumDisabled.includes(enumValue);\n return (_jsx(\"option\", { value: enumOptionValueEncoder(enumValue, i, optionValueFormat), disabled: isDisabled, children: enumLabel }, String(enumValue)));\n })] })] }));\n}\nexport default SelectWidget;\n//# sourceMappingURL=SelectWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { ariaDescribedByIds } from '@rjsf/utils';\n/** The `TextareaWidget` is a widget for rendering input fields as textarea.\n *\n * @param props - The `WidgetProps` for this component\n */\nfunction TextareaWidget({ id, options, placeholder, value, required, disabled, readonly, autofocus = false, onChange, onBlur, onFocus, htmlName, }) {\n const handleChange = useCallback(({ target: { value: newValue } }) => onChange(newValue === '' ? options.emptyValue : newValue), [onChange, options.emptyValue]);\n const handleBlur = useCallback(({ target }) => onBlur(id, target?.value), [onBlur, id]);\n const handleFocus = useCallback(({ target }) => onFocus(id, target?.value), [id, onFocus]);\n return (_jsx(\"textarea\", { id: id, name: htmlName || id, className: 'form-control', value: value || '', placeholder: placeholder, required: required, disabled: disabled, readOnly: readonly, autoFocus: autofocus, rows: options.rows, onBlur: handleBlur, onFocus: handleFocus, onChange: handleChange, \"aria-describedby\": ariaDescribedByIds(id) }));\n}\nexport default TextareaWidget;\n//# sourceMappingURL=TextareaWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `TextWidget` component uses the `BaseInputTemplate`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function TextWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { ...props });\n}\n//# sourceMappingURL=TextWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback } from 'react';\nimport { getTemplate } from '@rjsf/utils';\n/** The `TimeWidget` component uses the `BaseInputTemplate` changing the type to `time` and transforms\n * the value to undefined when it is falsy during the `onChange` handling.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function TimeWidget(props) {\n const { onChange, options, registry, schema, value } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n const hasSecondPrecision = typeof schema.multipleOf === 'number' && Number.isFinite(schema.multipleOf) && schema.multipleOf < 60;\n const handleChange = useCallback((newValue) => {\n if (!newValue) {\n onChange(undefined);\n }\n else if (hasSecondPrecision) {\n onChange(newValue);\n }\n else {\n onChange(`${newValue}:00`);\n }\n }, [hasSecondPrecision, onChange]);\n const displayValue = typeof value === 'string' && !hasSecondPrecision && /^\\d{2}:\\d{2}:00$/.test(value) ? value.slice(0, -3) : value;\n return _jsx(BaseInputTemplate, { type: 'time', ...props, value: displayValue, onChange: handleChange });\n}\n//# sourceMappingURL=TimeWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `UpDownWidget` component uses the `BaseInputTemplate` changing the type to `number`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function UpDownWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'number', ...props });\n}\n//# sourceMappingURL=UpDownWidget.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { getTemplate } from '@rjsf/utils';\n/** The `URLWidget` component uses the `BaseInputTemplate` changing the type to `url`.\n *\n * @param props - The `WidgetProps` for this component\n */\nexport default function URLWidget(props) {\n const { options, registry } = props;\n const BaseInputTemplate = getTemplate('BaseInputTemplate', registry, options);\n return _jsx(BaseInputTemplate, { type: 'url', ...props });\n}\n//# sourceMappingURL=URLWidget.js.map","import AltDateTimeWidget from \"./AltDateTimeWidget.js\";\nimport AltDateWidget from \"./AltDateWidget.js\";\nimport CheckboxesWidget from \"./CheckboxesWidget.js\";\nimport CheckboxWidget from \"./CheckboxWidget.js\";\nimport ColorWidget from \"./ColorWidget.js\";\nimport DateTimeWidget from \"./DateTimeWidget.js\";\nimport DateWidget from \"./DateWidget.js\";\nimport EmailWidget from \"./EmailWidget.js\";\nimport FileWidget from \"./FileWidget.js\";\nimport HiddenWidget from \"./HiddenWidget.js\";\nimport PasswordWidget from \"./PasswordWidget.js\";\nimport RadioWidget from \"./RadioWidget.js\";\nimport RangeWidget from \"./RangeWidget.js\";\nimport RatingWidget from \"./RatingWidget.js\";\nimport SelectWidget from \"./SelectWidget.js\";\nimport TextareaWidget from \"./TextareaWidget.js\";\nimport TextWidget from \"./TextWidget.js\";\nimport TimeWidget from \"./TimeWidget.js\";\nimport UpDownWidget from \"./UpDownWidget.js\";\nimport URLWidget from \"./URLWidget.js\";\nfunction widgets() {\n return {\n AltDateWidget,\n AltDateTimeWidget,\n CheckboxWidget,\n CheckboxesWidget,\n ColorWidget,\n DateWidget,\n DateTimeWidget,\n EmailWidget,\n FileWidget,\n HiddenWidget,\n PasswordWidget,\n RadioWidget,\n RangeWidget,\n RatingWidget,\n SelectWidget,\n TextWidget,\n TextareaWidget,\n TimeWidget,\n UpDownWidget,\n URLWidget,\n };\n}\nexport default widgets;\n//# sourceMappingURL=index.js.map","import { DEFAULT_ID_PREFIX, DEFAULT_ID_SEPARATOR, englishStringTranslator } from '@rjsf/utils';\nimport fields from \"./components/fields/index.js\";\nimport templates from \"./components/templates/index.js\";\nimport widgets from \"./components/widgets/index.js\";\n/** The default registry consists of all the fields, templates and widgets provided in the core implementation,\n * plus an empty `rootSchema` and `formContext. We omit schemaUtils here because it cannot be defaulted without a\n * rootSchema and validator. It will be added into the computed registry later in the Form.\n */\nexport default function getDefaultRegistry() {\n return {\n fields: fields(),\n templates: templates(),\n widgets: widgets(),\n rootSchema: {},\n formContext: {},\n translateString: englishStringTranslator,\n globalFormOptions: {\n idPrefix: DEFAULT_ID_PREFIX,\n idSeparator: DEFAULT_ID_SEPARATOR,\n useFallbackUiForUnsupportedType: false,\n },\n };\n}\n//# sourceMappingURL=getDefaultRegistry.js.map","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Component, createRef } from 'react';\nimport { getByPath, setByPath, toPath, unsetByPath, createSchemaUtils, deepEquals, ErrorSchemaBuilder, getChangedFields, getTemplate, getUiOptions, hashObject, isObject, mergeObjects, shouldRender, SUBMIT_BTN_OPTIONS_KEY, toErrorList, toFieldPathId, UI_DEFINITIONS_KEY, UI_GLOBAL_OPTIONS_KEY, UI_OPTIONS_KEY, validationDataMerge, DEFAULT_ID_SEPARATOR, DEFAULT_ID_PREFIX, ERRORS_KEY, ID_KEY, getUsedFormData, getFieldNames, schemaHasNestedConditional, ANY_OF_KEY, ONE_OF_KEY, } from '@rjsf/utils';\nimport getDefaultRegistry from \"../getDefaultRegistry.js\";\nimport { ADDITIONAL_PROPERTY_KEY_REMOVE, IS_RESET } from \"./constants.js\";\n/** Converts the full `FormState` into the `IChangeEvent` version by picking out the public values\n *\n * @param state - The state of the form\n * @param status - The status provided by the onSubmit\n * @returns - The `IChangeEvent` for the state\n */\nfunction toIChangeEvent(state, status) {\n const { schema, uiSchema, fieldPathId, schemaUtils, formData, edit, errors, errorSchema } = state;\n return {\n schema,\n uiSchema,\n fieldPathId,\n schemaUtils,\n formData,\n edit,\n errors,\n errorSchema,\n ...(status !== undefined && { status }),\n };\n}\n/** The `Form` component renders the outer form and all the fields defined in the `schema` */\nexport default class Form extends Component {\n /** The ref used to hold the `form` element, this needs to be `any` because `tagName` or `_internalFormWrapper` can\n * provide any possible type here\n */\n formElement;\n /** The list of pending changes\n */\n pendingChanges = [];\n /** Flag to track when we're processing a user-initiated field change.\n * This prevents componentDidUpdate from reverting oneOf/anyOf option switches.\n */\n isProcessingUserChange = false;\n /** When the `extraErrors` prop changes, re-merges `schemaValidationErrors` + `extraErrors` + `customErrors` into\n * state before render, ensuring the updated errors are visible immediately in a single render cycle.\n *\n * @param props - The current props\n * @param state - The current state\n * @returns Partial state with re-merged errors if `extraErrors` changed, or `null` if no update is needed\n */\n static getDerivedStateFromProps(props, state) {\n if (props.extraErrors !== state.prevExtraErrors) {\n const baseErrors = {\n errors: state.schemaValidationErrors || [],\n errorSchema: state.schemaValidationErrorSchema || {},\n };\n let { errors, errorSchema } = baseErrors;\n if (props.extraErrors) {\n ({ errors, errorSchema } = validationDataMerge(baseErrors, props.extraErrors));\n }\n if (state.customErrors) {\n ({ errors, errorSchema } = validationDataMerge({ errors, errorSchema }, state.customErrors.ErrorSchema, true));\n }\n return { prevExtraErrors: props.extraErrors, errors, errorSchema };\n }\n return null;\n }\n /** Constructs the `Form` from the `props`. Will setup the initial state from the props. It will also call the\n * `onChange` handler if the initially provided `formData` is modified to add missing default values as part of the\n * state construction.\n *\n * @param props - The initial props for the `Form`\n */\n constructor(props) {\n super(props);\n if (!props.validator) {\n throw new Error('A validator is required for Form functionality to work');\n }\n const { formData: propsFormData, initialFormData, onChange } = props;\n const formData = propsFormData ?? initialFormData;\n this.state = {\n ...this.getStateFromProps(props, formData, undefined, undefined, undefined, true),\n prevExtraErrors: props.extraErrors,\n };\n if (onChange && !deepEquals(this.state.formData, formData)) {\n onChange(toIChangeEvent(this.state));\n }\n this.formElement = createRef();\n }\n /**\n * `getSnapshotBeforeUpdate` is a React lifecycle method that is invoked right before the most recently rendered\n * output is committed to the DOM. It enables your component to capture current values (e.g., scroll position) before\n * they are potentially changed.\n *\n * In this case, it checks if the props have changed since the last render. If they have, it computes the next state\n * of the component using `getStateFromProps` method and returns it along with a `shouldUpdate` flag set to `true` IF\n * the `nextState` and `prevState` are different, otherwise `false`. This ensures that we have the most up-to-date\n * state ready to be applied in `componentDidUpdate`.\n *\n * If `formData` hasn't changed, it simply returns an object with `shouldUpdate` set to `false`, indicating that a\n * state update is not necessary.\n *\n * @param prevProps - The previous set of props before the update.\n * @param prevState - The previous state before the update.\n * @returns Either an object containing the next state and a flag indicating that an update should occur, or an object\n * with a flag indicating that an update is not necessary.\n */\n getSnapshotBeforeUpdate(prevProps, prevState) {\n if (!deepEquals(this.props, prevProps)) {\n // Compare the previous props formData against the current props formData\n const formDataChangedFields = getChangedFields(this.props.formData, prevProps.formData);\n // Compare the current props formData against the current state's formData to determine if the new props were the\n // result of the onChange from the existing state formData\n const stateDataChangedFields = getChangedFields(this.props.formData, this.state.formData);\n const isSchemaChanged = !deepEquals(prevProps.schema, this.props.schema);\n // When formData is not an object, getChangedFields returns an empty array.\n // In this case, deepEquals is most needed to check again.\n const isFormDataChanged = formDataChangedFields.length > 0 || !deepEquals(prevProps.formData, this.props.formData);\n const isStateDataChanged = stateDataChangedFields.length > 0 || !deepEquals(this.state.formData, this.props.formData);\n const nextState = this.getStateFromProps(this.props, this.props.formData, \n // If the `schema` has changed, we need to update the retrieved schema.\n // Or if the `formData` changes, for example in the case of a schema with dependencies that need to\n // match one of the subSchemas, the retrieved schema must be updated.\n isSchemaChanged || isFormDataChanged ? undefined : this.state.retrievedSchema, isSchemaChanged, \n // Only the error clearing needs the path of each changed field, and it runs only when live validation does\n // not, so the walk that produces them is left for `getStateFromProps` to ask for\n () => getChangedFields(this.props.formData, prevProps.formData, true), \n // Skip live validation for this request if no form data has changed from the last state\n !isStateDataChanged);\n const shouldUpdate = !deepEquals(nextState, prevState);\n return { nextState, shouldUpdate };\n }\n return { shouldUpdate: false };\n }\n /**\n * `componentDidUpdate` is a React lifecycle method that is invoked immediately after updating occurs. This method is\n * not called for the initial render.\n *\n * Here, it checks if an update is necessary based on the `shouldUpdate` flag received from `getSnapshotBeforeUpdate`.\n * If an update is required, it applies the next state and, if needed, triggers the `onChange` handler to inform about\n * changes.\n *\n * @param _ - The previous set of props.\n * @param prevState - The previous state of the component before the update.\n * @param snapshot - The value returned from `getSnapshotBeforeUpdate`.\n */\n componentDidUpdate(_, prevState, snapshot) {\n if (snapshot.shouldUpdate) {\n const { nextState } = snapshot;\n // Prevent oneOf/anyOf option switches from reverting when getStateFromProps\n // re-evaluates and produces stale formData.\n const nextStateDiffersFromProps = !deepEquals(nextState.formData, this.props.formData);\n const wasProcessingUserChange = this.isProcessingUserChange;\n this.isProcessingUserChange = false;\n if (wasProcessingUserChange && nextStateDiffersFromProps) {\n // Skip - the user's option switch is already applied via processPendingChange\n return;\n }\n if (nextStateDiffersFromProps && !deepEquals(nextState.formData, prevState.formData) && this.props.onChange) {\n this.props.onChange(toIChangeEvent(nextState));\n }\n // oxlint-disable-next-line react/no-did-update-set-state -- guarded to prevent infinite loop\n this.setState(nextState);\n }\n }\n /** Extracts the updated state from the given `props` and `inputFormData`. As part of this process, the\n * `inputFormData` is first processed to add any missing required defaults. After that, the data is run through the\n * validation process IF required by the `props`.\n *\n * @param props - The props passed to the `Form`\n * @param inputFormData - The new or current data for the `Form`\n * @param retrievedSchema - An expanded schema, if not provided, it will be retrieved from the `schema` and `formData`.\n * @param [isSchemaChanged=false] - A flag indicating whether the schema has changed.\n * @param [getFormDataChangedFields=() => []] - Optional function returning the path of each `formData` field that\n * changed, only called when those paths are needed, which is when live validation is not going to run\n * @param [skipLiveValidate=false] - Optional flag, if true, means that we are not running live validation\n * @param [shouldSanitize=false] - Optional flag, if true, means that we should attempt to sanitize formData\n * @returns - The new state for the `Form`\n */\n getStateFromProps(props, inputFormData, retrievedSchema, isSchemaChanged = false, getFormDataChangedFields = () => [], skipLiveValidate = false, shouldSanitize = false) {\n const state = this.state || {};\n const schema = 'schema' in props ? props.schema : this.props.schema;\n const validator = 'validator' in props ? props.validator : this.props.validator;\n const uiSchema = ('uiSchema' in props ? props.uiSchema : this.props.uiSchema) || {};\n const isUncontrolled = props.formData === undefined && this.props.formData === undefined;\n const edit = typeof inputFormData !== 'undefined';\n const liveValidate = 'liveValidate' in props ? props.liveValidate : this.props.liveValidate;\n // oxlint-disable-next-line typescript/no-deprecated\n const mustValidate = edit && !props.noValidate && liveValidate;\n const experimental_defaultFormStateBehavior = 'experimental_defaultFormStateBehavior' in props\n ? props.experimental_defaultFormStateBehavior\n : this.props.experimental_defaultFormStateBehavior;\n const experimental_customMergeAllOf = 'experimental_customMergeAllOf' in props\n ? props.experimental_customMergeAllOf\n : this.props.experimental_customMergeAllOf;\n let { schemaUtils, hasNestedConditionalSchema } = state;\n if (!schemaUtils ||\n schemaUtils.doesSchemaUtilsDiffer(validator, schema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf)) {\n schemaUtils = createSchemaUtils(validator, schema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf);\n // A `dependencies`/`if` branch switch nested inside an object property never changes the ROOT retrieved\n // schema (only the schema's own top-level `dependencies`/`if` get resolved into it), so comparing\n // `computedRetrievedSchema` to `state.retrievedSchema` below can't detect it (#5250). `hasNestedConditionalSchema`\n // lets sanitization run anyway when that's possible. It's a pure function of the root schema, so it only needs\n // to be recomputed when `schemaUtils` (and thus the root schema) is rebuilt, not on every call here.\n hasNestedConditionalSchema = schemaHasNestedConditional(schemaUtils.getRootSchema(), schemaUtils.getRootSchema());\n }\n const rootSchema = schemaUtils.getRootSchema();\n // Compute the formData for getDefaultFormState() function based on the inputFormData, isUncontrolled and state\n let defaultsFormData = inputFormData;\n if (inputFormData === IS_RESET) {\n defaultsFormData = undefined;\n }\n else if (inputFormData === undefined && isUncontrolled) {\n defaultsFormData = state.formData;\n }\n let formData;\n let computedRetrievedSchema;\n let wasSanitized = false;\n const preventInfiniteSanitize = [];\n do {\n formData = schemaUtils.getDefaultFormState(rootSchema, defaultsFormData, false, state.initialDefaultsGenerated);\n // Only hash when sanitizing, wrapping `formData` in an object to deal with a scalar/undefined value\n const formHash = shouldSanitize ? hashObject({ formData }) : '';\n computedRetrievedSchema = this.updateRetrievedSchema(retrievedSchema ?? schemaUtils.retrieveSchema(rootSchema, formData));\n if (shouldSanitize &&\n !preventInfiniteSanitize.includes(formHash) &&\n (hasNestedConditionalSchema || !deepEquals(computedRetrievedSchema, state.retrievedSchema))) {\n // Sanitize the form data if shouldSanitize is true, we haven't already processed this same formData AND\n // either the retrieved schema changed or the schema has a nested conditional that the check above can't see\n const sanitizedFormData = schemaUtils.sanitizeDataForNewSchema(computedRetrievedSchema, state.retrievedSchema, formData);\n wasSanitized = !deepEquals(sanitizedFormData, formData);\n if (wasSanitized) {\n // Update both the formData AND defaultsFormData due to the sanitize so the loop works with the new data\n formData = sanitizedFormData;\n defaultsFormData = sanitizedFormData;\n const sanitizedFormHash = hashObject({ formData: sanitizedFormData });\n // If we've seen the sanitized data before, we are done\n wasSanitized = !preventInfiniteSanitize.includes(sanitizedFormHash);\n preventInfiniteSanitize.push(sanitizedFormHash);\n }\n preventInfiniteSanitize.push(formHash);\n }\n else {\n wasSanitized = false;\n }\n } while (wasSanitized);\n const getCurrentErrors = () => {\n // If the `props.noValidate` option is set or the schema has changed, we reset the error state.\n // oxlint-disable-next-line typescript/no-deprecated\n if (props.noValidate || isSchemaChanged) {\n return { errors: [], errorSchema: {} };\n }\n if (!props.liveValidate) {\n return {\n errors: state.schemaValidationErrors || [],\n errorSchema: state.schemaValidationErrorSchema || {},\n };\n }\n return {\n errors: state.errors || [],\n errorSchema: state.errorSchema || {},\n };\n };\n let errors;\n let errorSchema;\n let { schemaValidationErrors, schemaValidationErrorSchema } = state;\n // If we are skipping live validate, it means that the state has already been updated with live validation errors\n if (mustValidate && !skipLiveValidate) {\n const liveValidation = this.liveValidate(rootSchema, schemaUtils, state.errorSchema, formData, undefined, state.customErrors, retrievedSchema, \n // If retrievedSchema is undefined which means the schema or formData has changed, we do not merge state.\n // Else in the case where it hasn't changed,\n retrievedSchema !== undefined);\n errors = liveValidation.errors;\n errorSchema = liveValidation.errorSchema;\n schemaValidationErrors = liveValidation.schemaValidationErrors;\n schemaValidationErrorSchema = liveValidation.schemaValidationErrorSchema;\n }\n else {\n const currentErrors = getCurrentErrors();\n errors = currentErrors.errors;\n errorSchema = currentErrors.errorSchema;\n // We only update the error schema for changed fields if mustValidate is false\n if (!mustValidate) {\n const formDataChangedFields = getFormDataChangedFields();\n if (formDataChangedFields.length > 0) {\n // `formDataChangedFields` carries the path of each field that changed, so clearing has to follow that path\n // instead of dropping the whole branch it starts in. The path is split with `toPath()`, the same way\n // `toErrorSchema()` splits a validation error property, so the two address the same entry. Intermediate\n // objects are forced so the numeric segment of an array item stays an object key, which is how an\n // `ErrorSchema` addresses array items.\n const newErrorSchema = formDataChangedFields.reduce((acc, path) => {\n const pathOfField = toPath(path);\n // Every container holding the field changed along with it, so an error of their own, such as the\n // `uniqueItems` of the array the field sits in, is cleared too. Only their own errors go: the other\n // fields they hold did not change and keep theirs.\n for (let i = 1; i < pathOfField.length; i++) {\n setByPath(acc, [...pathOfField.slice(0, i), ERRORS_KEY], undefined, true);\n }\n return setByPath(acc, pathOfField, undefined, true);\n }, {});\n schemaValidationErrorSchema = mergeObjects(currentErrors.errorSchema, newErrorSchema, 'preventDuplicates');\n errorSchema = schemaValidationErrorSchema;\n }\n }\n const mergedErrors = Form.mergeErrors({ errorSchema, errors }, props.extraErrors, state.customErrors);\n errors = mergedErrors.errors;\n errorSchema = mergedErrors.errorSchema;\n }\n // Only store a new registry when the props cause a different one to be created\n const newRegistry = Form.getRegistry(props, rootSchema, schemaUtils);\n const registry = deepEquals(state.registry, newRegistry) ? state.registry : newRegistry;\n // Only compute a new `fieldPathId` when the `idPrefix` is different than the existing fieldPathId's ID_KEY\n const fieldPathId = state.fieldPathId && state.fieldPathId?.[ID_KEY] === registry.globalFormOptions.idPrefix\n ? state.fieldPathId\n : toFieldPathId('', registry.globalFormOptions);\n const nextState = {\n schemaUtils,\n schema: rootSchema,\n uiSchema,\n fieldPathId,\n formData,\n edit,\n errors,\n errorSchema,\n schemaValidationErrors,\n schemaValidationErrorSchema,\n retrievedSchema: computedRetrievedSchema,\n hasNestedConditionalSchema,\n initialDefaultsGenerated: true,\n registry,\n };\n return nextState;\n }\n /** React lifecycle method that is used to determine whether component should be updated.\n *\n * @param nextProps - The next version of the props\n * @param nextState - The next version of the state\n * @returns - True if the component should be updated, false otherwise\n */\n shouldComponentUpdate(nextProps, nextState) {\n const { experimental_componentUpdateStrategy = 'customDeep' } = this.props;\n return shouldRender(this, nextProps, nextState, experimental_componentUpdateStrategy);\n }\n /** Validates the `formData` against the `schema` using the `altSchemaUtils` (if provided otherwise it uses the\n * `schemaUtils` in the state), returning the results.\n *\n * @param formData - The new form data to validate\n * @param schema - The schema used to validate against\n * @param [altSchemaUtils] - The alternate schemaUtils to use for validation\n * @param [retrievedSchema] - An optionally retrieved schema for per\n */\n validate(formData, schema = this.state.schema, altSchemaUtils, retrievedSchema) {\n const schemaUtils = altSchemaUtils || this.state.schemaUtils;\n const { customValidate, transformErrors, uiSchema } = this.props;\n // When a pre-resolved schema is provided (e.g., from live validation), use it directly.\n // Otherwise validate against the original schema so AJV sees the full constraint set.\n const validationSchema = retrievedSchema ?? schema;\n // JSON.stringify drops keys with `undefined` values; JSON.parse on the result gives AJV a clean\n // object that avoids spurious type errors for `type: \"string\"` fields that were cleared (#4518).\n const validationFormData = formData ? JSON.parse(JSON.stringify(formData)) : undefined;\n return schemaUtils\n .getValidator()\n .validateFormData(validationFormData, validationSchema, customValidate, transformErrors, uiSchema);\n }\n /** Renders any errors contained in the `state` in using the `ErrorList`, if not disabled by `showErrorList`. */\n renderErrors(registry) {\n const { errors, errorSchema, schema, uiSchema } = this.state;\n const options = getUiOptions(uiSchema);\n const ErrorListTemplate = getTemplate('ErrorListTemplate', registry, options);\n if (errors?.length) {\n return (_jsx(ErrorListTemplate, { errors: errors, errorSchema: errorSchema || {}, schema: schema, uiSchema: uiSchema, registry: registry }));\n }\n return null;\n }\n /** Merges any `extraErrors` or `customErrors` into the given `schemaValidation` object, returning the result\n *\n * @param schemaValidation - The `ValidationData` object into which additional errors are merged\n * @param [extraErrors] - The extra errors from the props\n * @param [customErrors] - The customErrors from custom components\n * @return - The `extraErrors` and `customErrors` merged into the `schemaValidation`\n * @private\n */\n static mergeErrors(schemaValidation, extraErrors, customErrors) {\n let { errorSchema, errors } = schemaValidation;\n if (extraErrors) {\n const merged = validationDataMerge(schemaValidation, extraErrors);\n errorSchema = merged.errorSchema;\n errors = merged.errors;\n }\n if (customErrors) {\n const merged = validationDataMerge({ errors, errorSchema }, customErrors.ErrorSchema, true);\n errorSchema = merged.errorSchema;\n errors = merged.errors;\n }\n return { errors, errorSchema };\n }\n /** Performs live validation and then updates and returns the errors and error schemas by potentially merging in\n * `extraErrors` and `customErrors`.\n *\n * @param rootSchema - The `rootSchema` from the state\n * @param schemaUtils - The `SchemaUtilsType` from the state\n * @param originalErrorSchema - The original `ErrorSchema` from the state\n * @param [formData] - The new form data to validate\n * @param [extraErrors] - The extra errors from the props\n * @param [customErrors] - The customErrors from custom components\n * @param [retrievedSchema] - An expanded schema, if not provided, it will be retrieved from the `schema` and `formData`\n * @param [mergeIntoOriginalErrorSchema=false] - Optional flag indicating whether we merge into original schema\n * @returns - An object containing `errorSchema`, `errors`, `schemaValidationErrors` and `schemaValidationErrorSchema`\n * @private\n */\n liveValidate(rootSchema, schemaUtils, originalErrorSchema, formData, extraErrors, customErrors, retrievedSchema, mergeIntoOriginalErrorSchema = false) {\n const schemaValidation = this.validate(formData, rootSchema, schemaUtils, retrievedSchema);\n const { errors } = schemaValidation;\n let { errorSchema } = schemaValidation;\n // We merge 'originalErrorSchema' with 'schemaValidation.errorSchema.'; This done to display the raised field error.\n if (mergeIntoOriginalErrorSchema) {\n errorSchema = mergeObjects(originalErrorSchema, schemaValidation.errorSchema, 'preventDuplicates');\n }\n const schemaValidationErrors = errors;\n const schemaValidationErrorSchema = errorSchema;\n const mergedErrors = Form.mergeErrors({ errorSchema, errors }, extraErrors, customErrors);\n return { ...mergedErrors, schemaValidationErrors, schemaValidationErrorSchema };\n }\n /** Returns the `formData` with only the elements specified in the `fields` list\n *\n * @param formData - The data for the `Form`\n * @param fields - The fields to keep while filtering\n * @deprecated - To be removed as an exported `Form` function in a future release; there isn't a planned replacement\n */\n // oxlint-disable-next-line class-methods-use-this, typescript/no-deprecated\n getUsedFormData = (formData, fields) => getUsedFormData(formData, fields);\n /** Returns the list of field names from inspecting the `pathSchema` as well as using the `formData`\n *\n * @param pathSchema - The `PathSchema` object for the form\n * @param [formData] - The form data to use while checking for empty objects/arrays\n * @deprecated - To be removed as an exported `Form` function in a future release; there isn't a planned replacement\n */\n // oxlint-disable-next-line class-methods-use-this, typescript/no-deprecated\n getFieldNames = (pathSchema, formData) => getFieldNames(pathSchema, formData);\n /** Returns the `formData` after filtering to remove any extra data not in a form field\n *\n * @param formData - The data for the `Form`\n * @returns The `formData` after omitting extra data\n * @deprecated - To be removed as an exported `Form` function in a future release, use `SchemaUtils.omitExtraData`\n * instead.\n */\n omitExtraData = (formData) => {\n const { schema, schemaUtils } = this.state;\n return schemaUtils.omitExtraData(schema, formData);\n };\n /** Allows a user to set a value for the provided `fieldPath`, which must be either a dotted path to the field OR a\n * `FieldPathList`. To set the root element, used either `''` or `[]` for the path. Passing undefined will clear the\n * value in the field.\n *\n * @param fieldPath - Either a dotted path to the field or the `FieldPathList` to the field\n * @param [newValue] - The new value for the field\n */\n setFieldValue = (fieldPath, newValue) => {\n const { registry } = this.state;\n const path = Array.isArray(fieldPath) ? fieldPath : fieldPath.split('.');\n const fieldPathId = toFieldPathId('', registry.globalFormOptions, path);\n this.onChange(newValue, path, undefined, fieldPathId[ID_KEY]);\n };\n /** Pushes the given change information into the `pendingChanges` array and then calls `processPendingChanges()` if\n * the array only contains a single pending change.\n *\n * @param newValue - The new form data from a change to a field\n * @param path - The path to the change into which to set the formData\n * @param [newErrorSchema] - The new `ErrorSchema` based on the field change\n * @param [id] - The id of the field that caused the change\n */\n onChange = (newValue, path, newErrorSchema, id) => {\n this.pendingChanges.push({ newValue, path, newErrorSchema, id });\n if (this.pendingChanges.length === 1) {\n this.processPendingChange();\n }\n };\n /** Function to handle changes made to a field in the `Form`. This handler gets the first change from the\n * `pendingChanges` list, containing the `newValue` for the `formData` and the `path` at which the `newValue` is to be\n * updated, along with a new, optional `ErrorSchema` for that same `path` and potentially the `id` of the field being\n * changed. It will first update the `formData` with any missing default fields and then, if `omitExtraData` and\n * `liveOmit` are turned on, the `formData` will be filtered to remove any extra data not in a form field. Then, the\n * resulting `formData` will be validated if required. The state will be updated with the new updated (potentially\n * filtered) `formData`, any errors that resulted from validation. Finally the `onChange` callback will be called, if\n * specified, with the updated state and the `processPendingChange()` function is called again.\n */\n processPendingChange() {\n if (this.pendingChanges.length === 0) {\n return;\n }\n // Mark that we're processing a user-initiated change.\n // This prevents componentDidUpdate from reverting oneOf/anyOf option switches.\n this.isProcessingUserChange = true;\n const { newValue, path, id } = this.pendingChanges[0];\n const { newErrorSchema } = this.pendingChanges[0];\n // oxlint-disable-next-line typescript/no-deprecated\n const { extraErrors, omitExtraData, liveOmit, noValidate, liveValidate, onChange, disabled, readonly } = this.props;\n const { formData: oldFormData, schemaUtils, schema, fieldPathId, schemaValidationErrorSchema, errors } = this.state;\n let { customErrors, retrievedSchema } = this.state;\n // Use the un-merged AJV-only schema as the base for re-merging extraErrors. Mirrors the\n // pattern in getStateFromProps/getDerivedStateFromProps and avoids the duplication that\n // happened when state.errorSchema (already containing merged extraErrors) was passed in.\n let mergeBaseErrorSchema = schemaValidationErrorSchema;\n const rootPathId = fieldPathId.path[0] || '';\n const isRootPath = !path || path.length === 0 || (path.length === 1 && path[0] === rootPathId);\n let formData = isRootPath ? newValue : structuredClone(oldFormData);\n // When switching from null to an object option in oneOf, MultiSchemaField sends\n // an object with property names but undefined values (e.g., {types: undefined, content: undefined}).\n // In this case, pass undefined to getStateFromProps to trigger fresh default computation.\n // Only do this when the previous formData was null/undefined (switching FROM null).\n const hasOnlyUndefinedValues = isObject(formData) &&\n Object.keys(formData).length > 0 &&\n Object.values(formData).every((v) => v === undefined);\n const wasPreviouslyNull = oldFormData === null || oldFormData === undefined;\n const inputForDefaults = hasOnlyUndefinedValues && wasPreviouslyNull ? undefined : formData;\n if (isObject(formData) || Array.isArray(formData)) {\n // Tracks if the user cleared a plain (non-oneOf/anyOf) leaf field.\n // The key is removed twice: once before getStateFromProps so inputForDefaults\n // reflects an empty field for conditional schema resolution, and once after so\n // the user's clear overrides any schema default getStateFromProps re-applied (#5125)\n // and AJV never receives { key: undefined } for type:\"string\" fields (#4518).\n let plainLeafWasCleared = false;\n if (newValue === ADDITIONAL_PROPERTY_KEY_REMOVE) {\n // For additional properties, this key was explicitly removed, so unset it\n unsetByPath(formData, path);\n }\n else if (!isRootPath) {\n // Set the new value at its path in the form data.\n let valueForPath = newValue;\n if (newValue === undefined) {\n const lastSegment = path[path.length - 1];\n if (typeof lastSegment === 'number') {\n // Array items: match ArrayField `handleChange` — AJV needs `null`, not undefined.\n valueForPath = null;\n }\n else {\n const { field } = schemaUtils.findFieldInSchema(schema, path, oldFormData);\n const leaf = field;\n const isOneOfOrAnyOfLeaf = leaf && (ONE_OF_KEY in leaf || ANY_OF_KEY in leaf);\n // oneOf/anyOf and unresolved leaves keep `undefined` so mergeDefaults doesn't\n // re-apply a branch default when the user clears the widget.\n // Plain resolved leaves use plainLeafWasCleared instead (see below).\n if (!isOneOfOrAnyOfLeaf && leaf !== undefined) {\n plainLeafWasCleared = true;\n }\n }\n }\n if (plainLeafWasCleared) {\n setByPath(formData, path, undefined);\n }\n else {\n setByPath(formData, path, valueForPath);\n }\n }\n const shouldSanitize = retrievedSchema && !isRootPath && !isObject(newValue) && !Array.isArray(newValue) && !disabled && !readonly;\n // Skip live validation here; it runs later in this function.\n const newState = this.getStateFromProps(this.props, inputForDefaults, undefined, undefined, undefined, true, shouldSanitize);\n formData = newState.formData;\n retrievedSchema = newState.retrievedSchema;\n // Re-set to undefined after merging defaults so the user's clear is preserved in\n // state (#5125 regression: without this, clearing a second field re-applies the\n // default to previously-cleared fields). The undefined key is stripped from the\n // formData copy passed to AJV via JSON.parse(JSON.stringify(...)) so the validator never\n // sees { [key]: undefined } for type:\"string\" or patternProperties fields (#4518).\n if (plainLeafWasCleared && formData) {\n setByPath(formData, path, undefined);\n }\n }\n const mustValidate = !noValidate && (liveValidate === true || liveValidate === 'onChange');\n let state = { formData, retrievedSchema };\n let newFormData = formData;\n if (omitExtraData === true && (liveOmit === true || liveOmit === 'onChange')) {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(formData);\n state = { ...state, formData: newFormData };\n }\n if (newErrorSchema) {\n // First check to see if there is an existing validation error on this path...\n const oldValidationError = !isRootPath\n ? getByPath(schemaValidationErrorSchema, path)\n : schemaValidationErrorSchema;\n // If there is an old validation error for this path, assume we are updating it directly\n if (oldValidationError && Object.keys(oldValidationError).length > 0) {\n // Apply the user-supplied newErrorSchema onto a clone of the AJV-only base, so that\n // mergeErrors below sees the user's error at this path without mutating shared state.\n if (!isRootPath) {\n mergeBaseErrorSchema = structuredClone(schemaValidationErrorSchema);\n // An `ErrorSchema` nests plain objects even at numeric segments, so never auto-vivify arrays\n setByPath(mergeBaseErrorSchema, path, newErrorSchema, true);\n }\n else {\n mergeBaseErrorSchema = newErrorSchema;\n }\n }\n else {\n if (!customErrors) {\n customErrors = new ErrorSchemaBuilder();\n }\n if (isRootPath) {\n const pathErrors = newErrorSchema[ERRORS_KEY];\n if (pathErrors) {\n // only set errors when there are some\n customErrors.setErrors(pathErrors);\n }\n }\n else {\n // An `ErrorSchema` nests plain objects even at numeric segments, so never auto-vivify arrays\n setByPath(customErrors.ErrorSchema, path, newErrorSchema, true);\n }\n }\n }\n else if (customErrors && getByPath(customErrors.ErrorSchema, [...path, ERRORS_KEY])) {\n // If we have custom errors and the path has an error, then we need to clear it\n customErrors.clearErrors(path);\n }\n // If there are pending changes in the queue, skip live validation since it will happen with the last change\n if (mustValidate && this.pendingChanges.length === 1) {\n const liveValidation = this.liveValidate(schema, schemaUtils, mergeBaseErrorSchema, newFormData, extraErrors, customErrors, retrievedSchema);\n state = { ...state, formData: newFormData, ...liveValidation, customErrors };\n }\n else if (!noValidate && newErrorSchema) {\n // Merging 'newErrorSchema' into 'errorSchema' to display the custom raised errors.\n const mergedErrors = Form.mergeErrors({ errorSchema: mergeBaseErrorSchema, errors }, extraErrors, customErrors);\n state = { ...state, formData: newFormData, ...mergedErrors, customErrors };\n }\n this.setState(state, () => {\n if (onChange) {\n onChange(toIChangeEvent({ ...this.state, ...state }), id);\n }\n // Now remove the change we just completed and call this again\n this.pendingChanges.shift();\n this.processPendingChange();\n });\n }\n /**\n * If the retrievedSchema has changed the new retrievedSchema is returned.\n * Otherwise, the old retrievedSchema is returned to persist reference.\n * - This ensures that AJV retrieves the schema from the cache when it has not changed,\n * avoiding the performance cost of recompiling the schema.\n *\n * @param retrievedSchema The new retrieved schema.\n * @returns The new retrieved schema if it has changed, else the old retrieved schema.\n */\n updateRetrievedSchema(retrievedSchema) {\n const isTheSame = deepEquals(retrievedSchema, this.state?.retrievedSchema);\n return isTheSame ? this.state.retrievedSchema : retrievedSchema;\n }\n /**\n * Callback function to handle reset form data.\n * - Reset all fields with default values.\n * - Reset validations and errors\n *\n */\n reset = () => {\n // Cast the IS_RESET symbol to T to avoid type issues, we use this symbol to detect reset mode\n const { formData: propsFormData, initialFormData = IS_RESET, onChange } = this.props;\n const newState = this.getStateFromProps(this.props, propsFormData ?? initialFormData, undefined, undefined, undefined, true);\n const newFormData = newState.formData;\n const state = {\n formData: newFormData,\n errorSchema: {},\n errors: [],\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n initialDefaultsGenerated: false,\n customErrors: undefined,\n };\n this.setState(state, () => onChange?.(toIChangeEvent({ ...this.state, ...state })));\n };\n /** Callback function to handle when a field on the form is blurred. Calls the `onBlur` callback for the `Form` if it\n * was provided. Also runs any live validation and/or live omit operations if the flags indicate they should happen\n * during `onBlur`.\n *\n * @param id - The unique `id` of the field that was blurred\n * @param data - The data associated with the field that was blurred\n */\n onBlur = (id, data) => {\n const { onBlur, omitExtraData, liveOmit, liveValidate } = this.props;\n if (onBlur) {\n onBlur(id, data);\n }\n if ((omitExtraData === true && liveOmit === 'onBlur') || liveValidate === 'onBlur') {\n const { onChange, extraErrors } = this.props;\n const { formData } = this.state;\n let newFormData = formData;\n let state = { formData: newFormData };\n if (omitExtraData === true && liveOmit === 'onBlur') {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(formData);\n state = { formData: newFormData };\n }\n if (liveValidate === 'onBlur') {\n const { schema, schemaUtils, errorSchema, customErrors, retrievedSchema } = this.state;\n const liveValidation = this.liveValidate(schema, schemaUtils, errorSchema, newFormData, extraErrors, customErrors, retrievedSchema);\n state = { formData: newFormData, ...liveValidation, customErrors };\n }\n const hasChanges = Object.keys(state)\n // Filter out `schemaValidationErrors` and `schemaValidationErrorSchema` since they aren't IChangeEvent props\n .filter((key) => !key.startsWith('schemaValidation'))\n .some((key) => {\n const oldData = this.state[key];\n const newData = state[key];\n return !deepEquals(oldData, newData);\n });\n this.setState(state, () => {\n if (onChange && hasChanges) {\n onChange(toIChangeEvent({ ...this.state, ...state }), id);\n }\n });\n }\n };\n /** Callback function to handle when a field on the form is focused. Calls the `onFocus` callback for the `Form` if it\n * was provided.\n *\n * @param id - The unique `id` of the field that was focused\n * @param data - The data associated with the field that was focused\n */\n onFocus = (id, data) => {\n const { onFocus } = this.props;\n if (onFocus) {\n onFocus(id, data);\n }\n };\n /** Callback function to handle when the form is submitted. First, it prevents the default event behavior. Nothing\n * happens if the target and currentTarget of the event are not the same. It will omit any extra data in the\n * `formData` in the state if `omitExtraData` is true. It will validate the resulting `formData`, reporting errors\n * via the `onError()` callback unless validation is disabled. Finally, it will add in any `extraErrors` and then call\n * back the `onSubmit` callback if it was provided.\n *\n * @param event - The submit HTML form event\n */\n onSubmit = (event) => {\n event.preventDefault();\n if (event.target !== event.currentTarget) {\n return;\n }\n event.persist();\n // oxlint-disable-next-line typescript/no-deprecated\n const { omitExtraData, extraErrors, noValidate, onSubmit } = this.props;\n let { formData: newFormData } = this.state;\n if (omitExtraData === true) {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(newFormData);\n }\n if (noValidate || this.validateFormWithFormData(newFormData)) {\n // There are no errors generated through schema validation.\n // Check for user provided errors and update state accordingly.\n const errorSchema = extraErrors || {};\n const errors = extraErrors ? toErrorList(extraErrors) : [];\n this.setState({\n formData: newFormData,\n errors,\n errorSchema,\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n }, () => {\n if (onSubmit) {\n onSubmit(toIChangeEvent({ ...this.state, formData: newFormData }, 'submitted'), event);\n }\n });\n }\n };\n /** Extracts the `GlobalFormOptions` from the given Form `props`\n *\n * @param props - The form props to extract the global form options from\n * @returns - The `GlobalFormOptions` from the props\n * @private\n */\n static getGlobalFormOptions(props) {\n const { uiSchema = {}, experimental_componentUpdateStrategy, idSeparator = DEFAULT_ID_SEPARATOR, idPrefix = DEFAULT_ID_PREFIX, nameGenerator, useFallbackUiForUnsupportedType = false, } = props;\n // oxlint-disable-next-line typescript/no-deprecated\n const rootFieldId = uiSchema['ui:rootFieldId'];\n // Omit any options that are undefined or null\n return {\n idPrefix: rootFieldId || idPrefix,\n idSeparator,\n useFallbackUiForUnsupportedType,\n ...(experimental_componentUpdateStrategy !== undefined && { experimental_componentUpdateStrategy }),\n ...(nameGenerator !== undefined && { nameGenerator }),\n };\n }\n /** Computed the registry for the form using the given `props`, `schema` and `schemaUtils` */\n static getRegistry(props, schema, schemaUtils) {\n const { translateString: customTranslateString, uiSchema = {} } = props;\n const { fields, templates, widgets, formContext, translateString } = getDefaultRegistry();\n return {\n fields: { ...fields, ...props.fields },\n templates: {\n ...templates,\n ...props.templates,\n ButtonTemplates: {\n ...templates.ButtonTemplates,\n ...props.templates?.ButtonTemplates,\n },\n },\n widgets: { ...widgets, ...props.widgets },\n rootSchema: schema,\n formContext: props.formContext || formContext,\n schemaUtils,\n translateString: customTranslateString || translateString,\n globalUiOptions: uiSchema[UI_GLOBAL_OPTIONS_KEY],\n globalFormOptions: Form.getGlobalFormOptions(props),\n uiSchemaDefinitions: uiSchema[UI_DEFINITIONS_KEY] ?? {},\n };\n }\n /** Provides a function that can be used to programmatically submit the `Form` */\n submit = () => {\n if (this.formElement.current) {\n const submitCustomEvent = new CustomEvent('submit', {\n cancelable: true,\n });\n submitCustomEvent.preventDefault();\n this.formElement.current.dispatchEvent(submitCustomEvent);\n this.formElement.current.requestSubmit();\n }\n };\n /** Attempts to focus on the field associated with the `error`. Uses the `property` field to compute path of the error\n * field, then, using the `idPrefix` and `idSeparator` converts that path into an id. Then the input element with that\n * id is attempted to be found using the `formElement` ref. If it is located, then it is focused.\n *\n * @param error - The error on which to focus\n */\n focusOnError(error) {\n const { idPrefix = 'root', idSeparator = '_' } = this.props;\n const { property } = error;\n const path = toPath(property ?? '');\n // The id of the root element is the idPrefix, so prepend it to the path\n path.unshift(idPrefix);\n const elementId = path.join(idSeparator);\n let field = this.formElement.current.elements[elementId];\n if (!field) {\n // if not an exact match, try finding a focusable element starting with the element id (like radio buttons or checkboxes)\n // some themes (e.g. shadcn) use button elements instead of native inputs for radio groups\n field = this.formElement.current.querySelector(`input[id^=\"${elementId}\"], button[id^=\"${elementId}\"]`);\n }\n if (field?.length) {\n // If we got a list with length > 0\n // oxlint-disable-next-line prefer-destructuring\n field = field[0];\n }\n if (field) {\n field.focus();\n }\n }\n /** Validates the form using the given `formData`. For use on form submission or on programmatic validation.\n * If `onError` is provided, then it will be called with the list of errors.\n *\n * @param formData - The form data to validate\n * @returns - True if the form is valid, false otherwise.\n */\n validateFormWithFormData = (formData) => {\n const { extraErrors, extraErrorsBlockSubmit, focusOnFirstError, onError } = this.props;\n const { errors: prevErrors } = this.state;\n const schemaValidation = this.validate(formData);\n // Always merge extraErrors so they remain visible in state regardless of extraErrorsBlockSubmit.\n const { errors, errorSchema } = extraErrors ? Form.mergeErrors(schemaValidation, extraErrors) : schemaValidation;\n // hasError gates submission: schema errors always block; extraErrors only block when\n // extraErrorsBlockSubmit is set (non-breaking default: extraErrors are informational only).\n const hasError = schemaValidation.errors.length > 0 || (extraErrors && extraErrorsBlockSubmit);\n if (hasError) {\n if (focusOnFirstError) {\n if (typeof focusOnFirstError === 'function') {\n focusOnFirstError(errors[0]);\n }\n else {\n this.focusOnError(errors[0]);\n }\n }\n this.setState({\n errors,\n errorSchema,\n schemaValidationErrors: schemaValidation.errors,\n schemaValidationErrorSchema: schemaValidation.errorSchema,\n }, () => {\n if (onError) {\n onError(errors);\n }\n else {\n // oxlint-disable-next-line no-console\n console.error('Form validation failed', errors);\n }\n });\n }\n else if (errors.length > 0) {\n // Non-blocking extraErrors are present — update display state without triggering onError.\n this.setState({\n errors,\n errorSchema,\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n });\n }\n else if (prevErrors.length > 0) {\n this.setState({\n errors: [],\n errorSchema: {},\n schemaValidationErrors: [],\n schemaValidationErrorSchema: {},\n });\n }\n return !hasError;\n };\n /** Programmatically validate the form. If `omitExtraData` is true, the `formData` will first be filtered to remove\n * any extra data not in a form field. If `onError` is provided, then it will be called with the list of errors the\n * same way as would happen on form submission.\n *\n * @returns - True if the form is valid, false otherwise.\n */\n validateForm() {\n const { omitExtraData } = this.props;\n let { formData: newFormData } = this.state;\n if (omitExtraData === true) {\n // oxlint-disable-next-line typescript/no-deprecated\n newFormData = this.omitExtraData(newFormData);\n }\n return this.validateFormWithFormData(newFormData);\n }\n /** Renders the `Form` fields inside the
| `tagName` or `_internalFormWrapper`, rendering any errors if\n * needed along with the submit button or any children of the form.\n */\n render() {\n const { children, id, className = '', tagName, name, method, target, action, autoComplete, enctype, acceptCharset, noHtml5Validate = false, disabled, readonly, showErrorList = 'top', _internalFormWrapper, } = this.props;\n const { schema, uiSchema, formData, errorSchema, fieldPathId, registry } = this.state;\n const { SchemaField: SchemaFieldComponent } = registry.fields;\n const { SubmitButton } = registry.templates.ButtonTemplates;\n // The `semantic-ui` and `material-ui` themes have `_internalFormWrapper`s that take an `as` prop that is the\n // PropTypes.elementType to use for the inner tag, so we'll need to pass `tagName` along if it is provided.\n // NOTE, the `as` prop is native to `semantic-ui` and is emulated in the `material-ui` theme\n const as = _internalFormWrapper ? tagName : undefined;\n const FormTag = _internalFormWrapper || tagName || 'form';\n let { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions = {} } = getUiOptions(uiSchema);\n if (disabled) {\n submitOptions = { ...submitOptions, props: { ...submitOptions.props, disabled: true } };\n }\n const submitUiSchema = { [UI_OPTIONS_KEY]: { [SUBMIT_BTN_OPTIONS_KEY]: submitOptions } };\n return (_jsxs(FormTag, { className: className || 'rjsf', id: id, name: name, method: method, target: target, action: action, autoComplete: autoComplete, encType: enctype, acceptCharset: acceptCharset, noValidate: noHtml5Validate, onSubmit: this.onSubmit, as: as, ref: this.formElement, children: [showErrorList === 'top' && this.renderErrors(registry), _jsx(SchemaFieldComponent, { name: '', schema: schema, uiSchema: uiSchema, errorSchema: errorSchema, fieldPathId: fieldPathId, formData: formData, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, registry: registry, disabled: disabled, readonly: readonly }), children || _jsx(SubmitButton, { uiSchema: submitUiSchema, registry: registry }), showErrorList === 'bottom' && this.renderErrors(registry)] }));\n }\n}\n//# sourceMappingURL=Form.js.map","import { ANY_OF_KEY, createErrorHandler, getByPath, getDefaultFormState, getUiOptions, ONE_OF_KEY, PROPERTIES_KEY, toErrorSchema, toPath, unwrapErrorHandler, validationDataMerge, } from '@rjsf/utils';\n/** Filters duplicate errors from `anyOf`/`oneOf` schema paths according to the `suppressDuplicateFiltering` flag.\n *\n * @param errorList - The list of `RJSFValidationError`s to filter\n * @param [suppressDuplicateFiltering='none'] - Controls which duplicate filtering is suppressed:\n * - `'none'` (default): filters duplicates for both `anyOf` and `oneOf`\n * - `'all'`: returns `errorList` unmodified\n * - `'anyOf'`: suppresses filtering for `anyOf` errors; `oneOf` duplicates are still filtered\n * - `'oneOf'`: suppresses filtering for `oneOf` errors; `anyOf` duplicates are still filtered\n */\nexport function filterDuplicateErrors(errorList, suppressDuplicateFiltering = 'none') {\n if (suppressDuplicateFiltering === 'all') {\n return errorList;\n }\n return errorList.reduce((acc, err) => {\n const { message, schemaPath } = err;\n // Compute the index only when filtering for that keyword is not suppressed.\n // 'all' is already handled above; within the reduce, only 'none', 'anyOf', and 'oneOf' are possible.\n const anyOfIndex = suppressDuplicateFiltering !== 'anyOf' ? schemaPath?.indexOf(`/${ANY_OF_KEY}/`) : undefined;\n const oneOfIndex = suppressDuplicateFiltering !== 'oneOf' ? schemaPath?.indexOf(`/${ONE_OF_KEY}/`) : undefined;\n let schemaPrefix;\n if (anyOfIndex && anyOfIndex >= 0) {\n schemaPrefix = schemaPath?.substring(0, anyOfIndex);\n }\n else if (oneOfIndex && oneOfIndex >= 0) {\n schemaPrefix = schemaPath?.substring(0, oneOfIndex);\n }\n // If there is a schemaPrefix, then search for a duplicate message with the same prefix, otherwise undefined\n const dup = schemaPrefix\n ? acc.find((e) => e.message === message && e.schemaPath?.startsWith(schemaPrefix))\n : undefined;\n if (!dup) {\n acc.push(err);\n }\n return acc;\n }, []);\n}\n/** Transforming the error output from ajv to format used by @rjsf/utils.\n * At some point, components should be updated to support ajv.\n *\n * @param errors - The list of AJV errors to convert to `RJSFValidationErrors`\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n * @param [suppressDuplicateFiltering] - Controls which duplicate filtering is suppressed; see `filterDuplicateErrors`\n * @param [schema] - The schema for the validation\n */\nexport function transformRJSFValidationErrors(errors = [], uiSchema, suppressDuplicateFiltering, schema) {\n const errorList = errors.map((e) => {\n const { instancePath, keyword, params, schemaPath, parentSchema, ...rest } = e;\n let { message = '' } = rest;\n let property = instancePath.replace(/\\//g, '.');\n let stack = `${property} ${message}`.trim();\n let uiTitle = '';\n const rawPropertyNames = [\n ...(params.deps?.split(', ') || []),\n params.missingProperty,\n params.property,\n ].filter((item) => item);\n if (rawPropertyNames.length > 0) {\n rawPropertyNames.forEach((currentProperty) => {\n const path = property ? `${property}.${currentProperty}` : currentProperty;\n let uiSchemaTitle = getUiOptions(getByPath(uiSchema, toPath(path))).title;\n if (uiSchemaTitle === undefined) {\n // To retrieve a title from UI schema, construct a path to UI schema from `schemaPath` and `currentProperty`.\n // For example, when `#/properties/A/properties/B/required` and `C` are given, they are converted into `['A', 'B', 'C']`.\n const uiSchemaPath = schemaPath\n .replace(/\\/properties\\//g, '/')\n .split('/')\n .slice(1, -1)\n .concat([currentProperty]);\n uiSchemaTitle = getUiOptions(getByPath(uiSchema, uiSchemaPath)).title;\n }\n if (uiSchemaTitle === undefined) {\n // schemaPath may include non-property segments (e.g. allOf/if/then) that do\n // not exist in the uiSchema; fall back to the instance path, the same way the\n // root-schema title fallback does below.\n const propParts = property.replace(/^\\./, '').split('.').filter(Boolean);\n uiSchemaTitle = getByPath(uiSchema, [...propParts, currentProperty, 'title']);\n }\n if (uiSchemaTitle) {\n message = message.replace(`'${currentProperty}'`, `'${uiSchemaTitle}'`);\n uiTitle = uiSchemaTitle;\n }\n else {\n const parentSchemaTitle = getByPath(parentSchema, [\n PROPERTIES_KEY,\n currentProperty,\n 'title',\n ]);\n if (parentSchemaTitle) {\n message = message.replace(`'${currentProperty}'`, `'${parentSchemaTitle}'`);\n uiTitle = parentSchemaTitle;\n }\n else if (schema) {\n // parentSchema may be an allOf/anyOf/oneOf entry that lacks `properties`;\n // fall back to looking up the title from the root schema.\n const propParts = property.replace(/^\\./, '').split('.').filter(Boolean);\n const aSchemaPath = [];\n for (const part of propParts) {\n aSchemaPath.push(PROPERTIES_KEY, part);\n }\n aSchemaPath.push(PROPERTIES_KEY, currentProperty, 'title');\n const rootSchemaTitle = getByPath(schema, aSchemaPath);\n if (rootSchemaTitle) {\n message = message.replace(`'${currentProperty}'`, `'${rootSchemaTitle}'`);\n uiTitle = rootSchemaTitle;\n }\n }\n }\n });\n stack = message;\n }\n else {\n const uiSchemaTitle = getUiOptions(getByPath(uiSchema, toPath(property))).title;\n if (uiSchemaTitle) {\n stack = `'${uiSchemaTitle}' ${message}`.trim();\n uiTitle = uiSchemaTitle;\n }\n else {\n const parentSchemaTitle = parentSchema?.title;\n if (parentSchemaTitle) {\n stack = `'${parentSchemaTitle}' ${message}`.trim();\n uiTitle = parentSchemaTitle;\n }\n }\n }\n // If params.missingProperty is undefined, it is removed from rawPropertyNames by filter((item) => item).\n if ('missingProperty' in params) {\n property = property ? `${property}.${params.missingProperty}` : params.missingProperty;\n }\n // put data in expected format\n return {\n name: keyword,\n property,\n message,\n params, // specific to ajv\n stack,\n schemaPath,\n title: uiTitle,\n };\n });\n return filterDuplicateErrors(errorList, suppressDuplicateFiltering);\n}\n/** This function processes the `formData` with an optional user contributed `customValidate` function, which receives\n * the form data and a `errorHandler` function that will be used to add custom validation errors for each field. Also\n * supports a `transformErrors` function that will take the raw AJV validation errors, prior to custom validation and\n * transform them in what ever way it chooses.\n *\n * @param validator - The `ValidatorType` implementation used for the `getDefaultFormState()` call\n * @param rawErrors - The list of raw `ErrorObject`s to process\n * @param formData - The form data to validate\n * @param schema - The schema against which to validate the form data\n * @param [customValidate] - An optional function that is used to perform custom validation\n * @param [transformErrors] - An optional function that is used to transform errors after AJV validation\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n * @param [suppressDuplicateFiltering] - Controls which duplicate filtering is suppressed; see `filterDuplicateErrors`\n */\nexport default function processRawValidationErrors(validator, rawErrors, formData, schema, customValidate, transformErrors, uiSchema, suppressDuplicateFiltering) {\n const { validationError: invalidSchemaError } = rawErrors;\n let errors = transformRJSFValidationErrors(rawErrors.errors, uiSchema, suppressDuplicateFiltering, schema);\n if (invalidSchemaError) {\n errors = [...errors, { stack: invalidSchemaError.message }];\n }\n if (typeof transformErrors === 'function') {\n errors = transformErrors(errors, uiSchema);\n }\n let errorSchema = toErrorSchema(errors);\n if (invalidSchemaError) {\n errorSchema = {\n ...errorSchema,\n $schema: {\n __errors: [invalidSchemaError.message],\n },\n };\n }\n if (typeof customValidate !== 'function') {\n return { errors, errorSchema };\n }\n // Include form data with undefined values, which is required for custom validation.\n const newFormData = getDefaultFormState(validator, schema, formData, schema, true);\n const errorHandler = customValidate(newFormData, createErrorHandler(newFormData), uiSchema, errorSchema);\n const userErrorSchema = unwrapErrorHandler(errorHandler);\n return validationDataMerge({ errors, errorSchema }, userErrorSchema);\n}\n//# sourceMappingURL=processRawValidationErrors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nclass _CodeOrName {\n}\nexports._CodeOrName = _CodeOrName;\nexports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;\nclass Name extends _CodeOrName {\n constructor(s) {\n super();\n if (!exports.IDENTIFIER.test(s))\n throw new Error(\"CodeGen: name must be a valid identifier\");\n this.str = s;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n return false;\n }\n get names() {\n return { [this.str]: 1 };\n }\n}\nexports.Name = Name;\nclass _Code extends _CodeOrName {\n constructor(code) {\n super();\n this._items = typeof code === \"string\" ? [code] : code;\n }\n toString() {\n return this.str;\n }\n emptyStr() {\n if (this._items.length > 1)\n return false;\n const item = this._items[0];\n return item === \"\" || item === '\"\"';\n }\n get str() {\n var _a;\n return ((_a = this._str) !== null && _a !== void 0 ? _a : (this._str = this._items.reduce((s, c) => `${s}${c}`, \"\")));\n }\n get names() {\n var _a;\n return ((_a = this._names) !== null && _a !== void 0 ? _a : (this._names = this._items.reduce((names, c) => {\n if (c instanceof Name)\n names[c.str] = (names[c.str] || 0) + 1;\n return names;\n }, {})));\n }\n}\nexports._Code = _Code;\nexports.nil = new _Code(\"\");\nfunction _(strs, ...args) {\n const code = [strs[0]];\n let i = 0;\n while (i < args.length) {\n addCodeArg(code, args[i]);\n code.push(strs[++i]);\n }\n return new _Code(code);\n}\nexports._ = _;\nconst plus = new _Code(\"+\");\nfunction str(strs, ...args) {\n const expr = [safeStringify(strs[0])];\n let i = 0;\n while (i < args.length) {\n expr.push(plus);\n addCodeArg(expr, args[i]);\n expr.push(plus, safeStringify(strs[++i]));\n }\n optimize(expr);\n return new _Code(expr);\n}\nexports.str = str;\nfunction addCodeArg(code, arg) {\n if (arg instanceof _Code)\n code.push(...arg._items);\n else if (arg instanceof Name)\n code.push(arg);\n else\n code.push(interpolate(arg));\n}\nexports.addCodeArg = addCodeArg;\nfunction optimize(expr) {\n let i = 1;\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1]);\n if (res !== undefined) {\n expr.splice(i - 1, 3, res);\n continue;\n }\n expr[i++] = \"+\";\n }\n i++;\n }\n}\nfunction mergeExprItems(a, b) {\n if (b === '\"\"')\n return a;\n if (a === '\"\"')\n return b;\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"')\n return;\n if (typeof b != \"string\")\n return `${a.slice(0, -1)}${b}\"`;\n if (b[0] === '\"')\n return a.slice(0, -1) + b.slice(1);\n return;\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name))\n return `\"${a}${b.slice(1)}`;\n return;\n}\nfunction strConcat(c1, c2) {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str `${c1}${c2}`;\n}\nexports.strConcat = strConcat;\n// TODO do not allow arrays here\nfunction interpolate(x) {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x);\n}\nfunction stringify(x) {\n return new _Code(safeStringify(x));\n}\nexports.stringify = stringify;\nfunction safeStringify(x) {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\nexports.safeStringify = safeStringify;\nfunction getProperty(key) {\n return typeof key == \"string\" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _ `[${key}]`;\n}\nexports.getProperty = getProperty;\n//Does best effort to format the name properly\nfunction getEsmExportName(key) {\n if (typeof key == \"string\" && exports.IDENTIFIER.test(key)) {\n return new _Code(`${key}`);\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`);\n}\nexports.getEsmExportName = getEsmExportName;\nfunction regexpCode(rx) {\n return new _Code(rx.toString());\n}\nexports.regexpCode = regexpCode;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = void 0;\nconst code_1 = require(\"./code\");\nclass ValueError extends Error {\n constructor(name) {\n super(`CodeGen: \"code\" for ${name} not defined`);\n this.value = name.value;\n }\n}\nvar UsedValueState;\n(function (UsedValueState) {\n UsedValueState[UsedValueState[\"Started\"] = 0] = \"Started\";\n UsedValueState[UsedValueState[\"Completed\"] = 1] = \"Completed\";\n})(UsedValueState || (exports.UsedValueState = UsedValueState = {}));\nexports.varKinds = {\n const: new code_1.Name(\"const\"),\n let: new code_1.Name(\"let\"),\n var: new code_1.Name(\"var\"),\n};\nclass Scope {\n constructor({ prefixes, parent } = {}) {\n this._names = {};\n this._prefixes = prefixes;\n this._parent = parent;\n }\n toName(nameOrPrefix) {\n return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix);\n }\n name(prefix) {\n return new code_1.Name(this._newName(prefix));\n }\n _newName(prefix) {\n const ng = this._names[prefix] || this._nameGroup(prefix);\n return `${prefix}${ng.index++}`;\n }\n _nameGroup(prefix) {\n var _a, _b;\n if (((_b = (_a = this._parent) === null || _a === void 0 ? void 0 : _a._prefixes) === null || _b === void 0 ? void 0 : _b.has(prefix)) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`);\n }\n return (this._names[prefix] = { prefix, index: 0 });\n }\n}\nexports.Scope = Scope;\nclass ValueScopeName extends code_1.Name {\n constructor(prefix, nameStr) {\n super(nameStr);\n this.prefix = prefix;\n }\n setValue(value, { property, itemIndex }) {\n this.value = value;\n this.scopePath = (0, code_1._) `.${new code_1.Name(property)}[${itemIndex}]`;\n }\n}\nexports.ValueScopeName = ValueScopeName;\nconst line = (0, code_1._) `\\n`;\nclass ValueScope extends Scope {\n constructor(opts) {\n super(opts);\n this._values = {};\n this._scope = opts.scope;\n this.opts = { ...opts, _n: opts.lines ? line : code_1.nil };\n }\n get() {\n return this._scope;\n }\n name(prefix) {\n return new ValueScopeName(prefix, this._newName(prefix));\n }\n value(nameOrPrefix, value) {\n var _a;\n if (value.ref === undefined)\n throw new Error(\"CodeGen: ref must be passed in value\");\n const name = this.toName(nameOrPrefix);\n const { prefix } = name;\n const valueKey = (_a = value.key) !== null && _a !== void 0 ? _a : value.ref;\n let vs = this._values[prefix];\n if (vs) {\n const _name = vs.get(valueKey);\n if (_name)\n return _name;\n }\n else {\n vs = this._values[prefix] = new Map();\n }\n vs.set(valueKey, name);\n const s = this._scope[prefix] || (this._scope[prefix] = []);\n const itemIndex = s.length;\n s[itemIndex] = value.ref;\n name.setValue(value, { property: prefix, itemIndex });\n return name;\n }\n getValue(prefix, keyOrRef) {\n const vs = this._values[prefix];\n if (!vs)\n return;\n return vs.get(keyOrRef);\n }\n scopeRefs(scopeName, values = this._values) {\n return this._reduceValues(values, (name) => {\n if (name.scopePath === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return (0, code_1._) `${scopeName}${name.scopePath}`;\n });\n }\n scopeCode(values = this._values, usedValues, getCode) {\n return this._reduceValues(values, (name) => {\n if (name.value === undefined)\n throw new Error(`CodeGen: name \"${name}\" has no value`);\n return name.value.code;\n }, usedValues, getCode);\n }\n _reduceValues(values, valueCode, usedValues = {}, getCode) {\n let code = code_1.nil;\n for (const prefix in values) {\n const vs = values[prefix];\n if (!vs)\n continue;\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map());\n vs.forEach((name) => {\n if (nameSet.has(name))\n return;\n nameSet.set(name, UsedValueState.Started);\n let c = valueCode(name);\n if (c) {\n const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const;\n code = (0, code_1._) `${code}${def} ${name} = ${c};${this.opts._n}`;\n }\n else if ((c = getCode === null || getCode === void 0 ? void 0 : getCode(name))) {\n code = (0, code_1._) `${code}${c}${this.opts._n}`;\n }\n else {\n throw new ValueError(name);\n }\n nameSet.set(name, UsedValueState.Completed);\n });\n }\n return code;\n }\n}\nexports.ValueScope = ValueScope;\n//# sourceMappingURL=scope.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = void 0;\nconst code_1 = require(\"./code\");\nconst scope_1 = require(\"./scope\");\nvar code_2 = require(\"./code\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return code_2._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return code_2.str; } });\nObject.defineProperty(exports, \"strConcat\", { enumerable: true, get: function () { return code_2.strConcat; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return code_2.nil; } });\nObject.defineProperty(exports, \"getProperty\", { enumerable: true, get: function () { return code_2.getProperty; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return code_2.stringify; } });\nObject.defineProperty(exports, \"regexpCode\", { enumerable: true, get: function () { return code_2.regexpCode; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return code_2.Name; } });\nvar scope_2 = require(\"./scope\");\nObject.defineProperty(exports, \"Scope\", { enumerable: true, get: function () { return scope_2.Scope; } });\nObject.defineProperty(exports, \"ValueScope\", { enumerable: true, get: function () { return scope_2.ValueScope; } });\nObject.defineProperty(exports, \"ValueScopeName\", { enumerable: true, get: function () { return scope_2.ValueScopeName; } });\nObject.defineProperty(exports, \"varKinds\", { enumerable: true, get: function () { return scope_2.varKinds; } });\nexports.operators = {\n GT: new code_1._Code(\">\"),\n GTE: new code_1._Code(\">=\"),\n LT: new code_1._Code(\"<\"),\n LTE: new code_1._Code(\"<=\"),\n EQ: new code_1._Code(\"===\"),\n NEQ: new code_1._Code(\"!==\"),\n NOT: new code_1._Code(\"!\"),\n OR: new code_1._Code(\"||\"),\n AND: new code_1._Code(\"&&\"),\n ADD: new code_1._Code(\"+\"),\n};\nclass Node {\n optimizeNodes() {\n return this;\n }\n optimizeNames(_names, _constants) {\n return this;\n }\n}\nclass Def extends Node {\n constructor(varKind, name, rhs) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.rhs = rhs;\n }\n render({ es5, _n }) {\n const varKind = es5 ? scope_1.varKinds.var : this.varKind;\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`;\n return `${varKind} ${this.name}${rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (!names[this.name.str])\n return;\n if (this.rhs)\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {};\n }\n}\nclass Assign extends Node {\n constructor(lhs, rhs, sideEffects) {\n super();\n this.lhs = lhs;\n this.rhs = rhs;\n this.sideEffects = sideEffects;\n }\n render({ _n }) {\n return `${this.lhs} = ${this.rhs};` + _n;\n }\n optimizeNames(names, constants) {\n if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects)\n return;\n this.rhs = optimizeExpr(this.rhs, names, constants);\n return this;\n }\n get names() {\n const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names };\n return addExprNames(names, this.rhs);\n }\n}\nclass AssignOp extends Assign {\n constructor(lhs, op, rhs, sideEffects) {\n super(lhs, rhs, sideEffects);\n this.op = op;\n }\n render({ _n }) {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n;\n }\n}\nclass Label extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n return `${this.label}:` + _n;\n }\n}\nclass Break extends Node {\n constructor(label) {\n super();\n this.label = label;\n this.names = {};\n }\n render({ _n }) {\n const label = this.label ? ` ${this.label}` : \"\";\n return `break${label};` + _n;\n }\n}\nclass Throw extends Node {\n constructor(error) {\n super();\n this.error = error;\n }\n render({ _n }) {\n return `throw ${this.error};` + _n;\n }\n get names() {\n return this.error.names;\n }\n}\nclass AnyCode extends Node {\n constructor(code) {\n super();\n this.code = code;\n }\n render({ _n }) {\n return `${this.code};` + _n;\n }\n optimizeNodes() {\n return `${this.code}` ? this : undefined;\n }\n optimizeNames(names, constants) {\n this.code = optimizeExpr(this.code, names, constants);\n return this;\n }\n get names() {\n return this.code instanceof code_1._CodeOrName ? this.code.names : {};\n }\n}\nclass ParentNode extends Node {\n constructor(nodes = []) {\n super();\n this.nodes = nodes;\n }\n render(opts) {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\");\n }\n optimizeNodes() {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n const n = nodes[i].optimizeNodes();\n if (Array.isArray(n))\n nodes.splice(i, 1, ...n);\n else if (n)\n nodes[i] = n;\n else\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n optimizeNames(names, constants) {\n const { nodes } = this;\n let i = nodes.length;\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i];\n if (n.optimizeNames(names, constants))\n continue;\n subtractNames(names, n.names);\n nodes.splice(i, 1);\n }\n return nodes.length > 0 ? this : undefined;\n }\n get names() {\n return this.nodes.reduce((names, n) => addNames(names, n.names), {});\n }\n}\nclass BlockNode extends ParentNode {\n render(opts) {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n;\n }\n}\nclass Root extends ParentNode {\n}\nclass Else extends BlockNode {\n}\nElse.kind = \"else\";\nclass If extends BlockNode {\n constructor(condition, nodes) {\n super(nodes);\n this.condition = condition;\n }\n render(opts) {\n let code = `if(${this.condition})` + super.render(opts);\n if (this.else)\n code += \"else \" + this.else.render(opts);\n return code;\n }\n optimizeNodes() {\n super.optimizeNodes();\n const cond = this.condition;\n if (cond === true)\n return this.nodes; // else is ignored here\n let e = this.else;\n if (e) {\n const ns = e.optimizeNodes();\n e = this.else = Array.isArray(ns) ? new Else(ns) : ns;\n }\n if (e) {\n if (cond === false)\n return e instanceof If ? e : e.nodes;\n if (this.nodes.length)\n return this;\n return new If(not(cond), e instanceof If ? [e] : e.nodes);\n }\n if (cond === false || !this.nodes.length)\n return undefined;\n return this;\n }\n optimizeNames(names, constants) {\n var _a;\n this.else = (_a = this.else) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n if (!(super.optimizeNames(names, constants) || this.else))\n return;\n this.condition = optimizeExpr(this.condition, names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n addExprNames(names, this.condition);\n if (this.else)\n addNames(names, this.else.names);\n return names;\n }\n}\nIf.kind = \"if\";\nclass For extends BlockNode {\n}\nFor.kind = \"for\";\nclass ForLoop extends For {\n constructor(iteration) {\n super();\n this.iteration = iteration;\n }\n render(opts) {\n return `for(${this.iteration})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iteration = optimizeExpr(this.iteration, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iteration.names);\n }\n}\nclass ForRange extends For {\n constructor(varKind, name, from, to) {\n super();\n this.varKind = varKind;\n this.name = name;\n this.from = from;\n this.to = to;\n }\n render(opts) {\n const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind;\n const { name, from, to } = this;\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts);\n }\n get names() {\n const names = addExprNames(super.names, this.from);\n return addExprNames(names, this.to);\n }\n}\nclass ForIter extends For {\n constructor(loop, varKind, name, iterable) {\n super();\n this.loop = loop;\n this.varKind = varKind;\n this.name = name;\n this.iterable = iterable;\n }\n render(opts) {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts);\n }\n optimizeNames(names, constants) {\n if (!super.optimizeNames(names, constants))\n return;\n this.iterable = optimizeExpr(this.iterable, names, constants);\n return this;\n }\n get names() {\n return addNames(super.names, this.iterable.names);\n }\n}\nclass Func extends BlockNode {\n constructor(name, args, async) {\n super();\n this.name = name;\n this.args = args;\n this.async = async;\n }\n render(opts) {\n const _async = this.async ? \"async \" : \"\";\n return `${_async}function ${this.name}(${this.args})` + super.render(opts);\n }\n}\nFunc.kind = \"func\";\nclass Return extends ParentNode {\n render(opts) {\n return \"return \" + super.render(opts);\n }\n}\nReturn.kind = \"return\";\nclass Try extends BlockNode {\n render(opts) {\n let code = \"try\" + super.render(opts);\n if (this.catch)\n code += this.catch.render(opts);\n if (this.finally)\n code += this.finally.render(opts);\n return code;\n }\n optimizeNodes() {\n var _a, _b;\n super.optimizeNodes();\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNodes();\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNodes();\n return this;\n }\n optimizeNames(names, constants) {\n var _a, _b;\n super.optimizeNames(names, constants);\n (_a = this.catch) === null || _a === void 0 ? void 0 : _a.optimizeNames(names, constants);\n (_b = this.finally) === null || _b === void 0 ? void 0 : _b.optimizeNames(names, constants);\n return this;\n }\n get names() {\n const names = super.names;\n if (this.catch)\n addNames(names, this.catch.names);\n if (this.finally)\n addNames(names, this.finally.names);\n return names;\n }\n}\nclass Catch extends BlockNode {\n constructor(error) {\n super();\n this.error = error;\n }\n render(opts) {\n return `catch(${this.error})` + super.render(opts);\n }\n}\nCatch.kind = \"catch\";\nclass Finally extends BlockNode {\n render(opts) {\n return \"finally\" + super.render(opts);\n }\n}\nFinally.kind = \"finally\";\nclass CodeGen {\n constructor(extScope, opts = {}) {\n this._values = {};\n this._blockStarts = [];\n this._constants = {};\n this.opts = { ...opts, _n: opts.lines ? \"\\n\" : \"\" };\n this._extScope = extScope;\n this._scope = new scope_1.Scope({ parent: extScope });\n this._nodes = [new Root()];\n }\n toString() {\n return this._root.render(this.opts);\n }\n // returns unique name in the internal scope\n name(prefix) {\n return this._scope.name(prefix);\n }\n // reserves unique name in the external scope\n scopeName(prefix) {\n return this._extScope.name(prefix);\n }\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName, value) {\n const name = this._extScope.value(prefixOrName, value);\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set());\n vs.add(name);\n return name;\n }\n getScopeValue(prefix, keyOrRef) {\n return this._extScope.getValue(prefix, keyOrRef);\n }\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName) {\n return this._extScope.scopeRefs(scopeName, this._values);\n }\n scopeCode() {\n return this._extScope.scopeCode(this._values);\n }\n _def(varKind, nameOrPrefix, rhs, constant) {\n const name = this._scope.toName(nameOrPrefix);\n if (rhs !== undefined && constant)\n this._constants[name.str] = rhs;\n this._leafNode(new Def(varKind, name, rhs));\n return name;\n }\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant);\n }\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant);\n }\n // `var` declaration with optional assignment\n var(nameOrPrefix, rhs, _constant) {\n return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant);\n }\n // assignment code\n assign(lhs, rhs, sideEffects) {\n return this._leafNode(new Assign(lhs, rhs, sideEffects));\n }\n // `+=` code\n add(lhs, rhs) {\n return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs));\n }\n // appends passed SafeExpr to code or executes Block\n code(c) {\n if (typeof c == \"function\")\n c();\n else if (c !== code_1.nil)\n this._leafNode(new AnyCode(c));\n return this;\n }\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues) {\n const code = [\"{\"];\n for (const [key, value] of keyValues) {\n if (code.length > 1)\n code.push(\",\");\n code.push(key);\n if (key !== value || this.opts.es5) {\n code.push(\":\");\n (0, code_1.addCodeArg)(code, value);\n }\n }\n code.push(\"}\");\n return new code_1._Code(code);\n }\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition, thenBody, elseBody) {\n this._blockNode(new If(condition));\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf();\n }\n else if (thenBody) {\n this.code(thenBody).endIf();\n }\n else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body');\n }\n return this;\n }\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition) {\n return this._elseNode(new If(condition));\n }\n // `else` clause - only valid after `if` or `else if` clauses\n else() {\n return this._elseNode(new Else());\n }\n // end `if` statement (needed if gen.if was used only with condition)\n endIf() {\n return this._endBlockNode(If, Else);\n }\n _for(node, forBody) {\n this._blockNode(node);\n if (forBody)\n this.code(forBody).endFor();\n return this;\n }\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration, forBody) {\n return this._for(new ForLoop(iteration), forBody);\n }\n // `for` statement for a range of values\n forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) {\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name));\n }\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) {\n const name = this._scope.toName(nameOrPrefix);\n if (this.opts.es5) {\n const arr = iterable instanceof code_1.Name ? iterable : this.var(\"_arr\", iterable);\n return this.forRange(\"_i\", 0, (0, code_1._) `${arr}.length`, (i) => {\n this.var(name, (0, code_1._) `${arr}[${i}]`);\n forBody(name);\n });\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name));\n }\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, (0, code_1._) `Object.keys(${obj})`, forBody);\n }\n const name = this._scope.toName(nameOrPrefix);\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name));\n }\n // end `for` loop\n endFor() {\n return this._endBlockNode(For);\n }\n // `label` statement\n label(label) {\n return this._leafNode(new Label(label));\n }\n // `break` statement\n break(label) {\n return this._leafNode(new Break(label));\n }\n // `return` statement\n return(value) {\n const node = new Return();\n this._blockNode(node);\n this.code(value);\n if (node.nodes.length !== 1)\n throw new Error('CodeGen: \"return\" should have one node');\n return this._endBlockNode(Return);\n }\n // `try` statement\n try(tryBody, catchCode, finallyCode) {\n if (!catchCode && !finallyCode)\n throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"');\n const node = new Try();\n this._blockNode(node);\n this.code(tryBody);\n if (catchCode) {\n const error = this.name(\"e\");\n this._currNode = node.catch = new Catch(error);\n catchCode(error);\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally();\n this.code(finallyCode);\n }\n return this._endBlockNode(Catch, Finally);\n }\n // `throw` statement\n throw(error) {\n return this._leafNode(new Throw(error));\n }\n // start self-balancing block\n block(body, nodeCount) {\n this._blockStarts.push(this._nodes.length);\n if (body)\n this.code(body).endBlock(nodeCount);\n return this;\n }\n // end the current self-balancing block\n endBlock(nodeCount) {\n const len = this._blockStarts.pop();\n if (len === undefined)\n throw new Error(\"CodeGen: not in self-balancing block\");\n const toClose = this._nodes.length - len;\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);\n }\n this._nodes.length = len;\n return this;\n }\n // `function` heading (or definition if funcBody is passed)\n func(name, args = code_1.nil, async, funcBody) {\n this._blockNode(new Func(name, args, async));\n if (funcBody)\n this.code(funcBody).endFunc();\n return this;\n }\n // end function definition\n endFunc() {\n return this._endBlockNode(Func);\n }\n optimize(n = 1) {\n while (n-- > 0) {\n this._root.optimizeNodes();\n this._root.optimizeNames(this._root.names, this._constants);\n }\n }\n _leafNode(node) {\n this._currNode.nodes.push(node);\n return this;\n }\n _blockNode(node) {\n this._currNode.nodes.push(node);\n this._nodes.push(node);\n }\n _endBlockNode(N1, N2) {\n const n = this._currNode;\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop();\n return this;\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`);\n }\n _elseNode(node) {\n const n = this._currNode;\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"');\n }\n this._currNode = n.else = node;\n return this;\n }\n get _root() {\n return this._nodes[0];\n }\n get _currNode() {\n const ns = this._nodes;\n return ns[ns.length - 1];\n }\n set _currNode(node) {\n const ns = this._nodes;\n ns[ns.length - 1] = node;\n }\n}\nexports.CodeGen = CodeGen;\nfunction addNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) + (from[n] || 0);\n return names;\n}\nfunction addExprNames(names, from) {\n return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names;\n}\nfunction optimizeExpr(expr, names, constants) {\n if (expr instanceof code_1.Name)\n return replaceName(expr);\n if (!canOptimize(expr))\n return expr;\n return new code_1._Code(expr._items.reduce((items, c) => {\n if (c instanceof code_1.Name)\n c = replaceName(c);\n if (c instanceof code_1._Code)\n items.push(...c._items);\n else\n items.push(c);\n return items;\n }, []));\n function replaceName(n) {\n const c = constants[n.str];\n if (c === undefined || names[n.str] !== 1)\n return n;\n delete names[n.str];\n return c;\n }\n function canOptimize(e) {\n return (e instanceof code_1._Code &&\n e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined));\n }\n}\nfunction subtractNames(names, from) {\n for (const n in from)\n names[n] = (names[n] || 0) - (from[n] || 0);\n}\nfunction not(x) {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : (0, code_1._) `!${par(x)}`;\n}\nexports.not = not;\nconst andCode = mappend(exports.operators.AND);\n// boolean AND (&&) expression with the passed arguments\nfunction and(...args) {\n return args.reduce(andCode);\n}\nexports.and = and;\nconst orCode = mappend(exports.operators.OR);\n// boolean OR (||) expression with the passed arguments\nfunction or(...args) {\n return args.reduce(orCode);\n}\nexports.or = or;\nfunction mappend(op) {\n return (x, y) => (x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._) `${par(x)} ${op} ${par(y)}`);\n}\nfunction par(x) {\n return x instanceof code_1.Name ? x : (0, code_1._) `(${x})`;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst code_1 = require(\"./codegen/code\");\n// TODO refactor to use Set\nfunction toHash(arr) {\n const hash = {};\n for (const item of arr)\n hash[item] = true;\n return hash;\n}\nexports.toHash = toHash;\nfunction alwaysValidSchema(it, schema) {\n if (typeof schema == \"boolean\")\n return schema;\n if (Object.keys(schema).length === 0)\n return true;\n checkUnknownRules(it, schema);\n return !schemaHasRules(schema, it.self.RULES.all);\n}\nexports.alwaysValidSchema = alwaysValidSchema;\nfunction checkUnknownRules(it, schema = it.schema) {\n const { opts, self } = it;\n if (!opts.strictSchema)\n return;\n if (typeof schema === \"boolean\")\n return;\n const rules = self.RULES.keywords;\n for (const key in schema) {\n if (!rules[key])\n checkStrictMode(it, `unknown keyword: \"${key}\"`);\n }\n}\nexports.checkUnknownRules = checkUnknownRules;\nfunction schemaHasRules(schema, rules) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (rules[key])\n return true;\n return false;\n}\nexports.schemaHasRules = schemaHasRules;\nfunction schemaHasRulesButRef(schema, RULES) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (key !== \"$ref\" && RULES.all[key])\n return true;\n return false;\n}\nexports.schemaHasRulesButRef = schemaHasRulesButRef;\nfunction schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\")\n return schema;\n if (typeof schema == \"string\")\n return (0, codegen_1._) `${schema}`;\n }\n return (0, codegen_1._) `${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`;\n}\nexports.schemaRefOrVal = schemaRefOrVal;\nfunction unescapeFragment(str) {\n return unescapeJsonPointer(decodeURIComponent(str));\n}\nexports.unescapeFragment = unescapeFragment;\nfunction escapeFragment(str) {\n return encodeURIComponent(escapeJsonPointer(str));\n}\nexports.escapeFragment = escapeFragment;\nfunction escapeJsonPointer(str) {\n if (typeof str == \"number\")\n return `${str}`;\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexports.escapeJsonPointer = escapeJsonPointer;\nfunction unescapeJsonPointer(str) {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n}\nexports.unescapeJsonPointer = unescapeJsonPointer;\nfunction eachItem(xs, f) {\n if (Array.isArray(xs)) {\n for (const x of xs)\n f(x);\n }\n else {\n f(xs);\n }\n}\nexports.eachItem = eachItem;\nfunction makeMergeEvaluated({ mergeNames, mergeToName, mergeValues, resultToName, }) {\n return (gen, from, to, toName) => {\n const res = to === undefined\n ? from\n : to instanceof codegen_1.Name\n ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof codegen_1.Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to);\n return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res;\n };\n}\nexports.mergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => {\n gen.if((0, codegen_1._) `${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._) `${to} || {}`).code((0, codegen_1._) `Object.assign(${to}, ${from})`));\n }),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true);\n }\n else {\n gen.assign(to, (0, codegen_1._) `${to} || {}`);\n setEvaluated(gen, to, from);\n }\n }),\n mergeValues: (from, to) => (from === true ? true : { ...from, ...to }),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._) `${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),\n mergeToName: (gen, from, to) => gen.if((0, codegen_1._) `${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._) `${to} > ${from} ? ${to} : ${from}`)),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n};\nfunction evaluatedPropsToName(gen, ps) {\n if (ps === true)\n return gen.var(\"props\", true);\n const props = gen.var(\"props\", (0, codegen_1._) `{}`);\n if (ps !== undefined)\n setEvaluated(gen, props, ps);\n return props;\n}\nexports.evaluatedPropsToName = evaluatedPropsToName;\nfunction setEvaluated(gen, props, ps) {\n Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._) `${props}${(0, codegen_1.getProperty)(p)}`, true));\n}\nexports.setEvaluated = setEvaluated;\nconst snippets = {};\nfunction useFunc(gen, f) {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)),\n });\n}\nexports.useFunc = useFunc;\nvar Type;\n(function (Type) {\n Type[Type[\"Num\"] = 0] = \"Num\";\n Type[Type[\"Str\"] = 1] = \"Str\";\n})(Type || (exports.Type = Type = {}));\nfunction getErrorPath(dataProp, dataPropType, jsPropertySyntax) {\n // let path\n if (dataProp instanceof codegen_1.Name) {\n const isNumber = dataPropType === Type.Num;\n return jsPropertySyntax\n ? isNumber\n ? (0, codegen_1._) `\"[\" + ${dataProp} + \"]\"`\n : (0, codegen_1._) `\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? (0, codegen_1._) `\"/\" + ${dataProp}`\n : (0, codegen_1._) `\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")`; // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp);\n}\nexports.getErrorPath = getErrorPath;\nfunction checkStrictMode(it, msg, mode = it.opts.strictSchema) {\n if (!mode)\n return;\n msg = `strict mode: ${msg}`;\n if (mode === true)\n throw new Error(msg);\n it.self.logger.warn(msg);\n}\nexports.checkStrictMode = checkStrictMode;\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"./codegen\");\nconst names = {\n // validation function arguments\n data: new codegen_1.Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new codegen_1.Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new codegen_1.Name(\"instancePath\"),\n parentData: new codegen_1.Name(\"parentData\"),\n parentDataProperty: new codegen_1.Name(\"parentDataProperty\"),\n rootData: new codegen_1.Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new codegen_1.Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new codegen_1.Name(\"vErrors\"), // null or array of validation errors\n errors: new codegen_1.Name(\"errors\"), // counter of validation errors\n this: new codegen_1.Name(\"this\"),\n // \"globals\"\n self: new codegen_1.Name(\"self\"),\n scope: new codegen_1.Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new codegen_1.Name(\"json\"),\n jsonPos: new codegen_1.Name(\"jsonPos\"),\n jsonLen: new codegen_1.Name(\"jsonLen\"),\n jsonPart: new codegen_1.Name(\"jsonPart\"),\n};\nexports.default = names;\n//# sourceMappingURL=names.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst util_1 = require(\"./util\");\nconst names_1 = require(\"./names\");\nexports.keywordError = {\n message: ({ keyword }) => (0, codegen_1.str) `must pass \"${keyword}\" keyword validation`,\n};\nexports.keyword$DataError = {\n message: ({ keyword, schemaType }) => schemaType\n ? (0, codegen_1.str) `\"${keyword}\" keyword must be ${schemaType} ($data)`\n : (0, codegen_1.str) `\"${keyword}\" keyword is invalid ($data)`,\n};\nfunction reportError(cxt, error = exports.keywordError, errorPaths, overrideAllErrors) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n if (overrideAllErrors !== null && overrideAllErrors !== void 0 ? overrideAllErrors : (compositeRule || allErrors)) {\n addError(gen, errObj);\n }\n else {\n returnErrors(it, (0, codegen_1._) `[${errObj}]`);\n }\n}\nexports.reportError = reportError;\nfunction reportExtraError(cxt, error = exports.keywordError, errorPaths) {\n const { it } = cxt;\n const { gen, compositeRule, allErrors } = it;\n const errObj = errorObjectCode(cxt, error, errorPaths);\n addError(gen, errObj);\n if (!(compositeRule || allErrors)) {\n returnErrors(it, names_1.default.vErrors);\n }\n}\nexports.reportExtraError = reportExtraError;\nfunction resetErrorsCount(gen, errsCount) {\n gen.assign(names_1.default.errors, errsCount);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._) `${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null)));\n}\nexports.resetErrorsCount = resetErrorsCount;\nfunction extendErrors({ gen, keyword, schemaValue, data, errsCount, it, }) {\n /* istanbul ignore if */\n if (errsCount === undefined)\n throw new Error(\"ajv implementation error\");\n const err = gen.name(\"err\");\n gen.forRange(\"i\", errsCount, names_1.default.errors, (i) => {\n gen.const(err, (0, codegen_1._) `${names_1.default.vErrors}[${i}]`);\n gen.if((0, codegen_1._) `${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._) `${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath)));\n gen.assign((0, codegen_1._) `${err}.schemaPath`, (0, codegen_1.str) `${it.errSchemaPath}/${keyword}`);\n if (it.opts.verbose) {\n gen.assign((0, codegen_1._) `${err}.schema`, schemaValue);\n gen.assign((0, codegen_1._) `${err}.data`, data);\n }\n });\n}\nexports.extendErrors = extendErrors;\nfunction addError(gen, errObj) {\n const err = gen.const(\"err\", errObj);\n gen.if((0, codegen_1._) `${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._) `[${err}]`), (0, codegen_1._) `${names_1.default.vErrors}.push(${err})`);\n gen.code((0, codegen_1._) `${names_1.default.errors}++`);\n}\nfunction returnErrors(it, errs) {\n const { gen, validateName, schemaEnv } = it;\n if (schemaEnv.$async) {\n gen.throw((0, codegen_1._) `new ${it.ValidationError}(${errs})`);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, errs);\n gen.return(false);\n }\n}\nconst E = {\n keyword: new codegen_1.Name(\"keyword\"),\n schemaPath: new codegen_1.Name(\"schemaPath\"), // also used in JTD errors\n params: new codegen_1.Name(\"params\"),\n propertyName: new codegen_1.Name(\"propertyName\"),\n message: new codegen_1.Name(\"message\"),\n schema: new codegen_1.Name(\"schema\"),\n parentSchema: new codegen_1.Name(\"parentSchema\"),\n};\nfunction errorObjectCode(cxt, error, errorPaths) {\n const { createErrors } = cxt.it;\n if (createErrors === false)\n return (0, codegen_1._) `{}`;\n return errorObject(cxt, error, errorPaths);\n}\nfunction errorObject(cxt, error, errorPaths = {}) {\n const { gen, it } = cxt;\n const keyValues = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ];\n extraErrorProps(cxt, error, keyValues);\n return gen.object(...keyValues);\n}\nfunction errorInstancePath({ errorPath }, { instancePath }) {\n const instPath = instancePath\n ? (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}`\n : errorPath;\n return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)];\n}\nfunction errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) {\n let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str) `${errSchemaPath}/${keyword}`;\n if (schemaPath) {\n schPath = (0, codegen_1.str) `${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`;\n }\n return [E.schemaPath, schPath];\n}\nfunction extraErrorProps(cxt, { params, message }, keyValues) {\n const { keyword, data, schemaValue, it } = cxt;\n const { opts, propertyName, topSchemaRef, schemaPath } = it;\n keyValues.push([E.keyword, keyword], [E.params, typeof params == \"function\" ? params(cxt) : params || (0, codegen_1._) `{}`]);\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message]);\n }\n if (opts.verbose) {\n keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._) `${topSchemaRef}${schemaPath}`], [names_1.default.data, data]);\n }\n if (propertyName)\n keyValues.push([E.propertyName, propertyName]);\n}\n//# sourceMappingURL=errors.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.boolOrEmptySchema = exports.topBoolOrEmptySchema = void 0;\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst boolError = {\n message: \"boolean schema is false\",\n};\nfunction topBoolOrEmptySchema(it) {\n const { gen, schema, validateName } = it;\n if (schema === false) {\n falseSchemaError(it, false);\n }\n else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(names_1.default.data);\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, null);\n gen.return(true);\n }\n}\nexports.topBoolOrEmptySchema = topBoolOrEmptySchema;\nfunction boolOrEmptySchema(it, valid) {\n const { gen, schema } = it;\n if (schema === false) {\n gen.var(valid, false); // TODO var\n falseSchemaError(it);\n }\n else {\n gen.var(valid, true); // TODO var\n }\n}\nexports.boolOrEmptySchema = boolOrEmptySchema;\nfunction falseSchemaError(it, overrideAllErrors) {\n const { gen, data } = it;\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n };\n (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors);\n}\n//# sourceMappingURL=boolSchema.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRules = exports.isJSONType = void 0;\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"];\nconst jsonTypes = new Set(_jsonTypes);\nfunction isJSONType(x) {\n return typeof x == \"string\" && jsonTypes.has(x);\n}\nexports.isJSONType = isJSONType;\nfunction getRules() {\n const groups = {\n number: { type: \"number\", rules: [] },\n string: { type: \"string\", rules: [] },\n array: { type: \"array\", rules: [] },\n object: { type: \"object\", rules: [] },\n };\n return {\n types: { ...groups, integer: true, boolean: true, null: true },\n rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object],\n post: { rules: [] },\n all: {},\n keywords: {},\n };\n}\nexports.getRules = getRules;\n//# sourceMappingURL=rules.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = void 0;\nfunction schemaHasRulesForType({ schema, self }, type) {\n const group = self.RULES.types[type];\n return group && group !== true && shouldUseGroup(schema, group);\n}\nexports.schemaHasRulesForType = schemaHasRulesForType;\nfunction shouldUseGroup(schema, group) {\n return group.rules.some((rule) => shouldUseRule(schema, rule));\n}\nexports.shouldUseGroup = shouldUseGroup;\nfunction shouldUseRule(schema, rule) {\n var _a;\n return (schema[rule.keyword] !== undefined ||\n ((_a = rule.definition.implements) === null || _a === void 0 ? void 0 : _a.some((kwd) => schema[kwd] !== undefined)));\n}\nexports.shouldUseRule = shouldUseRule;\n//# sourceMappingURL=applicability.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = void 0;\nconst rules_1 = require(\"../rules\");\nconst applicability_1 = require(\"./applicability\");\nconst errors_1 = require(\"../errors\");\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nvar DataType;\n(function (DataType) {\n DataType[DataType[\"Correct\"] = 0] = \"Correct\";\n DataType[DataType[\"Wrong\"] = 1] = \"Wrong\";\n})(DataType || (exports.DataType = DataType = {}));\nfunction getSchemaTypes(schema) {\n const types = getJSONTypes(schema.type);\n const hasNull = types.includes(\"null\");\n if (hasNull) {\n if (schema.nullable === false)\n throw new Error(\"type: null contradicts nullable: false\");\n }\n else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"');\n }\n if (schema.nullable === true)\n types.push(\"null\");\n }\n return types;\n}\nexports.getSchemaTypes = getSchemaTypes;\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nfunction getJSONTypes(ts) {\n const types = Array.isArray(ts) ? ts : ts ? [ts] : [];\n if (types.every(rules_1.isJSONType))\n return types;\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"));\n}\nexports.getJSONTypes = getJSONTypes;\nfunction coerceAndCheckDataType(it, types) {\n const { gen, data, opts } = it;\n const coerceTo = coerceToTypes(types, opts.coerceTypes);\n const checkTypes = types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0]));\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong);\n gen.if(wrongType, () => {\n if (coerceTo.length)\n coerceData(it, types, coerceTo);\n else\n reportTypeError(it);\n });\n }\n return checkTypes;\n}\nexports.coerceAndCheckDataType = coerceAndCheckDataType;\nconst COERCIBLE = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"]);\nfunction coerceToTypes(types, coerceTypes) {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : [];\n}\nfunction coerceData(it, types, coerceTo) {\n const { gen, data, opts } = it;\n const dataType = gen.let(\"dataType\", (0, codegen_1._) `typeof ${data}`);\n const coerced = gen.let(\"coerced\", (0, codegen_1._) `undefined`);\n if (opts.coerceTypes === \"array\") {\n gen.if((0, codegen_1._) `${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen\n .assign(data, (0, codegen_1._) `${data}[0]`)\n .assign(dataType, (0, codegen_1._) `typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data)));\n }\n gen.if((0, codegen_1._) `${coerced} !== undefined`);\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t);\n }\n }\n gen.else();\n reportTypeError(it);\n gen.endIf();\n gen.if((0, codegen_1._) `${coerced} !== undefined`, () => {\n gen.assign(data, coerced);\n assignParentData(it, coerced);\n });\n function coerceSpecificType(t) {\n switch (t) {\n case \"string\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, (0, codegen_1._) `\"\" + ${data}`)\n .elseIf((0, codegen_1._) `${data} === null`)\n .assign(coerced, (0, codegen_1._) `\"\"`);\n return;\n case \"number\":\n gen\n .elseIf((0, codegen_1._) `${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"integer\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`)\n .assign(coerced, (0, codegen_1._) `+${data}`);\n return;\n case \"boolean\":\n gen\n .elseIf((0, codegen_1._) `${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf((0, codegen_1._) `${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true);\n return;\n case \"null\":\n gen.elseIf((0, codegen_1._) `${data} === \"\" || ${data} === 0 || ${data} === false`);\n gen.assign(coerced, null);\n return;\n case \"array\":\n gen\n .elseIf((0, codegen_1._) `${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`)\n .assign(coerced, (0, codegen_1._) `[${data}]`);\n }\n }\n}\nfunction assignParentData({ gen, parentData, parentDataProperty }, expr) {\n // TODO use gen.property\n gen.if((0, codegen_1._) `${parentData} !== undefined`, () => gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, expr));\n}\nfunction checkDataType(dataType, data, strictNums, correct = DataType.Correct) {\n const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ;\n let cond;\n switch (dataType) {\n case \"null\":\n return (0, codegen_1._) `${data} ${EQ} null`;\n case \"array\":\n cond = (0, codegen_1._) `Array.isArray(${data})`;\n break;\n case \"object\":\n cond = (0, codegen_1._) `${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`;\n break;\n case \"integer\":\n cond = numCond((0, codegen_1._) `!(${data} % 1) && !isNaN(${data})`);\n break;\n case \"number\":\n cond = numCond();\n break;\n default:\n return (0, codegen_1._) `typeof ${data} ${EQ} ${dataType}`;\n }\n return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond);\n function numCond(_cond = codegen_1.nil) {\n return (0, codegen_1.and)((0, codegen_1._) `typeof ${data} == \"number\"`, _cond, strictNums ? (0, codegen_1._) `isFinite(${data})` : codegen_1.nil);\n }\n}\nexports.checkDataType = checkDataType;\nfunction checkDataTypes(dataTypes, data, strictNums, correct) {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct);\n }\n let cond;\n const types = (0, util_1.toHash)(dataTypes);\n if (types.array && types.object) {\n const notObj = (0, codegen_1._) `typeof ${data} != \"object\"`;\n cond = types.null ? notObj : (0, codegen_1._) `!${data} || ${notObj}`;\n delete types.null;\n delete types.array;\n delete types.object;\n }\n else {\n cond = codegen_1.nil;\n }\n if (types.number)\n delete types.integer;\n for (const t in types)\n cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct));\n return cond;\n}\nexports.checkDataTypes = checkDataTypes;\nconst typeError = {\n message: ({ schema }) => `must be ${schema}`,\n params: ({ schema, schemaValue }) => typeof schema == \"string\" ? (0, codegen_1._) `{type: ${schema}}` : (0, codegen_1._) `{type: ${schemaValue}}`,\n};\nfunction reportTypeError(it) {\n const cxt = getTypeErrorContext(it);\n (0, errors_1.reportError)(cxt, typeError);\n}\nexports.reportTypeError = reportTypeError;\nfunction getTypeErrorContext(it) {\n const { gen, data, schema } = it;\n const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, \"type\");\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n };\n}\n//# sourceMappingURL=dataType.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assignDefaults = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction assignDefaults(it, ty) {\n const { properties, items } = it.schema;\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default);\n }\n }\n else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i) => assignDefault(it, i, sch.default));\n }\n}\nexports.assignDefaults = assignDefaults;\nfunction assignDefault(it, prop, defaultValue) {\n const { gen, compositeRule, data, opts } = it;\n if (defaultValue === undefined)\n return;\n const childData = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(prop)}`;\n if (compositeRule) {\n (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`);\n return;\n }\n let condition = (0, codegen_1._) `${childData} === undefined`;\n if (opts.useDefaults === \"empty\") {\n condition = (0, codegen_1._) `${condition} || ${childData} === null || ${childData} === \"\"`;\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, (0, codegen_1._) `${childData} = ${(0, codegen_1.stringify)(defaultValue)}`);\n}\n//# sourceMappingURL=defaults.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = void 0;\nconst codegen_1 = require(\"../compile/codegen\");\nconst util_1 = require(\"../compile/util\");\nconst names_1 = require(\"../compile/names\");\nconst util_2 = require(\"../compile/util\");\nfunction checkReportMissingProp(cxt, prop) {\n const { gen, data, it } = cxt;\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({ missingProperty: (0, codegen_1._) `${prop}` }, true);\n cxt.error();\n });\n}\nexports.checkReportMissingProp = checkReportMissingProp;\nfunction checkMissingProp({ gen, data, it: { opts } }, properties, missing) {\n return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._) `${missing} = ${prop}`)));\n}\nexports.checkMissingProp = checkMissingProp;\nfunction reportMissingProp(cxt, missing) {\n cxt.setParams({ missingProperty: missing }, true);\n cxt.error();\n}\nexports.reportMissingProp = reportMissingProp;\nfunction hasPropFunc(gen) {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: (0, codegen_1._) `Object.prototype.hasOwnProperty`,\n });\n}\nexports.hasPropFunc = hasPropFunc;\nfunction isOwnProperty(gen, data, property) {\n return (0, codegen_1._) `${hasPropFunc(gen)}.call(${data}, ${property})`;\n}\nexports.isOwnProperty = isOwnProperty;\nfunction propertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} !== undefined`;\n return ownProperties ? (0, codegen_1._) `${cond} && ${isOwnProperty(gen, data, property)}` : cond;\n}\nexports.propertyInData = propertyInData;\nfunction noPropertyInData(gen, data, property, ownProperties) {\n const cond = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(property)} === undefined`;\n return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond;\n}\nexports.noPropertyInData = noPropertyInData;\nfunction allSchemaProperties(schemaMap) {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : [];\n}\nexports.allSchemaProperties = allSchemaProperties;\nfunction schemaProperties(it, schemaMap) {\n return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));\n}\nexports.schemaProperties = schemaProperties;\nfunction callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) {\n const dataAndSchema = passSchema ? (0, codegen_1._) `${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;\n const valCxt = [\n [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],\n [names_1.default.parentData, it.parentData],\n [names_1.default.parentDataProperty, it.parentDataProperty],\n [names_1.default.rootData, names_1.default.rootData],\n ];\n if (it.opts.dynamicRef)\n valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);\n const args = (0, codegen_1._) `${dataAndSchema}, ${gen.object(...valCxt)}`;\n return context !== codegen_1.nil ? (0, codegen_1._) `${func}.call(${context}, ${args})` : (0, codegen_1._) `${func}(${args})`;\n}\nexports.callValidateCode = callValidateCode;\nconst newRegExp = (0, codegen_1._) `new RegExp`;\nfunction usePattern({ gen, it: { opts } }, pattern) {\n const u = opts.unicodeRegExp ? \"u\" : \"\";\n const { regExp } = opts.code;\n const rx = regExp(pattern, u);\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: (0, codegen_1._) `${regExp.code === \"new RegExp\" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})`,\n });\n}\nexports.usePattern = usePattern;\nfunction validateArray(cxt) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true);\n validateItems(() => gen.assign(validArr, false));\n return validArr;\n }\n gen.var(valid, true);\n validateItems(() => gen.break());\n return valid;\n function validateItems(notValid) {\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword,\n dataProp: i,\n dataPropType: util_1.Type.Num,\n }, valid);\n gen.if((0, codegen_1.not)(valid), notValid);\n });\n }\n}\nexports.validateArray = validateArray;\nfunction validateUnion(cxt) {\n const { gen, schema, keyword, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch));\n if (alwaysValid && !it.opts.unevaluated)\n return;\n const valid = gen.let(\"valid\", false);\n const schValid = gen.name(\"_valid\");\n gen.block(() => schema.forEach((_sch, i) => {\n const schCxt = cxt.subschema({\n keyword,\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n gen.assign(valid, (0, codegen_1._) `${valid} || ${schValid}`);\n const merged = cxt.mergeValidEvaluated(schCxt, schValid);\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged)\n gen.if((0, codegen_1.not)(valid));\n }));\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n}\nexports.validateUnion = validateUnion;\n//# sourceMappingURL=code.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst code_1 = require(\"../../vocabularies/code\");\nconst errors_1 = require(\"../errors\");\nfunction macroKeywordCode(cxt, def) {\n const { gen, keyword, schema, parentSchema, it } = cxt;\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it);\n const schemaRef = useKeyword(gen, keyword, macroSchema);\n if (it.opts.validateSchema !== false)\n it.self.validateSchema(macroSchema, true);\n const valid = gen.name(\"valid\");\n cxt.subschema({\n schema: macroSchema,\n schemaPath: codegen_1.nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n }, valid);\n cxt.pass(valid, () => cxt.error(true));\n}\nexports.macroKeywordCode = macroKeywordCode;\nfunction funcKeywordCode(cxt, def) {\n var _a;\n const { gen, keyword, schema, parentSchema, $data, it } = cxt;\n checkAsyncKeyword(it, def);\n const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate;\n const validateRef = useKeyword(gen, keyword, validate);\n const valid = gen.let(\"valid\");\n cxt.block$data(valid, validateKeyword);\n cxt.ok((_a = def.valid) !== null && _a !== void 0 ? _a : valid);\n function validateKeyword() {\n if (def.errors === false) {\n assignValid();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => cxt.error());\n }\n else {\n const ruleErrs = def.async ? validateAsync() : validateSync();\n if (def.modifying)\n modifyData(cxt);\n reportErrs(() => addErrs(cxt, ruleErrs));\n }\n }\n function validateAsync() {\n const ruleErrs = gen.let(\"ruleErrs\", null);\n gen.try(() => assignValid((0, codegen_1._) `await `), (e) => gen.assign(valid, false).if((0, codegen_1._) `${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._) `${e}.errors`), () => gen.throw(e)));\n return ruleErrs;\n }\n function validateSync() {\n const validateErrs = (0, codegen_1._) `${validateRef}.errors`;\n gen.assign(validateErrs, null);\n assignValid(codegen_1.nil);\n return validateErrs;\n }\n function assignValid(_await = def.async ? (0, codegen_1._) `await ` : codegen_1.nil) {\n const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self;\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false);\n gen.assign(valid, (0, codegen_1._) `${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying);\n }\n function reportErrs(errors) {\n var _a;\n gen.if((0, codegen_1.not)((_a = def.valid) !== null && _a !== void 0 ? _a : valid), errors);\n }\n}\nexports.funcKeywordCode = funcKeywordCode;\nfunction modifyData(cxt) {\n const { gen, data, it } = cxt;\n gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._) `${it.parentData}[${it.parentDataProperty}]`));\n}\nfunction addErrs(cxt, errs) {\n const { gen } = cxt;\n gen.if((0, codegen_1._) `Array.isArray(${errs})`, () => {\n gen\n .assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`)\n .assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n (0, errors_1.extendErrors)(cxt);\n }, () => cxt.error());\n}\nfunction checkAsyncKeyword({ schemaEnv }, def) {\n if (def.async && !schemaEnv.$async)\n throw new Error(\"async keyword in sync schema\");\n}\nfunction useKeyword(gen, keyword, result) {\n if (result === undefined)\n throw new Error(`keyword \"${keyword}\" failed to compile`);\n return gen.scopeValue(\"keyword\", typeof result == \"function\" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) });\n}\nfunction validSchemaType(schema, schemaType, allowUndefined = false) {\n // TODO add tests\n return (!schemaType.length ||\n schemaType.some((st) => st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")));\n}\nexports.validSchemaType = validSchemaType;\nfunction validateKeywordUsage({ schema, opts, self, errSchemaPath }, def, keyword) {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\");\n }\n const deps = def.dependencies;\n if (deps === null || deps === void 0 ? void 0 : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`);\n }\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword]);\n if (!valid) {\n const msg = `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors);\n if (opts.validateSchema === \"log\")\n self.logger.error(msg);\n else\n throw new Error(msg);\n }\n }\n}\nexports.validateKeywordUsage = validateKeywordUsage;\n//# sourceMappingURL=keyword.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = void 0;\nconst codegen_1 = require(\"../codegen\");\nconst util_1 = require(\"../util\");\nfunction getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed');\n }\n if (keyword !== undefined) {\n const sch = it.schema[keyword];\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: (0, codegen_1._) `${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}`,\n };\n }\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"');\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n };\n }\n throw new Error('either \"keyword\" or \"schema\" must be passed');\n}\nexports.getSubschema = getSubschema;\nfunction extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed');\n }\n const { gen } = it;\n if (dataProp !== undefined) {\n const { errorPath, dataPathArr, opts } = it;\n const nextData = gen.let(\"data\", (0, codegen_1._) `${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true);\n dataContextProps(nextData);\n subschema.errorPath = (0, codegen_1.str) `${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`;\n subschema.parentDataProperty = (0, codegen_1._) `${dataProp}`;\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty];\n }\n if (data !== undefined) {\n const nextData = data instanceof codegen_1.Name ? data : gen.let(\"data\", data, true); // replaceable if used once?\n dataContextProps(nextData);\n if (propertyName !== undefined)\n subschema.propertyName = propertyName;\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n if (dataTypes)\n subschema.dataTypes = dataTypes;\n function dataContextProps(_nextData) {\n subschema.data = _nextData;\n subschema.dataLevel = it.dataLevel + 1;\n subschema.dataTypes = [];\n it.definedProperties = new Set();\n subschema.parentData = it.data;\n subschema.dataNames = [...it.dataNames, _nextData];\n }\n}\nexports.extendSubschemaData = extendSubschemaData;\nfunction extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) {\n if (compositeRule !== undefined)\n subschema.compositeRule = compositeRule;\n if (createErrors !== undefined)\n subschema.createErrors = createErrors;\n if (allErrors !== undefined)\n subschema.allErrors = allErrors;\n subschema.jtdDiscriminator = jtdDiscriminator; // not inherited\n subschema.jtdMetadata = jtdMetadata; // not inherited\n}\nexports.extendSubschemaMode = extendSubschemaMode;\n//# sourceMappingURL=subschema.js.map","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i (count += countKeys(sch)));\n }\n if (count === Infinity)\n return Infinity;\n }\n return count;\n}\nfunction getFullPath(resolver, id = \"\", normalize) {\n if (normalize !== false)\n id = normalizeId(id);\n const p = resolver.parse(id);\n return _getFullPath(resolver, p);\n}\nexports.getFullPath = getFullPath;\nfunction _getFullPath(resolver, p) {\n const serialized = resolver.serialize(p);\n return serialized.split(\"#\")[0] + \"#\";\n}\nexports._getFullPath = _getFullPath;\nconst TRAILING_SLASH_HASH = /#\\/?$/;\nfunction normalizeId(id) {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\";\n}\nexports.normalizeId = normalizeId;\nfunction resolveUrl(resolver, baseId, id) {\n id = normalizeId(id);\n return resolver.resolve(baseId, id);\n}\nexports.resolveUrl = resolveUrl;\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i;\nfunction getSchemaRefs(schema, baseId) {\n if (typeof schema == \"boolean\")\n return {};\n const { schemaId, uriResolver } = this.opts;\n const schId = normalizeId(schema[schemaId] || baseId);\n const baseIds = { \"\": schId };\n const pathPrefix = getFullPath(uriResolver, schId, false);\n const localRefs = {};\n const schemaRefs = new Set();\n traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined)\n return;\n const fullPath = pathPrefix + jsonPtr;\n let innerBaseId = baseIds[parentJsonPtr];\n if (typeof sch[schemaId] == \"string\")\n innerBaseId = addRef.call(this, sch[schemaId]);\n addAnchor.call(this, sch.$anchor);\n addAnchor.call(this, sch.$dynamicAnchor);\n baseIds[jsonPtr] = innerBaseId;\n function addRef(ref) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve;\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref);\n if (schemaRefs.has(ref))\n throw ambiguos(ref);\n schemaRefs.add(ref);\n let schOrRef = this.refs[ref];\n if (typeof schOrRef == \"string\")\n schOrRef = this.refs[schOrRef];\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref);\n }\n else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref);\n localRefs[ref] = sch;\n }\n else {\n this.refs[ref] = fullPath;\n }\n }\n return ref;\n }\n function addAnchor(anchor) {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor))\n throw new Error(`invalid anchor \"${anchor}\"`);\n addRef.call(this, `#${anchor}`);\n }\n }\n });\n return localRefs;\n function checkAmbiguosRef(sch1, sch2, ref) {\n if (sch2 !== undefined && !equal(sch1, sch2))\n throw ambiguos(ref);\n }\n function ambiguos(ref) {\n return new Error(`reference \"${ref}\" resolves to more than one schema`);\n }\n}\nexports.getSchemaRefs = getSchemaRefs;\n//# sourceMappingURL=resolve.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getData = exports.KeywordCxt = exports.validateFunctionCode = void 0;\nconst boolSchema_1 = require(\"./boolSchema\");\nconst dataType_1 = require(\"./dataType\");\nconst applicability_1 = require(\"./applicability\");\nconst dataType_2 = require(\"./dataType\");\nconst defaults_1 = require(\"./defaults\");\nconst keyword_1 = require(\"./keyword\");\nconst subschema_1 = require(\"./subschema\");\nconst codegen_1 = require(\"../codegen\");\nconst names_1 = require(\"../names\");\nconst resolve_1 = require(\"../resolve\");\nconst util_1 = require(\"../util\");\nconst errors_1 = require(\"../errors\");\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nfunction validateFunctionCode(it) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it);\n return;\n }\n }\n validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it));\n}\nexports.validateFunctionCode = validateFunctionCode;\nfunction validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) {\n if (opts.code.es5) {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => {\n gen.code((0, codegen_1._) `\"use strict\"; ${funcSourceUrl(schema, opts)}`);\n destructureValCxtES5(gen, opts);\n gen.code(body);\n });\n }\n else {\n gen.func(validateName, (0, codegen_1._) `${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body));\n }\n}\nfunction destructureValCxt(opts) {\n return (0, codegen_1._) `{${names_1.default.instancePath}=\"\", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._) `, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`;\n}\nfunction destructureValCxtES5(gen, opts) {\n gen.if(names_1.default.valCxt, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.instancePath}`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentData}`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.parentDataProperty}`);\n gen.var(names_1.default.rootData, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.rootData}`);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`);\n }, () => {\n gen.var(names_1.default.instancePath, (0, codegen_1._) `\"\"`);\n gen.var(names_1.default.parentData, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.parentDataProperty, (0, codegen_1._) `undefined`);\n gen.var(names_1.default.rootData, names_1.default.data);\n if (opts.dynamicRef)\n gen.var(names_1.default.dynamicAnchors, (0, codegen_1._) `{}`);\n });\n}\nfunction topSchemaObjCode(it) {\n const { schema, opts, gen } = it;\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n checkNoDefault(it);\n gen.let(names_1.default.vErrors, null);\n gen.let(names_1.default.errors, 0);\n if (opts.unevaluated)\n resetEvaluated(it);\n typeAndKeywords(it);\n returnResults(it);\n });\n return;\n}\nfunction resetEvaluated(it) {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const { gen, validateName } = it;\n it.evaluated = gen.const(\"evaluated\", (0, codegen_1._) `${validateName}.evaluated`);\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._) `${it.evaluated}.props`, (0, codegen_1._) `undefined`));\n gen.if((0, codegen_1._) `${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._) `${it.evaluated}.items`, (0, codegen_1._) `undefined`));\n}\nfunction funcSourceUrl(schema, opts) {\n const schId = typeof schema == \"object\" && schema[opts.schemaId];\n return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._) `/*# sourceURL=${schId} */` : codegen_1.nil;\n}\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it, valid) {\n if (isSchemaObj(it)) {\n checkKeywords(it);\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid);\n return;\n }\n }\n (0, boolSchema_1.boolOrEmptySchema)(it, valid);\n}\nfunction schemaCxtHasRules({ schema, self }) {\n if (typeof schema == \"boolean\")\n return !schema;\n for (const key in schema)\n if (self.RULES.all[key])\n return true;\n return false;\n}\nfunction isSchemaObj(it) {\n return typeof it.schema != \"boolean\";\n}\nfunction subSchemaObjCode(it, valid) {\n const { schema, gen, opts } = it;\n if (opts.$comment && schema.$comment)\n commentKeyword(it);\n updateContext(it);\n checkAsyncSchema(it);\n const errsCount = gen.const(\"_errs\", names_1.default.errors);\n typeAndKeywords(it, errsCount);\n // TODO var\n gen.var(valid, (0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n}\nfunction checkKeywords(it) {\n (0, util_1.checkUnknownRules)(it);\n checkRefsAndKeywords(it);\n}\nfunction typeAndKeywords(it, errsCount) {\n if (it.opts.jtd)\n return schemaKeywords(it, [], false, errsCount);\n const types = (0, dataType_1.getSchemaTypes)(it.schema);\n const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types);\n schemaKeywords(it, types, !checkedTypes, errsCount);\n}\nfunction checkRefsAndKeywords(it) {\n const { schema, errSchemaPath, opts, self } = it;\n if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`);\n }\n}\nfunction checkNoDefault(it) {\n const { schema, opts } = it;\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n (0, util_1.checkStrictMode)(it, \"default is ignored in the schema root\");\n }\n}\nfunction updateContext(it) {\n const schId = it.schema[it.opts.schemaId];\n if (schId)\n it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId);\n}\nfunction checkAsyncSchema(it) {\n if (it.schema.$async && !it.schemaEnv.$async)\n throw new Error(\"async schema in sync schema\");\n}\nfunction commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) {\n const msg = schema.$comment;\n if (opts.$comment === true) {\n gen.code((0, codegen_1._) `${names_1.default.self}.logger.log(${msg})`);\n }\n else if (typeof opts.$comment == \"function\") {\n const schemaPath = (0, codegen_1.str) `${errSchemaPath}/$comment`;\n const rootName = gen.scopeValue(\"root\", { ref: schemaEnv.root });\n gen.code((0, codegen_1._) `${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`);\n }\n}\nfunction returnResults(it) {\n const { gen, schemaEnv, validateName, ValidationError, opts } = it;\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if((0, codegen_1._) `${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._) `new ${ValidationError}(${names_1.default.vErrors})`));\n }\n else {\n gen.assign((0, codegen_1._) `${validateName}.errors`, names_1.default.vErrors);\n if (opts.unevaluated)\n assignEvaluated(it);\n gen.return((0, codegen_1._) `${names_1.default.errors} === 0`);\n }\n}\nfunction assignEvaluated({ gen, evaluated, props, items }) {\n if (props instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.props`, props);\n if (items instanceof codegen_1.Name)\n gen.assign((0, codegen_1._) `${evaluated}.items`, items);\n}\nfunction schemaKeywords(it, types, typeErrors, errsCount) {\n const { gen, schema, data, allErrors, opts, self } = it;\n const { RULES } = self;\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", RULES.all.$ref.definition)); // TODO typecast\n return;\n }\n if (!opts.jtd)\n checkStrictTypes(it, types);\n gen.block(() => {\n for (const group of RULES.rules)\n groupKeywords(group);\n groupKeywords(RULES.post);\n });\n function groupKeywords(group) {\n if (!(0, applicability_1.shouldUseGroup)(schema, group))\n return;\n if (group.type) {\n gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers));\n iterateKeywords(it, group);\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else();\n (0, dataType_2.reportTypeError)(it);\n }\n gen.endIf();\n }\n else {\n iterateKeywords(it, group);\n }\n // TODO make it \"ok\" call?\n if (!allErrors)\n gen.if((0, codegen_1._) `${names_1.default.errors} === ${errsCount || 0}`);\n }\n}\nfunction iterateKeywords(it, group) {\n const { gen, schema, opts: { useDefaults }, } = it;\n if (useDefaults)\n (0, defaults_1.assignDefaults)(it, group.type);\n gen.block(() => {\n for (const rule of group.rules) {\n if ((0, applicability_1.shouldUseRule)(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type);\n }\n }\n });\n}\nfunction checkStrictTypes(it, types) {\n if (it.schemaEnv.meta || !it.opts.strictTypes)\n return;\n checkContextTypes(it, types);\n if (!it.opts.allowUnionTypes)\n checkMultipleTypes(it, types);\n checkKeywordTypes(it, it.dataTypes);\n}\nfunction checkContextTypes(it, types) {\n if (!types.length)\n return;\n if (!it.dataTypes.length) {\n it.dataTypes = types;\n return;\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`);\n }\n });\n narrowSchemaTypes(it, types);\n}\nfunction checkMultipleTypes(it, ts) {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\");\n }\n}\nfunction checkKeywordTypes(it, ts) {\n const rules = it.self.RULES.all;\n for (const keyword in rules) {\n const rule = rules[keyword];\n if (typeof rule == \"object\" && (0, applicability_1.shouldUseRule)(it.schema, rule)) {\n const { type } = rule.definition;\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`);\n }\n }\n }\n}\nfunction hasApplicableType(schTs, kwdT) {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"));\n}\nfunction includesType(ts, t) {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"));\n}\nfunction narrowSchemaTypes(it, withTypes) {\n const ts = [];\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t))\n ts.push(t);\n else if (withTypes.includes(\"integer\") && t === \"number\")\n ts.push(\"integer\");\n }\n it.dataTypes = ts;\n}\nfunction strictTypesError(it, msg) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n msg += ` at \"${schemaPath}\" (strictTypes)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes);\n}\nclass KeywordCxt {\n constructor(it, def, keyword) {\n (0, keyword_1.validateKeywordUsage)(it, def, keyword);\n this.gen = it.gen;\n this.allErrors = it.allErrors;\n this.keyword = keyword;\n this.data = it.data;\n this.schema = it.schema[keyword];\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data;\n this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data);\n this.schemaType = def.schemaType;\n this.parentSchema = it.schema;\n this.params = {};\n this.it = it;\n this.def = def;\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it));\n }\n else {\n this.schemaCode = this.schemaValue;\n if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`);\n }\n }\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", names_1.default.errors);\n }\n }\n result(condition, successAction, failAction) {\n this.failResult((0, codegen_1.not)(condition), successAction, failAction);\n }\n failResult(condition, successAction, failAction) {\n this.gen.if(condition);\n if (failAction)\n failAction();\n else\n this.error();\n if (successAction) {\n this.gen.else();\n successAction();\n if (this.allErrors)\n this.gen.endIf();\n }\n else {\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n }\n pass(condition, failAction) {\n this.failResult((0, codegen_1.not)(condition), undefined, failAction);\n }\n fail(condition) {\n if (condition === undefined) {\n this.error();\n if (!this.allErrors)\n this.gen.if(false); // this branch will be removed by gen.optimize\n return;\n }\n this.gen.if(condition);\n this.error();\n if (this.allErrors)\n this.gen.endIf();\n else\n this.gen.else();\n }\n fail$data(condition) {\n if (!this.$data)\n return this.fail(condition);\n const { schemaCode } = this;\n this.fail((0, codegen_1._) `${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`);\n }\n error(append, errorParams, errorPaths) {\n if (errorParams) {\n this.setParams(errorParams);\n this._error(append, errorPaths);\n this.setParams({});\n return;\n }\n this._error(append, errorPaths);\n }\n _error(append, errorPaths) {\n ;\n (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths);\n }\n $dataError() {\n (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError);\n }\n reset() {\n if (this.errsCount === undefined)\n throw new Error('add \"trackErrors\" to keyword definition');\n (0, errors_1.resetErrorsCount)(this.gen, this.errsCount);\n }\n ok(cond) {\n if (!this.allErrors)\n this.gen.if(cond);\n }\n setParams(obj, assign) {\n if (assign)\n Object.assign(this.params, obj);\n else\n this.params = obj;\n }\n block$data(valid, codeBlock, $dataValid = codegen_1.nil) {\n this.gen.block(() => {\n this.check$data(valid, $dataValid);\n codeBlock();\n });\n }\n check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) {\n if (!this.$data)\n return;\n const { gen, schemaCode, schemaType, def } = this;\n gen.if((0, codegen_1.or)((0, codegen_1._) `${schemaCode} === undefined`, $dataValid));\n if (valid !== codegen_1.nil)\n gen.assign(valid, true);\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data());\n this.$dataError();\n if (valid !== codegen_1.nil)\n gen.assign(valid, false);\n }\n gen.else();\n }\n invalid$data() {\n const { gen, schemaCode, schemaType, def, it } = this;\n return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema());\n function wrong$DataType() {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof codegen_1.Name))\n throw new Error(\"ajv implementation error\");\n const st = Array.isArray(schemaType) ? schemaType : [schemaType];\n return (0, codegen_1._) `${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`;\n }\n return codegen_1.nil;\n }\n function invalid$DataSchema() {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", { ref: def.validateSchema }); // TODO value.code for standalone\n return (0, codegen_1._) `!${validateSchemaRef}(${schemaCode})`;\n }\n return codegen_1.nil;\n }\n }\n subschema(appl, valid) {\n const subschema = (0, subschema_1.getSubschema)(this.it, appl);\n (0, subschema_1.extendSubschemaData)(subschema, this.it, appl);\n (0, subschema_1.extendSubschemaMode)(subschema, appl);\n const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined };\n subschemaCode(nextContext, valid);\n return nextContext;\n }\n mergeEvaluated(schemaCxt, toName) {\n const { it, gen } = this;\n if (!it.opts.unevaluated)\n return;\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName);\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName);\n }\n }\n mergeValidEvaluated(schemaCxt, valid) {\n const { it, gen } = this;\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name));\n return true;\n }\n }\n}\nexports.KeywordCxt = KeywordCxt;\nfunction keywordCode(it, keyword, def, ruleType) {\n const cxt = new KeywordCxt(it, def, keyword);\n if (\"code\" in def) {\n def.code(cxt, ruleType);\n }\n else if (cxt.$data && def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n else if (\"macro\" in def) {\n (0, keyword_1.macroKeywordCode)(cxt, def);\n }\n else if (def.compile || def.validate) {\n (0, keyword_1.funcKeywordCode)(cxt, def);\n }\n}\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/;\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/;\nfunction getData($data, { dataLevel, dataNames, dataPathArr }) {\n let jsonPointer;\n let data;\n if ($data === \"\")\n return names_1.default.rootData;\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data))\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n jsonPointer = $data;\n data = names_1.default.rootData;\n }\n else {\n const matches = RELATIVE_JSON_POINTER.exec($data);\n if (!matches)\n throw new Error(`Invalid JSON-pointer: ${$data}`);\n const up = +matches[1];\n jsonPointer = matches[2];\n if (jsonPointer === \"#\") {\n if (up >= dataLevel)\n throw new Error(errorMsg(\"property/index\", up));\n return dataPathArr[dataLevel - up];\n }\n if (up > dataLevel)\n throw new Error(errorMsg(\"data\", up));\n data = dataNames[dataLevel - up];\n if (!jsonPointer)\n return data;\n }\n let expr = data;\n const segments = jsonPointer.split(\"/\");\n for (const segment of segments) {\n if (segment) {\n data = (0, codegen_1._) `${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`;\n expr = (0, codegen_1._) `${expr} && ${data}`;\n }\n }\n return expr;\n function errorMsg(pointerType, up) {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`;\n }\n}\nexports.getData = getData;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValidationError extends Error {\n constructor(errors) {\n super(\"validation failed\");\n this.errors = errors;\n this.ajv = this.validation = true;\n }\n}\nexports.default = ValidationError;\n//# sourceMappingURL=validation_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst resolve_1 = require(\"./resolve\");\nclass MissingRefError extends Error {\n constructor(resolver, baseId, ref, msg) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`);\n this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref);\n this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef));\n }\n}\nexports.default = MissingRefError;\n//# sourceMappingURL=ref_error.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = void 0;\nconst codegen_1 = require(\"./codegen\");\nconst validation_error_1 = require(\"../runtime/validation_error\");\nconst names_1 = require(\"./names\");\nconst resolve_1 = require(\"./resolve\");\nconst util_1 = require(\"./util\");\nconst validate_1 = require(\"./validate\");\nclass SchemaEnv {\n constructor(env) {\n var _a;\n this.refs = {};\n this.dynamicAnchors = {};\n let schema;\n if (typeof env.schema == \"object\")\n schema = env.schema;\n this.schema = env.schema;\n this.schemaId = env.schemaId;\n this.root = env.root || this;\n this.baseId = (_a = env.baseId) !== null && _a !== void 0 ? _a : (0, resolve_1.normalizeId)(schema === null || schema === void 0 ? void 0 : schema[env.schemaId || \"$id\"]);\n this.schemaPath = env.schemaPath;\n this.localRefs = env.localRefs;\n this.meta = env.meta;\n this.$async = schema === null || schema === void 0 ? void 0 : schema.$async;\n this.refs = {};\n }\n}\nexports.SchemaEnv = SchemaEnv;\n// let codeSize = 0\n// let nodeCount = 0\n// Compiles schema in SchemaEnv\nfunction compileSchema(sch) {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch);\n if (_sch)\n return _sch;\n const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); // TODO if getFullPath removed 1 tests fails\n const { es5, lines } = this.opts.code;\n const { ownProperties } = this.opts;\n const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties });\n let _ValidationError;\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: validation_error_1.default,\n code: (0, codegen_1._) `require(\"ajv/dist/runtime/validation_error\").default`,\n });\n }\n const validateName = gen.scopeName(\"validate\");\n sch.validateName = validateName;\n const schemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: names_1.default.data,\n parentData: names_1.default.parentData,\n parentDataProperty: names_1.default.parentDataProperty,\n dataNames: [names_1.default.data],\n dataPathArr: [codegen_1.nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set(),\n topSchemaRef: gen.scopeValue(\"schema\", this.opts.code.source === true\n ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) }\n : { ref: sch.schema }),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: codegen_1.nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: (0, codegen_1._) `\"\"`,\n opts: this.opts,\n self: this,\n };\n let sourceCode;\n try {\n this._compilations.add(sch);\n (0, validate_1.validateFunctionCode)(schemaCxt);\n gen.optimize(this.opts.code.optimize);\n // gen.optimize(1)\n const validateCode = gen.toString();\n sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`;\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process)\n sourceCode = this.opts.code.process(sourceCode, sch);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);\n const validate = makeValidate(this, this.scope.get());\n this.scope.value(validateName, { ref: validate });\n validate.errors = null;\n validate.schema = sch.schema;\n validate.schemaEnv = sch;\n if (sch.$async)\n validate.$async = true;\n if (this.opts.code.source === true) {\n validate.source = { validateName, validateCode, scopeValues: gen._values };\n }\n if (this.opts.unevaluated) {\n const { props, items } = schemaCxt;\n validate.evaluated = {\n props: props instanceof codegen_1.Name ? undefined : props,\n items: items instanceof codegen_1.Name ? undefined : items,\n dynamicProps: props instanceof codegen_1.Name,\n dynamicItems: items instanceof codegen_1.Name,\n };\n if (validate.source)\n validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated);\n }\n sch.validate = validate;\n return sch;\n }\n catch (e) {\n delete sch.validate;\n delete sch.validateName;\n if (sourceCode)\n this.logger.error(\"Error compiling schema, function code:\", sourceCode);\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e;\n }\n finally {\n this._compilations.delete(sch);\n }\n}\nexports.compileSchema = compileSchema;\nfunction resolveRef(root, baseId, ref) {\n var _a;\n ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref);\n const schOrFunc = root.refs[ref];\n if (schOrFunc)\n return schOrFunc;\n let _sch = resolve.call(this, root, ref);\n if (_sch === undefined) {\n const schema = (_a = root.localRefs) === null || _a === void 0 ? void 0 : _a[ref]; // TODO maybe localRefs should hold SchemaEnv\n const { schemaId } = this.opts;\n if (schema)\n _sch = new SchemaEnv({ schema, schemaId, root, baseId });\n }\n if (_sch === undefined)\n return;\n return (root.refs[ref] = inlineOrCompile.call(this, _sch));\n}\nexports.resolveRef = resolveRef;\nfunction inlineOrCompile(sch) {\n if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs))\n return sch.schema;\n return sch.validate ? sch : compileSchema.call(this, sch);\n}\n// Index of schema compilation in the currently compiled list\nfunction getCompilingSchema(schEnv) {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv))\n return sch;\n }\n}\nexports.getCompilingSchema = getCompilingSchema;\nfunction sameSchemaEnv(s1, s2) {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;\n}\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(root, // information about the root schema for the current schema\nref // reference to resolve\n) {\n let sch;\n while (typeof (sch = this.refs[ref]) == \"string\")\n ref = sch;\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref);\n}\n// Resolve schema, its root and baseId\nfunction resolveSchema(root, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\nref // reference to resolve\n) {\n const p = this.opts.uriResolver.parse(ref);\n const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p);\n let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined);\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root);\n }\n const id = (0, resolve_1.normalizeId)(refPath);\n const schOrRef = this.refs[id] || this.schemas[id];\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef);\n if (typeof (sch === null || sch === void 0 ? void 0 : sch.schema) !== \"object\")\n return;\n return getJsonPointer.call(this, p, sch);\n }\n if (typeof (schOrRef === null || schOrRef === void 0 ? void 0 : schOrRef.schema) !== \"object\")\n return;\n if (!schOrRef.validate)\n compileSchema.call(this, schOrRef);\n if (id === (0, resolve_1.normalizeId)(ref)) {\n const { schema } = schOrRef;\n const { schemaId } = this.opts;\n const schId = schema[schemaId];\n if (schId)\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n return new SchemaEnv({ schema, schemaId, root, baseId });\n }\n return getJsonPointer.call(this, p, schOrRef);\n}\nexports.resolveSchema = resolveSchema;\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n]);\nfunction getJsonPointer(parsedRef, { baseId, schema, root }) {\n var _a;\n if (((_a = parsedRef.fragment) === null || _a === void 0 ? void 0 : _a[0]) !== \"/\")\n return;\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\")\n return;\n const partSchema = schema[(0, util_1.unescapeFragment)(part)];\n if (partSchema === undefined)\n return;\n schema = partSchema;\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId];\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId);\n }\n }\n let env;\n if (typeof schema != \"boolean\" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) {\n const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref);\n env = resolveSchema.call(this, root, $ref);\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const { schemaId } = this.opts;\n env = env || new SchemaEnv({ schema, schemaId, root, baseId });\n if (env.schema !== env.root.schema)\n return env;\n return undefined;\n}\n//# sourceMappingURL=index.js.map","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/** @type {(value: string) => boolean} */\nconst isPort = RegExp.prototype.test.bind(/^\\d*$/u)\n\n/** @type {(value: string) => boolean} */\nconst isHexPair = RegExp.prototype.test.bind(/^[\\da-f]{2}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isUnreserved = RegExp.prototype.test.bind(/^[\\da-z\\-._~]$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:@/?]$/u)\n\n/** @type {(value: string) => boolean} */\nconst isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\\-._~!$&'()*+,;=:]$/u)\n\nconst BYTE_HEX = new Array(256)\n{\n const HEX_DIGITS = '0123456789ABCDEF'\n for (let i = 0; i < 256; i++) {\n BYTE_HEX[i] = '%' + HEX_DIGITS[i >> 4] + HEX_DIGITS[i & 0xF]\n }\n}\nfunction percentEncodeNonAscii (cp) {\n if (cp < 0x800) {\n return BYTE_HEX[0xC0 | (cp >> 6)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n if (cp < 0x10000) {\n return BYTE_HEX[0xE0 | (cp >> 12)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n }\n return BYTE_HEX[0xF0 | (cp >> 18)] +\n BYTE_HEX[0x80 | ((cp >> 12) & 0x3F)] +\n BYTE_HEX[0x80 | ((cp >> 6) & 0x3F)] +\n BYTE_HEX[0x80 | (cp & 0x3F)]\n}\n\n/**\n * @param {Array} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/** @type {(value: string) => boolean} */\nconst isHextet = RegExp.prototype.test.bind(/^[\\dA-Fa-f]{1,4}$/)\n\n/** @type {(value: string) => boolean} */\nconst isIPvFuture = RegExp.prototype.test.bind(/^[vV][\\dA-Fa-f]+\\.[A-Za-z\\d\\-._~!$&'()*+,;=:]+$/)\n\n/** @type {(value: string) => boolean} */\nconst isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\\d\\-._~]$/)\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {string} zone\n * @returns {boolean}\n */\nfunction isZoneIdentifier (zone) {\n if (zone.length === 0) return false\n\n for (let i = 0; i < zone.length; i++) {\n if (isZoneCharacter(zone[i])) continue\n if (zone[i] === '%' && i + 2 < zone.length && isHexPair(zone.slice(i + 1, i + 3))) {\n i += 2\n continue\n }\n return false\n }\n\n return true\n}\n\n/**\n * Compresses the longest run of zero hextets to \"::\" per RFC 5952. A run of a\n * single zero hextet is left uncompressed. On ties the leftmost run wins.\n *\n * @param {string[]} hextets\n * @returns {string}\n */\nfunction compressIPv6ZeroRun (hextets) {\n let bestStart = -1\n let bestLength = 0\n let runStart = -1\n let runLength = 0\n for (let i = 0; i < hextets.length; i++) {\n if (hextets[i] === '0') {\n if (runStart === -1) runStart = i\n runLength++\n if (runLength > bestLength) {\n bestLength = runLength\n bestStart = runStart\n }\n } else {\n runStart = -1\n runLength = 0\n }\n }\n\n if (bestLength < 2) return hextets.join(':')\n\n const head = hextets.slice(0, bestStart).join(':')\n const tail = hextets.slice(bestStart + bestLength).join(':')\n return head + '::' + tail\n}\n\n/**\n * Validates an IPv6 address against the alternatives in RFC 3986 section\n * 3.2.2 and returns the same address with leading hextet zeroes removed.\n * An embedded IPv4 address counts as two hextets and is only valid at the end.\n *\n * @param {string} input\n * @returns {string|undefined}\n */\nfunction normalizeIPv6Address (input) {\n const compression = input.indexOf('::')\n if (compression !== -1 && input.indexOf('::', compression + 1) !== -1) return undefined\n\n const left = compression === -1 ? input.split(':') : input.slice(0, compression).split(':')\n const right = compression === -1 ? [] : input.slice(compression + 2).split(':')\n if (compression !== -1) {\n if (left.length === 1 && left[0] === '') left.length = 0\n if (right.length === 1 && right[0] === '') right.length = 0\n }\n\n const parts = left.concat(right)\n let hextetCount = 0\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (part === '') return undefined\n\n if (part.indexOf('.') !== -1) {\n if (i !== parts.length - 1 || (compression !== -1 && right.length === 0) || !isIPv4(part)) return undefined\n hextetCount += 2\n continue\n }\n\n if (!isHextet(part)) return undefined\n parts[i] = parseInt(part, 16).toString(16)\n hextetCount++\n }\n\n if (compression === -1) {\n if (hextetCount !== 8) return undefined\n return compressIPv6ZeroRun(parts)\n }\n if (hextetCount >= 8) return undefined\n\n // expand \"::\" then re-compress the longest run for a canonical result\n const expanded = parts.slice(0, left.length)\n for (let i = hextetCount; i < 8; i++) expanded.push('0')\n for (let i = left.length; i < parts.length; i++) expanded.push(parts[i])\n return compressIPv6ZeroRun(expanded)\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n * @property {boolean} [isIPVFuture] - Indicates if the host is an IPvFuture literal.\n * @property {boolean} [error] - Indicates if a bracketed IP literal is malformed.\n */\n\n/**\n * Validates and normalizes a bracketed IP literal. Raw zone separators remain\n * accepted for backwards compatibility, while encoded separators and zone\n * contents follow RFC 6874.\n *\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n const bracketed = host[0] === '[' && host[host.length - 1] === ']'\n const hasBracket = host[0] === '[' || host[host.length - 1] === ']'\n if (hasBracket && !bracketed) return { host, isIPV6: false, error: true }\n\n let input = bracketed ? host.slice(1, -1) : host\n if (bracketed && isIPvFuture(input)) {\n input = input.toLowerCase()\n return { host: `[${input}]`, escapedHost: input, isIPV6: false, isIPVFuture: true }\n }\n\n if (findToken(input, ':') < 2) {\n return { host, isIPV6: false, error: bracketed }\n }\n\n let zoneIdentifier = ''\n const zoneSeparator = input.indexOf('%')\n if (zoneSeparator !== -1) {\n const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === '%25' ? 3 : 1\n zoneIdentifier = input.slice(zoneSeparator + separatorLength)\n if (!isZoneIdentifier(zoneIdentifier)) return { host, isIPV6: false, error: true }\n input = input.slice(0, zoneSeparator)\n }\n\n const address = normalizeIPv6Address(input)\n if (address === undefined) return { host, isIPV6: false, error: true }\n\n return {\n host: address + (zoneIdentifier ? '%' + zoneIdentifier : ''),\n escapedHost: address + (zoneIdentifier ? '%25' + zoneIdentifier : ''),\n isIPV6: true\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.' || input[1] === '/') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * Re-escape RFC 3986 gen-delims that must not appear literally in the host.\n * After the URI regex parses, these characters cannot be literal in the host\n * field, so any that appear after decoding came from percent-encoding and\n * must be restored to prevent authority structure changes.\n *\n * @param {string} host\n * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)\n * @returns {string}\n */\nconst HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' }\nconst HOST_DELIM_RE = /[@/?#:]/g\nconst HOST_DELIM_NO_COLON_RE = /[@/?#]/g\n\nfunction reescapeHostDelimiters (host, isIP) {\n const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE\n re.lastIndex = 0\n return host.replace(re, (ch) => HOST_DELIMS[ch])\n}\n\n/**\n * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.\n * Reserved delimiters such as `%2F` stay escaped; `%2E` is unreserved.\n *\n * @param {string} input\n * @param {boolean} [decodeUnreserved=false]\n * @returns {string}\n */\nfunction normalizePercentEncoding (input, decodeUnreserved = false) {\n if (input.indexOf('%') === -1) {\n return input\n }\n\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decodeUnreserved && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n output += input[i]\n }\n\n return output\n}\n\n/**\n * Normalizes path data without turning reserved escapes into live path syntax.\n * Valid escapes are uppercased, raw unsafe characters are escaped, and only\n * unreserved bytes that are not `.` are decoded.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizePathEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decoded !== '.' && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isPathCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Serializes a path without rewriting reserved data. Raw RFC 3986 path\n * characters remain literal, valid escapes are preserved and uppercased, and\n * everything else is UTF-8 percent-encoded. In a path-noscheme, a colon in the\n * first segment must be escaped so the result cannot be parsed as a scheme.\n *\n * @param {string} input\n * @param {boolean} [pathNoScheme=false]\n * @returns {string}\n */\nfunction serializePathEncoding (input, pathNoScheme = false) {\n let output = ''\n let firstSegment = pathNoScheme && input[0] !== '/'\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (ch === '/') {\n firstSegment = false\n }\n\n if (isPathCharacter(ch) && (ch !== ':' || !firstSegment)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Percent-encodes a URI component using its RFC 3986 literal character set.\n * Existing valid escapes are preserved and normalized to uppercase hex.\n *\n * @param {string} input\n * @param {(value: string) => boolean} isAllowed\n * @returns {string}\n */\nfunction encodeComponent (input, isAllowed) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n if (isAllowed(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Encodes userinfo while preserving its RFC 3986 §3.2.1 literal characters.\n * In particular, authority delimiters such as `@`, `/`, `?`, and `#` are data.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeUserinfo (input) {\n return encodeComponent(input, isUserinfoCharacter)\n}\n\n/**\n * Encodes query data using the RFC 3986 §3.4 grammar. A literal `#` must be\n * escaped because it would otherwise begin the fragment component.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeQuery (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\n/**\n * Encodes fragment data using the RFC 3986 §3.5 grammar.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction encodeFragment (input) {\n return encodeComponent(input, isQueryFragmentCharacter)\n}\n\nfunction isEscapeSafe (cp) {\n return (\n (cp >= 0x30 && cp <= 0x39) ||\n (cp >= 0x41 && cp <= 0x5A) ||\n (cp >= 0x61 && cp <= 0x7A) ||\n cp === 0x2A || cp === 0x2B || cp === 0x2D || cp === 0x2E ||\n cp === 0x2F || cp === 0x40 || cp === 0x5F\n )\n}\n\n/**\n * Normalizes the percent-encoding of a query or fragment component.\n *\n * Like `normalizePathEncoding`, but uses the query/fragment character set\n * (which additionally allows `?`) and decodes `.` since it has no dot-segment\n * meaning outside of a path.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeQueryFragmentEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]\n if (ch === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isQueryFragmentCharacter(ch)) {\n output += ch\n } else {\n const code = input.charCodeAt(i)\n if (code < 0x80) {\n output += isEscapeSafe(code) ? ch : BYTE_HEX[code]\n } else if (code < 0xD800 || code > 0xDFFF) {\n output += percentEncodeNonAscii(code)\n } else if (code <= 0xDBFF && i + 1 < input.length) {\n const low = input.charCodeAt(i + 1)\n if (low >= 0xDC00 && low <= 0xDFFF) {\n output += percentEncodeNonAscii(0x10000 + ((code - 0xD800) << 10) + (low - 0xDC00))\n i++\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n } else {\n output += percentEncodeNonAscii(0xFFFD)\n }\n }\n }\n\n return output\n}\n\n/**\n * Escapes a component while preserving existing valid percent escapes.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction escapePreservingEscapes (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n output += escape(input[i])\n }\n\n return output\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(encodeUserinfo(component.userinfo))\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = component.host\n if (!isIPv4(host)) {\n let ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {\n // Decode only unreserved bytes, once. In particular, keep %25 encoded\n // so it cannot introduce a second escape during recomposition.\n host = normalizePercentEncoding(host, true)\n ipV6res = normalizeIPv6(host)\n }\n if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = reescapeHostDelimiters(host, false)\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n const port = String(component.port)\n if (!isPort(port)) {\n throw new TypeError('URI port is malformed.')\n }\n uriTokens.push(':')\n uriTokens.push(port)\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n nonSimpleDomain,\n recomposeAuthority,\n reescapeHostDelimiters,\n normalizePercentEncoding,\n normalizePathEncoding,\n serializePathEncoding,\n normalizeQueryFragmentEncoding,\n encodeUserinfo,\n encodeQuery,\n encodeFragment,\n escapePreservingEscapes,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /^([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-./:;=@]|%[\\da-f]{2})+)$/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const queryIndex = wsComponent.resourceName.indexOf('?')\n const path = queryIndex === -1\n ? wsComponent.resourceName\n : wsComponent.resourceName.slice(0, queryIndex)\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = queryIndex === -1\n ? undefined\n : wsComponent.resourceName.slice(queryIndex + 1)\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches && matches[0] === urnComponent.path) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\nconst VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u\nconst MALFORMED_SCHEME_ERROR = 'URI scheme is malformed.'\n\n/**\n * @param {string} scheme\n * @returns {string}\n */\nfunction decodeValidScheme (scheme) {\n const decodedScheme = unescape(String(scheme))\n if (!VALID_SCHEME.test(decodedScheme)) {\n throw new TypeError(MALFORMED_SCHEME_ERROR)\n }\n return decodedScheme\n}\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (normalizeString(uri, options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const {\n parsed: baseParsed,\n malformedAuthorityOrPort: baseMalformed,\n malformedPercentEncoding: baseMalformedPercentEncoding,\n malformedSchemeSpecific: baseMalformedSchemeSpecific,\n malformedHost: baseMalformedHost,\n malformedScheme: baseMalformedScheme\n } = parseWithStatus(baseURI, schemelessOptions)\n const {\n parsed: relativeParsed,\n malformedAuthorityOrPort: relativeMalformed,\n malformedPercentEncoding: relativeMalformedPercentEncoding,\n malformedSchemeSpecific: relativeMalformedSchemeSpecific,\n malformedHost: relativeMalformedHost,\n malformedScheme: relativeMalformedScheme\n } = parseWithStatus(relativeURI, schemelessOptions)\n if (\n baseMalformed ||\n relativeMalformed ||\n baseMalformedPercentEncoding ||\n relativeMalformedPercentEncoding ||\n baseMalformedSchemeSpecific ||\n relativeMalformedSchemeSpecific ||\n baseMalformedHost ||\n relativeMalformedHost ||\n baseMalformedScheme ||\n relativeMalformedScheme\n ) {\n throw new Error(baseParsed.error || relativeParsed.error || 'URI is malformed.')\n }\n const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true)\n const resolvedSchemeHandler = getSchemeHandler((options && options.scheme) || resolved.scheme)\n const resolvedHost = resolved.host\n const resolvedHostIsIP = resolvedHost !== undefined && resolvedHost !== '' &&\n (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6)\n canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP)\n // Percent escapes in an ASCII reg-name are encoded data. The WHATWG hostname\n // parser can reject them even though fast-uri preserves them safely as RFC\n // 3986 data. A raw non-ASCII host must still fail closed if conversion fails.\n const encodedASCIIHost = resolvedHost && resolvedHost.indexOf('%') !== -1 &&\n !/\\P{ASCII}/u.test(resolvedHost)\n if (resolved.error && !encodedASCIIHost) {\n throw new Error(resolved.error)\n }\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n const normalizedA = normalizeComparableURI(uriA, options)\n const normalizedB = normalizeComparableURI(uriB, options)\n\n return normalizedA !== undefined && normalizedB !== undefined && normalizedA === normalizedB\n}\n\n/**\n * @param {Readonly} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n if (component.scheme) {\n component.scheme = decodeValidScheme(component.scheme)\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n const hasAuthority = component.userinfo !== undefined || component.host !== undefined || component.port !== undefined\n const pathNoScheme = !options.skipEscape && component.scheme === undefined && !hasAuthority\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = serializePathEncoding(component.path, pathNoScheme)\n } else {\n component.path = normalizePercentEncoding(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n // Scheme handlers may replace the scheme during serialization.\n component.scheme = decodeValidScheme(component.scheme)\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n // Dot-segment removal can expose a colon that was not originally in the\n // first segment (for example, \"./a:b\"). Reapply path-noscheme encoding so\n // the serialized relative reference cannot be reparsed as a URI scheme.\n if (pathNoScheme) {\n s = serializePathEncoding(s, true)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', encodeQuery(component.query))\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', encodeFragment(component.fragment))\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n// Captures the authority component (between \"//\" and the next \"/\", \"?\" or \"#\"),\n// with or without a scheme prefix, for the literal-backslash rejection below.\nconst AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\\/\\/([^/?#]*)/\n\n// Captures the leading authority-introducer region after an optional scheme: a\n// run of forward slashes, backslashes, and the characters the WHATWG URL parser\n// removes before parsing (TAB U+0009, LF U+000A, CR U+000D). A valid introducer\n// is exactly \"//\". Node treats \"\\\" as \"/\" on special schemes and strips those\n// characters first, so forms like \"\\\\\", \"/\\\", \"\\/\", \"//\", or a leading\n// \"//\" reach an authority in Node while fast-uri's URI_PARSE folds them into\n// the path group (host confusion / SSRF / redirect bypass).\nconst AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\\\\t\\n\\r]*)/\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {RegExpMatchArray} matches\n * @returns {string|undefined}\n */\nfunction getParseError (parsed, matches) {\n if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {\n return 'URI path must start with \"/\" when authority is present.'\n }\n\n if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {\n return 'URI port is malformed.'\n }\n\n return undefined\n}\n\n/**\n * Checks percent syntax without decoding the represented octets. RFC 3986\n * percent-encoding is byte-oriented, so sequences such as `%FF` are valid even\n * though they are not independently valid UTF-8.\n *\n * @param {string|undefined} component\n * @returns {boolean}\n */\nfunction hasMalformedPercentEncoding (component) {\n if (component === undefined) return false\n\n let percent = component.indexOf('%')\n while (percent !== -1) {\n if (percent + 2 >= component.length || !/^[\\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) {\n return true\n }\n percent = component.indexOf('%', percent + 3)\n }\n\n return false\n}\n\n/**\n * Whether the host is a bracketed IP literal (RFC 3986 `IP-literal`).\n * An unterminated `[` is not a literal, so it must still be validated as a\n * reg-name instead of being waved through as an IP.\n *\n * @param {string} host\n * @returns {boolean}\n */\nfunction isIPLiteral (host) {\n return host[0] === '[' && host[host.length - 1] === ']'\n}\n\n/**\n * @param {RegExpMatchArray} matches\n * @returns {boolean}\n */\nfunction hasMalformedComponentPercentEncoding (matches) {\n // Bracketed IP literals use a raw \"%\" as the zone separator for historical\n // compatibility. Their parsing is intentionally left to normalizeIPv6.\n const host = matches[4]\n return hasMalformedPercentEncoding(matches[3]) ||\n (host !== undefined && !isIPLiteral(host) && hasMalformedPercentEncoding(host)) ||\n hasMalformedPercentEncoding(matches[6]) ||\n hasMalformedPercentEncoding(matches[7]) ||\n hasMalformedPercentEncoding(matches[8])\n}\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {import('./types/index').Options} options\n * @param {{ domainHost?: boolean, unicodeSupport?: boolean }|undefined} schemeHandler\n * @param {boolean} isIP\n * @returns {boolean} whether host conversion failed\n */\nfunction canonicalizeHost (parsed, options, schemeHandler, isIP) {\n if (\n !options.unicodeSupport &&\n (!schemeHandler || !schemeHandler.unicodeSupport) &&\n parsed.host &&\n !isIPLiteral(parsed.host) &&\n (options.domainHost || (schemeHandler && schemeHandler.domainHost)) &&\n isIP === false &&\n nonSimpleDomain(parsed.host)\n ) {\n try {\n parsed.host = new URL('http://' + parsed.host).hostname\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n return true\n }\n }\n return false\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction parseWithStatus (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let malformedAuthorityOrPort = false\n let malformedPercentEncoding = false\n let malformedSchemeSpecific = false\n let malformedHost = false\n let malformedIPLiteral = false\n let malformedScheme = false\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n // A literal backslash (U+005C) is not a valid RFC 3986 URI character and is\n // not an authority delimiter. Reject it in the authority rather than\n // rewriting it: normalizing \"\\\" -> \"/\" (WHATWG error recovery) could silently\n // change the resource identified by an otherwise-invalid input, and lets \"\\\"\n // act as a host delimiter here while Node's native URL parses a different\n // host (SSRF / redirect / origin-allowlist bypass). Percent-encoded %5C is\n // untouched and remains valid encoded data.\n const authorityMatch = uri.match(AUTHORITY_PREFIX)\n if (authorityMatch !== null && authorityMatch[1].indexOf('\\\\') !== -1) {\n parsed.error = 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n }\n\n // Reject a malformed or whitespace-smuggled authority introducer. fast-uri\n // only recognizes a literal \"//\"; anything else in the leading separator run\n // (a backslash, or a \"//\" that appears only after removing the TAB/LF/CR that\n // Node strips) means the authority fast-uri parses differs from the one Node's\n // URL resolves. Reject rather than rewrite, mirroring the literal-backslash\n // guard above. Percent-encoded forms (%5C, %09) are untouched, valid data.\n const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION)\n if (introducerMatch !== null) {\n const region = introducerMatch[1]\n const normalizedRegion = region.replace(/[\\t\\n\\r]/g, '')\n // Two or more leading separators introduce an authority.\n if (normalizedRegion.length >= 2) {\n if (normalizedRegion.slice(0, 2) !== '//') {\n parsed.error = parsed.error || 'URI authority must not contain a literal backslash.'\n malformedAuthorityOrPort = true\n } else if (region.length !== normalizedRegion.length) {\n parsed.error = parsed.error || 'URI authority introducer must not contain whitespace.'\n malformedAuthorityOrPort = true\n }\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n if (parsed.scheme !== undefined) {\n const decodedScheme = unescape(parsed.scheme)\n if (VALID_SCHEME.test(decodedScheme)) {\n parsed.scheme = decodedScheme.toLowerCase()\n } else {\n parsed.error = parsed.error || MALFORMED_SCHEME_ERROR\n malformedScheme = true\n }\n }\n\n malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches)\n if (malformedPercentEncoding) {\n parsed.error = parsed.error || 'URI contains malformed percent-encoding.'\n }\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n\n const parseError = getParseError(parsed, matches)\n if (parseError !== undefined) {\n parsed.error = parsed.error || parseError\n malformedAuthorityOrPort = true\n }\n\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const bracketedIPLiteral = isIPLiteral(parsed.host)\n const hasIPLiteralBracket = parsed.host.indexOf('[') !== -1 || parsed.host.indexOf(']') !== -1\n const ipv6result = normalizeIPv6(parsed.host)\n isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true\n malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true)\n parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase()\n\n if (malformedIPLiteral) {\n parsed.error = parsed.error || 'URI host is malformed.'\n malformedAuthorityOrPort = true\n }\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // convert Unicode IDN -> ASCII IDN when the effective scheme uses domain hosts\n if (!malformedIPLiteral) {\n malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP)\n }\n\n if (uri.indexOf('%') !== -1 && parsed.host !== undefined && !malformedIPLiteral) {\n let host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true)\n if (!isIP) {\n // Fold reg-name case after decoding unreserved octets. The second\n // pass only restores uppercase hex in escapes that remain encoded.\n host = normalizePercentEncoding(host.toLowerCase())\n }\n parsed.host = reescapeHostDelimiters(host, isIP)\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (parsed.path) {\n parsed.path = normalizePathEncoding(parsed.path)\n }\n if (parsed.query) {\n parsed.query = normalizeQueryFragmentEncoding(parsed.query)\n }\n if (parsed.fragment) {\n parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment)\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n if (schemeHandler === SCHEMES.urn && parsed.nid === undefined) {\n malformedSchemeSpecific = true\n }\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme }\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n return parseWithStatus(uri, opts).parsed\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction normalizeString (uri, opts) {\n return normalizeStringWithStatus(uri, opts).normalized\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ normalized: string, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}\n */\nfunction normalizeStringWithStatus (uri, opts) {\n const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts)\n return {\n normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize(parsed, opts),\n malformedAuthorityOrPort,\n malformedPercentEncoding,\n malformedSchemeSpecific,\n malformedHost,\n malformedScheme\n }\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string|undefined}\n */\nfunction normalizeComparableURI (uri, opts) {\n if (typeof uri !== 'string' && typeof uri !== 'object') {\n return undefined\n }\n\n let value\n try {\n value = typeof uri === 'string' ? uri : serialize(uri, opts)\n } catch {\n return undefined\n }\n const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts)\n return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? undefined : normalized\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst uri = require(\"fast-uri\");\nuri.code = 'require(\"ajv/dist/runtime/uri\").default';\nexports.default = uri;\n//# sourceMappingURL=uri.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = void 0;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nconst validation_error_1 = require(\"./runtime/validation_error\");\nconst ref_error_1 = require(\"./compile/ref_error\");\nconst rules_1 = require(\"./compile/rules\");\nconst compile_1 = require(\"./compile\");\nconst codegen_2 = require(\"./compile/codegen\");\nconst resolve_1 = require(\"./compile/resolve\");\nconst dataType_1 = require(\"./compile/validate/dataType\");\nconst util_1 = require(\"./compile/util\");\nconst $dataRefSchema = require(\"./refs/data.json\");\nconst uri_1 = require(\"./runtime/uri\");\nconst defaultRegExp = (str, flags) => new RegExp(str, flags);\ndefaultRegExp.code = \"new RegExp\";\nconst META_IGNORE_OPTIONS = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"];\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n]);\nconst removedOptions = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n};\nconst deprecatedOptions = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n};\nconst MAX_EXPRESSION = 200;\n// eslint-disable-next-line complexity\nfunction requiredOptions(o) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;\n const s = o.strict;\n const _optz = (_a = o.code) === null || _a === void 0 ? void 0 : _a.optimize;\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0;\n const regExp = (_c = (_b = o.code) === null || _b === void 0 ? void 0 : _b.regExp) !== null && _c !== void 0 ? _c : defaultRegExp;\n const uriResolver = (_d = o.uriResolver) !== null && _d !== void 0 ? _d : uri_1.default;\n return {\n strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== void 0 ? _e : s) !== null && _f !== void 0 ? _f : true,\n strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== void 0 ? _g : s) !== null && _h !== void 0 ? _h : true,\n strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== void 0 ? _j : s) !== null && _k !== void 0 ? _k : \"log\",\n strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== void 0 ? _l : s) !== null && _m !== void 0 ? _m : \"log\",\n strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== void 0 ? _o : s) !== null && _p !== void 0 ? _p : false,\n code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp },\n loopRequired: (_q = o.loopRequired) !== null && _q !== void 0 ? _q : MAX_EXPRESSION,\n loopEnum: (_r = o.loopEnum) !== null && _r !== void 0 ? _r : MAX_EXPRESSION,\n meta: (_s = o.meta) !== null && _s !== void 0 ? _s : true,\n messages: (_t = o.messages) !== null && _t !== void 0 ? _t : true,\n inlineRefs: (_u = o.inlineRefs) !== null && _u !== void 0 ? _u : true,\n schemaId: (_v = o.schemaId) !== null && _v !== void 0 ? _v : \"$id\",\n addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== void 0 ? _w : true,\n validateSchema: (_x = o.validateSchema) !== null && _x !== void 0 ? _x : true,\n validateFormats: (_y = o.validateFormats) !== null && _y !== void 0 ? _y : true,\n unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== void 0 ? _z : true,\n int32range: (_0 = o.int32range) !== null && _0 !== void 0 ? _0 : true,\n uriResolver: uriResolver,\n };\n}\nclass Ajv {\n constructor(opts = {}) {\n this.schemas = {};\n this.refs = {};\n this.formats = Object.create(null);\n this._compilations = new Set();\n this._loading = {};\n this._cache = new Map();\n opts = this.opts = { ...opts, ...requiredOptions(opts) };\n const { es5, lines } = this.opts.code;\n this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines });\n this.logger = getLogger(opts.logger);\n const formatOpt = opts.validateFormats;\n opts.validateFormats = false;\n this.RULES = (0, rules_1.getRules)();\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\");\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\");\n this._metaOpts = getMetaSchemaOptions.call(this);\n if (opts.formats)\n addInitialFormats.call(this);\n this._addVocabularies();\n this._addDefaultMetaSchema();\n if (opts.keywords)\n addInitialKeywords.call(this, opts.keywords);\n if (typeof opts.meta == \"object\")\n this.addMetaSchema(opts.meta);\n addInitialSchemas.call(this);\n opts.validateFormats = formatOpt;\n }\n _addVocabularies() {\n this.addKeyword(\"$async\");\n }\n _addDefaultMetaSchema() {\n const { $data, meta, schemaId } = this.opts;\n let _dataRefSchema = $dataRefSchema;\n if (schemaId === \"id\") {\n _dataRefSchema = { ...$dataRefSchema };\n _dataRefSchema.id = _dataRefSchema.$id;\n delete _dataRefSchema.$id;\n }\n if (meta && $data)\n this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false);\n }\n defaultMeta() {\n const { meta, schemaId } = this.opts;\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined);\n }\n validate(schemaKeyRef, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data // to be validated\n ) {\n let v;\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema(schemaKeyRef);\n if (!v)\n throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`);\n }\n else {\n v = this.compile(schemaKeyRef);\n }\n const valid = v(data);\n if (!(\"$async\" in v))\n this.errors = v.errors;\n return valid;\n }\n compile(schema, _meta) {\n const sch = this._addSchema(schema, _meta);\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n compileAsync(schema, meta) {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\");\n }\n const { loadSchema } = this.opts;\n return runCompileAsync.call(this, schema, meta);\n async function runCompileAsync(_schema, _meta) {\n await loadMetaSchema.call(this, _schema.$schema);\n const sch = this._addSchema(_schema, _meta);\n return sch.validate || _compileAsync.call(this, sch);\n }\n async function loadMetaSchema($ref) {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, { $ref }, true);\n }\n }\n async function _compileAsync(sch) {\n try {\n return this._compileSchemaEnv(sch);\n }\n catch (e) {\n if (!(e instanceof ref_error_1.default))\n throw e;\n checkLoaded.call(this, e);\n await loadMissingSchema.call(this, e.missingSchema);\n return _compileAsync.call(this, sch);\n }\n }\n function checkLoaded({ missingSchema: ref, missingRef }) {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`);\n }\n }\n async function loadMissingSchema(ref) {\n const _schema = await _loadSchema.call(this, ref);\n if (!this.refs[ref])\n await loadMetaSchema.call(this, _schema.$schema);\n if (!this.refs[ref])\n this.addSchema(_schema, ref, meta);\n }\n async function _loadSchema(ref) {\n const p = this._loading[ref];\n if (p)\n return p;\n try {\n return await (this._loading[ref] = loadSchema(ref));\n }\n finally {\n delete this._loading[ref];\n }\n }\n }\n // Adds schema to the instance\n addSchema(schema, // If array is passed, `key` will be ignored\n key, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ) {\n if (Array.isArray(schema)) {\n for (const sch of schema)\n this.addSchema(sch, undefined, _meta, _validateSchema);\n return this;\n }\n let id;\n if (typeof schema === \"object\") {\n const { schemaId } = this.opts;\n id = schema[schemaId];\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`);\n }\n }\n key = (0, resolve_1.normalizeId)(key || id);\n this._checkUnique(key);\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true);\n return this;\n }\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(schema, key, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ) {\n this.addSchema(schema, key, true, _validateSchema);\n return this;\n }\n // Validate schema against its meta-schema\n validateSchema(schema, throwOrLogError) {\n if (typeof schema == \"boolean\")\n return true;\n let $schema;\n $schema = schema.$schema;\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\");\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta();\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\");\n this.errors = null;\n return true;\n }\n const valid = this.validate($schema, schema);\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText();\n if (this.opts.validateSchema === \"log\")\n this.logger.error(message);\n else\n throw new Error(message);\n }\n return valid;\n }\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema(keyRef) {\n let sch;\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\")\n keyRef = sch;\n if (sch === undefined) {\n const { schemaId } = this.opts;\n const root = new compile_1.SchemaEnv({ schema: {}, schemaId });\n sch = compile_1.resolveSchema.call(this, root, keyRef);\n if (!sch)\n return;\n this.refs[keyRef] = sch;\n }\n return (sch.validate || this._compileSchemaEnv(sch));\n }\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef) {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef);\n this._removeAllSchemas(this.refs, schemaKeyRef);\n return this;\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas);\n this._removeAllSchemas(this.refs);\n this._cache.clear();\n return this;\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef);\n if (typeof sch == \"object\")\n this._cache.delete(sch.schema);\n delete this.schemas[schemaKeyRef];\n delete this.refs[schemaKeyRef];\n return this;\n }\n case \"object\": {\n const cacheKey = schemaKeyRef;\n this._cache.delete(cacheKey);\n let id = schemaKeyRef[this.opts.schemaId];\n if (id) {\n id = (0, resolve_1.normalizeId)(id);\n delete this.schemas[id];\n delete this.refs[id];\n }\n return this;\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\");\n }\n }\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions) {\n for (const def of definitions)\n this.addKeyword(def);\n return this;\n }\n addKeyword(kwdOrDef, def // deprecated\n ) {\n let keyword;\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef;\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\");\n def.keyword = keyword;\n }\n }\n else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef;\n keyword = def.keyword;\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\");\n }\n }\n else {\n throw new Error(\"invalid addKeywords parameters\");\n }\n checkKeyword.call(this, keyword, def);\n if (!def) {\n (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd));\n return this;\n }\n keywordMetaschema.call(this, def);\n const definition = {\n ...def,\n type: (0, dataType_1.getJSONTypes)(def.type),\n schemaType: (0, dataType_1.getJSONTypes)(def.schemaType),\n };\n (0, util_1.eachItem)(keyword, definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t)));\n return this;\n }\n getKeyword(keyword) {\n const rule = this.RULES.all[keyword];\n return typeof rule == \"object\" ? rule.definition : !!rule;\n }\n // Remove keyword\n removeKeyword(keyword) {\n // TODO return type should be Ajv\n const { RULES } = this;\n delete RULES.keywords[keyword];\n delete RULES.all[keyword];\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword);\n if (i >= 0)\n group.rules.splice(i, 1);\n }\n return this;\n }\n // Add format\n addFormat(name, format) {\n if (typeof format == \"string\")\n format = new RegExp(format);\n this.formats[name] = format;\n return this;\n }\n errorsText(errors = this.errors, // optional array of validation errors\n { separator = \", \", dataVar = \"data\" } = {} // optional options with properties `separator` and `dataVar`\n ) {\n if (!errors || errors.length === 0)\n return \"No errors\";\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg);\n }\n $dataMetaSchema(metaSchema, keywordsJsonPointers) {\n const rules = this.RULES.all;\n metaSchema = JSON.parse(JSON.stringify(metaSchema));\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1); // first segment is an empty string\n let keywords = metaSchema;\n for (const seg of segments)\n keywords = keywords[seg];\n for (const key in rules) {\n const rule = rules[key];\n if (typeof rule != \"object\")\n continue;\n const { $data } = rule.definition;\n const schema = keywords[key];\n if ($data && schema)\n keywords[key] = schemaOrData(schema);\n }\n }\n return metaSchema;\n }\n _removeAllSchemas(schemas, regex) {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef];\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef];\n }\n else if (sch && !sch.meta) {\n this._cache.delete(sch.schema);\n delete schemas[keyRef];\n }\n }\n }\n }\n _addSchema(schema, meta, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) {\n let id;\n const { schemaId } = this.opts;\n if (typeof schema == \"object\") {\n id = schema[schemaId];\n }\n else {\n if (this.opts.jtd)\n throw new Error(\"schema must be object\");\n else if (typeof schema != \"boolean\")\n throw new Error(\"schema must be object or boolean\");\n }\n let sch = this._cache.get(schema);\n if (sch !== undefined)\n return sch;\n baseId = (0, resolve_1.normalizeId)(id || baseId);\n const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId);\n sch = new compile_1.SchemaEnv({ schema, schemaId, meta, baseId, localRefs });\n this._cache.set(sch.schema, sch);\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId)\n this._checkUnique(baseId);\n this.refs[baseId] = sch;\n }\n if (validateSchema)\n this.validateSchema(schema, true);\n return sch;\n }\n _checkUnique(id) {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`);\n }\n }\n _compileSchemaEnv(sch) {\n if (sch.meta)\n this._compileMetaSchema(sch);\n else\n compile_1.compileSchema.call(this, sch);\n /* istanbul ignore if */\n if (!sch.validate)\n throw new Error(\"ajv implementation error\");\n return sch.validate;\n }\n _compileMetaSchema(sch) {\n const currentOpts = this.opts;\n this.opts = this._metaOpts;\n try {\n compile_1.compileSchema.call(this, sch);\n }\n finally {\n this.opts = currentOpts;\n }\n }\n}\nAjv.ValidationError = validation_error_1.default;\nAjv.MissingRefError = ref_error_1.default;\nexports.default = Ajv;\nfunction checkOptions(checkOpts, options, msg, log = \"error\") {\n for (const key in checkOpts) {\n const opt = key;\n if (opt in options)\n this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`);\n }\n}\nfunction getSchEnv(keyRef) {\n keyRef = (0, resolve_1.normalizeId)(keyRef); // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef];\n}\nfunction addInitialSchemas() {\n const optsSchemas = this.opts.schemas;\n if (!optsSchemas)\n return;\n if (Array.isArray(optsSchemas))\n this.addSchema(optsSchemas);\n else\n for (const key in optsSchemas)\n this.addSchema(optsSchemas[key], key);\n}\nfunction addInitialFormats() {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name];\n if (format)\n this.addFormat(name, format);\n }\n}\nfunction addInitialKeywords(defs) {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs);\n return;\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\");\n for (const keyword in defs) {\n const def = defs[keyword];\n if (!def.keyword)\n def.keyword = keyword;\n this.addKeyword(def);\n }\n}\nfunction getMetaSchemaOptions() {\n const metaOpts = { ...this.opts };\n for (const opt of META_IGNORE_OPTIONS)\n delete metaOpts[opt];\n return metaOpts;\n}\nconst noLogs = { log() { }, warn() { }, error() { } };\nfunction getLogger(logger) {\n if (logger === false)\n return noLogs;\n if (logger === undefined)\n return console;\n if (logger.log && logger.warn && logger.error)\n return logger;\n throw new Error(\"logger must implement log, warn and error methods\");\n}\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;\nfunction checkKeyword(keyword, def) {\n const { RULES } = this;\n (0, util_1.eachItem)(keyword, (kwd) => {\n if (RULES.keywords[kwd])\n throw new Error(`Keyword ${kwd} is already defined`);\n if (!KEYWORD_NAME.test(kwd))\n throw new Error(`Keyword ${kwd} has invalid name`);\n });\n if (!def)\n return;\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function');\n }\n}\nfunction addRule(keyword, definition, dataType) {\n var _a;\n const post = definition === null || definition === void 0 ? void 0 : definition.post;\n if (dataType && post)\n throw new Error('keyword with \"post\" flag cannot have \"type\"');\n const { RULES } = this;\n let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType);\n if (!ruleGroup) {\n ruleGroup = { type: dataType, rules: [] };\n RULES.rules.push(ruleGroup);\n }\n RULES.keywords[keyword] = true;\n if (!definition)\n return;\n const rule = {\n keyword,\n definition: {\n ...definition,\n type: (0, dataType_1.getJSONTypes)(definition.type),\n schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType),\n },\n };\n if (definition.before)\n addBeforeRule.call(this, ruleGroup, rule, definition.before);\n else\n ruleGroup.rules.push(rule);\n RULES.all[keyword] = rule;\n (_a = definition.implements) === null || _a === void 0 ? void 0 : _a.forEach((kwd) => this.addKeyword(kwd));\n}\nfunction addBeforeRule(ruleGroup, rule, before) {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before);\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule);\n }\n else {\n ruleGroup.rules.push(rule);\n this.logger.warn(`rule ${before} is not defined`);\n }\n}\nfunction keywordMetaschema(def) {\n let { metaSchema } = def;\n if (metaSchema === undefined)\n return;\n if (def.$data && this.opts.$data)\n metaSchema = schemaOrData(metaSchema);\n def.validateSchema = this.compile(metaSchema, true);\n}\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n};\nfunction schemaOrData(schema) {\n return { anyOf: [schema, $dataRef] };\n}\n//# sourceMappingURL=core.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst def = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID');\n },\n};\nexports.default = def;\n//# sourceMappingURL=id.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.callRef = exports.getValidate = void 0;\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst compile_1 = require(\"../../compile\");\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt) {\n const { gen, schema: $ref, it } = cxt;\n const { baseId, schemaEnv: env, validateName, opts, self } = it;\n const { root } = env;\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId)\n return callRootRef();\n const schOrEnv = compile_1.resolveRef.call(self, root, baseId, $ref);\n if (schOrEnv === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref);\n if (schOrEnv instanceof compile_1.SchemaEnv)\n return callValidate(schOrEnv);\n return inlineRefSchema(schOrEnv);\n function callRootRef() {\n if (env === root)\n return callRef(cxt, validateName, env, env.$async);\n const rootName = gen.scopeValue(\"root\", { ref: root });\n return callRef(cxt, (0, codegen_1._) `${rootName}.validate`, root, root.$async);\n }\n function callValidate(sch) {\n const v = getValidate(cxt, sch);\n callRef(cxt, v, sch, sch.$async);\n }\n function inlineRefSchema(sch) {\n const schName = gen.scopeValue(\"schema\", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch });\n const valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({\n schema: sch,\n dataTypes: [],\n schemaPath: codegen_1.nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n }, valid);\n cxt.mergeEvaluated(schCxt);\n cxt.ok(valid);\n }\n },\n};\nfunction getValidate(cxt, sch) {\n const { gen } = cxt;\n return sch.validate\n ? gen.scopeValue(\"validate\", { ref: sch.validate })\n : (0, codegen_1._) `${gen.scopeValue(\"wrapper\", { ref: sch })}.validate`;\n}\nexports.getValidate = getValidate;\nfunction callRef(cxt, v, sch, $async) {\n const { gen, it } = cxt;\n const { allErrors, schemaEnv: env, opts } = it;\n const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil;\n if ($async)\n callAsyncRef();\n else\n callSyncRef();\n function callAsyncRef() {\n if (!env.$async)\n throw new Error(\"async schema referenced by sync schema\");\n const valid = gen.let(\"valid\");\n gen.try(() => {\n gen.code((0, codegen_1._) `await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`);\n addEvaluatedFrom(v); // TODO will not work with async, it has to be returned with the result\n if (!allErrors)\n gen.assign(valid, true);\n }, (e) => {\n gen.if((0, codegen_1._) `!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e));\n addErrorsFrom(e);\n if (!allErrors)\n gen.assign(valid, false);\n });\n cxt.ok(valid);\n }\n function callSyncRef() {\n cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v));\n }\n function addErrorsFrom(source) {\n const errs = (0, codegen_1._) `${source}.errors`;\n gen.assign(names_1.default.vErrors, (0, codegen_1._) `${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); // TODO tagged\n gen.assign(names_1.default.errors, (0, codegen_1._) `${names_1.default.vErrors}.length`);\n }\n function addEvaluatedFrom(source) {\n var _a;\n if (!it.opts.unevaluated)\n return;\n const schEvaluated = (_a = sch === null || sch === void 0 ? void 0 : sch.validate) === null || _a === void 0 ? void 0 : _a.evaluated;\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props);\n }\n }\n else {\n const props = gen.var(\"props\", (0, codegen_1._) `${source}.evaluated.props`);\n it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name);\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items);\n }\n }\n else {\n const items = gen.var(\"items\", (0, codegen_1._) `${source}.evaluated.items`);\n it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name);\n }\n }\n }\n}\nexports.callRef = callRef;\nexports.default = def;\n//# sourceMappingURL=ref.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst id_1 = require(\"./id\");\nconst ref_1 = require(\"./ref\");\nconst core = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n { keyword: \"$comment\" },\n \"definitions\",\n id_1.default,\n ref_1.default,\n];\nexports.default = core;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n maximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n minimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n exclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n exclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n message: ({ keyword, schemaCode }) => (0, codegen_1.str) `must be ${KWDs[keyword].okStr} ${schemaCode}`,\n params: ({ keyword, schemaCode }) => (0, codegen_1._) `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n cxt.fail$data((0, codegen_1._) `${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitNumber.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must be multiple of ${schemaCode}`,\n params: ({ schemaCode }) => (0, codegen_1._) `{multipleOf: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, schemaCode, it } = cxt;\n // const bdt = bad$DataType(schemaCode, def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision;\n const res = gen.let(\"res\");\n const invalid = prec\n ? (0, codegen_1._) `Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : (0, codegen_1._) `${res} !== parseInt(${res})`;\n cxt.fail$data((0, codegen_1._) `(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=multipleOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nfunction ucs2length(str) {\n const len = str.length;\n let length = 0;\n let pos = 0;\n let value;\n while (pos < len) {\n length++;\n value = str.charCodeAt(pos++);\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos);\n if ((value & 0xfc00) === 0xdc00)\n pos++; // low surrogate\n }\n }\n return length;\n}\nexports.default = ucs2length;\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default';\n//# sourceMappingURL=ucs2length.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst ucs2length_1 = require(\"../../runtime/ucs2length\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} characters`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode, it } = cxt;\n const op = keyword === \"maxLength\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n const len = it.opts.unicode === false ? (0, codegen_1._) `${data}.length` : (0, codegen_1._) `${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`;\n cxt.fail$data((0, codegen_1._) `${len} ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitLength.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match pattern \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{pattern: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const u = it.opts.unicodeRegExp ? \"u\" : \"\";\n if ($data) {\n const { regExp } = it.opts.code;\n const regExpCode = regExp.code === \"new RegExp\" ? (0, codegen_1._) `new RegExp` : (0, util_1.useFunc)(gen, regExp);\n const valid = gen.let(\"valid\");\n gen.try(() => gen.assign(valid, (0, codegen_1._) `${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false));\n cxt.fail$data((0, codegen_1._) `!${valid}`);\n }\n else {\n const regExp = (0, code_1.usePattern)(cxt, schema);\n cxt.fail$data((0, codegen_1._) `!${regExp}.test(${data})`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=pattern.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} properties`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxProperties\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `Object.keys(${data}).length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { missingProperty } }) => (0, codegen_1.str) `must have required property '${missingProperty}'`,\n params: ({ params: { missingProperty } }) => (0, codegen_1._) `{missingProperty: ${missingProperty}}`,\n};\nconst def = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, schema, schemaCode, data, $data, it } = cxt;\n const { opts } = it;\n if (!$data && schema.length === 0)\n return;\n const useLoop = schema.length >= opts.loopRequired;\n if (it.allErrors)\n allErrorsMode();\n else\n exitOnErrorMode();\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties;\n const { definedProperties } = cxt.it;\n for (const requiredKey of schema) {\n if ((props === null || props === void 0 ? void 0 : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath;\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`;\n (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired);\n }\n }\n }\n function allErrorsMode() {\n if (useLoop || $data) {\n cxt.block$data(codegen_1.nil, loopAllRequired);\n }\n else {\n for (const prop of schema) {\n (0, code_1.checkReportMissingProp)(cxt, prop);\n }\n }\n }\n function exitOnErrorMode() {\n const missing = gen.let(\"missing\");\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true);\n cxt.block$data(valid, () => loopUntilMissing(missing, valid));\n cxt.ok(valid);\n }\n else {\n gen.if((0, code_1.checkMissingProp)(cxt, schema, missing));\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n function loopAllRequired() {\n gen.forOf(\"prop\", schemaCode, (prop) => {\n cxt.setParams({ missingProperty: prop });\n gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error());\n });\n }\n function loopUntilMissing(missing, valid) {\n cxt.setParams({ missingProperty: missing });\n gen.forOf(missing, schemaCode, () => {\n gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties));\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error();\n gen.break();\n });\n }, codegen_1.nil);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=required.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message({ keyword, schemaCode }) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\";\n return (0, codegen_1.str) `must NOT have ${comp} than ${schemaCode} items`;\n },\n params: ({ schemaCode }) => (0, codegen_1._) `{limit: ${schemaCode}}`,\n};\nconst def = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt) {\n const { keyword, data, schemaCode } = cxt;\n const op = keyword === \"maxItems\" ? codegen_1.operators.GT : codegen_1.operators.LT;\n cxt.fail$data((0, codegen_1._) `${data}.length ${op} ${schemaCode}`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=limitItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// https://github.com/ajv-validator/ajv/issues/889\nconst equal = require(\"fast-deep-equal\");\nequal.code = 'require(\"ajv/dist/runtime/equal\").default';\nexports.default = equal;\n//# sourceMappingURL=equal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst dataType_1 = require(\"../../compile/validate/dataType\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: ({ params: { i, j } }) => (0, codegen_1.str) `must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({ params: { i, j } }) => (0, codegen_1._) `{i: ${i}, j: ${j}}`,\n};\nconst def = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt;\n if (!$data && !schema)\n return;\n const valid = gen.let(\"valid\");\n const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : [];\n cxt.block$data(valid, validateUniqueItems, (0, codegen_1._) `${schemaCode} === false`);\n cxt.ok(valid);\n function validateUniqueItems() {\n const i = gen.let(\"i\", (0, codegen_1._) `${data}.length`);\n const j = gen.let(\"j\");\n cxt.setParams({ i, j });\n gen.assign(valid, true);\n gen.if((0, codegen_1._) `${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j));\n }\n function canOptimize() {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\");\n }\n function loopN(i, j) {\n const item = gen.name(\"item\");\n const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong);\n const indices = gen.const(\"indices\", (0, codegen_1._) `{}`);\n gen.for((0, codegen_1._) `;${i}--;`, () => {\n gen.let(item, (0, codegen_1._) `${data}[${i}]`);\n gen.if(wrongType, (0, codegen_1._) `continue`);\n if (itemTypes.length > 1)\n gen.if((0, codegen_1._) `typeof ${item} == \"string\"`, (0, codegen_1._) `${item} += \"_\"`);\n gen\n .if((0, codegen_1._) `typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, (0, codegen_1._) `${indices}[${item}]`);\n cxt.error();\n gen.assign(valid, false).break();\n })\n .code((0, codegen_1._) `${indices}[${item}] = ${i}`);\n });\n }\n function loopN2(i, j) {\n const eql = (0, util_1.useFunc)(gen, equal_1.default);\n const outer = gen.name(\"outer\");\n gen.label(outer).for((0, codegen_1._) `;${i}--;`, () => gen.for((0, codegen_1._) `${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._) `${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error();\n gen.assign(valid, false).break(outer);\n })));\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=uniqueItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to constant\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValue: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schemaCode, schema } = cxt;\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data((0, codegen_1._) `!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`);\n }\n else {\n cxt.fail((0, codegen_1._) `${schema} !== ${data}`);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=const.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst equal_1 = require(\"../../runtime/equal\");\nconst error = {\n message: \"must be equal to one of the allowed values\",\n params: ({ schemaCode }) => (0, codegen_1._) `{allowedValues: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n if (!$data && schema.length === 0)\n throw new Error(\"enum must have non-empty array\");\n const useLoop = schema.length >= it.opts.loopEnum;\n let eql;\n const getEql = () => (eql !== null && eql !== void 0 ? eql : (eql = (0, util_1.useFunc)(gen, equal_1.default)));\n let valid;\n if (useLoop || $data) {\n valid = gen.let(\"valid\");\n cxt.block$data(valid, loopEnum);\n }\n else {\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const vSchema = gen.const(\"vSchema\", schemaCode);\n valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i)));\n }\n cxt.pass(valid);\n function loopEnum() {\n gen.assign(valid, false);\n gen.forOf(\"v\", schemaCode, (v) => gen.if((0, codegen_1._) `${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break()));\n }\n function equalCode(vSchema, i) {\n const sch = schema[i];\n return typeof sch === \"object\" && sch !== null\n ? (0, codegen_1._) `${getEql()}(${data}, ${vSchema}[${i}])`\n : (0, codegen_1._) `${data} === ${sch}`;\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=enum.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst limitNumber_1 = require(\"./limitNumber\");\nconst multipleOf_1 = require(\"./multipleOf\");\nconst limitLength_1 = require(\"./limitLength\");\nconst pattern_1 = require(\"./pattern\");\nconst limitProperties_1 = require(\"./limitProperties\");\nconst required_1 = require(\"./required\");\nconst limitItems_1 = require(\"./limitItems\");\nconst uniqueItems_1 = require(\"./uniqueItems\");\nconst const_1 = require(\"./const\");\nconst enum_1 = require(\"./enum\");\nconst validation = [\n // number\n limitNumber_1.default,\n multipleOf_1.default,\n // string\n limitLength_1.default,\n pattern_1.default,\n // object\n limitProperties_1.default,\n required_1.default,\n // array\n limitItems_1.default,\n uniqueItems_1.default,\n // any\n { keyword: \"type\", schemaType: [\"string\", \"array\"] },\n { keyword: \"nullable\", schemaType: \"boolean\" },\n const_1.default,\n enum_1.default,\n];\nexports.default = validation;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateAdditionalItems = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"additionalItems\",\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { parentSchema, it } = cxt;\n const { items } = parentSchema;\n if (!Array.isArray(items)) {\n (0, util_1.checkStrictMode)(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas');\n return;\n }\n validateAdditionalItems(cxt, items);\n },\n};\nfunction validateAdditionalItems(cxt, items) {\n const { gen, schema, data, keyword, it } = cxt;\n it.items = true;\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n if (schema === false) {\n cxt.setParams({ len: items.length });\n cxt.pass((0, codegen_1._) `${len} <= ${items.length}`);\n }\n else if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.var(\"valid\", (0, codegen_1._) `${len} <= ${items.length}`); // TODO var\n gen.if((0, codegen_1.not)(valid), () => validateItems(valid));\n cxt.ok(valid);\n }\n function validateItems(valid) {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid);\n if (!it.allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n });\n }\n}\nexports.validateAdditionalItems = validateAdditionalItems;\nexports.default = def;\n//# sourceMappingURL=additionalItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTuple = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt) {\n const { schema, it } = cxt;\n if (Array.isArray(schema))\n return validateTuple(cxt, \"additionalItems\", schema);\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nfunction validateTuple(cxt, extraItems, schArr = cxt.schema) {\n const { gen, parentSchema, data, keyword, it } = cxt;\n checkStrictTuple(parentSchema);\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items);\n }\n const valid = gen.name(\"valid\");\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n schArr.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n gen.if((0, codegen_1._) `${len} > ${i}`, () => cxt.subschema({\n keyword,\n schemaProp: i,\n dataProp: i,\n }, valid));\n cxt.ok(valid);\n });\n function checkStrictTuple(sch) {\n const { opts, errSchemaPath } = it;\n const l = schArr.length;\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false);\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`;\n (0, util_1.checkStrictMode)(it, msg, opts.strictTuples);\n }\n }\n}\nexports.validateTuple = validateTuple;\nexports.default = def;\n//# sourceMappingURL=items.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst items_1 = require(\"./items\");\nconst def = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => (0, items_1.validateTuple)(cxt, \"items\"),\n};\nexports.default = def;\n//# sourceMappingURL=prefixItems.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nconst additionalItems_1 = require(\"./additionalItems\");\nconst error = {\n message: ({ params: { len } }) => (0, codegen_1.str) `must NOT have more than ${len} items`,\n params: ({ params: { len } }) => (0, codegen_1._) `{limit: ${len}}`,\n};\nconst def = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt) {\n const { schema, parentSchema, it } = cxt;\n const { prefixItems } = parentSchema;\n it.items = true;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n if (prefixItems)\n (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems);\n else\n cxt.ok((0, code_1.validateArray)(cxt));\n },\n};\nexports.default = def;\n//# sourceMappingURL=items2020.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { min, max } }) => max === undefined\n ? (0, codegen_1.str) `must contain at least ${min} valid item(s)`\n : (0, codegen_1.str) `must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._) `{minContains: ${min}}` : (0, codegen_1._) `{minContains: ${min}, maxContains: ${max}}`,\n};\nconst def = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n let min;\n let max;\n const { minContains, maxContains } = parentSchema;\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains;\n max = maxContains;\n }\n else {\n min = 1;\n }\n const len = gen.const(\"len\", (0, codegen_1._) `${data}.length`);\n cxt.setParams({ min, max });\n if (max === undefined && min === 0) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`);\n return;\n }\n if (max !== undefined && min > max) {\n (0, util_1.checkStrictMode)(it, `\"minContains\" > \"maxContains\" is always invalid`);\n cxt.fail();\n return;\n }\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n let cond = (0, codegen_1._) `${len} >= ${min}`;\n if (max !== undefined)\n cond = (0, codegen_1._) `${cond} && ${len} <= ${max}`;\n cxt.pass(cond);\n return;\n }\n it.items = true;\n const valid = gen.name(\"valid\");\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()));\n }\n else if (min === 0) {\n gen.let(valid, true);\n if (max !== undefined)\n gen.if((0, codegen_1._) `${data}.length > 0`, validateItemsWithCount);\n }\n else {\n gen.let(valid, false);\n validateItemsWithCount();\n }\n cxt.result(valid, () => cxt.reset());\n function validateItemsWithCount() {\n const schValid = gen.name(\"_valid\");\n const count = gen.let(\"count\", 0);\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)));\n }\n function validateItems(_valid, block) {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema({\n keyword: \"contains\",\n dataProp: i,\n dataPropType: util_1.Type.Num,\n compositeRule: true,\n }, _valid);\n block();\n });\n }\n function checkLimits(count) {\n gen.code((0, codegen_1._) `${count}++`);\n if (max === undefined) {\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true).break());\n }\n else {\n gen.if((0, codegen_1._) `${count} > ${max}`, () => gen.assign(valid, false).break());\n if (min === 1)\n gen.assign(valid, true);\n else\n gen.if((0, codegen_1._) `${count} >= ${min}`, () => gen.assign(valid, true));\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=contains.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = void 0;\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst code_1 = require(\"../code\");\nexports.error = {\n message: ({ params: { property, depsCount, deps } }) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\";\n return (0, codegen_1.str) `must have ${property_ies} ${deps} when property ${property} is present`;\n },\n params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._) `{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n};\nconst def = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error: exports.error,\n code(cxt) {\n const [propDeps, schDeps] = splitDependencies(cxt);\n validatePropertyDeps(cxt, propDeps);\n validateSchemaDeps(cxt, schDeps);\n },\n};\nfunction splitDependencies({ schema }) {\n const propertyDeps = {};\n const schemaDeps = {};\n for (const key in schema) {\n if (key === \"__proto__\")\n continue;\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps;\n deps[key] = schema[key];\n }\n return [propertyDeps, schemaDeps];\n}\nfunction validatePropertyDeps(cxt, propertyDeps = cxt.schema) {\n const { gen, data, it } = cxt;\n if (Object.keys(propertyDeps).length === 0)\n return;\n const missing = gen.let(\"missing\");\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop];\n if (deps.length === 0)\n continue;\n const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties);\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n });\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n (0, code_1.checkReportMissingProp)(cxt, depProp);\n }\n });\n }\n else {\n gen.if((0, codegen_1._) `${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`);\n (0, code_1.reportMissingProp)(cxt, missing);\n gen.else();\n }\n }\n}\nexports.validatePropertyDeps = validatePropertyDeps;\nfunction validateSchemaDeps(cxt, schemaDeps = cxt.schema) {\n const { gen, data, keyword, it } = cxt;\n const valid = gen.name(\"valid\");\n for (const prop in schemaDeps) {\n if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop]))\n continue;\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => {\n const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid);\n cxt.mergeValidEvaluated(schCxt, valid);\n }, () => gen.var(valid, true) // TODO var\n );\n cxt.ok(valid);\n }\n}\nexports.validateSchemaDeps = validateSchemaDeps;\nexports.default = def;\n//# sourceMappingURL=dependencies.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"property name must be valid\",\n params: ({ params }) => (0, codegen_1._) `{propertyName: ${params.propertyName}}`,\n};\nconst def = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt) {\n const { gen, schema, data, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema))\n return;\n const valid = gen.name(\"valid\");\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({ propertyName: key });\n cxt.subschema({\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n }, valid);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.error(true);\n if (!it.allErrors)\n gen.break();\n });\n });\n cxt.ok(valid);\n },\n};\nexports.default = def;\n//# sourceMappingURL=propertyNames.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst names_1 = require(\"../../compile/names\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must NOT have additional properties\",\n params: ({ params }) => (0, codegen_1._) `{additionalProperty: ${params.additionalProperty}}`,\n};\nconst def = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, data, errsCount, it } = cxt;\n /* istanbul ignore if */\n if (!errsCount)\n throw new Error(\"ajv implementation error\");\n const { allErrors, opts } = it;\n it.props = true;\n if (opts.removeAdditional !== \"all\" && (0, util_1.alwaysValidSchema)(it, schema))\n return;\n const props = (0, code_1.allSchemaProperties)(parentSchema.properties);\n const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties);\n checkAdditionalProperties();\n cxt.ok((0, codegen_1._) `${errsCount} === ${names_1.default.errors}`);\n function checkAdditionalProperties() {\n gen.forIn(\"key\", data, (key) => {\n if (!props.length && !patProps.length)\n additionalPropertyCode(key);\n else\n gen.if(isAdditional(key), () => additionalPropertyCode(key));\n });\n }\n function isAdditional(key) {\n let definedProp;\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, \"properties\");\n definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key);\n }\n else if (props.length) {\n definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._) `${key} === ${p}`));\n }\n else {\n definedProp = codegen_1.nil;\n }\n if (patProps.length) {\n definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._) `${(0, code_1.usePattern)(cxt, p)}.test(${key})`));\n }\n return (0, codegen_1.not)(definedProp);\n }\n function deleteAdditional(key) {\n gen.code((0, codegen_1._) `delete ${data}[${key}]`);\n }\n function additionalPropertyCode(key) {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key);\n return;\n }\n if (schema === false) {\n cxt.setParams({ additionalProperty: key });\n cxt.error();\n if (!allErrors)\n gen.break();\n return;\n }\n if (typeof schema == \"object\" && !(0, util_1.alwaysValidSchema)(it, schema)) {\n const valid = gen.name(\"valid\");\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false);\n gen.if((0, codegen_1.not)(valid), () => {\n cxt.reset();\n deleteAdditional(key);\n });\n }\n else {\n applyAdditionalSchema(key, valid);\n if (!allErrors)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n }\n }\n function applyAdditionalSchema(key, valid, errors) {\n const subschema = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: util_1.Type.Str,\n };\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n });\n }\n cxt.subschema(subschema, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=additionalProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst validate_1 = require(\"../../compile/validate\");\nconst code_1 = require(\"../code\");\nconst util_1 = require(\"../../compile/util\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst def = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, parentSchema, data, it } = cxt;\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, \"additionalProperties\"));\n }\n const allProps = (0, code_1.allSchemaProperties)(schema);\n for (const prop of allProps) {\n it.definedProperties.add(prop);\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props);\n }\n const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p]));\n if (properties.length === 0)\n return;\n const valid = gen.name(\"valid\");\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop);\n }\n else {\n gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties));\n applyPropertySchema(prop);\n if (!it.allErrors)\n gen.else().var(valid, true);\n gen.endIf();\n }\n cxt.it.definedProperties.add(prop);\n cxt.ok(valid);\n }\n function hasDefault(prop) {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined;\n }\n function applyPropertySchema(prop) {\n cxt.subschema({\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n }, valid);\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=properties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst util_2 = require(\"../../compile/util\");\nconst def = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt) {\n const { gen, schema, data, parentSchema, it } = cxt;\n const { opts } = it;\n const patterns = (0, code_1.allSchemaProperties)(schema);\n const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p]));\n if (patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))) {\n return;\n }\n const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties;\n const valid = gen.name(\"valid\");\n if (it.props !== true && !(it.props instanceof codegen_1.Name)) {\n it.props = (0, util_2.evaluatedPropsToName)(gen, it.props);\n }\n const { props } = it;\n validatePatternProperties();\n function validatePatternProperties() {\n for (const pat of patterns) {\n if (checkProperties)\n checkMatchingProperties(pat);\n if (it.allErrors) {\n validateProperties(pat);\n }\n else {\n gen.var(valid, true); // TODO var\n validateProperties(pat);\n gen.if(valid);\n }\n }\n }\n function checkMatchingProperties(pat) {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`);\n }\n }\n }\n function validateProperties(pat) {\n gen.forIn(\"key\", data, (key) => {\n gen.if((0, codegen_1._) `${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat);\n if (!alwaysValid) {\n cxt.subschema({\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: util_2.Type.Str,\n }, valid);\n }\n if (it.opts.unevaluated && props !== true) {\n gen.assign((0, codegen_1._) `${props}[${key}]`, true);\n }\n else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if((0, codegen_1.not)(valid), () => gen.break());\n }\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=patternProperties.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt) {\n const { gen, schema, it } = cxt;\n if ((0, util_1.alwaysValidSchema)(it, schema)) {\n cxt.fail();\n return;\n }\n const valid = gen.name(\"valid\");\n cxt.subschema({\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, valid);\n cxt.failResult(valid, () => cxt.reset(), () => cxt.error());\n },\n error: { message: \"must NOT be valid\" },\n};\nexports.default = def;\n//# sourceMappingURL=not.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code_1 = require(\"../code\");\nconst def = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: code_1.validateUnion,\n error: { message: \"must match a schema in anyOf\" },\n};\nexports.default = def;\n//# sourceMappingURL=anyOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: \"must match exactly one schema in oneOf\",\n params: ({ params }) => (0, codegen_1._) `{passingSchemas: ${params.passing}}`,\n};\nconst def = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, schema, parentSchema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n if (it.opts.discriminator && parentSchema.discriminator)\n return;\n const schArr = schema;\n const valid = gen.let(\"valid\", false);\n const passing = gen.let(\"passing\", null);\n const schValid = gen.name(\"_valid\");\n cxt.setParams({ passing });\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n gen.block(validateOneOf);\n cxt.result(valid, () => cxt.reset(), () => cxt.error(true));\n function validateOneOf() {\n schArr.forEach((sch, i) => {\n let schCxt;\n if ((0, util_1.alwaysValidSchema)(it, sch)) {\n gen.var(schValid, true);\n }\n else {\n schCxt = cxt.subschema({\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n }, schValid);\n }\n if (i > 0) {\n gen\n .if((0, codegen_1._) `${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, (0, codegen_1._) `[${passing}, ${i}]`)\n .else();\n }\n gen.if(schValid, () => {\n gen.assign(valid, true);\n gen.assign(passing, i);\n if (schCxt)\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n });\n });\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=oneOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt) {\n const { gen, schema, it } = cxt;\n /* istanbul ignore if */\n if (!Array.isArray(schema))\n throw new Error(\"ajv implementation error\");\n const valid = gen.name(\"valid\");\n schema.forEach((sch, i) => {\n if ((0, util_1.alwaysValidSchema)(it, sch))\n return;\n const schCxt = cxt.subschema({ keyword: \"allOf\", schemaProp: i }, valid);\n cxt.ok(valid);\n cxt.mergeEvaluated(schCxt);\n });\n },\n};\nexports.default = def;\n//# sourceMappingURL=allOf.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params }) => (0, codegen_1.str) `must match \"${params.ifClause}\" schema`,\n params: ({ params }) => (0, codegen_1._) `{failingKeyword: ${params.ifClause}}`,\n};\nconst def = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt) {\n const { gen, parentSchema, it } = cxt;\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n (0, util_1.checkStrictMode)(it, '\"if\" without \"then\" and \"else\" is ignored');\n }\n const hasThen = hasSchema(it, \"then\");\n const hasElse = hasSchema(it, \"else\");\n if (!hasThen && !hasElse)\n return;\n const valid = gen.let(\"valid\", true);\n const schValid = gen.name(\"_valid\");\n validateIf();\n cxt.reset();\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\");\n cxt.setParams({ ifClause });\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause));\n }\n else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"));\n }\n else {\n gen.if((0, codegen_1.not)(schValid), validateClause(\"else\"));\n }\n cxt.pass(valid, () => cxt.error(true));\n function validateIf() {\n const schCxt = cxt.subschema({\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n }, schValid);\n cxt.mergeEvaluated(schCxt);\n }\n function validateClause(keyword, ifClause) {\n return () => {\n const schCxt = cxt.subschema({ keyword }, schValid);\n gen.assign(valid, schValid);\n cxt.mergeValidEvaluated(schCxt, valid);\n if (ifClause)\n gen.assign(ifClause, (0, codegen_1._) `${keyword}`);\n else\n cxt.setParams({ ifClause: keyword });\n };\n }\n },\n};\nfunction hasSchema(it, keyword) {\n const schema = it.schema[keyword];\n return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema);\n}\nexports.default = def;\n//# sourceMappingURL=if.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"../../compile/util\");\nconst def = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({ keyword, parentSchema, it }) {\n if (parentSchema.if === undefined)\n (0, util_1.checkStrictMode)(it, `\"${keyword}\" without \"if\" is ignored`);\n },\n};\nexports.default = def;\n//# sourceMappingURL=thenElse.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst additionalItems_1 = require(\"./additionalItems\");\nconst prefixItems_1 = require(\"./prefixItems\");\nconst items_1 = require(\"./items\");\nconst items2020_1 = require(\"./items2020\");\nconst contains_1 = require(\"./contains\");\nconst dependencies_1 = require(\"./dependencies\");\nconst propertyNames_1 = require(\"./propertyNames\");\nconst additionalProperties_1 = require(\"./additionalProperties\");\nconst properties_1 = require(\"./properties\");\nconst patternProperties_1 = require(\"./patternProperties\");\nconst not_1 = require(\"./not\");\nconst anyOf_1 = require(\"./anyOf\");\nconst oneOf_1 = require(\"./oneOf\");\nconst allOf_1 = require(\"./allOf\");\nconst if_1 = require(\"./if\");\nconst thenElse_1 = require(\"./thenElse\");\nfunction getApplicator(draft2020 = false) {\n const applicator = [\n // any\n not_1.default,\n anyOf_1.default,\n oneOf_1.default,\n allOf_1.default,\n if_1.default,\n thenElse_1.default,\n // object\n propertyNames_1.default,\n additionalProperties_1.default,\n dependencies_1.default,\n properties_1.default,\n patternProperties_1.default,\n ];\n // array\n if (draft2020)\n applicator.push(prefixItems_1.default, items2020_1.default);\n else\n applicator.push(additionalItems_1.default, items_1.default);\n applicator.push(contains_1.default);\n return applicator;\n}\nexports.default = getApplicator;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst error = {\n message: ({ schemaCode }) => (0, codegen_1.str) `must match format \"${schemaCode}\"`,\n params: ({ schemaCode }) => (0, codegen_1._) `{format: ${schemaCode}}`,\n};\nconst def = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt, ruleType) {\n const { gen, data, $data, schema, schemaCode, it } = cxt;\n const { opts, errSchemaPath, schemaEnv, self } = it;\n if (!opts.validateFormats)\n return;\n if ($data)\n validate$DataFormat();\n else\n validateFormat();\n function validate$DataFormat() {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n });\n const fDef = gen.const(\"fDef\", (0, codegen_1._) `${fmts}[${schemaCode}]`);\n const fType = gen.let(\"fType\");\n const format = gen.let(\"format\");\n // TODO simplify\n gen.if((0, codegen_1._) `typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._) `${fDef}.type || \"string\"`).assign(format, (0, codegen_1._) `${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._) `\"string\"`).assign(format, fDef));\n cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt()));\n function unknownFmt() {\n if (opts.strictSchema === false)\n return codegen_1.nil;\n return (0, codegen_1._) `${schemaCode} && !${format}`;\n }\n function invalidFmt() {\n const callFormat = schemaEnv.$async\n ? (0, codegen_1._) `(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : (0, codegen_1._) `${format}(${data})`;\n const validData = (0, codegen_1._) `(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`;\n return (0, codegen_1._) `${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`;\n }\n }\n function validateFormat() {\n const formatDef = self.formats[schema];\n if (!formatDef) {\n unknownFormat();\n return;\n }\n if (formatDef === true)\n return;\n const [fmtType, format, fmtRef] = getFormat(formatDef);\n if (fmtType === ruleType)\n cxt.pass(validCondition());\n function unknownFormat() {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg());\n return;\n }\n throw new Error(unknownMsg());\n function unknownMsg() {\n return `unknown format \"${schema}\" ignored in schema at path \"${errSchemaPath}\"`;\n }\n }\n function getFormat(fmtDef) {\n const code = fmtDef instanceof RegExp\n ? (0, codegen_1.regexpCode)(fmtDef)\n : opts.code.formats\n ? (0, codegen_1._) `${opts.code.formats}${(0, codegen_1.getProperty)(schema)}`\n : undefined;\n const fmt = gen.scopeValue(\"formats\", { key: schema, ref: fmtDef, code });\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, (0, codegen_1._) `${fmt}.validate`];\n }\n return [\"string\", fmtDef, fmt];\n }\n function validCondition() {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async)\n throw new Error(\"async format in sync schema\");\n return (0, codegen_1._) `await ${fmtRef}(${data})`;\n }\n return typeof format == \"function\" ? (0, codegen_1._) `${fmtRef}(${data})` : (0, codegen_1._) `${fmtRef}.test(${data})`;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=format.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst format_1 = require(\"./format\");\nconst format = [format_1.default];\nexports.default = format;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.contentVocabulary = exports.metadataVocabulary = void 0;\nexports.metadataVocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n];\nexports.contentVocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n];\n//# sourceMappingURL=metadata.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst core_1 = require(\"./core\");\nconst validation_1 = require(\"./validation\");\nconst applicator_1 = require(\"./applicator\");\nconst format_1 = require(\"./format\");\nconst metadata_1 = require(\"./metadata\");\nconst draft7Vocabularies = [\n core_1.default,\n validation_1.default,\n (0, applicator_1.default)(),\n format_1.default,\n metadata_1.metadataVocabulary,\n metadata_1.contentVocabulary,\n];\nexports.default = draft7Vocabularies;\n//# sourceMappingURL=draft7.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DiscrError = void 0;\nvar DiscrError;\n(function (DiscrError) {\n DiscrError[\"Tag\"] = \"tag\";\n DiscrError[\"Mapping\"] = \"mapping\";\n})(DiscrError || (exports.DiscrError = DiscrError = {}));\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst codegen_1 = require(\"../../compile/codegen\");\nconst types_1 = require(\"../discriminator/types\");\nconst compile_1 = require(\"../../compile\");\nconst ref_error_1 = require(\"../../compile/ref_error\");\nconst util_1 = require(\"../../compile/util\");\nconst error = {\n message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._) `{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n};\nconst def = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt) {\n const { gen, data, schema, parentSchema, it } = cxt;\n const { oneOf } = parentSchema;\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\");\n }\n const tagName = schema.propertyName;\n if (typeof tagName != \"string\")\n throw new Error(\"discriminator: requires propertyName\");\n if (schema.mapping)\n throw new Error(\"discriminator: mapping is not supported\");\n if (!oneOf)\n throw new Error(\"discriminator: requires oneOf keyword\");\n const valid = gen.let(\"valid\", false);\n const tag = gen.const(\"tag\", (0, codegen_1._) `${data}${(0, codegen_1.getProperty)(tagName)}`);\n gen.if((0, codegen_1._) `typeof ${tag} == \"string\"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName }));\n cxt.ok(valid);\n function validateMapping() {\n const mapping = getMapping();\n gen.if(false);\n for (const tagValue in mapping) {\n gen.elseIf((0, codegen_1._) `${tag} === ${tagValue}`);\n gen.assign(valid, applyTagSchema(mapping[tagValue]));\n }\n gen.else();\n cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName });\n gen.endIf();\n }\n function applyTagSchema(schemaProp) {\n const _valid = gen.name(\"valid\");\n const schCxt = cxt.subschema({ keyword: \"oneOf\", schemaProp }, _valid);\n cxt.mergeEvaluated(schCxt, codegen_1.Name);\n return _valid;\n }\n function getMapping() {\n var _a;\n const oneOfMapping = {};\n const topRequired = hasRequired(parentSchema);\n let tagRequired = true;\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i];\n if ((sch === null || sch === void 0 ? void 0 : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) {\n const ref = sch.$ref;\n sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref);\n if (sch instanceof compile_1.SchemaEnv)\n sch = sch.schema;\n if (sch === undefined)\n throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref);\n }\n const propSch = (_a = sch === null || sch === void 0 ? void 0 : sch.properties) === null || _a === void 0 ? void 0 : _a[tagName];\n if (typeof propSch != \"object\") {\n throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`);\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch));\n addMappings(propSch, i);\n }\n if (!tagRequired)\n throw new Error(`discriminator: \"${tagName}\" must be required`);\n return oneOfMapping;\n function hasRequired({ required }) {\n return Array.isArray(required) && required.includes(tagName);\n }\n function addMappings(sch, i) {\n if (sch.const) {\n addMapping(sch.const, i);\n }\n else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i);\n }\n }\n else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`);\n }\n }\n function addMapping(tagValue, i) {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`);\n }\n oneOfMapping[tagValue] = i;\n }\n }\n },\n};\nexports.default = def;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = void 0;\nconst core_1 = require(\"./core\");\nconst draft7_1 = require(\"./vocabularies/draft7\");\nconst discriminator_1 = require(\"./vocabularies/discriminator\");\nconst draft7MetaSchema = require(\"./refs/json-schema-draft-07.json\");\nconst META_SUPPORT_DATA = [\"/properties\"];\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\";\nclass Ajv extends core_1.default {\n _addVocabularies() {\n super._addVocabularies();\n draft7_1.default.forEach((v) => this.addVocabulary(v));\n if (this.opts.discriminator)\n this.addKeyword(discriminator_1.default);\n }\n _addDefaultMetaSchema() {\n super._addDefaultMetaSchema();\n if (!this.opts.meta)\n return;\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema;\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false);\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID;\n }\n defaultMeta() {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined));\n }\n}\nexports.Ajv = Ajv;\nmodule.exports = exports = Ajv;\nmodule.exports.Ajv = Ajv;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = Ajv;\nvar validate_1 = require(\"./compile/validate\");\nObject.defineProperty(exports, \"KeywordCxt\", { enumerable: true, get: function () { return validate_1.KeywordCxt; } });\nvar codegen_1 = require(\"./compile/codegen\");\nObject.defineProperty(exports, \"_\", { enumerable: true, get: function () { return codegen_1._; } });\nObject.defineProperty(exports, \"str\", { enumerable: true, get: function () { return codegen_1.str; } });\nObject.defineProperty(exports, \"stringify\", { enumerable: true, get: function () { return codegen_1.stringify; } });\nObject.defineProperty(exports, \"nil\", { enumerable: true, get: function () { return codegen_1.nil; } });\nObject.defineProperty(exports, \"Name\", { enumerable: true, get: function () { return codegen_1.Name; } });\nObject.defineProperty(exports, \"CodeGen\", { enumerable: true, get: function () { return codegen_1.CodeGen; } });\nvar validation_error_1 = require(\"./runtime/validation_error\");\nObject.defineProperty(exports, \"ValidationError\", { enumerable: true, get: function () { return validation_error_1.default; } });\nvar ref_error_1 = require(\"./compile/ref_error\");\nObject.defineProperty(exports, \"MissingRefError\", { enumerable: true, get: function () { return ref_error_1.default; } });\n//# sourceMappingURL=ajv.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatNames = exports.fastFormats = exports.fullFormats = void 0;\nfunction fmtDef(validate, compare) {\n return { validate, compare };\n}\nexports.fullFormats = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: fmtDef(date, compareDate),\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: fmtDef(time, compareTime),\n \"date-time\": fmtDef(date_time, compareDateTime),\n // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n uri,\n \"uri-reference\": /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n // uri-template: https://tools.ietf.org/html/rfc6570\n \"uri-template\": /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n // For the source: https://gist.github.com/dperini/729294\n // For test cases: https://mathiasbynens.be/demo/url-regex\n url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname: /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/,\n ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n // byte: https://github.com/miguelmota/is-base64\n byte,\n // signed 32 bit integer\n int32: { type: \"number\", validate: validateInt32 },\n // signed 64 bit integer\n int64: { type: \"number\", validate: validateInt64 },\n // C-type float\n float: { type: \"number\", validate: validateNumber },\n // C-type double\n double: { type: \"number\", validate: validateNumber },\n // hint to the UI to hide input strings\n password: true,\n // unchecked string payload\n binary: true,\n};\nexports.fastFormats = {\n ...exports.fullFormats,\n date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n time: fmtDef(/^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i, compareTime),\n \"date-time\": fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i, compareDateTime),\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n};\nexports.formatNames = Object.keys(exports.fullFormats);\nfunction isLeapYear(year) {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/;\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction date(str) {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n const matches = DATE.exec(str);\n if (!matches)\n return false;\n const year = +matches[1];\n const month = +matches[2];\n const day = +matches[3];\n return (month >= 1 &&\n month <= 12 &&\n day >= 1 &&\n day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]));\n}\nfunction compareDate(d1, d2) {\n if (!(d1 && d2))\n return undefined;\n if (d1 > d2)\n return 1;\n if (d1 < d2)\n return -1;\n return 0;\n}\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d)(\\.\\d+)?(z|[+-]\\d\\d(?::?\\d\\d)?)?$/i;\nfunction time(str, withTimeZone) {\n const matches = TIME.exec(str);\n if (!matches)\n return false;\n const hour = +matches[1];\n const minute = +matches[2];\n const second = +matches[3];\n const timeZone = matches[5];\n return (((hour <= 23 && minute <= 59 && second <= 59) ||\n (hour === 23 && minute === 59 && second === 60)) &&\n (!withTimeZone || timeZone !== \"\"));\n}\nfunction compareTime(t1, t2) {\n if (!(t1 && t2))\n return undefined;\n const a1 = TIME.exec(t1);\n const a2 = TIME.exec(t2);\n if (!(a1 && a2))\n return undefined;\n t1 = a1[1] + a1[2] + a1[3] + (a1[4] || \"\");\n t2 = a2[1] + a2[2] + a2[3] + (a2[4] || \"\");\n if (t1 > t2)\n return 1;\n if (t1 < t2)\n return -1;\n return 0;\n}\nconst DATE_TIME_SEPARATOR = /t|\\s/i;\nfunction date_time(str) {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n const dateTime = str.split(DATE_TIME_SEPARATOR);\n return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1], true);\n}\nfunction compareDateTime(dt1, dt2) {\n if (!(dt1 && dt2))\n return undefined;\n const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR);\n const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR);\n const res = compareDate(d1, d2);\n if (res === undefined)\n return undefined;\n return res || compareTime(t1, t2);\n}\nconst NOT_URI_FRAGMENT = /\\/|:/;\nconst URI = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nfunction uri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str);\n}\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;\nfunction byte(str) {\n BYTE.lastIndex = 0;\n return BYTE.test(str);\n}\nconst MIN_INT32 = -(2 ** 31);\nconst MAX_INT32 = 2 ** 31 - 1;\nfunction validateInt32(value) {\n return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32;\n}\nfunction validateInt64(value) {\n // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n return Number.isInteger(value);\n}\nfunction validateNumber() {\n return true;\n}\nconst Z_ANCHOR = /[^\\\\]\\\\Z/;\nfunction regex(str) {\n if (Z_ANCHOR.test(str))\n return false;\n try {\n new RegExp(str);\n return true;\n }\n catch (e) {\n return false;\n }\n}\n//# sourceMappingURL=formats.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.formatLimitDefinition = void 0;\nconst ajv_1 = require(\"ajv\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst ops = codegen_1.operators;\nconst KWDs = {\n formatMaximum: { okStr: \"<=\", ok: ops.LTE, fail: ops.GT },\n formatMinimum: { okStr: \">=\", ok: ops.GTE, fail: ops.LT },\n formatExclusiveMaximum: { okStr: \"<\", ok: ops.LT, fail: ops.GTE },\n formatExclusiveMinimum: { okStr: \">\", ok: ops.GT, fail: ops.LTE },\n};\nconst error = {\n message: ({ keyword, schemaCode }) => codegen_1.str `should be ${KWDs[keyword].okStr} ${schemaCode}`,\n params: ({ keyword, schemaCode }) => codegen_1._ `{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}`,\n};\nexports.formatLimitDefinition = {\n keyword: Object.keys(KWDs),\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const { gen, data, schemaCode, keyword, it } = cxt;\n const { opts, self } = it;\n if (!opts.validateFormats)\n return;\n const fCxt = new ajv_1.KeywordCxt(it, self.RULES.all.format.definition, \"format\");\n if (fCxt.$data)\n validate$DataFormat();\n else\n validateFormat();\n function validate$DataFormat() {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n });\n const fmt = gen.const(\"fmt\", codegen_1._ `${fmts}[${fCxt.schemaCode}]`);\n cxt.fail$data(codegen_1.or(codegen_1._ `typeof ${fmt} != \"object\"`, codegen_1._ `${fmt} instanceof RegExp`, codegen_1._ `typeof ${fmt}.compare != \"function\"`, compareCode(fmt)));\n }\n function validateFormat() {\n const format = fCxt.schema;\n const fmtDef = self.formats[format];\n if (!fmtDef || fmtDef === true)\n return;\n if (typeof fmtDef != \"object\" ||\n fmtDef instanceof RegExp ||\n typeof fmtDef.compare != \"function\") {\n throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`);\n }\n const fmt = gen.scopeValue(\"formats\", {\n key: format,\n ref: fmtDef,\n code: opts.code.formats ? codegen_1._ `${opts.code.formats}${codegen_1.getProperty(format)}` : undefined,\n });\n cxt.fail$data(compareCode(fmt));\n }\n function compareCode(fmt) {\n return codegen_1._ `${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`;\n }\n },\n dependencies: [\"format\"],\n};\nconst formatLimitPlugin = (ajv) => {\n ajv.addKeyword(exports.formatLimitDefinition);\n return ajv;\n};\nexports.default = formatLimitPlugin;\n//# sourceMappingURL=limit.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst formats_1 = require(\"./formats\");\nconst limit_1 = require(\"./limit\");\nconst codegen_1 = require(\"ajv/dist/compile/codegen\");\nconst fullName = new codegen_1.Name(\"fullFormats\");\nconst fastName = new codegen_1.Name(\"fastFormats\");\nconst formatsPlugin = (ajv, opts = { keywords: true }) => {\n if (Array.isArray(opts)) {\n addFormats(ajv, opts, formats_1.fullFormats, fullName);\n return ajv;\n }\n const [formats, exportName] = opts.mode === \"fast\" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName];\n const list = opts.formats || formats_1.formatNames;\n addFormats(ajv, list, formats, exportName);\n if (opts.keywords)\n limit_1.default(ajv);\n return ajv;\n};\nformatsPlugin.get = (name, mode = \"full\") => {\n const formats = mode === \"fast\" ? formats_1.fastFormats : formats_1.fullFormats;\n const f = formats[name];\n if (!f)\n throw new Error(`Unknown format \"${name}\"`);\n return f;\n};\nfunction addFormats(ajv, list, fs, exportName) {\n var _a;\n var _b;\n (_a = (_b = ajv.opts.code).formats) !== null && _a !== void 0 ? _a : (_b.formats = codegen_1._ `require(\"ajv-formats/dist/formats\").${exportName}`);\n for (const f of list)\n ajv.addFormat(f, fs[f]);\n}\nmodule.exports = exports = formatsPlugin;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = formatsPlugin;\n//# sourceMappingURL=index.js.map","import { isObject, RJSF_ADDITIONAL_PROPERTIES_FLAG } from '@rjsf/utils';\nimport Ajv from 'ajv';\nimport addFormats from 'ajv-formats';\nexport const AJV_CONFIG = {\n allErrors: true,\n multipleOfPrecision: 8,\n strict: false,\n verbose: true,\n discriminator: false, // TODO enable this in V6\n};\nexport const COLOR_FORMAT_REGEX = /^(#?([0-9A-Fa-f]{3}){1,2}\\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\\(\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*,\\s*\\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\b\\s*\\))|(rgb\\(\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*,\\s*(\\d?\\d%|100%)+\\s*\\)))$/;\nexport const DATA_URL_FORMAT_REGEX = /^data:([a-z]+\\/[a-z0-9-+.]+)?;(?:name=(.*);)?base64,(.*)$/;\n/** Creates an Ajv version 8 implementation object with standard support for the 'color` and `data-url` custom formats.\n * If `additionalMetaSchemas` are provided then the Ajv instance is modified to add each of the meta schemas in the\n * list. If `customFormats` are provided then those additional formats are added to the list of supported formats. If\n * `ajvOptionsOverrides` are provided then they are spread on top of the default `AJV_CONFIG` options when constructing\n * the `Ajv` instance. With Ajv v8, the JSON Schema formats are not provided by default, but can be plugged in. By\n * default, all formats from the `ajv-formats` library are added. To disable this capability, set the `ajvFormatOptions`\n * parameter to `false`. Additionally, you can configure the `ajv-formats` by providing a custom set of\n * [format options](https://github.com/ajv-validator/ajv-formats) to the `ajvFormatOptions` parameter.\n *\n * @param [additionalMetaSchemas] - The list of additional meta schemas that the validator can access\n * @param [customFormats] - The set of additional custom formats that the validator will support\n * @param [ajvOptionsOverrides={}] - The set of validator config override options\n * @param [ajvFormatOptions] - The `ajv-format` options to use when adding formats to `ajv`; pass `false` to disable it\n * @param [AjvClass] - The `Ajv` class to use when creating the validator instance\n * @param [extenderFn] - A function to call to extend AJV, such as `ajvErrors()`\n */\nexport default function createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides = {}, ajvFormatOptions, AjvClass = Ajv, extenderFn) {\n let ajv = new AjvClass({ ...AJV_CONFIG, ...ajvOptionsOverrides });\n if (ajvFormatOptions) {\n addFormats(ajv, ajvFormatOptions);\n }\n else if (ajvFormatOptions !== false) {\n addFormats(ajv);\n }\n // add custom formats\n ajv.addFormat('data-url', DATA_URL_FORMAT_REGEX);\n ajv.addFormat('color', COLOR_FORMAT_REGEX);\n // Register the remaining string-keyed RJSF property so AJV strict mode doesn't reject it.\n // ADDITIONAL_PROPERTY_FLAG, RJSF_REF_KEY, and RJSF_REF_CYCLE_KEY are now Symbols and\n // invisible to AJV, so they no longer need to be registered as keywords.\n ajv.addKeyword(RJSF_ADDITIONAL_PROPERTIES_FLAG);\n // add more schemas to validate against\n if (Array.isArray(additionalMetaSchemas)) {\n ajv.addMetaSchema(additionalMetaSchemas);\n }\n // add more custom formats to validate against\n if (isObject(customFormats)) {\n Object.keys(customFormats).forEach((formatName) => {\n ajv.addFormat(formatName, customFormats[formatName]);\n });\n }\n if (extenderFn) {\n ajv = extenderFn(ajv);\n }\n return ajv;\n}\n//# sourceMappingURL=createAjvInstance.js.map","import { deepEquals, ID_KEY, ROOT_SCHEMA_PREFIX, withIdRefPrefix, hashForSchema } from '@rjsf/utils';\nimport createAjvInstance from \"./createAjvInstance.js\";\nimport processRawValidationErrors from \"./processRawValidationErrors.js\";\n/** `ValidatorType` implementation that uses the AJV 8 validation mechanism.\n */\nexport default class AJV8Validator {\n /** The AJV instance to use for all validations\n *\n * @private\n */\n ajv;\n /** The Localizer function to use for localizing Ajv errors\n *\n * @private\n */\n localizer;\n /** Controls which duplicate error filtering is suppressed; see `filterDuplicateErrors`\n *\n * @private\n */\n suppressDuplicateFiltering;\n /** Most recent `rootSchema` reference processed by `handleSchemaUpdate`.\n *\n * @private\n */\n lastSeenRootSchema;\n /** True once a `rootSchema` has been registered with Ajv in this lifecycle.\n *\n * @private\n */\n hasRegisteredRootSchema = false;\n /** Constructs an `AJV8Validator` instance using the `options`\n *\n * @param options - The `CustomValidatorOptionsType` options that are used to create the AJV instance\n * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n */\n constructor(options, localizer) {\n const { additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn, suppressDuplicateFiltering, } = options;\n this.ajv = createAjvInstance(additionalMetaSchemas, customFormats, ajvOptionsOverrides, ajvFormatOptions, AjvClass, extenderFn);\n this.localizer = localizer;\n this.suppressDuplicateFiltering = suppressDuplicateFiltering;\n }\n /** Resets the internal AJV validator to clear schemas from it. Can be helpful for resetting the validator for tests.\n */\n reset() {\n this.ajv.removeSchema();\n this.lastSeenRootSchema = undefined;\n this.hasRegisteredRootSchema = false;\n }\n /** Runs the pure validation of the `schema` and `formData` without any of the RJSF functionality. Provided for use\n * by the playground. Returns the `errors` from the validation\n *\n * @param schema - The schema against which to validate the form data * @param schema\n * @param formData - The form data to validate\n */\n rawValidation(schema, formData) {\n let compilationError = undefined;\n let compiledValidator;\n try {\n if (schema[ID_KEY]) {\n compiledValidator = this.ajv.getSchema(schema[ID_KEY]);\n }\n if (compiledValidator === undefined) {\n compiledValidator = this.ajv.compile(schema);\n }\n compiledValidator(formData);\n }\n catch (err) {\n compilationError = err;\n // AJV registers a schema in its internal cache before running meta-schema\n // validation. When that check throws, the broken schema stays cached so\n // subsequent compile() calls skip revalidation and return silently. Remove\n // the entry so every call with an invalid schema consistently produces a\n // compilation error. For schemas with $id the cache key is the id string;\n // for anonymous schemas AJV uses the object reference as the key.\n // Guard with compiledValidator === undefined so that a runtime error thrown\n // by compiledValidator(formData) does not evict a correctly-compiled schema.\n if (compiledValidator === undefined) {\n this.ajv.removeSchema(schema[ID_KEY] !== undefined ? schema[ID_KEY] : schema);\n }\n }\n let errors;\n if (compiledValidator) {\n if (typeof this.localizer === 'function') {\n // Properties need to be enclosed with quotes so that\n // `AJV8Validator#transformRJSFValidationErrors` replaces property names\n // with `title` or `ui:title`. See #4348, #4349, #4387, and #4402.\n (compiledValidator.errors ?? []).forEach((error) => {\n ['missingProperty', 'property'].forEach((key) => {\n if (error.params?.[key]) {\n // oxlint-disable-next-line no-param-reassign\n error.params[key] = `'${error.params[key]}'`;\n }\n });\n if (error.params?.deps) {\n // As `error.params.deps` is the comma+space separated list of missing dependencies, enclose each dependency separately.\n // For example, `A, B` is converted into `'A', 'B'`.\n // oxlint-disable-next-line no-param-reassign\n error.params.deps = error.params.deps\n .split(', ')\n .map((v) => `'${v}'`)\n .join(', ');\n }\n });\n this.localizer(compiledValidator.errors);\n // Revert to originals\n (compiledValidator.errors ?? []).forEach((error) => {\n ['missingProperty', 'property'].forEach((key) => {\n if (error.params?.[key]) {\n // oxlint-disable-next-line no-param-reassign\n error.params[key] = error.params[key].slice(1, -1);\n }\n });\n if (error.params?.deps) {\n // Remove surrounding quotes from each missing dependency. For example, `'A', 'B'` is reverted to `A, B`.\n // oxlint-disable-next-line no-param-reassign\n error.params.deps = error.params.deps\n .split(', ')\n .map((v) => v.slice(1, -1))\n .join(', ');\n }\n });\n }\n errors = compiledValidator.errors || undefined;\n // Clear errors to prevent persistent errors, see #1104\n compiledValidator.errors = null;\n }\n return {\n errors: errors,\n validationError: compilationError,\n };\n }\n /** This function processes the `formData` with an optional user contributed `customValidate` function, which receives\n * the form data and a `errorHandler` function that will be used to add custom validation errors for each field. Also\n * supports a `transformErrors` function that will take the raw AJV validation errors, prior to custom validation and\n * transform them in what ever way it chooses.\n *\n * @param formData - The form data to validate\n * @param schema - The schema against which to validate the form data\n * @param [customValidate] - An optional function that is used to perform custom validation\n * @param [transformErrors] - An optional function that is used to transform errors after AJV validation\n * @param [uiSchema] - An optional uiSchema that is passed to `transformErrors` and `customValidate`\n */\n validateFormData(formData, schema, customValidate, transformErrors, uiSchema) {\n const rawErrors = this.rawValidation(schema, formData);\n return processRawValidationErrors(this, rawErrors, formData, schema, customValidate, transformErrors, uiSchema, this.suppressDuplicateFiltering);\n }\n /**\n * This function checks if a schema needs to be added and if the root schemas don't match it removes the old root schema from the ajv instance and adds the new one.\n * When called repeatedly with the same `rootSchema` reference the deep-equality check is skipped.\n *\n * @param rootSchema - The root schema used to provide $ref resolutions\n */\n handleSchemaUpdate(rootSchema) {\n if (this.lastSeenRootSchema === rootSchema && this.hasRegisteredRootSchema) {\n return;\n }\n const rootSchemaId = rootSchema[ID_KEY] ?? ROOT_SCHEMA_PREFIX;\n // add the rootSchema ROOT_SCHEMA_PREFIX as id.\n // if schema validator instance doesn't exist, add it.\n // else if the root schemas don't match, we should remove and add the root schema so we don't have to remove and recompile the schema every run.\n if (this.ajv.getSchema(rootSchemaId) === undefined) {\n this.ajv.addSchema(rootSchema, rootSchemaId);\n }\n else if (!deepEquals(rootSchema, this.ajv.getSchema(rootSchemaId)?.schema)) {\n this.ajv.removeSchema(rootSchemaId);\n this.ajv.addSchema(rootSchema, rootSchemaId);\n }\n this.lastSeenRootSchema = rootSchema;\n this.hasRegisteredRootSchema = true;\n }\n /** Validates data against a schema, returning true if the data is valid, or\n * false otherwise. If the schema is invalid, then this function will return\n * false.\n *\n * @param schema - The schema against which to validate the form data\n * @param formData - The form data to validate\n * @param rootSchema - The root schema used to provide $ref resolutions\n */\n isValid(schema, formData, rootSchema) {\n // schemaId and compiled are declared outside the try so the catch block can\n // conditionally remove the broken schema from AJV's registry.\n let schemaId;\n let compiled = false;\n try {\n this.handleSchemaUpdate(rootSchema);\n // then rewrite the schema ref's to point to the rootSchema\n // this accounts for the case where schema have references to models\n // that lives in the rootSchema but not in the schema in question.\n const schemaWithIdRefPrefix = withIdRefPrefix(schema);\n schemaId = schemaWithIdRefPrefix[ID_KEY] ?? hashForSchema(schemaWithIdRefPrefix);\n let compiledValidator;\n compiledValidator = this.ajv.getSchema(schemaId);\n if (compiledValidator === undefined) {\n // Add schema by an explicit ID so it can be fetched later\n // Fall back to using compile if necessary\n // https://ajv.js.org/guide/managing-schemas.html#pre-adding-all-schemas-vs-adding-on-demand\n compiledValidator =\n this.ajv.addSchema(schemaWithIdRefPrefix, schemaId).getSchema(schemaId) ||\n this.ajv.compile(schemaWithIdRefPrefix);\n }\n compiled = true;\n const result = compiledValidator(formData);\n return result;\n }\n catch (e) {\n // oxlint-disable-next-line no-console\n console.warn('Error encountered compiling schema:', e);\n // Remove the broken schema from AJV's registry so a subsequent rawValidation\n // or isValid call does not silently reuse a cached entry that bypassed\n // meta-schema validation. Guard with !compiled so that a runtime error thrown\n // by compiledValidator(formData) does not evict a correctly-compiled schema.\n if (!compiled && schemaId !== undefined) {\n this.ajv.removeSchema(schemaId);\n }\n return false;\n }\n }\n}\n//# sourceMappingURL=validator.js.map","import AJV8Validator from \"./validator.js\";\n/** Creates and returns a customized implementation of the `ValidatorType` with the given customization `options` if\n * provided. If a `localizer` is provided, it is used to translate the messages generated by the underlying AJV\n * validation.\n *\n * @param [options={}] - The `CustomValidatorOptionsType` options that are used to create the `ValidatorType` instance\n * @param [localizer] - If provided, is used to localize a list of Ajv `ErrorObject`s\n * @returns - The custom validator implementation resulting from the set of parameters provided\n */\nexport default function customizeValidator(options = {}, localizer) {\n return new AJV8Validator(options, localizer);\n}\n//# sourceMappingURL=customizeValidator.js.map","import createPrecompiledValidator from \"./createPrecompiledValidator.js\";\nimport customizeValidator from \"./customizeValidator.js\";\nexport { customizeValidator, createPrecompiledValidator };\nexport default customizeValidator();\n//# sourceMappingURL=index.js.map","// Schema-Generated Configuration Form\n// Purpose: Renders the server-provided JSON Schema as an ordered, indented tree resembling the configuration's YAML structure.\n// Scope: Defines one generic RJSF presentation; it never names or special-cases an individual service or setting.\nimport { createContext, useContext, useMemo } from 'react';\nimport Form from '@rjsf/core';\nimport validator from '@rjsf/validator-ajv8';\nimport CardFrame from '../../components/CardFrame/index.jsx';\n\n/*\n Structural colors repeat only after six levels, which is deeper than the\n current configuration document but remains safe for future service-owned\n schemas. Depth is carried through React context because RJSF's array-item\n template does not receive a field path; context keeps objects, arrays, and\n array items in one generic hierarchy without attaching UI metadata to the\n server's schema.\n*/\nconst CONFIGURATION_LAYER_COLORS = [\n // Alternating warm and cool hues keep adjacent structural levels distinct\n // even after CardFrame applies its intentionally subtle translucent tint.\n '#0ea5e9', // blue\n '#f97316', // orange\n '#22c55e', // green\n '#a855f7', // purple\n '#ef4444', // red\n '#eab308', // yellow\n];\nconst ConfigurationLayerDepthContext = createContext(0);\n\nfunction useConfigurationLayer() {\n const depth = useContext(ConfigurationLayerDepthContext);\n return {\n color: CONFIGURATION_LAYER_COLORS[depth % CONFIGURATION_LAYER_COLORS.length],\n depth,\n };\n}\n\nfunction buildUiSchema(schema, path = '') {\n /*\n `writeOnly` is standard JSON Schema metadata and is the sole reason a field\n needs a special widget. The walk records its dotted path for the existing\n server secret-operation protocol; it contains no service or field names.\n */\n if (!schema || typeof schema !== 'object') return {};\n const firstExample = Array.isArray(schema.examples) ? schema.examples[0] : undefined;\n const placeholder = firstExample === undefined ? {} : { 'ui:placeholder': String(firstExample) };\n\n if (schema.writeOnly === true) {\n return {\n 'ui:widget': 'SecretWidget',\n 'ui:options': { secretPath: path },\n ...placeholder,\n };\n }\n\n if (schema.type === 'boolean') {\n /*\n RJSF's checkbox is unusual: unless it is explicitly selected, it renders\n the schema description and field name inside the widget as well as\n passing them to FieldTemplate. This generic option makes the surrounding\n YAML-like row the sole owner of that text, eliminating duplicates without\n maintaining a list of boolean setting names.\n */\n return {\n 'ui:widget': 'checkbox',\n 'ui:options': { label: false },\n };\n }\n\n if (schema.type === 'array' && schema.items) {\n /*\n Array item schemas need the same generic metadata walk as ordinary object\n properties. Otherwise fields created by Add item would lose their\n schema-owned placeholders even though the backend described them.\n */\n return {\n items: buildUiSchema(schema.items, path ? `${path}[]` : '[]'),\n };\n }\n\n if (schema.type !== 'object' || !schema.properties) return placeholder;\n return Object.fromEntries(Object.entries(schema.properties).map(([key, childSchema]) => [\n key,\n buildUiSchema(childSchema, path ? `${path}.${key}` : key),\n ]));\n}\n\nfunction SecretWidget({ id, disabled, readonly, options, placeholder, registry }) {\n const secretPath = options.secretPath;\n const context = registry.formContext || {};\n const operation = context.secretOperations?.[secretPath];\n const configured = Boolean(context.configuredSecrets?.[secretPath]);\n const replacing = operation?.action === 'replace';\n const clearing = operation?.action === 'clear';\n const unavailable = disabled || readonly;\n\n function setOperation(nextOperation) {\n if (!unavailable) context.setSecretOperation?.(secretPath, nextOperation);\n }\n\n return (\n
\n {/* Secret actions stay beside their status. A wide configuration card\n must not turn related controls into a trip across the screen. */}\n
\n \n {clearing ? 'Will be cleared when saved' : replacing ? 'Replacement pending' : configured ? 'Configured' : 'Not configured'}\n \n
\n \n \n
\n
\n {replacing ? (\n setOperation({ action: 'replace', value: event.target.value })}\n />\n ) : null}\n
\n );\n}\n\nfunction ConfigurationFieldTemplate({\n children,\n classNames,\n description,\n errors,\n help,\n hidden,\n id,\n label,\n required,\n schema,\n style,\n}) {\n if (hidden) return
{children}
;\n\n const containerField = schema?.type === 'object' || schema?.type === 'array';\n if (containerField) {\n // Objects and arrays own their visible boundaries and headings in the\n // templates below. Keeping this wrapper structural avoids duplicated\n // titles while retaining RJSF's useful field-type classes for layout.\n return
{children}{errors}{help}
;\n }\n\n return (\n
\n
\n {/* Boolean widgets deliberately hide their internal duplicate label, so\n every scalar can use this same key column and preserve YAML order. */}\n \n
\n
\n {/* Descriptions belong with the editable value rather than inside the\n narrow key column. This keeps long operational guidance readable\n without weakening the YAML-like key/value alignment. */}\n {description ?
{description}
: null}\n {children}\n {errors}\n {help}\n
\n
\n );\n}\n\nfunction ConfigurationObjectTemplate({ description, fieldPathId, properties, title }) {\n const visibleProperties = properties.filter((property) => !property.hidden);\n const propertyLines = visibleProperties.map((property) => property.content);\n const topLevel = fieldPathId.path.length === 1;\n const layer = useConfigurationLayer();\n\n if (fieldPathId.path.length === 0) {\n // The outer configuration card already names the root document. Rendering\n // its properties directly makes their schema order read like YAML lines.\n // The root description remains outside that stack so its introductory\n // text does not accidentally become another configuration section.\n return (\n
\n {description ?
{description}
: null}\n {/* The invisible schema root establishes depth zero. Every visible\n structural CardFrame below it advances the context by one level. */}\n \n
{propertyLines}
\n
\n
\n );\n }\n\n if (typeof fieldPathId.path.at(-1) === 'number') {\n // Array items receive their numbered heading and action row from the array\n // item CardFrame. Rendering only their description and ordered properties\n // prevents a redundant anonymous card inside that visible item boundary.\n return (\n
\n {description ?
{description}
: null}\n {propertyLines}\n
\n );\n }\n\n return (\n \n {description ?
{description}
: null}\n \n
{propertyLines}
\n
\n \n );\n}\n\nfunction ConfigurationArrayItemTemplate({ buttonsProps, children, hasToolbar, index }) {\n const unavailable = buttonsProps.disabled || buttonsProps.readonly;\n const layer = useConfigurationLayer();\n\n return (\n \n {hasToolbar ? (\n // Actions remain at the beginning of the card body instead of using\n // CardFrame's right-aligned action slot. Even on a wide editor, item\n // controls therefore stay next to the content they affect.\n
\n {(buttonsProps.hasMoveUp || buttonsProps.hasMoveDown) ? (\n \n ) : null}\n {(buttonsProps.hasMoveUp || buttonsProps.hasMoveDown) ? (\n \n ) : null}\n {buttonsProps.hasCopy ? (\n \n ) : null}\n {buttonsProps.hasRemove ? (\n \n ) : null}\n
\n ) : null}\n \n
{children}
\n
\n \n );\n}\n\nfunction ConfigurationArrayTemplate({ canAdd, disabled, fieldPathId, items, onAddClick, readonly, schema, title }) {\n const topLevel = fieldPathId.path.length === 1;\n const layer = useConfigurationLayer();\n\n return (\n \n {schema.description ?
{schema.description}
: null}\n {canAdd ? (\n // Adding belongs to the collection as a whole, but stays left-aligned\n // with that collection's contents rather than at the viewport edge.\n
\n \n
\n ) : null}\n \n
\n {items.length ? items :

No items configured.

}\n
\n
\n \n );\n}\n\nexport default function SchemaConfigurationForm({ schema, value, onChange, configuredSecrets, secretOperations, setSecretOperation }) {\n const uiSchema = useMemo(() => buildUiSchema(schema), [schema]);\n const widgets = useMemo(() => ({ SecretWidget }), []);\n const templates = useMemo(() => ({\n ArrayFieldItemTemplate: ConfigurationArrayItemTemplate,\n ArrayFieldTemplate: ConfigurationArrayTemplate,\n FieldTemplate: ConfigurationFieldTemplate,\n ObjectFieldTemplate: ConfigurationObjectTemplate,\n }), []);\n const formContext = useMemo(() => ({\n configuredSecrets,\n secretOperations,\n setSecretOperation,\n }), [configuredSecrets, secretOperations, setSecretOperation]);\n\n return (\n
\n onChange(formData)}\n >\n {/* Saving is owned by the sticky revision-aware toolbar above the form. */}\n <>\n \n
\n );\n}\n","// Complete Configuration Editor\n// Purpose: Connects the one hierarchical configuration form to revision, secret, validation, and save behavior.\n// Scope: Edits and saves one complete configuration document as one immutable revision.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport CardFrame from '../../components/CardFrame/index.jsx';\nimport { importAdminConfigurationFile, updateConfiguration } from '../api.js';\nimport SchemaConfigurationForm from './SchemaConfigurationForm.jsx';\n\nfunction clone(value) {\n return JSON.parse(JSON.stringify(value));\n}\n\nexport default function ConfigurationEditor({ snapshot, socket, runSensitive, onSnapshot, onReload }) {\n const serverValue = snapshot?.configuration?.config;\n const schema = snapshot?.configuration?.schema;\n const revision = snapshot?.configuration?.revision;\n const [draft, setDraft] = useState(() => clone(serverValue));\n const [secretOperations, setSecretOperations] = useState({});\n const [saving, setSaving] = useState(false);\n const [importing, setImporting] = useState(false);\n const [configurationFile, setConfigurationFile] = useState(null);\n const [notice, setNotice] = useState('');\n const [error, setError] = useState('');\n const [validationErrors, setValidationErrors] = useState([]);\n const editorRef = useRef(null);\n const toolbarRef = useRef(null);\n\n useEffect(() => {\n setDraft(clone(serverValue));\n setSecretOperations({});\n setError('');\n setConfigurationFile(null);\n setValidationErrors([]);\n }, [revision, serverValue]);\n\n useEffect(() => {\n const editor = editorRef.current;\n const toolbar = toolbarRef.current;\n if (!editor || !toolbar) return undefined;\n\n /*\n The action toolbar can wrap differently at each viewport width, so a\n fixed CSS offset would eventually let section headings overlap it. Feed\n its real rendered height into one local CSS variable instead; every\n sticky configuration CardFrame can then meet the toolbar exactly.\n */\n const updateStickyOffset = () => {\n editor.style.setProperty('--configuration-sticky-top', `${toolbar.offsetHeight}px`);\n };\n updateStickyOffset();\n\n const observer = typeof ResizeObserver === 'function'\n ? new ResizeObserver(updateStickyOffset)\n : null;\n observer?.observe(toolbar);\n window.addEventListener('resize', updateStickyOffset);\n\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', updateStickyOffset);\n editor.style.removeProperty('--configuration-sticky-top');\n };\n }, [serverValue, schema]);\n\n const dirty = useMemo(\n () => JSON.stringify(draft) !== JSON.stringify(serverValue) || Object.keys(secretOperations).length > 0,\n [draft, secretOperations, serverValue],\n );\n const busy = saving || importing;\n\n if (!serverValue || !schema) {\n return

The configuration document is unavailable.

;\n }\n\n const setSecretOperation = (path, operation) => setSecretOperations((current) => {\n const next = { ...current };\n if (operation) next[path] = operation;\n else delete next[path];\n return next;\n });\n\n async function save() {\n setSaving(true);\n setError('');\n setValidationErrors([]);\n try {\n const response = await runSensitive(() => updateConfiguration(socket, {\n value: draft,\n expectedRevision: revision,\n secretOperations,\n }));\n onSnapshot(response.snapshot);\n } catch (saveError) {\n setError(saveError.message);\n setValidationErrors(saveError.validationErrors || []);\n } finally {\n setSaving(false);\n }\n }\n\n async function importSelectedConfiguration() {\n if (!configurationFile) return;\n /*\n Import replaces the complete draft and applies it immediately, so the\n confirmation names both consequences before reading or transmitting the\n operator-selected file. Administrator accounts remain owned by the\n initialized database and are never imported from this screen.\n */\n const confirmed = window.confirm(\n 'Replace the current configuration with this YAML file and apply it now? Any unsaved edits will be discarded. Administrator accounts in the file will be ignored.',\n );\n if (!confirmed) return;\n\n setImporting(true);\n setError('');\n setNotice('');\n setValidationErrors([]);\n try {\n const yamlText = await configurationFile.text();\n const response = await runSensitive(() => importAdminConfigurationFile(socket, {\n fileName: configurationFile.name,\n yaml: yamlText,\n expectedRevision: revision,\n }));\n onSnapshot(response.snapshot);\n setNotice(response.ignoredAdministratorCount > 0\n ? `Configuration imported and applied. ${response.ignoredAdministratorCount} administrator entr${response.ignoredAdministratorCount === 1 ? 'y was' : 'ies were'} ignored.`\n : 'Configuration imported and applied.');\n } catch (importError) {\n setError(importError.message);\n setValidationErrors(importError.validationErrors || []);\n } finally {\n setImporting(false);\n }\n }\n\n return (\n
\n \n
\n

Saving applies the complete revision immediately and reloads each affected service.

\n {/* All document actions stay together at the start of the toolbar. The\n editor may use a wide canvas, but width is never used to separate a\n control from the content that explains it. */}\n
\n \n \n \n
\n
\n \n

Replace this configuration from an explicitly selected legacy file. Unknown old settings and administrator accounts are ignored; current settings are validated and applied immediately.

\n {/* Keep the picker and its action beside each other at the start of the\n card. The configuration canvas can be wide, but this local action\n should never be separated from the file it operates on. */}\n
\n setConfigurationFile(event.target.files?.[0] || null)}\n />\n \n
\n
\n {snapshot.configurationApplication?.services?.some((service) => service.status === 'failed') ? (\n
\n

Configuration was saved, but some services could not reload

\n
    \n {snapshot.configurationApplication.services\n .filter((service) => service.status === 'failed')\n .map((service, index) =>
  • {service.section}: {service.error}
  • )}\n
\n
\n ) : null}\n {error ?

{error}

: null}\n {notice ?

{notice}

: null}\n {validationErrors.length ? (\n
\n

Configuration could not be saved

\n
    \n {validationErrors.map((validationError, index) => (\n
  • {validationError.path}: {validationError.message}
  • \n ))}\n
\n
\n ) : null}\n \n
\n
\n );\n}\n","// Password Confirmation Dialog\n// Purpose: Collects recent password proof for sensitive administrative mutations without storing it in page state longer than necessary.\n// Scope: Handles confirmation presentation only; retry ownership remains in AdminApp.\nimport { useState } from 'react';\n\nexport default function PasswordConfirmationDialog({ open, busy, error, onCancel, onConfirm }) {\n const [password, setPassword] = useState('');\n if (!open) return null;\n\n async function submit(event) {\n event.preventDefault();\n await onConfirm(password);\n setPassword('');\n }\n\n function cancel() {\n // Clear the credential before closing because this component remains\n // mounted beneath the admin shell and would otherwise retain it in memory.\n setPassword('');\n onCancel();\n }\n\n return (\n
\n
\n

Confirm password

\n

This sensitive action requires recent confirmation of your administrator password.

\n setPassword(event.target.value)}\n />\n {error ?

{error}

: null}\n
\n \n \n
\n \n
\n );\n}\n","// Central Administration Application\n// Purpose: Composes authentication, operational controls, users, and one complete configuration editor under /admin.\n// Scope: Reuses existing admin/identity components while shared infrastructure owns revisions and sensitive-action behavior.\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport AuthPanel from '../components/AuthPanel/index.jsx';\nimport AdminPanelContent from '../components/AdminPanel/AdminPanelContent.jsx';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport Tabs, { Tab, TabList, TabPanels } from '../components/Tabs/index.jsx';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport IdentityDatabasePanel from '../database/IdentityDatabasePanel.jsx';\nimport useUserIdentitySync from '../hooks/useUserIdentitySync.js';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { DEFAULT_PAGE_THEME_KEY, usePageThemeClass } from '../themes/index.js';\nimport { confirmAdminPassword, getAdminSnapshot } from './api.js';\nimport AdministratorAccounts from './components/AdministratorAccounts.jsx';\nimport AdminOverview from './components/AdminOverview.jsx';\nimport BackupRestorePanel from './components/BackupRestorePanel.jsx';\nimport ConfigurationEditor from './components/ConfigurationEditor.jsx';\nimport PasswordConfirmationDialog from './components/PasswordConfirmationDialog.jsx';\nimport './styles.css';\n\nconst TOP_LEVEL_SECTIONS = [\n { key: 'overview', label: 'Overview' },\n { key: 'fleet', label: 'Fleet operations' },\n { key: 'users', label: 'Users and administrators', lockdownOnly: true },\n { key: 'configuration', label: 'Configuration', lockdownOnly: true },\n { key: 'backup-restore', label: 'Backup and restore', lockdownOnly: true },\n];\n\nexport default function AdminApp() {\n useUserIdentitySync({ identitySurface: 'passive' });\n const socket = useSocket();\n const role = useSessionSelector((state) => state.session?.role || 'user');\n const connected = useSessionSelector((state) => state.connected);\n const [searchParams, setSearchParams] = useSearchParams();\n const selected = searchParams.get('section') || 'overview';\n const [snapshot, setSnapshot] = useState(null);\n const [loadingError, setLoadingError] = useState('');\n const pendingSensitiveAction = useRef(null);\n const [confirmationOpen, setConfirmationOpen] = useState(false);\n const [confirmationBusy, setConfirmationBusy] = useState(false);\n const [confirmationError, setConfirmationError] = useState('');\n const { value: pageSettings } = useSettingsNamespace('page', { backgroundTheme: DEFAULT_PAGE_THEME_KEY });\n const pageBackgroundClass = usePageThemeClass(pageSettings?.backgroundTheme);\n const isAdmin = role === 'admin' || role === 'lockdown';\n const isLockdown = role === 'lockdown';\n\n const loadSnapshot = useCallback(async () => {\n if (!isLockdown) {\n setSnapshot(null);\n return;\n }\n setLoadingError('');\n try {\n setSnapshot(await getAdminSnapshot(socket));\n } catch (error) {\n setLoadingError(error.message);\n }\n }, [isLockdown, socket]);\n\n useEffect(() => {\n loadSnapshot();\n }, [loadSnapshot, connected]);\n\n const runSensitive = useCallback(async (operation) => {\n try {\n return await operation();\n } catch (error) {\n if (error.code !== 'PASSWORD_CONFIRMATION_REQUIRED') throw error;\n /*\n Suspend exactly the rejected operation. After password confirmation the\n same closure reruns with its original revision and payload, so normal\n conflict detection still protects against changes made while waiting.\n */\n return new Promise((resolve, reject) => {\n pendingSensitiveAction.current = { operation, resolve, reject };\n setConfirmationError('');\n setConfirmationOpen(true);\n });\n }\n }, []);\n\n async function submitPasswordConfirmation(password) {\n setConfirmationBusy(true);\n setConfirmationError('');\n try {\n await confirmAdminPassword(socket, password);\n const pending = pendingSensitiveAction.current;\n pendingSensitiveAction.current = null;\n setConfirmationOpen(false);\n if (pending) {\n try {\n pending.resolve(await pending.operation());\n } catch (error) {\n pending.reject(error);\n }\n }\n } catch (error) {\n setConfirmationError(error.message);\n } finally {\n setConfirmationBusy(false);\n }\n }\n\n function cancelPasswordConfirmation() {\n const pending = pendingSensitiveAction.current;\n pendingSensitiveAction.current = null;\n setConfirmationOpen(false);\n if (pending) pending.reject(new Error('Sensitive action cancelled.'));\n }\n\n function selectSection(key) {\n setSearchParams(key === 'overview' ? {} : { section: key });\n }\n\n const navigationOptions = TOP_LEVEL_SECTIONS.filter((entry) => !entry.lockdownOnly || isLockdown);\n const activeSection = navigationOptions.some((entry) => entry.key === selected) ? selected : 'overview';\n\n let content;\n if (!isAdmin) {\n content =
;\n } else if (activeSection === 'fleet') {\n content = ;\n } else if (!isLockdown) {\n content = (\n \n

Routine fleet operations are available. Configuration, users, secrets, and system administration require a lockdown administrator.

\n
\n );\n } else if (!snapshot) {\n content =

{loadingError || 'Loading configuration and audit state…'}

;\n } else if (activeSection === 'users') {\n content = (\n
\n \n \n
\n );\n } else if (activeSection === 'configuration') {\n content = ;\n } else if (activeSection === 'backup-restore') {\n content = ;\n } else {\n content = ;\n }\n\n return (\n
\n \n \n
\n \n

{snapshot ? `Active configuration revision ${snapshot.configuration.revision}. The running application has applied revision ${snapshot.appliedRevision}.` : 'Central server administration and configuration.'}

\n
\n {isAdmin ? (\n \n {/* Reusing the same responsive tab surface as the driver page makes\n administration feel like another MultiRover workspace instead\n of a separate desktop-oriented application. */}\n \n
{content}
\n
\n ) :
{content}
}\n
\n
\n );\n}\n"],"names":["emitIdentityAdmin","socket","eventName","payload","resolve","reject","resp","listUsers","query","filter","getUser","userId","addSignal","type","value","removeSignal","setVerified","enabled","setDeterrence","reason","setMuted","setPermission","permissionKey","updateFeatureState","namespace","deleteFeatureState","SIGNAL_LABELS","SIGNAL_FIELDS","maskValue","text","formatDateTime","ts","stringifyJson","parseEditableJson","parsed","FILTERS","StatusPill","active","children","jsx","UserListCard","users","truncated","selectedUserId","loading","onQuery","onFilter","onRefresh","onSearch","onSelect","actions","jsxs","CardFrame","event","entry","user","UserDetailsCard","SignalEditor","onAdd","onRemove","draft","setDraft","useState","values","submit","SignalsCard","onAddSignal","onRemoveSignal","StatusCard","onVerified","onDeterrence","onMuted","setReason","FeatureStateCard","onSaveFeature","onDeleteFeature","namespaces","initialNamespace","setNamespace","setText","error","setError","save","ns","err","remove","next","RawRecordCard","PermissionsCard","permissions","onPermission","grantedKeys","permission","IdentityDatabasePanel","useSocket","setUsers","setPermissions","selectedUser","setSelectedUser","setQuery","setFilter","setTruncated","setLoading","message","setMessage","refreshUsers","useCallback","updated","selectUser","applyUserUpdate","prev","runMutation","operation","successMessage","useEffect","submitSearch","handleAddSignal","handleRemoveSignal","handleVerified","handleDeterrence","handleMuted","handlePermission","handleSaveFeature","handleDeleteFeature","Fragment","Tabs","TabList","Tab","TabPanels","TabPanel","AdministratorRow","administrator","runSensitive","onSnapshot","busy","setBusy","perform","work","response","actionError","deleteAdministrator","updateAdministrator","AdministratorAccounts","administrators","create","createAdministrator","formatDate","AdminOverview","snapshot","config","restartRequested","setRestartRequested","lifecycle","setLifecycle","lifecycleError","setLifecycleError","mounted","refreshLifecycle","getApplicationLifecycleStatus","timer","handleReconnect","restore","revision","restoreConfigurationRevision","restart","restartApplication","checkForUpdate","checkForApplicationUpdate","update","updateApplication","lifecycleBusy","lifecycleAvailable","updateSummary","Link","formatBytes","bytes","units","amount","unitIndex","BackupRestorePanel","backupBusy","setBackupBusy","restoreBusy","setRestoreBusy","backupFile","setBackupFile","validatedRestore","setValidatedRestore","lastRestore","setLastRestore","getBackupRestoreStatus","downloadBackup","createFullBackup","link","skipped","validateRestore","authorization","createRestoreUpload","uploadResponse","result","confirmFullRestore","isObject","thing","allowAdditionalItems","schema","getDecimalSeparator","languages","locales","part","asNumber","separator","standardValue","ADDITIONAL_PROPERTY_FLAG","ADDITIONAL_PROPERTIES_KEY","ALL_OF_KEY","ANY_OF_KEY","CONST_KEY","DEFAULT_KEY","DEPENDENCIES_KEY","ELSE_KEY","ENUM_KEY","ERRORS_KEY","ID_KEY","IF_KEY","ITEMS_KEY","JUNK_OPTION_ID","NAME_KEY","ONE_OF_KEY","PATTERN_PROPERTIES_KEY","PROPERTIES_KEY","READONLY_KEY","REQUIRED_KEY","SUBMIT_BTN_OPTIONS_KEY","REF_KEY","THEN_KEY","RJSF_REF_KEY","RJSF_REF_CYCLE_KEY","SCHEMA_KEY","DEFAULT_ID_PREFIX","DEFAULT_ID_SEPARATOR","DISCRIMINATOR_PATH","FORM_CONTEXT_NAME","LOOKUP_MAP_NAME","RJSF_PREFIX_KEY","RJSF_ADDITIONAL_PROPERTIES_FLAG","ROOT_SCHEMA_PREFIX","UI_FIELD_KEY","UI_WIDGET_KEY","UI_OPTIONS_KEY","UI_GLOBAL_OPTIONS_KEY","UI_DEFINITIONS_KEY","JSON_SCHEMA_DRAFT_2019_09","JSON_SCHEMA_DRAFT_2020_12","getUiOptions","uiSchema","globalOptions","key","options","canExpand","formData","expandable","isPlainObject","proto","createErrorHandler","handler","acc","getOwnPropertyNames","getOwnPropertySymbols","hasOwnProperty","combineComparators","comparatorA","comparatorB","a","b","state","createIsCircular","areItemsEqual","cache","cachedA","cachedB","getStrictProperties","object","symbols","hasOwn","property","PREACT_VNODE","PREACT_OWNER","REACT_OWNER","HAS_FLOAT_16_ARRAY","getOwnPropertyDescriptor","keys","sameValueEqual","strictEqual","areArrayBuffersEqual","areTypedArraysEqual","areArraysEqual","index","areDataViewsEqual","areDatesEqual","areErrorsEqual","areMapsEqual","size","matchedIndices","aIterable","aResult","bResult","bIterable","hasMatch","matchIndex","aEntry","bEntry","areObjectsEqual","properties","isPropertyEqual","areObjectsEqualStrict","descriptorA","descriptorB","arePrimitiveWrappersEqual","areRegExpsEqual","areSetsEqual","areUrlsEqual","areSearchParamsEqual","serializedA","serializedB","sortSearchParams","serialized","toString","createEqualityComparator","supportedComparatorMap","createSupportedComparatorMap","areFunctionsEqual","areNumbersEqual","getUnsupportedCustomComparator","constructor","tag","supportedComparator","unsupportedCustomComparator","createEqualityComparatorConfig","circular","createCustomConfig","strict","createInternalEqualityComparator","compare","_indexOrKeyA","_indexOrKeyB","_parentA","_parentB","createIsEqual","comparator","createState","equals","meta","createCustomEqual","createCustomInternalComparator","deepEquals","_a","isUUID","isIPv4","isPort","isHexPair","isUnreserved","isPathCharacter","isQueryFragmentCharacter","isUserinfoCharacter","stringArrayToHexStripped","input","code","i","isHextet","isIPvFuture","isZoneCharacter","nonSimpleDomain","nonSimpleDomainChars","numericLastLabel","nonSimpleMailtoDomain","domain","isZoneIdentifier","zone","compressIPv6ZeroRun","hextets","bestStart","bestLength","runStart","runLength","head","tail","normalizeIPv6Address","compression","left","right","parts","hextetCount","expanded","normalizeIPv6","host","bracketed","findToken","zoneIdentifier","zoneSeparator","separatorLength","address","str","token","ind","removeDotSegments","path","output","nextSlash","len","HOST_DELIMS","HOST_DELIM_RE","HOST_DELIM_NO_COLON_RE","reescapeHostDelimiters","isIP","re","ch","normalizePercentEncoding","decodeUnreserved","hex","normalizedHex","decoded","BYTE_HEX","HEX_DIGITS","isEscapeSafe","cp","percentEncodeNonAscii","normalizePathEncoding","low","serializePathEncoding","pathNoScheme","firstSegment","normalizeQueryFragmentEncoding","encodeComponent","isAllowed","encodeUserinfo","encodeQuery","encodeFragment","escapePreservingEscapes","recomposeAuthority","component","uriTokens","ipV6res","port","utils","require$$0","URN_REG","supportedSchemeNames","isValidSchemeName","name","wsIsSecure","wsComponent","httpParse","httpSerialize","secure","wsParse","wsSerialize","queryIndex","urnParse","urnComponent","matches","scheme","urnScheme","schemeHandler","getSchemeHandler","urnSerialize","nid","uriComponent","nss","urnuuidParse","uuidComponent","urnuuidSerialize","http","https","ws","wss","urn","urnuuid","LOCAL_PART_ALLOWED","HFNAME_ALLOWED","DTEXT_ALLOWED","allowSet","chars","allowNonAscii","table","escaped","cls","LOCAL_PART","HFNAME","DTEXT","DTEXT_IRI","HEX_PAIR","MAILTO_DOMAIN_LITERAL","MAILTO_DOMAIN_ERROR","HAS_SURROGATE","decodeHex","replaceLoneSurrogates","encodeWithAllow","set","mailtoNormalizeDomain","normalizedDomain","parsedDomain","mailtoEncodeDomain","mailtoParse","mailtoComponent","rawPath","rawQuery","to","headers","start","end","eqIdx","normalizedName","addrs","j","rawAddr","atIdx","local","mailtoEncodeHeaderName","mailtoSerialize","sourceHeaders","addr","rawLocal","rawDomain","decodedDomain","count","SCHEMES","schemes","require$$1","VALID_SCHEME","MALFORMED_SCHEME_ERROR","decodeValidScheme","decodedScheme","normalize","uri","normalizeString","parse","serialize","baseURI","relativeURI","schemelessOptions","baseParsed","baseMalformed","baseMalformedPercentEncoding","baseMalformedSchemeSpecific","baseMalformedHost","baseMalformedScheme","parseWithStatus","relativeParsed","relativeMalformed","relativeMalformedPercentEncoding","relativeMalformedSchemeSpecific","relativeMalformedHost","relativeMalformedScheme","resolved","resolveComponent","resolvedSchemeHandler","resolvedHost","resolvedHostIsIP","canonicalizeHost","encodedASCIIHost","base","relative","skipNormalization","target","equal","uriA","uriB","normalizedA","normalizeComparableURI","normalizedB","cmpts","opts","hasAuthority","authority","s","URI_PARSE","AUTHORITY_PREFIX","AUTHORITY_INTRODUCER_REGION","getParseError","hasMalformedPercentEncoding","percent","isIPLiteral","hasMalformedComponentPercentEncoding","bracketedIPLiteral","e","malformedAuthorityOrPort","malformedPercentEncoding","malformedSchemeSpecific","malformedHost","malformedIPLiteral","malformedScheme","authorityMatch","introducerMatch","region","normalizedRegion","parseError","hasIPLiteralBracket","ipv6result","normalizeStringWithStatus","normalized","fastUri","fastUriModule","hasExcape","escapeMatcher","escapeReplacer","m","untilde","setter","obj","pointer","hasNextPart","p","oldValue","compilePointer","get","compile","compiled","jsonpointer","findEmbeddedSchemaRecursive","ref","UriResolver","subSchema","item","makeAllReferencesAbsolute","currentURI","splitKeyElementFromObject","remaining","findSchemaDefinitionRecursive","$ref","rootSchema","recurseList","current","currentBaseURI","decodedRef","resolvedRef","refId","refAnchor","nextRef","firstRef","restRefs","circularPath","theRef","findSchemaDefinition","reIsIndex","toPath","normalizePath","isUnsafeSegment","segment","isIndex","isSettable","getByPath","defaultValue","setByPath","createIntermediateObjects","segments","existing","hasByPath","unsetByPath","parent","getDiscriminatorFieldFromSchema","discriminator","maybeString","guessType","getSchemaType","t","mergeSchemas","obj1","obj2","accumulator","sym","getPropertySchema","getOptionMatchingSimpleDiscriminator","discriminatorField","option","getFirstMatchingOption","validator","simpleDiscriminatorMatch","requiresAnyOf","augmentedSchema","shallowClone","objProto","isRecordEmpty","rec","JSON_SCHEMA_TYPE_NAMES","RECORDS_OF_SUB_SCHEMAS","ARRAYS_OF_SUB_SCHEMAS","SUB_SCHEMAS","isSchemaObject","schemaDef","isAllowAnySchema","def","ascComparator","union","larger","smaller","ll","sl","tmp","data","intersection","setB","val","isArrayEmpty","arr","createArrayComparator","d","createDeduplicator","threshold","al","rl","outer","sorted","wIndex","rIndex","createIntersector","bl","tmpArr","tmpL","aSorted","bSorted","cmp","memoize","func","arg","ret","weakMemoize","zero","isUndefined","v","isSchemaPrimitiveExceptNull","PRIMITIVE_TYPE_ORDER","compareSchemaPrimitive","ta","tb","insertUniqueValues","mutableTarget","mutableSource","tl","seen","l","createCmpMatcher","isEmpty","compareEmpty","createOptionalComparator","createNarrowingOptionalComparator","createArrayOrItemComparator","compareArray","compareOptionalSameTypeSchemaPrimitives","compareNumbersWithZeroDefault","createComparator","deduplicationCache","sortedKeysCache","getSortedKeys","createRecordsComparator","aKeys","bKeys","createArrayComparatorWithDeduplication","deduplicate","compareArrayOfSameTypePrimitivesWithDeduplication","compareSchemaDefinitions","allKeys","COMPARATORS","compareOptionalSchemaValues","compareSchemaValues","compareNonNullSchemaValue","compareOptionalSchemaDefinitions","compareRecordOfOptionalSchemasWithEmptyRecordDefault","compareOptionalArrayOfSchemasWithDeduplication","compareSchemaDefinitionsWithEmptyDefinitionDefault","isAArr","isBArr","identity","gcd","lcm","simplePatternsMerger","createPairCombinations","r","action","lv","mergeBooleans","createRecordsMerge","merge","createMap","items","map","pair","assignSchemaDefinitionOrRecordOfSchemaDefinitions","PROPERTIES_ASSIGNER_KEYS","compilePatterns","patterns","source","EMPTY_PATTERNS_AND_KEYS","appendKeyConstraints","ITEMS_ASSIGNER_KEYS","CONDITION_ASSIGNER_KEYS","CONTAINS_ASSIGNER_KEYS","assignCondition","intersectSchemaTypes","check","createChecksMap","checks","fn","k","DEFAULT_CHECKS","createMerger","mergePatterns","isSubRegExp","intersectJson","deduplicateJsonSchemaDef","defaultMerger","assigners","mergers","mergeArrayOfSchemaDefinitions","schemas","mergeSchemaDefinitions","createProperty","constraints","oppositeValue","oppositePatterns","oppositeAdditional","isNotYetAllowed","assignPatternPropertiesAndAdditionalPropertiesMerge","patternKeys","matchedPatterns","isOppositeTruthy","pattern","propertiesAssigner","lProps","lPatterns","lAdditional","rProps","rPatterns","rAdditional","isLAddTruthy","isRAddTruthy","mergeRecordsOfSchemaDefinitions","additionalProperties","lKeys","lKeysLen","lCompiledPatterns","lPatternKeys","rCompiledPatterns","rPatternKeys","lKeysSet","mappedRAdditional","prop","rKeys","rKeysLen","mappedLAdditional","lKey","rKey","itemsAssigner","lItems","rItems","isLArr","isRArr","itemsArray","additional","isAdditionalTruthy","conditionAssigner","cond","containsAssigner","lContains","rContains","branch","mergeArraysOfSchemaDefinition","definitions","ASSIGNERS_MAP","CHECKS_MAP","rv","checkData","assign","MERGERS","x","y","el","factor","getAllOfSchemas","stack","allOf","rest","createShallowAllOfMerge","shallowAllOfMerge","retrieveSchema","rawFormData","experimental_customMergeAllOf","resolveAnyOfOrOneOfRefs","retrieveSchemaInternal","normalizeBooleanSchema","resolveCondition","expandAllBranches","preserveDependencies","expression","then","otherwise","resolvedSchemaLessConditional","conditionValue","resolvedSchemas","thenSchema","otherwiseSchema","conditionalBranch","conditionalSchema","getAllPermutationsOfXxxOf","listOfLists","permutations","list","element","permutation","getMatchingPatternProperties","patternProperties","resolveSchema","updatedSchemas","resolveReference","resolveDependencies","allOfSchemaElements","allOfSubschema","updatedSchema","resolveAllReferences","markCycleOnDetection","resolvedSchema","localSchema","childrenLists","updatedProps","childList","stubExistingAdditionalProperties","theSchema","aFormData","matchingProperties","mergeAllOf","restOfSchema","resolvedSchemaWithoutAllOf","resolveAnyOrOneOfSchemas","anyOrOneOf","oneOf","anyOf","relaxed","relaxOptionsForScoring","resolveRefs","dependencies","remainingSchema","processDependencies","dependencyKey","remainingDependencies","dependencyValue","withDependentProperties","withDependentSchema","additionallyRequired","required","dependent","dependentSchema","mergedSchema","resolvedOneOfs","subschema","resolvedOneOf","withExactlyOneSubschema","validSubschemas","conditionPropertySchema","conditionSchema","dependentSubschema","resolvedSubschema","findSelectedOptionInXxxOf","fallbackField","xxx","selectorField","xxxOfs","xxxOf","xxxOfOption","getFromSchemaInternal","fieldSchema","pathList","nestedPath","getFromSchema","NOT_FOUND_SCHEMA","findFieldInSchema","parentField","fieldName","fieldNameKey","subPath","field","requiredArray","isRequired","JUNK_OPTION","calculateIndexScore","totalScore","score","formValue","newSchema","xxxOfKey","getClosestMatchingOption","newScore","selectedOption","resolvedOptions","allValidIndexes","validList","scoreCount","bestIndex","scoreData","bestScore","constIsAjvDataReference","schemaConst","schemaType","isConstant","isFixedItems","mergeDefaultsWithFormData","defaults","mergeExtraArrayDefaults","defaultSupercedesUndefined","overrideFormDataWithDefaults","defaultsArray","overrideArray","overrideOppositeArray","mapped","idx","formDataObj","defaultsObj","keyValue","keyExistsInDefaults","keyExistsInFormData","keyDefault","defaultValueNeedsDeepMerge","keyDefaultIsObject","keyHasFormDataObject","mergeObjects","concatArrays","toMerge","toConstant","applyEnumOrder","order","optionsByValue","opt","orderedKeys","optionsList","enumNames","enumOrder","uiEnumNames","uiEnumOrder","altSchemas","altUiSchemas","optionsSchemaSelector","aSchemaDef","title","aSchema","label","innerSchema","isSelect","altSchema","isMultiSelect","PRIMITIVE_TYPES","AdditionalItemsHandling","shouldPopulateAllOfDefaults","defaultFormStateBehavior","getInnerSchemaForArrayItem","additionalItems","hasContent","isEmptyFormData","computeDefaultBasedOnSchemaTypeAndDefaults","computedDefault","schemaDefault","maybeAddDefaultToObject","includeUndefinedValues","isParentRequired","requiredFields","experimental_defaultFormStateBehavior","isConst","isNullType","emptyObjectFields","isSelfOrParentRequired","computeDefaults","rawSchema","computeDefaultsProps","parentDefaults","_recurseList","shouldMergeDefaultsIntoFormData","initialDefaultsGenerated","preferParentDefaults","schemaToCompute","experimental_dfsb_to_compute","updatedRecurseList","refName","defaultFormData","getDefaultBasedOnSchemaType","itemSchema","defaultsWithFormData","arrayMinItems","mergeExtraDefaults","matchingFormData","ensureFormDataMatchingSchema","shouldRetrieveAllOf","schemaToMatch","isSelectField","validFormData","propertySchema","getObjectDefaults","retrievedSchema","parentConst","objectDefaults","hasParentConst","hasConst","additionalPropertiesSchema","formDataRequired","getArrayDefaults","requiredAsRoot","initialDefaults","arrayMinItemsStateBehavior","arrayMinItemsPopulate","arrayMergeExtraDefaults","neverPopulate","ignoreMinItemsFlagSet","isPopulateAll","computeSkipPopulate","emptyDefault","schemaItem","itemFormData","itemDefaults","defaultsLength","arrayDefault","defaultEntries","fillerSchema","fillerDefault","fillerEntries","getDefaultFormState","emptyFormData","mergeDefaultsIntoFormData","isCustomWidget","isFilesArray","itemsSchema","getDisplayLabel","uiOptions","displayLabel","addedByAdditionalProperty","getUsedFormData","fields","getFieldNames","pathSchema","formValueHasData","isLeaf","getAllPaths","_obj","paths","objKeys","newPaths","isValueEmpty","doMergeAllOf","omitExtraData","isObjectValue","isSchemaObj","handleObject","childSchema","requiredSet","setProperty","omit","sd","innerRequired","patternPropertiesRest","knownProperties","matched","addlSchema","handleArray","tupleLength","handleConditions","condition","handleOneOf","scoringOptions","winning","handleAnyOf","handleDependencies","deps","useSourceAsFallback","remainingAllOf","filtered","afterConditions","knownKeys","NO_VALUE","enumValuesForSchema","replacementForInvalidEnumValue","enumValues","sanitizeDataForNewSchema","oldSchema","newFormData","newProperties","removeOldSchemaData","oldProperties","nestedData","isNewProperty","oldRawKeyedSchema","newRawKeyedSchema","oldKeyedSchema","newKeyedSchema","oldSchemaTypeForKey","newSchemaTypeForKey","itemData","newOptionDefault","oldOptionDefault","newOptionConst","oldOptionConst","enumReplacement","oldSchemaItems","newSchemaItems","oldSchemaItemsRaw","newSchemaItemsRaw","oldSchemaType","newSchemaType","maxItems","newValue","aValue","oldItemSchema","newItemSchema","itemValue","newItemEnumValues","filteredData","toPathSchemaInternal","additionalSchema","definedProperties","schemaItems","schemaAdditionalItems","toPathSchema","SchemaUtils","createSchemaUtils","dataURItoBlob","dataURILike","splitted","media","base64","mime","mediaparams","param","binary","array","pad","num","width","dateRangeOptions","stop","bothRelative","eitherNegative","currentYear","resolvedStart","resolvedStop","replaceStringParameters","inputString","params","partIndex","englishStringTranslator","stringToTranslate","enumOptionsValueForIndex","valueIndex","allEnumOptions","emptyValue","enumOptionsDeselectValue","selected","enumOptionsIsSelected","sel","enumOptionsIndexForValue","multiple","selectedIndexes","enumOptionSelectedValue","enumOptions","format","indexes","enumOptionsSelectValue","all","decodeSingle","match","enumOptionValueDecoder","enumOptionValueEncoder","ErrorSchemaBuilder","initialSchema","pathOfError","errorBlock","errorOrList","errorsList","listToAdd","getChangedDescendants","getChangedFields","descendants","deep","aKeySet","unequalFields","diffFields","getDateElementProps","date","time","yearRange","day","month","year","hour","minute","second","dayObj","monthObj","yearObj","dateElementProp","rangeSpec","spec","getInputProps","defaultType","autoDefaultStepAny","inputProps","getOptionValueFormat","DEFAULT_OPTIONS","getSubmitButtonOptions","getTemplate","registry","templates","testIdCounter","getTestIds","ids","c","f","g","h","n","q","u","reactIs_production_min","reactIsModule","widgetMap","mergeWidgetOptions","AWidget","MergedWidget","defaultOptions","props","_jsx","getWidget","widget","registeredWidgets","ReactIs","createElement","registeredWidget","hashString","string","hash","chr","sortedJSONStringify","shouldIncludeValue","record","hashObject","hashForSchema","hasWidget","idGenerator","id","suffix","descriptionId","errorId","examplesId","helpId","titleId","ariaDescribedByIds","includeExamples","examples","optionId","optionIndex","buttonId","btn","optionalControlsId","isFormDataAvailable","isRootSchema","schemaToCompare","schemaUtils","labelValue","hideLabel","fallback","localToUTC","dateString","logUnsupportedDefaultForEnum","lookupFromFormContext","regOrFc","toLookup","lookupPath","noop","orderProperties","arrayToHash","curr","errorPropList","propertyHash","orderFiltered","orderHash","restIndex","complete","parseDateString","includeTime","resolveDefaultWidget","defaultWidget","resolveUiSchema","localUiSchema","definitionUiSchema","keyword","schemaOptions","currentUiSchemaArray","uiSchemaArray","hasExpanded","optionRef","optionUiSchema","schemaHasNestedConditional","atRoot","seenRefs","refs","_ref","dependentSchemas","nested","schemaRequiresTrueValue","schemaSome","SelectedOptionDescription","enumValue","description","DescriptionFieldTemplate","shallowEquals","keysA","keysB","shouldRender","nextProps","nextState","updateStrategy","getSchemaTypesForXxxOf","allTypes","shouldRenderOptionalField","enableOptionalDataFieldForType","toDateString","dateObject","utcTime","datetime","toErrorList","errorSchema","fieldPath","errorsFrom","errors","errorList","currentList","toErrorSchema","builder","toFieldPathId","globalFormOptions","parentPath","isMultiValue","basePath","childPath","unwrapErrorHandler","errorHandler","unwrapErrors","readyForChange","DateElement","className","range","select","rootId","disabled","readonly","autofocus","onBlur","onFocus","SelectWidget","onChange","useAltDateWidgetProps","setState","handleChange","handleClear","handleSetNow","useMemo","useDeepCompareMemo","valueRef","useRef","addNameToDataURL","dataURL","processFile","file","reader","processFiles","files","extractFileInfo","dataURLs","blob","useFileWidgetProps","filesInfo","fileInfo","handleRemove","_","utcToLocal","jsonDate","yyyy","MM","dd","hh","mm","ss","SSS","validationDataMerge","validationData","additionalErrorSchema","preventDuplicates","oldErrors","oldErrorSchema","withIdRefPrefixObject","node","realObj","withIdRefPrefix","withIdRefPrefixArray","schemaNode","TranslatableString","rowIdCounter","generateRowId","generateKeyedFormData","keyedToPlainFormData","keyedFormData","keyedItem","isItemRequired","canAddItem","formItems","addable","computeItemUiSchema","formContext","getNewFormDataRow","ArrayAsMultiSelect","fieldPathId","placeholder","rawErrors","onSelectChange","widgets","globalUiOptions","itemsUiSchema","uiTitle","Widget","multiValueFieldPathId","ArrayAsCustomWidget","hideError","ArrayAsFiles","ArrayFieldItemInner","itemKey","parentUiSchema","canAdd","canRemove","canMoveUp","canMoveDown","rawItemSchema","itemUiSchema","parentFieldPathId","itemErrorSchema","totalItems","handleAddItem","handleCopyItem","handleRemoveItem","handleReorderItems","ArraySchemaField","SchemaField","ItemSchemaField","ArrayFieldItemTemplate","hasDescription","orderable","removable","copyable","has","onAddItem","onCopyItem","onRemoveItem","onMoveUpItem","onMoveDownItem","templateProps","ArrayFieldItem","memo","NormalArray","formDataFromProps","fieldTitle","OptionalDataControlsField","renderOptionalField","hasFormData","actualFormData","extraClass","childFieldPathId","optionalDataControl","arrayProps","itemCast","itemProps","Template","FixedArray","hasAdditionalItems","useKeyedFormData","newHash","formDataHash","nextFormData","previousKeyedFormData","previousKeyedFormDatum","updateKeyedFormData","newData","plainFormData","updatedHash","ArrayField","translateString","keyedFormDataRef","errorSchemaRef","newErrorSchema","newKeyedFormDataRow","newKeyedFormData","newIndex","reOrderArray","lastPathIsItemIndex","arrayAsMultiProps","UnsupportedFieldTemplate","fallbackSchema","BooleanField","schemaTitle","yes","no","o","enums","onWidgetChange","CyclicSchemaField","setExpanded","CyclicSchemaExpandTemplate","getFallbackTypeSelectionSchema","getTypeOfFormData","dataType","castToNewType","newType","castedNumber","FallbackField","setType","typeSelectorInnerFieldPathId","typesOptionSchema","onTypeChange","FallbackFieldTemplate","GridType","Operators","LOOKUP_REGEX","LAYOUT_GRID_UI_OPTION","getNonNullishValue","isNumericIndex","LAYOUT_GRID_FIELD_TEST_IDS","computeFieldUiSchema","uiProps","schemaReadonly","forceReadonly","localUiOptions","fieldUiSchema","uiReadonly","fieldUiOptions","conditionMatches","operator","datum","findChildrenAndProps","layoutGridSchema","schemaKey","gridProps","elements","toMapClassNames","otherProps","ele","computeArraySchemasIfPresent","potentialIndex","resultPathId","getSchemaDetailsForField","dottedPath","initialFieldIdPath","leafPath","innerData","isReadonly","schemaProperties","selectedSchema","optionsInfo","getCustomRenderComponent","render","customRenderer","computeUIComponentPropsFromGridSchema","gridSchema","UIComponent","rendered","innerName","innerProps","lookupName","LayoutGridFieldChildren","childrenLayoutGridSchemaId","layoutGridFieldProps","_createElement","LayoutGridField","LayoutGridCondition","fieldData","LayoutGridCol","GridTemplate","LayoutGridColumns","child","LayoutGridRow","LayoutGridFieldComponent","LayoutMultiSchemaField","uiComponentProps","fieldIdSchema","memoFieldPathId","Field","namePath","LayoutHeaderField","TitleFieldTemplate","getSelectedOption","selector","computeEnumOptions","realOptions","tempSchema","baseType","setEnumOptions","FieldErrorTemplate","FieldTemplate","schemaHash","optionsHash","uiSchemaHash","uiSchemaHideError","optionSchema","hideFieldError","fieldErrorSchema","onOptionChange","newOption","oldOption","widgetOptions","AnyOfField","retrievedOptions","setSelectedOption","skipNextOptionRecalculation","prevFormDataRef","prevFieldIdRef","prevFormData","prevFieldId","matchingOption","fieldId","intOption","SchemaFieldComponent","MultiSchemaFieldTemplate","isOptionalRender","autocomplete","schemaRequired","parentProps","optionsUiSchema","translateEnum","translateParams","optionsSchemaField","NullField","trailingCharMatcherWithPrefix","trailingCharMatcher","NumberField","initialValue","lastValue","setLastValue","StringField","normalizedValue","processed","canonicalLastValue","escapedValue","displayValue","inputType","N","Sr","M","Oe","_e","cr","U","lr","Ht","F","Cr","me","ke","he","ae","yt","je","Ke","ht","Ge","st","pr","$t","Pr","qr","xt","on","Wn","zn","Zn","gt","jr","ar","ge","Dr","Ir","Or","ye","Lr","Mt","ir","fr","Qn","Vn","Yn","qn","An","ln","Bt","W","z","J","G","ie","ce","Ct","_r","ki","oa","ea","Oi","mi","bi","pi","Aa","Er","wi","jn","Rr","Ve","er","xe","Nr","ra","nt","Xr","rt","na","Ii","ur","yr","la","Ca","fa","et","da","Dt","ca","Li","Ra","tt","_n","A","ua","C","yi","aa","dn","R","Ha","Jr","ha","xi","sa","ia","Xt","$a","Mi","Pt","cn","ga","Rn","Et","Ka","Ga","$n","Nt","Bi","Ta","un","Sa","Fa","Ea","Ua","Wa","za","Pi","Di","Xi","Ji","Ki","gn","Na","wr","T","I","O","S","H","w","E","B","dr","Gi","Za","Gt","D","_t","or","vt","ka","bn","vn","Tn","Ft","Ae","St","wa","rr","Wr","oe","te","Le","Fi","Ui","dt","Wi","Fr","ma","ba","pa","zi","Ia","Zi","Qi","L","Z","ne","ve","Ur","Qa","Kr","ft","Oa","La","P","Q","Pe","Ee","Re","He","Fe","X","be","se","le","Ue","K","we","$e","Ce","ue","We","Te","Me","Be","ze","V","Ne","Y","pe","Ze","fe","tr","ee","sr","de","Se","qe","De","Xe","Je","zr","xr","Ie","Zr","wt","br","Qr","Mr","gr","nr","vr","ot","Vr","$r","Wt","kr","Gr","Vi","zt","Sn","Va","Yi","ei","ri","At","Ar","lt","ti","ni","ai","ii","yn","xn","Vt","oi","Ai","Mn","li","Ci","fi","ct","Tr","Bn","Pn","mt","Yt","Dn","qt","Xn","Jn","bt","_i","jt","en","Kn","Gn","pt","rn","Qe","Br","tn","Fn","It","Yr","Rt","di","Ot","Lt","ci","Ri","ui","Hi","hi","si","$i","gi","nn","Un","ut","vi","an","Ti","Si","Ei","Ni","ya","xa","qi","ji","eo","mr","ro","pn","ao","io","Ma","Ba","oo","Ao","Jt","Pa","En","Da","Nn","Xa","kn","Hn","Hr","lo","Ut","hn","Kt","sn","Ja","Ya","Zt","wn","Co","fo","_o","mn","at","co","Ro","uo","Tt","Ho","qa","kt","In","it","Ye.createElement","On","hr","Qt","Ye.createContext","ja","Ye.Fragment","$o","go","vo","Ln","To","Ye.useRef","So","Ye.useContext","Ye.useMemo","ADDITIONAL_PROPERTY_KEY_REMOVE","IS_RESET","getDefaultValue","isAdditionalPropertySchema","getAdditionalPropertyOrder","ObjectFieldPropertyFn","propertyName","handleKeyRename","handleRemoveProperty","addedByAdditionalProperties","wasPropertyKeyModified","setWasPropertyKeyModified","innerFieldIdPathId","onPropertyChange","onKeyRename","onKeyRenameBlur","onRemoveProperty","ObjectFieldProperty","ObjectField","formDataRef","lastRenamedProperty","additionalPropertyOrder","setAdditionalPropertyOrder","definedPropertyOrder","additionalPropertySet","templateTitle","orderedProperties","getAvailableKey","preferredKey","existingFormData","duplicateKeySuffixSeparator","newKey","onAddProperty","constValue","apSchema","oldKey","currentFormData","actualNewKey","newKeys","keyValues","renamedObj","getStableKey","definedPropertySet","currentAdditionalProperties","_jsxs","Markdown","hidden","OptionalDataControlsTemplate","onAddClick","onRemoveClick","labelEnum","COMPONENT_TYPES","getFieldComponent","schemaId","componentName","SchemaFieldRender","_schema","_uiSchema","_AnyOfField","_OneOfField","handleFieldComponentChange","FieldHelpTemplate","FieldComponent","deprecatedHandling","isReplacingAnyOrOneOf","XxxOfField","XxxOfOptions","fieldPathIdProps","xxxOfSchema","__errors","consumedUiClassNames","consumedClassNames","consumedUiStyle","consumedOptionClassNames","consumedOptionStyle","help","classNames","helpComponent","errorsComponent","fieldProps","_Fragment","prevProps","experimental_componentUpdateStrategy","MultiSchemaField","ArrayFieldDescriptionTemplate","ArrayFieldItemButtonsTemplate","hasCopy","hasMoveDown","hasMoveUp","hasRemove","CopyButton","MoveDownButton","MoveUpButton","RemoveButton","buttonsProps","hasToolbar","btnStyle","margin","containerStyle","toolbarStyle","ArrayFieldTemplate","ArrayFieldTitleTemplate","showOptionalDataControlInTitle","AddButton","SchemaExamples","example","BaseInputTemplate","htmlName","onChangeOverride","ClearButton","inputValue","handleBlur","handleFocus","IconButtonFn","iconType","icon","IconButton","CopyButtonFn","MoveDownButtonFn","MoveUpButtonFn","RemoveButtonFn","ClearButtonFn","onClick","SubmitButton","submitText","norender","submitButtonProps","buttonTemplates","onExpand","TEST_IDS","RichDescription","DescriptionField","ErrorList","typeSelector","schemaField","elem","RichHelp","REQUIRED_FIELD_SYMBOL","Label","WrapIfAdditionalTemplate","isCheckbox","column","optionSchemaField","ObjectFieldTemplate","TitleField","UnsupportedField","style","rawDescription","keyLabel","classNamesList","uiClassNames","ButtonTemplates","AltDateTimeWidget","AltDateWidget","elemProps","CheckboxesWidget","inline","enumDisabled","optionValueFormat","checkboxesValues","checked","itemDisabled","disabledCls","checkbox","CheckboxWidget","trueValueRequired","ColorWidget","DateTimeWidget","DateWidget","EmailWidget","FileInfoPreview","previewLabel","FilesInfo","preview","FileWidget","handleOnChangeEvent","HiddenWidget","PasswordWidget","RadioWidget","radio","RangeWidget","RatingWidget","stars","shape","numStars","min","handleStarClick","starValue","getSymbol","isFilled","getValue","optEmptyVal","selectValue","showPlaceholderOption","enumLabel","isDisabled","TextareaWidget","TextWidget","TimeWidget","hasSecondPrecision","UpDownWidget","URLWidget","getDefaultRegistry","toIChangeEvent","status","edit","Form","Component","baseErrors","propsFormData","initialFormData","createRef","prevState","formDataChangedFields","stateDataChangedFields","isSchemaChanged","isFormDataChanged","isStateDataChanged","shouldUpdate","nextStateDiffersFromProps","wasProcessingUserChange","inputFormData","getFormDataChangedFields","skipLiveValidate","shouldSanitize","isUncontrolled","liveValidate","mustValidate","hasNestedConditionalSchema","defaultsFormData","computedRetrievedSchema","wasSanitized","preventInfiniteSanitize","formHash","sanitizedFormData","sanitizedFormHash","getCurrentErrors","schemaValidationErrors","schemaValidationErrorSchema","liveValidation","currentErrors","pathOfField","mergedErrors","newRegistry","altSchemaUtils","customValidate","transformErrors","validationSchema","validationFormData","ErrorListTemplate","schemaValidation","extraErrors","customErrors","merged","originalErrorSchema","mergeIntoOriginalErrorSchema","liveOmit","noValidate","oldFormData","mergeBaseErrorSchema","rootPathId","isRootPath","hasOnlyUndefinedValues","wasPreviouslyNull","inputForDefaults","plainLeafWasCleared","valueForPath","leaf","newState","oldValidationError","pathErrors","hasChanges","oldData","onSubmit","idSeparator","idPrefix","nameGenerator","useFallbackUiForUnsupportedType","customTranslateString","submitCustomEvent","elementId","extraErrorsBlockSubmit","focusOnFirstError","onError","prevErrors","hasError","tagName","method","autoComplete","enctype","acceptCharset","noHtml5Validate","showErrorList","_internalFormWrapper","as","FormTag","submitOptions","submitUiSchema","filterDuplicateErrors","suppressDuplicateFiltering","schemaPath","anyOfIndex","oneOfIndex","schemaPrefix","transformRJSFValidationErrors","instancePath","parentSchema","rawPropertyNames","currentProperty","uiSchemaTitle","uiSchemaPath","propParts","parentSchemaTitle","aSchemaPath","rootSchemaTitle","processRawValidationErrors","invalidSchemaError","userErrorSchema","exports","_CodeOrName","Name","_Code","names","strs","args","addCodeArg","plus","expr","safeStringify","optimize","interpolate","res","mergeExprItems","strConcat","c1","c2","stringify","getProperty","getEsmExportName","regexpCode","rx","code_1","ValueError","UsedValueState","Scope","prefixes","nameOrPrefix","prefix","ng","_b","ValueScopeName","nameStr","itemIndex","line","ValueScope","valueKey","vs","_name","keyOrRef","scopeName","usedValues","getCode","valueCode","nameSet","scope_1","code_2","scope_2","Node","_names","_constants","Def","varKind","rhs","es5","constants","optimizeExpr","Assign","lhs","sideEffects","addExprNames","AssignOp","op","Break","Throw","AnyCode","ParentNode","nodes","subtractNames","addNames","BlockNode","Root","Else","If","not","For","ForLoop","iteration","ForRange","from","ForIter","loop","iterable","Func","async","Return","Try","Catch","Finally","CodeGen","extScope","prefixOrName","constant","_constant","thenBody","elseBody","forBody","tryBody","catchCode","finallyCode","body","nodeCount","toClose","funcBody","N1","N2","replaceName","canOptimize","par","andCode","mappend","and","orCode","util","codegen_1","toHash","alwaysValidSchema","checkUnknownRules","schemaHasRules","self","rules","checkStrictMode","schemaHasRulesButRef","RULES","schemaRefOrVal","topSchemaRef","$data","unescapeFragment","unescapeJsonPointer","escapeFragment","escapeJsonPointer","eachItem","xs","makeMergeEvaluated","mergeNames","mergeToName","mergeValues","resultToName","gen","toName","setEvaluated","evaluatedPropsToName","ps","snippets","useFunc","Type","getErrorPath","dataProp","dataPropType","jsPropertySyntax","isNumber","msg","mode","names_1","util_1","require$$2","reportError","cxt","errorPaths","overrideAllErrors","compositeRule","allErrors","errObj","errorObjectCode","addError","returnErrors","reportExtraError","resetErrorsCount","errsCount","extendErrors","schemaValue","errs","validateName","schemaEnv","createErrors","errorObject","errorInstancePath","errorSchemaPath","extraErrorProps","errorPath","instPath","errSchemaPath","schPath","boolSchema","errors_1","boolError","topBoolOrEmptySchema","falseSchemaError","boolOrEmptySchema","valid","_jsonTypes","jsonTypes","isJSONType","getRules","groups","applicability","schemaHasRulesForType","group","shouldUseGroup","rule","shouldUseRule","kwd","rules_1","applicability_1","require$$3","require$$4","DataType","getSchemaTypes","types","getJSONTypes","coerceAndCheckDataType","coerceTo","coerceToTypes","checkTypes","wrongType","checkDataTypes","coerceData","reportTypeError","COERCIBLE","coerceTypes","coerced","coerceSpecificType","assignParentData","parentData","parentDataProperty","checkDataType","strictNums","correct","EQ","numCond","_cond","dataTypes","notObj","typeError","getTypeErrorContext","schemaCode","assignDefaults","ty","assignDefault","sch","childData","util_2","checkReportMissingProp","noPropertyInData","checkMissingProp","missing","reportMissingProp","hasPropFunc","isOwnProperty","propertyInData","ownProperties","allSchemaProperties","schemaMap","callValidateCode","context","passSchema","dataAndSchema","valCxt","newRegExp","usePattern","regExp","validateArray","validArr","validateItems","notValid","validateUnion","schValid","_sch","schCxt","macroKeywordCode","macroSchema","schemaRef","useKeyword","funcKeywordCode","checkAsyncKeyword","validate","validateRef","validateKeyword","assignValid","modifyData","reportErrs","ruleErrs","validateAsync","validateSync","addErrs","validateErrs","_await","passCxt","validSchemaType","allowUndefined","validateKeywordUsage","getSubschema","schemaProp","extendSubschemaData","dpType","dataPathArr","nextData","dataContextProps","_nextData","extendSubschemaMode","jtdDiscriminator","jtdMetadata","fastDeepEqual","length","traverse","jsonSchemaTraverseModule","cb","pre","post","_traverse","jsonPtr","parentJsonPtr","parentKeyword","keyIndex","escapeJsonPtr","SIMPLE_INLINED","inlineRef","limit","hasRef","countKeys","REF_KEYWORDS","getFullPath","resolver","normalizeId","_getFullPath","TRAILING_SLASH_HASH","resolveUrl","baseId","ANCHOR","getSchemaRefs","uriResolver","schId","baseIds","pathPrefix","localRefs","schemaRefs","fullPath","innerBaseId","addRef","addAnchor","_resolve","ambiguos","schOrRef","checkAmbiguosRef","anchor","sch1","sch2","boolSchema_1","dataType_1","dataType_2","defaults_1","keyword_1","subschema_1","require$$5","require$$6","require$$7","resolve_1","require$$8","require$$9","require$$10","validateFunctionCode","checkKeywords","schemaCxtHasRules","topSchemaObjCode","validateFunction","funcSourceUrl","destructureValCxtES5","destructureValCxt","commentKeyword","checkNoDefault","resetEvaluated","typeAndKeywords","returnResults","subschemaCode","subSchemaObjCode","updateContext","checkAsyncSchema","checkRefsAndKeywords","schemaKeywords","checkedTypes","rootName","ValidationError","assignEvaluated","evaluated","typeErrors","keywordCode","checkStrictTypes","groupKeywords","iterateKeywords","useDefaults","checkContextTypes","checkMultipleTypes","checkKeywordTypes","includesType","strictTypesError","narrowSchemaTypes","hasApplicableType","schTs","kwdT","withTypes","KeywordCxt","getData","successAction","failAction","append","errorParams","codeBlock","$dataValid","wrong$DataType","invalid$DataSchema","validateSchemaRef","appl","nextContext","schemaCxt","ruleType","JSON_POINTER","RELATIVE_JSON_POINTER","dataLevel","dataNames","jsonPointer","up","errorMsg","pointerType","validation_error","ref_error","MissingRefError","validation_error_1","validate_1","SchemaEnv","env","compileSchema","getCompilingSchema","lines","_ValidationError","sourceCode","validateCode","resolveRef","root","schOrFunc","inlineOrCompile","schEnv","sameSchemaEnv","s1","s2","refPath","getJsonPointer","PREVENT_SCOPE_CHANGE","parsedRef","partSchema","uri_1","ref_error_1","compile_1","codegen_2","$dataRefSchema","defaultRegExp","flags","META_IGNORE_OPTIONS","EXT_SCOPE_NAMES","removedOptions","deprecatedOptions","MAX_EXPRESSION","requiredOptions","_c","_d","_f","_g","_h","_j","_k","_l","_m","_p","_q","_s","_u","_v","_w","_x","_y","_z","_0","_optz","Ajv","getLogger","formatOpt","checkOptions","getMetaSchemaOptions","addInitialFormats","addInitialKeywords","addInitialSchemas","_dataRefSchema","schemaKeyRef","_meta","loadSchema","runCompileAsync","loadMetaSchema","_compileAsync","checkLoaded","loadMissingSchema","missingRef","_loadSchema","_validateSchema","throwOrLogError","$schema","keyRef","getSchEnv","cacheKey","kwdOrDef","checkKeyword","addRule","keywordMetaschema","definition","dataVar","metaSchema","keywordsJsonPointers","keywords","seg","schemaOrData","regex","validateSchema","addSchema","currentOpts","checkOpts","log","optsSchemas","defs","metaOpts","noLogs","logger","KEYWORD_NAME","ruleGroup","addBeforeRule","before","_rule","$dataRef","callRootRef","schOrEnv","callValidate","inlineRefSchema","callRef","getValidate","schName","$async","callAsyncRef","callSyncRef","addEvaluatedFrom","addErrorsFrom","schEvaluated","core_1","id_1","ref_1","core","limitNumber","ops","KWDs","multipleOf","prec","invalid","ucs2length_1","ucs2length","pos","limitLength","comp","regExpCode","limitProperties","missingProperty","useLoop","allErrorsMode","exitOnErrorMode","requiredKey","loopAllRequired","loopUntilMissing","limitItems","equal_1","uniqueItems","itemTypes","validateUniqueItems","loopN","loopN2","indices","eql","_const","_enum","getEql","loopEnum","vSchema","equalCode","validation_1","limitNumber_1","multipleOf_1","limitLength_1","pattern_1","limitProperties_1","required_1","limitItems_1","uniqueItems_1","const_1","enum_1","validation","validateAdditionalItems","validateTuple","extraItems","schArr","checkStrictTuple","fullTuple","prefixItems","items_1","items2020","additionalItems_1","contains","max","minContains","maxContains","validateItemsWithCount","checkLimits","_valid","block","depsCount","property_ies","propDeps","schDeps","splitDependencies","validatePropertyDeps","validateSchemaDeps","propertyDeps","schemaDeps","hasProperty","depProp","propertyNames","patProps","checkAdditionalProperties","additionalPropertyCode","isAdditional","definedProp","propsSchema","deleteAdditional","applyAdditionalSchema","additionalProperties_1","allProps","hasDefault","applyPropertySchema","alwaysValidPatterns","checkProperties","validatePatternProperties","pat","checkMatchingProperties","validateProperties","alwaysValid","passing","validateOneOf","_if","hasThen","hasSchema","hasElse","validateIf","ifClause","validateClause","thenElse","applicator","prefixItems_1","items2020_1","contains_1","dependencies_1","propertyNames_1","properties_1","patternProperties_1","not_1","anyOf_1","require$$11","oneOf_1","require$$12","allOf_1","require$$13","if_1","require$$14","thenElse_1","require$$15","getApplicator","draft2020","validate$DataFormat","validateFormat","fmts","fDef","fType","unknownFmt","invalidFmt","callFormat","validData","formatDef","unknownFormat","fmtType","fmtRef","getFormat","validCondition","unknownMsg","fmtDef","fmt","format_2","metadata","draft7","applicator_1","format_1","metadata_1","draft7Vocabularies","DiscrError","types_1","discrError","validateMapping","mapping","getMapping","tagValue","applyTagSchema","oneOfMapping","topRequired","hasRequired","tagRequired","propSch","addMappings","addMapping","draft7_1","discriminator_1","draft7MetaSchema","META_SUPPORT_DATA","META_SCHEMA_ID","module","compareDate","compareTime","date_time","compareDateTime","byte","validateInt32","validateInt64","validateNumber","isLeapYear","DATE","DAYS","d1","d2","TIME","withTimeZone","timeZone","t1","t2","a1","a2","DATE_TIME_SEPARATOR","dateTime","dt1","dt2","NOT_URI_FRAGMENT","URI","BYTE","MIN_INT32","MAX_INT32","Z_ANCHOR","ajv_1","fCxt","compareCode","formatLimitPlugin","ajv","formats_1","limit_1","fullName","fastName","formatsPlugin","addFormats","formats","exportName","fs","AJV_CONFIG","COLOR_FORMAT_REGEX","DATA_URL_FORMAT_REGEX","createAjvInstance","additionalMetaSchemas","customFormats","ajvOptionsOverrides","ajvFormatOptions","AjvClass","extenderFn","formatName","AJV8Validator","localizer","compilationError","compiledValidator","rootSchemaId","schemaWithIdRefPrefix","customizeValidator","CONFIGURATION_LAYER_COLORS","ConfigurationLayerDepthContext","createContext","useConfigurationLayer","depth","useContext","buildUiSchema","firstExample","SecretWidget","secretPath","configured","replacing","clearing","unavailable","setOperation","nextOperation","ConfigurationFieldTemplate","ConfigurationObjectTemplate","propertyLines","topLevel","layer","ConfigurationArrayItemTemplate","ConfigurationArrayTemplate","SchemaConfigurationForm","configuredSecrets","secretOperations","setSecretOperation","clone","ConfigurationEditor","onReload","serverValue","setSecretOperations","saving","setSaving","importing","setImporting","configurationFile","setConfigurationFile","notice","setNotice","validationErrors","setValidationErrors","editorRef","toolbarRef","editor","toolbar","updateStickyOffset","observer","dirty","updateConfiguration","saveError","importSelectedConfiguration","yamlText","importAdminConfigurationFile","importError","service","validationError","PasswordConfirmationDialog","open","onCancel","onConfirm","password","setPassword","cancel","TOP_LEVEL_SECTIONS","AdminApp","useUserIdentitySync","role","useSessionSelector","connected","searchParams","setSearchParams","useSearchParams","setSnapshot","loadingError","setLoadingError","pendingSensitiveAction","confirmationOpen","setConfirmationOpen","confirmationBusy","setConfirmationBusy","confirmationError","setConfirmationError","pageSettings","useSettingsNamespace","DEFAULT_PAGE_THEME_KEY","pageBackgroundClass","usePageThemeClass","isAdmin","isLockdown","loadSnapshot","getAdminSnapshot","submitPasswordConfirmation","confirmAdminPassword","pending","cancelPasswordConfirmation","selectSection","navigationOptions","activeSection","content","AdminPanelContent","AuthPanel","SocketConnectionPill"],"mappings":"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","x_google_ignoreList":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264]} \ No newline at end of file diff --git a/server/public/assets/AdminApp-DlZ4aJzc.css b/server/public/assets/AdminApp-DlZ4aJzc.css deleted file mode 100644 index f6f44b71..00000000 --- a/server/public/assets/AdminApp-DlZ4aJzc.css +++ /dev/null @@ -1 +0,0 @@ -.configuration-tree{margin-top:.25rem}.configuration-tree>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.configuration-card{min-width:0px}.configuration-card-header{top:var(--configuration-sticky-top, 0px)}.configuration-card .configuration-card{margin-left:1rem;width:calc(100% - 1rem)}.configuration-card-body>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.configuration-card-body{padding:.125rem}.configuration-children>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.configuration-line{display:grid;min-width:0px;grid-template-columns:repeat(1,minmax(0,1fr));align-items:flex-start;gap:.125rem;border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity, 1));padding:.125rem}@media(min-width:640px){.configuration-line{grid-template-columns:minmax(9rem,16rem) minmax(12rem,40rem)}}.configuration-line{justify-content:start}.configuration-key,.configuration-value{min-width:0px}.configuration-key-label{font-size:1rem;line-height:1.5rem;font-weight:600;line-height:1.375;--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.configuration-root-description,.configuration-branch-description,.configuration-item-description,.configuration-value-description{display:block;font-size:.875rem;line-height:1.25rem;line-height:1.375;--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1));margin-top:.125rem}.configuration-root-description{margin-bottom:.25rem}.configuration-branch-description,.configuration-item-description{max-width:56rem}.configuration-value-description{margin-bottom:.125rem;max-width:40rem}.configuration-value input:not([type=checkbox]),.configuration-value select,.configuration-value textarea{width:100%;border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(82 82 82 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity, 1));padding:.125rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.configuration-value input:not([type=checkbox])::-moz-placeholder,.configuration-value select::-moz-placeholder,.configuration-value textarea::-moz-placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.configuration-value input:not([type=checkbox])::placeholder,.configuration-value select::placeholder,.configuration-value textarea::placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.configuration-value input:not([type=checkbox]):focus,.configuration-value select:focus,.configuration-value textarea:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity, 1))}.configuration-value input[type=checkbox]{height:1rem;width:1rem;vertical-align:middle;accent-color:#0ea5e9}.configuration-value .checkbox label{display:flex;min-height:1.75rem;align-items:center;--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.configuration-value .error-detail{margin-top:.125rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.configuration-value .help-block{margin-top:.125rem;display:block;font-size:.7rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.configuration-secret{min-width:0px}.configuration-item-actions,.configuration-array-actions{display:flex;flex-wrap:wrap;gap:.125rem} diff --git a/server/public/assets/FleetReportsApp-DH08rpDz.js b/server/public/assets/FleetReportsApp-DH08rpDz.js new file mode 100644 index 00000000..810b91cd --- /dev/null +++ b/server/public/assets/FleetReportsApp-DH08rpDz.js @@ -0,0 +1,11 @@ +import{g as Me,u as Ae,a as Ne,i as De,b as Ie,D as Le,c as Te,j as e,S as Fe,t as Pe,C as de,L as Oe,r as he,d as We,e as Ue}from"./index-DCtVfg7-.js";var be={exports:{}};var He=be.exports,Ce;function $e(){return Ce||(Ce=1,(function(S,M){(($,b)=>{S.exports=b()})(He,function $(){var b=typeof self<"u"?self:typeof window<"u"?window:b!==void 0?b:{},B,z=!b.document&&!!b.postMessage,f=b.IS_PAPA_WORKER||!1,ie={},w=0,o={};function j(t){return t.charCodeAt(0)===65279?t.slice(1):t}function C(t){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(r){var s=je(r);s.chunkSize=parseInt(s.chunkSize),r.step||r.chunk||(s.chunkSize=null),this._handle=new pe(s),(this._handle.streamer=this)._config=s}).call(this,t),this.parseChunk=function(r,s){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview),f)b.postMessage({results:n,workerId:o.WORKER_ID,finished:i});else if(E(this._config.chunk)&&!s){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=n=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!i||!E(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(r){E(this._config.error)?this._config.error(r):f&&this._config.error&&b.postMessage({workerId:o.WORKER_ID,error:r,finished:!1})}}function re(t){var r;(t=t||{}).chunkSize||(t.chunkSize=o.RemoteChunkSize),C.call(this,t),this._nextChunk=z?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(s){this._input=s,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),z||(r.onload=ae(this._chunkLoaded,this),r.onerror=ae(this._chunkError,this)),r.open(this._config.downloadRequestBody?"POST":"GET",this._input,!z),this._config.downloadRequestHeaders){var s,i=this._config.downloadRequestHeaders;for(s in i)r.setRequestHeader(s,i[s])}var n;this._config.chunkSize&&(n=this._start+this._config.chunkSize-1,r.setRequestHeader("Range","bytes="+this._start+"-"+n));try{r.send(this._config.downloadRequestBody)}catch(p){this._chunkError(p.message)}z&&r.status===0&&this._chunkError()}},this._chunkLoaded=function(){r.readyState===4&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(s=>(s=s.getResponseHeader("Content-Range"))!==null?parseInt(s.substring(s.lastIndexOf("/")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(s){s=r.statusText||s,this._sendError(new Error(s))}}function O(t){(t=t||{}).chunkSize||(t.chunkSize=o.LocalChunkSize),C.call(this,t);var r,s,i=typeof FileReader<"u";this.stream=function(n){this._input=n,s=n.slice||n.webkitSlice||n.mozSlice,i?((r=new FileReader).onload=ae(this._chunkLoaded,this),r.onerror=ae(this._chunkError,this)):r=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(n.target.result)},this._chunkError=function(){this._sendError(r.error)}}function l(t){var r;C.call(this,t=t||{}),this.stream=function(s){return r=s,this._nextChunk()},this._nextChunk=function(){var s,i;if(!this._finished)return s=this._config.chunkSize,r=s?(i=r.substring(0,s),r.substring(s)):(i=r,""),this._finished=!r,this.parseChunk(i)}}function v(t){C.call(this,t=t||{});var r=[],s=!0,i=!1;this.pause=function(){C.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){C.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(n){this._input=n,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){i&&r.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),r.length?this.parseChunk(r.shift()):s=!0},this._streamData=ae(function(n){try{r.push(typeof n=="string"?n:n.toString(this._config.encoding)),s&&(s=!1,this._checkIsFinished(),this.parseChunk(r.shift()))}catch(p){this._streamError(p)}},this),this._streamError=ae(function(n){this._streamCleanUp(),this._sendError(n)},this),this._streamEnd=ae(function(){this._streamCleanUp(),i=!0,this._streamData("")},this),this._streamCleanUp=ae(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function pe(t){var r,s,i,n,p=Math.pow(2,53),L=-p,V=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,G=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,m=this,T=0,d=0,K=!1,c=!1,g=[],a={data:[],errors:[],meta:{}};function J(_){return t.skipEmptyLines==="greedy"?_.join("").trim()==="":_.length===1&&_[0].length===0}function A(){if(a&&i&&(Y("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+o.DefaultDelimiter+"'"),i=!1),t.skipEmptyLines&&(a.data=a.data.filter(function(h){return!J(h)})),P()){let h=function(D,U){D=j(D),E(t.transformHeader)&&(D=t.transformHeader(D,U)),g.push(D)};if(a)if(Array.isArray(a.data[0])){for(var _=0;P()&&_(I=>(t.dynamicTypingFunction&&t.dynamicTyping[I]===void 0&&(t.dynamicTyping[I]=t.dynamicTypingFunction(I)),(t.dynamicTyping[I]||t.dynamicTyping)===!0))(Z)?u==="true"||u==="TRUE"||u!=="false"&&u!=="FALSE"&&((I=>{if(V.test(I)&&(I=parseFloat(I),L=g.length?"__parsed_extra":g[R]:N,y=t.transform?t.transform(y,N):y);N==="__parsed_extra"?(U[N]=U[N]||[],U[N].push(y)):U[N]=y}return t.header&&(R>g.length?Y("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+R,d+D):Rt.preview?s.abort():(a.data=a.data[0],n(a,m))))}),this.parse=function(_,x,F){var h=t.quoteChar||'"',h=(t.newline||(t.newline=this.guessLineEndings(_,h)),i=!1,t.delimiter?E(t.delimiter)&&(t.delimiter=t.delimiter(_),a.meta.delimiter=t.delimiter):((h=((D,U,R,N,y)=>{var Z,u,I,le;y=y||[","," ","|",";",o.RECORD_SEP,o.UNIT_SEP];for(var ue=0;ue=F.length/2?`\r +`:"\r"}}function se(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ce(t){var r=(t=t||{}).delimiter,s=t.newline,i=t.comments,n=t.step,p=t.preview,L=t.fastMode,V=null,G=!1,m=t.quoteChar==null?'"':t.quoteChar,T=m;if(t.escapeChar!==void 0&&(T=t.escapeChar),(typeof r!="string"||-1=p)return q(!0);break}F.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:x.length,index:d}),u++}}else if(i&&h.length===0&&c.substring(d,d+Y)===i){if(y===-1)return q();d=y+P,y=c.indexOf(s,d),N=c.indexOf(r,d)}else if(N!==-1&&(N=p)return q(!0)}return X();function le(H){x.push(H),D=d}function ue(H){var Q=0;return Q=H!==-1&&(H=c.substring(u+1,H))&&H.trim()===""?H.length:Q}function X(H){return a||(H===void 0&&(H=c.substring(d)),h.push(H),d=J,le(h),_&&ee()),q()}function me(H){d=H,le(h),h=[],y=c.indexOf(s,d)}function q(H){if(t.header&&!g&&x.length&&!G){var Q=x[0],ne=Object.create(null),_e=new Set(Q);let we=!1;for(let fe=0;fe{var i;return!!o.WORKERS_SUPPORTED&&(i=(()=>{var n=b.URL||b.webkitURL||null,p=$.toString();return o.BLOB_URL||(o.BLOB_URL=n.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",p,")();"],{type:"text/javascript"})))})(),(i=new b.Worker(i)).onmessage=ye,i.id=w++,ie[i.id]=i)})()).userStep=r.step,s.userChunk=r.chunk,s.userComplete=r.complete,s.userError=r.error,r.step=E(r.step),r.chunk=E(r.chunk),r.complete=E(r.complete),r.error=E(r.error),delete r.worker,s.postMessage({input:t,config:r,workerId:s.id})},o.unparse=function(t,r){var s=!1,i=!0,n=",",p=`\r +`,L='"',V=L+L,G=!1,m=null,T=!1,d=((()=>{if(typeof r=="object"){if(typeof r.delimiter!="string"||o.BAD_DELIMITERS.filter(function(g){return r.delimiter.indexOf(g)!==-1}).length||(n=r.delimiter),typeof r.quotes!="boolean"&&typeof r.quotes!="function"&&!Array.isArray(r.quotes)||(s=r.quotes),typeof r.skipEmptyLines!="boolean"&&typeof r.skipEmptyLines!="string"||(G=r.skipEmptyLines),typeof r.newline=="string"&&(p=r.newline),typeof r.quoteChar=="string"&&(L=r.quoteChar,V=L+L),typeof r.header=="boolean"&&(i=r.header),Array.isArray(r.columns)){if(r.columns.length===0)throw new Error("Option columns is empty");m=r.columns}r.escapeChar!==void 0&&(V=r.escapeChar+L),r.escapeFormulae instanceof RegExp?T=r.escapeFormulae:typeof r.escapeFormulae=="boolean"&&r.escapeFormulae&&(T=/^[=+\-@\t\r].*$/)}})(),new RegExp(se(L),"g"));if(typeof t=="string"&&(t=JSON.parse(t)),Array.isArray(t)){if(!t.length||Array.isArray(t[0]))return K(null,t,G);if(typeof t[0]=="object")return K(m||Object.keys(t[0]),t,G)}else if(typeof t=="object")return typeof t.data=="string"&&(t.data=JSON.parse(t.data)),Array.isArray(t.data)&&(t.fields||(t.fields=t.meta&&t.meta.fields||m),t.fields||(t.fields=Array.isArray(t.data[0])?t.fields:typeof t.data[0]=="object"?Object.keys(t.data[0]):[]),Array.isArray(t.data[0])||typeof t.data[0]=="object"||(t.data=[t.data])),K(t.fields||[],t.data||[],G);throw new Error("Unable to serialize unrecognized input");function K(g,a,J){var A="",P=(typeof g=="string"&&(g=JSON.parse(g)),typeof a=="string"&&(a=JSON.parse(a)),Array.isArray(g)&&0{for(var x=0;x<_.length;x++)if(-1=1e6?`${k(M/1e6)} km`:`${k(M/1e3,1)} m`}function Be(S){const M=Ke.unparse(S.map(B=>({...B,batteryHealth:JSON.stringify(B.batteryHealth)}))),$=URL.createObjectURL(new Blob([M],{type:"text/csv;charset=utf-8"})),b=document.createElement("a");b.href=$,b.download="fleet-battery-efficiency.csv",b.click(),URL.revokeObjectURL($)}function oe({label:S,value:M,detail:$}){return e.jsxs("div",{className:"surface min-w-0 px-1 py-0.5",children:[e.jsx("div",{className:"text-[0.68rem] text-slate-400",children:S}),e.jsx("div",{className:"truncate text-sm font-semibold text-slate-100",children:M}),$?e.jsx("div",{className:"truncate text-[0.68rem] text-slate-500",children:$}):null]})}function W({field:S,sort:M,onSort:$,children:b}){return e.jsx("th",{children:e.jsxs("button",{type:"button",className:"whitespace-nowrap text-left",onClick:()=>$(S),children:[b,M.key===S?M.descending?" ↓":" ↑":""]})})}function Qe({report:S,refresh:M}){const $=Ue(),b=Ne(j=>j.session?.role||null),B=b==="admin"||b==="lockdown",[z,f]=he.useState({roverId:S.rovers[0]?.roverId||"",chemistry:"unknown",ratedCapacityMah:"",installedDate:new Date().toISOString().slice(0,10),notes:""}),[ie,w]=he.useState("");function o(j){j.preventDefault(),w("Saving…"),$.emit("fleetReports:replaceBattery",{...z,ratedCapacityMah:Number(z.ratedCapacityMah),installedAt:new Date(`${z.installedDate}T12:00:00`).getTime()},(C={})=>{w(C.error||`Registered ${C.battery?.batteryKey||"battery"}`),C.error||M()})}return e.jsxs(de,{title:"Battery identity and baselines",meta:`${S.batteryRegistry.length} records`,bodyClassName:"space-y-0.5 p-0.5",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[e.jsx("thead",{className:"text-slate-400",children:e.jsxs("tr",{children:[e.jsx("th",{children:"Rover"}),e.jsx("th",{children:"Battery"}),e.jsx("th",{children:"Chemistry"}),e.jsx("th",{children:"Rated mAh"}),e.jsx("th",{children:"Installed"}),e.jsx("th",{children:"Retired"}),e.jsx("th",{children:"Learned baseline mAh"}),e.jsx("th",{children:"Notes"})]})}),e.jsx("tbody",{children:S.batteryRegistry.map(j=>e.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[e.jsx("td",{children:j.roverId}),e.jsx("td",{children:j.batteryKey}),e.jsx("td",{children:j.chemistry||"--"}),e.jsx("td",{children:k(j.ratedCapacityMah,0)}),e.jsx("td",{children:xe(j.installedAt)}),e.jsx("td",{children:xe(j.retiredAt)}),e.jsx("td",{children:k(j.healthyBaselineMah,0)}),e.jsx("td",{children:j.notes||"--"})]},j.batteryKey))})]})}),B?e.jsxs("form",{className:"surface grid gap-0.5 p-1 text-xs md:grid-cols-2 xl:grid-cols-6",onSubmit:o,children:[e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Rover"}),e.jsx("select",{className:"w-full bg-neutral-800 p-0.5",value:z.roverId,onChange:j=>f(C=>({...C,roverId:j.target.value})),children:S.rovers.map(j=>e.jsx("option",{value:j.roverId,children:j.name},j.roverId))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Chemistry"}),e.jsxs("select",{className:"w-full bg-neutral-800 p-0.5",value:z.chemistry,onChange:j=>f(C=>({...C,chemistry:j.target.value})),children:[e.jsx("option",{value:"unknown",children:"Unknown"}),e.jsx("option",{value:"NiMH",children:"NiMH"}),e.jsx("option",{value:"Li-ion",children:"Li-ion"})]})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Rated capacity mAh"}),e.jsx("input",{required:!0,min:"1",max:"65535",type:"number",className:"w-full bg-neutral-800 p-0.5",value:z.ratedCapacityMah,onChange:j=>f(C=>({...C,ratedCapacityMah:j.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Installed"}),e.jsx("input",{required:!0,type:"date",className:"w-full bg-neutral-800 p-0.5",value:z.installedDate,onChange:j=>f(C=>({...C,installedDate:j.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Notes"}),e.jsx("input",{className:"w-full bg-neutral-800 p-0.5",value:z.notes,onChange:j=>f(C=>({...C,notes:j.target.value}))})]}),e.jsxs("div",{className:"flex items-end gap-0.5",children:[e.jsx("button",{type:"submit",className:"button-dark px-1 py-0.5",children:"Install or replace"}),e.jsx("span",{className:"text-slate-400",children:ie})]})]}):null]})}function Ve(){const[S,M]=he.useState(Ee[1].ms),[$,b]=he.useState(()=>Date.now()),[B,z]=he.useState(""),[f,ie]=he.useState({key:"name",descending:!1}),{report:w,loading:o,error:j,refresh:C}=We({since:$-S,until:$,includeEvents:!1}),re=he.useMemo(()=>[...(w?.rovers||[]).filter(v=>`${v.name} ${v.roverId}`.toLowerCase().includes(B.trim().toLowerCase()))].sort((v,pe)=>{const se=f.key.startsWith("batteryHealth.")?v.batteryHealth?.[f.key.slice(14)]:v[f.key],ce=f.key.startsWith("batteryHealth.")?pe.batteryHealth?.[f.key.slice(14)]:pe[f.key],ye=typeof se=="string"?se.localeCompare(String(ce??"")):(Number(se)||0)-(Number(ce)||0);return f.descending?-ye:ye}),[B,w,f]);function O(l){ie(v=>({key:l,descending:v.key===l?!v.descending:!1}))}return e.jsxs(e.Fragment,{children:[e.jsxs(de,{title:"Fleet battery health and efficiency",meta:w?xe(w.generatedAt):"Loading",bodyClassName:"space-y-0.5 p-0.5",children:[e.jsxs("div",{className:"surface flex flex-wrap items-end gap-0.5 p-0.5 text-xs",children:[e.jsxs("label",{children:[e.jsx("span",{className:"mr-0.5 text-slate-400",children:"Range"}),e.jsx("select",{className:"bg-neutral-800 p-0.5",value:S,onChange:l=>M(Number(l.target.value)),children:Ee.map(l=>e.jsx("option",{value:l.ms,children:l.label},l.ms))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"mr-0.5 text-slate-400",children:"Find rover"}),e.jsx("input",{className:"bg-neutral-800 p-0.5",value:B,onChange:l=>z(l.target.value)})]}),e.jsx("button",{type:"button",className:"button-dark px-1 py-0.5",onClick:()=>{b(Date.now()),C()},children:"Refresh"}),e.jsx(Oe,{className:"button-dark px-1 py-0.5",to:"/",children:"Back"})]}),o&&!w?e.jsx("p",{className:"text-slate-400",children:"Loading fleet metrics…"}):null,j?e.jsx("p",{className:"text-red-300",children:j}):null,w?e.jsxs("div",{className:"grid grid-cols-2 gap-0.5 md:grid-cols-4 xl:grid-cols-8",children:[e.jsx(oe,{label:"Rovers online",value:`${w.totals.onlineRoverCount}/${w.totals.roverCount}`}),e.jsx(oe,{label:"Distance",value:ve(w.totals.distanceMm)}),e.jsx(oe,{label:"Energy used",value:`${k(w.totals.dischargedWh)} Wh`}),e.jsx(oe,{label:"Fleet Wh/km",value:w.totals.overallWhPerKm==null?"--":k(w.totals.overallWhPerKm)}),e.jsx(oe,{label:"Moving Wh/km",value:w.totals.movingWhPerKm==null?"--":k(w.totals.movingWhPerKm)}),e.jsx(oe,{label:"Moving energy",value:`${k(w.totals.movingDischargedWh)} Wh`}),e.jsx(oe,{label:"Stationary energy",value:`${k(w.totals.stationaryDischargedWh)} Wh`}),e.jsx(oe,{label:"Attention",value:k(w.totals.attentionCount,0)})]}):null]}),w?e.jsxs(e.Fragment,{children:[e.jsx(de,{title:"All rovers",meta:`${re.length} visible`,actions:e.jsx("button",{type:"button",className:"button-dark px-1 py-0.25 text-xs",onClick:()=>Be(re),children:"Export CSV"}),bodyClassName:"overflow-x-auto p-0.5",children:e.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[e.jsx("thead",{className:"sticky top-0 bg-neutral-900 text-slate-400",children:e.jsxs("tr",{children:[e.jsx(W,{field:"name",sort:f,onSort:O,children:"Rover"}),e.jsx(W,{field:"online",sort:f,onSort:O,children:"State"}),e.jsx(W,{field:"batteryHealth.capacityRetentionPercent",sort:f,onSort:O,children:"Health"}),e.jsx(W,{field:"batteryHealth.measuredUsableMah",sort:f,onSort:O,children:"Usable Ah"}),e.jsx(W,{field:"batteryHealth.measuredUsableWh",sort:f,onSort:O,children:"Usable Wh"}),e.jsx(W,{field:"batteryHealth.confidence",sort:f,onSort:O,children:"Confidence"}),e.jsx(W,{field:"overallWhPerKm",sort:f,onSort:O,children:"Wh/km"}),e.jsx(W,{field:"movingWhPerKm",sort:f,onSort:O,children:"Moving Wh/km"}),e.jsx(W,{field:"distanceMm",sort:f,onSort:O,children:"Distance"}),e.jsx(W,{field:"dischargedWh",sort:f,onSort:O,children:"Used Wh"}),e.jsx(W,{field:"movingDischargedWh",sort:f,onSort:O,children:"Moving Wh"}),e.jsx(W,{field:"stationaryDischargedWh",sort:f,onSort:O,children:"Stationary Wh"}),e.jsx(W,{field:"movingMs",sort:f,onSort:O,children:"Moving time"}),e.jsx(W,{field:"averageSpeedMmPerSecond",sort:f,onSort:O,children:"Average speed"}),e.jsx(W,{field:"maximumSpeedMmPerSecond",sort:f,onSort:O,children:"Maximum speed"}),e.jsx(W,{field:"latestChargeMah",sort:f,onSort:O,children:"Charge"}),e.jsx(W,{field:"averageVoltageMv",sort:f,onSort:O,children:"Voltage"}),e.jsx(W,{field:"averageCurrentMa",sort:f,onSort:O,children:"Current"}),e.jsx(W,{field:"maximumTemperatureC",sort:f,onSort:O,children:"Temperature"}),e.jsx(W,{field:"lastSampleAt",sort:f,onSort:O,children:"Last data"})]})}),e.jsx("tbody",{children:re.map(l=>{const v=l.batteryHealth;return e.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[e.jsx("td",{className:"sticky left-0 bg-neutral-900 font-semibold",children:l.name}),e.jsx("td",{children:l.online?"online":"offline"}),e.jsx("td",{children:v.capacityRetentionPercent==null?"--":`${k(v.capacityRetentionPercent,1)}%`}),e.jsx("td",{children:v.measuredUsableMah==null?"--":k(v.measuredUsableMah/1e3,3)}),e.jsx("td",{children:k(v.measuredUsableWh)}),e.jsx("td",{title:v.confidenceReason,children:v.confidence}),e.jsx("td",{children:l.overallWhPerKm==null?`need ${ve(l.efficiencyDistanceRequiredMm)}`:k(l.overallWhPerKm)}),e.jsx("td",{children:k(l.movingWhPerKm)}),e.jsx("td",{children:ve(l.distanceMm)}),e.jsx("td",{children:k(l.dischargedWh)}),e.jsx("td",{children:k(l.movingDischargedWh)}),e.jsx("td",{children:k(l.stationaryDischargedWh)}),e.jsx("td",{children:qe(l.movingMs)}),e.jsx("td",{children:l.averageSpeedMmPerSecond==null?"--":`${k(l.averageSpeedMmPerSecond)} mm/s`}),e.jsx("td",{children:l.maximumSpeedMmPerSecond==null?"--":`${k(l.maximumSpeedMmPerSecond)} mm/s`}),e.jsxs("td",{children:[k(l.latestChargeMah,0)," mAh"]}),e.jsxs("td",{children:[k(l.averageVoltageMv,0)," mV"]}),e.jsxs("td",{children:[k(l.averageCurrentMa,0)," mA"]}),e.jsxs("td",{children:[k(l.maximumTemperatureC,1)," °C"]}),e.jsx("td",{children:xe(l.lastSampleAt)})]},l.roverId)})})]})}),e.jsx(de,{title:"Battery-health evidence",meta:"All rovers",bodyClassName:"overflow-x-auto p-0.5",children:e.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[e.jsx("thead",{className:"text-slate-400",children:e.jsxs("tr",{children:[e.jsx("th",{children:"Rover"}),e.jsx("th",{children:"Battery"}),e.jsx("th",{children:"Reference mAh"}),e.jsx("th",{children:"Estimated usable mAh"}),e.jsx("th",{children:"Observed range floor"}),e.jsx("th",{children:"Retention"}),e.jsx("th",{children:"Observations"}),e.jsx("th",{children:"Average depth"}),e.jsx("th",{children:"Throughput"}),e.jsx("th",{children:"Latest evidence"}),e.jsx("th",{children:"Confidence basis"})]})}),e.jsx("tbody",{children:re.map(l=>{const v=l.batteryHealth;return e.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[e.jsx("td",{children:l.name}),e.jsx("td",{children:v.batteryKey}),e.jsx("td",{children:k(v.referenceMah,0)}),e.jsx("td",{children:k(v.measuredUsableMah,0)}),e.jsx("td",{children:k(v.observedUsableFloorMah,0)}),e.jsx("td",{children:v.capacityRetentionPercent==null?"--":`${k(v.capacityRetentionPercent,1)}%`}),e.jsx("td",{children:k(v.observationCount,0)}),e.jsxs("td",{children:[k(v.averageObservationDepthPercent,1),"%"]}),e.jsxs("td",{children:[k(v.dischargedThroughputMah,0)," mAh"]}),e.jsx("td",{children:xe(v.latestObservationAt)}),e.jsx("td",{children:v.confidenceReason})]},l.roverId)})})]})}),w.attention.length?e.jsx(de,{title:"Attention",meta:w.attention.length,bodyClassName:"p-0.5 text-xs",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{className:"text-slate-400",children:e.jsxs("tr",{children:[e.jsx("th",{children:"Rover"}),e.jsx("th",{children:"Severity"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:w.attention.map(l=>e.jsxs("tr",{className:"border-t border-neutral-700/70",children:[e.jsx("td",{children:l.roverId}),e.jsx("td",{children:l.severity}),e.jsx("td",{children:l.title})]},l.key))})]})}):null,e.jsx(Qe,{report:w,refresh:C}),e.jsxs(de,{title:"Methodology",bodyClassName:"space-y-0.5 p-1 text-xs text-slate-300",children:[e.jsx("p",{children:"Energy is integrated per sensor interval from OI voltage and signed current. Existing odometer distance and speed are consumed directly; reporting does not calculate a competing speed value."}),e.jsx("p",{children:"Capacity combines partial discharge current with packet 25 charge movement. Every usable observation contributes; deeper observations increase confidence without labeling cycles good or bad. Packet 26 is only a fixed reference."}),e.jsx("p",{children:"Wh/km appears after 25 m of selected-range odometer travel. Existing historical rows predate exact power integration, so their Wh fields remain zero rather than being backfilled with false precision."})]})]}):null]})}function Ge(){Ae({identitySurface:"passive"});const S=Ne(b=>De(b,"fleetReports")),{value:M}=Ie("page",{backgroundTheme:Le}),$=Te(M?.backgroundTheme);return e.jsxs("div",{className:`${$} min-h-screen text-slate-100`,children:[e.jsx(Fe,{}),e.jsx("main",{className:`mx-auto flex min-h-screen w-full max-w-[120rem] flex-col ${Pe} p-1`,children:S?e.jsx(Ve,{}):e.jsxs(de,{title:"Fleet reports unavailable",bodyClassName:"space-y-0.5 p-1 text-sm text-slate-300",children:[e.jsx("p",{children:"This server has not enabled fleet reporting."}),e.jsx(Oe,{className:"button-dark inline-block px-1 py-0.5 text-xs",to:"/",children:"Back to rover page"})]})})]})}export{Ge as default}; +//# sourceMappingURL=FleetReportsApp-DH08rpDz.js.map diff --git a/server/public/assets/FleetReportsApp-DH08rpDz.js.map b/server/public/assets/FleetReportsApp-DH08rpDz.js.map new file mode 100644 index 00000000..b170f2ae --- /dev/null +++ b/server/public/assets/FleetReportsApp-DH08rpDz.js.map @@ -0,0 +1 @@ +{"version":3,"file":"FleetReportsApp-DH08rpDz.js","sources":["../../../webui/node_modules/papaparse/papaparse.min.js","../../../webui/src/reports/FleetReportsApp.jsx"],"sourcesContent":["/* @license\nPapa Parse\nv5.5.4\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var d,s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,v={};function P(e){return 65279===e.charCodeAt(0)?e.slice(1):e}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview);if(a)n.postMessage({results:r,workerId:v.WORKER_ID,finished:i});else if(q(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!q(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){q(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:v.WORKER_ID,error:e,finished:!1})}}function f(e){var r;(e=e||{}).chunkSize||(e.chunkSize=v.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=y(this._chunkLoaded,this),r.onerror=y(this._chunkError,this)),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=v.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=y(this._chunkLoaded,this),i.onerror=y(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function c(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function p(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=y(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=y(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=y(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=y(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,f=0,l=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+v.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),_()){if(p)if(Array.isArray(p.data[0])){for(var e=0;_()&&e(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,f+t):rm.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?q(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",v.RECORD_SEP,v.UNIT_SEP];for(var u=0;u=i.length/2?\"\\r\\n\":\"\\r\"}}function U(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,I=C.step,A=C.preview,T=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,j=F;if(void 0!==C.escapeChar&&(j=C.escapeChar),(\"string\"!=typeof S||-1=A)return w(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:z}),m++}}else if(x&&0===d.length&&i.substring(z,z+a)===x){if(-1===g)return w();z=g+s,g=i.indexOf(O,z),p=i.indexOf(S,z)}else if(-1!==p&&(p=A)return w(!0)}return E();function k(e){h.push(e),f=z}function v(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(z)),d.push(e),z=n,k(d),o&&R()),w()}function b(e){z=e,k(d),d=[],g=i.indexOf(O,z)}function w(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r{var e;return!!v.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return v.BLOB_URL||(v.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=g,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=q(t.step),t.chunk=q(t.chunk),t.complete=q(t.complete),t.error=q(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},v.unparse=function(e,t){var s=!1,_=!0,m=\",\",y=\"\\r\\n\",a='\"',o=a+a,i=!1,r=null,h=!1,u=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||v.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(s=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(a=t.quoteChar,o=a+a),\"boolean\"==typeof t.header&&(_=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(o=t.escapeChar+a),t.escapeFormulae instanceof RegExp?h=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(h=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(U(a),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return n(null,e,i);if(\"object\"==typeof e[0])return n(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),n(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function n(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0{for(var i=0;i= 1e6 ? `${number(millimeters / 1e6)} km` : `${number(millimeters / 1000, 1)} m`;\n}\n\nfunction exportCsv(rows) {\n // Papa Parse owns quoting and escaping so new metric columns cannot silently\n // corrupt exports when rover names or confidence explanations contain commas.\n const csv = Papa.unparse(rows.map((rover) => ({\n ...rover,\n batteryHealth: JSON.stringify(rover.batteryHealth),\n })));\n const url = URL.createObjectURL(new Blob([csv], { type: 'text/csv;charset=utf-8' }));\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = 'fleet-battery-efficiency.csv';\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nfunction Metric({ label, value, detail }) {\n return (\n
\n
{label}
\n
{value}
\n {detail ?
{detail}
: null}\n
\n );\n}\n\nfunction SortHeading({ field, sort, onSort, children }) {\n // Sorting is an explicit table interaction rather than hidden column state;\n // the arrow tells users which fleet comparison currently controls row order.\n return ;\n}\n\nfunction BatteryRegistry({ report, refresh }) {\n const socket = useSocket();\n const role = useSessionSelector((state) => state.session?.role || null);\n const canEdit = role === 'admin' || role === 'lockdown';\n const [draft, setDraft] = useState({\n roverId: report.rovers[0]?.roverId || '',\n chemistry: 'unknown',\n ratedCapacityMah: '',\n installedDate: new Date().toISOString().slice(0, 10),\n notes: '',\n });\n const [status, setStatus] = useState('');\n\n function submit(event) {\n event.preventDefault();\n setStatus('Saving…');\n socket.emit('fleetReports:replaceBattery', {\n ...draft,\n ratedCapacityMah: Number(draft.ratedCapacityMah),\n installedAt: new Date(`${draft.installedDate}T12:00:00`).getTime(),\n }, (response = {}) => {\n setStatus(response.error || `Registered ${response.battery?.batteryKey || 'battery'}`);\n if (!response.error) refresh();\n });\n }\n\n return (\n \n
\n \n \n {report.batteryRegistry.map((battery) => (\n \n \n \n \n \n ))}\n
RoverBatteryChemistryRated mAhInstalledRetiredLearned baseline mAhNotes
{battery.roverId}{battery.batteryKey}{battery.chemistry || '--'}{number(battery.ratedCapacityMah, 0)}{timestamp(battery.installedAt)}{timestamp(battery.retiredAt)}{number(battery.healthyBaselineMah, 0)}{battery.notes || '--'}
\n
\n {canEdit ? (\n
\n \n \n \n \n \n
{status}
\n
\n ) : null}\n
\n );\n}\n\nfunction FullReportContent() {\n const [rangeMs, setRangeMs] = useState(RANGE_OPTIONS[1].ms);\n const [rangeEnd, setRangeEnd] = useState(() => Date.now());\n const [query, setQuery] = useState('');\n const [sort, setSort] = useState({ key: 'name', descending: false });\n const { report, loading, error, refresh } = useFleetReport({\n since: rangeEnd - rangeMs,\n until: rangeEnd,\n includeEvents: false,\n });\n\n const rows = useMemo(() => {\n const filtered = (report?.rovers || []).filter((rover) =>\n `${rover.name} ${rover.roverId}`.toLowerCase().includes(query.trim().toLowerCase()),\n );\n return [...filtered].sort((left, right) => {\n const leftValue = sort.key.startsWith('batteryHealth.')\n ? left.batteryHealth?.[sort.key.slice('batteryHealth.'.length)]\n : left[sort.key];\n const rightValue = sort.key.startsWith('batteryHealth.')\n ? right.batteryHealth?.[sort.key.slice('batteryHealth.'.length)]\n : right[sort.key];\n const result = typeof leftValue === 'string'\n ? leftValue.localeCompare(String(rightValue ?? ''))\n : (Number(leftValue) || 0) - (Number(rightValue) || 0);\n return sort.descending ? -result : result;\n });\n }, [query, report, sort]);\n\n function sortBy(key) {\n setSort((current) => ({ key, descending: current.key === key ? !current.descending : false }));\n }\n\n return (\n <>\n \n
\n \n \n \n Back\n
\n {loading && !report ?

Loading fleet metrics…

: null}\n {error ?

{error}

: null}\n {report ? (\n
\n \n \n \n \n \n \n \n \n
\n ) : null}\n
\n\n {report ? (\n <>\n exportCsv(rows)}>Export CSV}\n bodyClassName=\"overflow-x-auto p-0.5\"\n >\n \n \n RoverState\n HealthUsable Ah\n Usable WhConfidence\n Wh/kmMoving Wh/km\n DistanceUsed Wh\n Moving WhStationary Wh\n Moving timeAverage speed\n Maximum speedCharge\n VoltageCurrent\n TemperatureLast data\n \n {rows.map((rover) => {\n const health = rover.batteryHealth;\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n })}\n
{rover.name}{rover.online ? 'online' : 'offline'}{health.capacityRetentionPercent == null ? '--' : `${number(health.capacityRetentionPercent, 1)}%`}{health.measuredUsableMah == null ? '--' : number(health.measuredUsableMah / 1000, 3)}{number(health.measuredUsableWh)}{health.confidence}{rover.overallWhPerKm == null ? `need ${distance(rover.efficiencyDistanceRequiredMm)}` : number(rover.overallWhPerKm)}{number(rover.movingWhPerKm)}{distance(rover.distanceMm)}{number(rover.dischargedWh)}{number(rover.movingDischargedWh)}{number(rover.stationaryDischargedWh)}{duration(rover.movingMs)}{rover.averageSpeedMmPerSecond == null ? '--' : `${number(rover.averageSpeedMmPerSecond)} mm/s`}{rover.maximumSpeedMmPerSecond == null ? '--' : `${number(rover.maximumSpeedMmPerSecond)} mm/s`}{number(rover.latestChargeMah, 0)} mAh{number(rover.averageVoltageMv, 0)} mV{number(rover.averageCurrentMa, 0)} mA{number(rover.maximumTemperatureC, 1)} °C{timestamp(rover.lastSampleAt)}
\n \n\n \n \n \n {rows.map((rover) => {\n const health = rover.batteryHealth;\n return ;\n })}\n
RoverBatteryReference mAhEstimated usable mAhObserved range floorRetentionObservationsAverage depthThroughputLatest evidenceConfidence basis
{rover.name}{health.batteryKey}{number(health.referenceMah, 0)}{number(health.measuredUsableMah, 0)}{number(health.observedUsableFloorMah, 0)}{health.capacityRetentionPercent == null ? '--' : `${number(health.capacityRetentionPercent, 1)}%`}{number(health.observationCount, 0)}{number(health.averageObservationDepthPercent, 1)}%{number(health.dischargedThroughputMah, 0)} mAh{timestamp(health.latestObservationAt)}{health.confidenceReason}
\n
\n\n {report.attention.length ? (\n \n {report.attention.map((item) => )}
RoverSeverityReason
{item.roverId}{item.severity}{item.title}
\n
\n ) : null}\n\n \n\n \n

Energy is integrated per sensor interval from OI voltage and signed current. Existing odometer distance and speed are consumed directly; reporting does not calculate a competing speed value.

\n

Capacity combines partial discharge current with packet 25 charge movement. Every usable observation contributes; deeper observations increase confidence without labeling cycles good or bad. Packet 26 is only a fixed reference.

\n

Wh/km appears after 25 m of selected-range odometer travel. Existing historical rows predate exact power integration, so their Wh fields remain zero rather than being backfilled with false precision.

\n
\n \n ) : null}\n \n );\n}\n\nexport default function FleetReportsApp() {\n useUserIdentitySync({ identitySurface: 'passive' });\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'fleetReports'));\n const { value: pageSettings } = useSettingsNamespace('page', { backgroundTheme: DEFAULT_PAGE_THEME_KEY });\n const pageBackgroundClass = usePageThemeClass(pageSettings?.backgroundTheme);\n return (\n
\n \n
\n {enabled ? : (\n \n

This server has not enabled fleet reporting.

\n Back to rover page\n
\n )}\n
\n
\n );\n}\n"],"names":["e","t","module","this","r","n","d","s","a","o","h","v","P","u","b","i","q","f","y","l","c","p","m","g","k","_","E","U","C","S","O","x","I","A","T","D","L","F","j","z","M","w","R","RANGE_OPTIONS","number","value","digits","timestamp","duration","minutes","distance","millimeters","exportCsv","rows","csv","Papa","rover","url","anchor","Metric","label","detail","jsxs","jsx","SortHeading","field","sort","onSort","children","BatteryRegistry","report","refresh","socket","useSocket","role","useSessionSelector","state","canEdit","draft","setDraft","useState","status","setStatus","submit","event","response","CardFrame","battery","FullReportContent","rangeMs","setRangeMs","rangeEnd","setRangeEnd","query","setQuery","setSort","loading","error","useFleetReport","useMemo","left","right","leftValue","rightValue","result","sortBy","key","current","Fragment","option","Link","health","item","FleetReportsApp","useUserIdentitySync","enabled","isFeatureEnabled","pageSettings","useSettingsNamespace","DEFAULT_PAGE_THEME_KEY","pageBackgroundClass","usePageThemeClass","SocketConnectionPill","themeGapClass"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/server/public/assets/FleetReportsApp-DQYmyeBU.js b/server/public/assets/FleetReportsApp-DQYmyeBU.js deleted file mode 100644 index 4cde4a14..00000000 --- a/server/public/assets/FleetReportsApp-DQYmyeBU.js +++ /dev/null @@ -1,11 +0,0 @@ -import{g as Oe,u as Me,a as Ee,i as Ae,b as Te,D as De,c as Ie,j as e,S as Le,t as Fe,C as oe,L as Ne,r as de,d as Pe,e as We}from"./index-B0P8L1jr.js";var be={exports:{}};var Ue=be.exports,Re;function He(){return Re||(Re=1,(function(k,C){((P,j)=>{k.exports=j()})(Ue,function P(){var j=typeof self<"u"?self:typeof window<"u"?window:j!==void 0?j:{},H=!j.document&&!!j.postMessage,q=j.IS_PAPA_WORKER||!1,p={},fe=0,n={};function he(s){return s.charCodeAt(0)===65279?s.slice(1):s}function u(s){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(t){var r=je(t);r.chunkSize=parseInt(r.chunkSize),t.step||t.chunk||(r.chunkSize=null),this._handle=new _(r),(this._handle.streamer=this)._config=r}).call(this,s),this.parseChunk=function(t,r){var l=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview),q)j.postMessage({results:i,workerId:n.WORKER_ID,finished:l});else if(T(this._config.chunk)&&!r){if(this._config.chunk(i,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=i=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(i.data),this._completeResults.errors=this._completeResults.errors.concat(i.errors),this._completeResults.meta=i.meta),this._completed||!l||!T(this._config.complete)||i&&i.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),l||i&&i.meta.paused||this._nextChunk(),i}this._halted=!0},this._sendError=function(t){T(this._config.error)?this._config.error(t):q&&this._config.error&&j.postMessage({workerId:n.WORKER_ID,error:t,finished:!1})}}function A(s){var t;(s=s||{}).chunkSize||(s.chunkSize=n.RemoteChunkSize),u.call(this,s),this._nextChunk=H?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(r){this._input=r,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),H||(t.onload=te(this._chunkLoaded,this),t.onerror=te(this._chunkError,this)),t.ontimeout=te(this._chunkTimeout,this),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!H),this._config.downloadTimeout&&!H&&(t.timeout=this._config.downloadTimeout),this._config.downloadRequestHeaders){var r,l=this._config.downloadRequestHeaders;for(r in l)t.setRequestHeader(r,l[r])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,t.setRequestHeader("Range","bytes="+this._start+"-"+i));try{t.send(this._config.downloadRequestBody)}catch(b){this._chunkError(b.message)}H&&t.status===0&&this._chunkError()}},this._chunkLoaded=function(){t.readyState===4&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize||t.responseText.length,this._finished=!this._config.chunkSize||this._start>=(r=>(r=r.getResponseHeader("Content-Range"))!==null?parseInt(r.substring(r.lastIndexOf("/")+1)):-1)(t),this.parseChunk(t.responseText)))},this._chunkError=function(r){r=t.statusText||r,this._sendError(new Error(r))},this._chunkTimeout=function(){this._chunkError("Request timed out after "+this._config.downloadTimeout+"ms")}}function ee(s){(s=s||{}).chunkSize||(s.chunkSize=n.LocalChunkSize),u.call(this,s);var t,r,l=typeof FileReader<"u";this.stream=function(i){this._input=i,r=i.slice||i.webkitSlice||i.mozSlice,l?((t=new FileReader).onload=te(this._chunkLoaded,this),t.onerror=te(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(i.target.result)},this._chunkError=function(){this._sendError(t.error)}}function S(s){var t;u.call(this,s=s||{}),this.stream=function(r){return t=r,this._nextChunk()},this._nextChunk=function(){var r,l;if(!this._finished)return r=this._config.chunkSize,t=r?(l=t.substring(0,r),t.substring(r)):(l=t,""),this._finished=!t,this.parseChunk(l)}}function o(s){u.call(this,s=s||{});var t=[],r=!0,l=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(i){this._input=i,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){l&&t.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0},this._streamData=te(function(i){try{t.push(typeof i=="string"?i:i.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(b){this._streamError(b)}},this),this._streamError=te(function(i){this._streamCleanUp(),this._sendError(i)},this),this._streamEnd=te(function(){this._streamCleanUp(),l=!0,this._streamData("")},this),this._streamCleanUp=te(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function _(s){var t,r,l,i,b=Math.pow(2,53),$=-b,J=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,se=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,N=this,z=0,h=0,K=!1,f=!1,m=[],a={data:[],errors:[],meta:{}};function V(y){return s.skipEmptyLines==="greedy"?y.join("").trim()==="":y.length===1&&y[0].length===0}function E(){if(a&&l&&(Q("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+n.DefaultDelimiter+"'"),l=!1),s.skipEmptyLines&&(a.data=a.data.filter(function(d){return!V(d)})),D()){let d=function(I){m.push(I)};if(a)if(Array.isArray(a.data[0])){for(var y=0;D()&&y(O=>(s.dynamicTypingFunction&&s.dynamicTyping[O]===void 0&&(s.dynamicTyping[O]=s.dynamicTypingFunction(O)),(s.dynamicTyping[O]||s.dynamicTyping)===!0))(G)?c==="true"||c==="TRUE"||c!=="false"&&c!=="FALSE"&&((O=>{if(J.test(O)&&(O=parseFloat(O),$=m.length?"__parsed_extra":m[w]:R,x=s.transform?s.transform(x,R):x);R==="__parsed_extra"?(W[R]=W[R]||[],W[R].push(x)):W[R]=x}return s.header&&(w>m.length?Q("FieldMismatch","TooManyFields","Too many fields: expected "+m.length+" fields but parsed "+w,h+I):ws.preview?r.abort():(a.data=a.data[0],i(a,N))))}),this.parse=function(y,g,M){var d=s.quoteChar||'"',d=(s.newline||(s.newline=this.guessLineEndings(y,d)),l=!1,s.delimiter?T(s.delimiter)&&(s.delimiter=s.delimiter(y),a.meta.delimiter=s.delimiter):((d=((I,W,w,R,x)=>{var G,c,O,le;x=x||[","," ","|",";",n.RECORD_SEP,n.UNIT_SEP];for(var ce=0;ce=M.length/2?`\r -`:"\r"}}function ne(s){return s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ae(s){var t=(s=s||{}).delimiter,r=s.newline,l=s.comments,i=s.step,b=s.preview,$=s.fastMode,J=null,se=!1,N=s.quoteChar==null?'"':s.quoteChar,z=N;if(s.escapeChar!==void 0&&(z=s.escapeChar),(typeof t!="string"||-1=b)return U(!0);break}M.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:g.length,index:h}),c++}}else if(l&&d.length===0&&f.substring(h,h+Q)===l){if(x===-1)return U();h=x+D,x=f.indexOf(r,h),R=f.indexOf(t,h)}else if(R!==-1&&(R=b)return U(!0)}return Y();function le(F){g.push(F),I=h}function ce(F){var B=0;return B=F!==-1&&(F=f.substring(c+1,F))&&F.trim()===""?F.length:B}function Y(F){return a||(F===void 0&&(F=f.substring(h)),d.push(F),h=V,le(d),y&&Z()),U()}function me(F){h=F,le(d),d=[],x=f.indexOf(r,h)}function U(F){if(s.header&&!m&&g.length&&!se){var B=g[0],re=Object.create(null),_e=new Set(B);let we=!1;for(let ue=0;ue{var l;return!!n.WORKERS_SUPPORTED&&(l=(()=>{var i=j.URL||j.webkitURL||null,b=P.toString();return n.BLOB_URL||(n.BLOB_URL=i.createObjectURL(new Blob(["var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; ","(",b,")();"],{type:"text/javascript"})))})(),(l=new j.Worker(l)).onmessage=ye,l.id=fe++,p[l.id]=l)})()).userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=T(t.step),t.chunk=T(t.chunk),t.complete=T(t.complete),t.error=T(t.error),delete t.worker,r.postMessage({input:s,config:t,workerId:r.id})},n.unparse=function(s,t){var r=!1,l=!0,i=",",b=`\r -`,$='"',J=$+$,se=!1,N=null,z=!1,h=((()=>{if(typeof t=="object"){if(typeof t.delimiter!="string"||n.BAD_DELIMITERS.filter(function(m){return t.delimiter.indexOf(m)!==-1}).length||(i=t.delimiter),typeof t.quotes!="boolean"&&typeof t.quotes!="function"&&!Array.isArray(t.quotes)||(r=t.quotes),typeof t.skipEmptyLines!="boolean"&&typeof t.skipEmptyLines!="string"||(se=t.skipEmptyLines),typeof t.newline=="string"&&(b=t.newline),typeof t.quoteChar=="string"&&($=t.quoteChar,J=$+$),typeof t.header=="boolean"&&(l=t.header),Array.isArray(t.columns)){if(t.columns.length===0)throw new Error("Option columns is empty");N=t.columns}t.escapeChar!==void 0&&(J=t.escapeChar+$),t.escapeFormulae instanceof RegExp?z=t.escapeFormulae:typeof t.escapeFormulae=="boolean"&&t.escapeFormulae&&(z=/^[=+\-@\t\r].*$/)}})(),new RegExp(ne($),"g"));if(typeof s=="string"&&(s=JSON.parse(s)),Array.isArray(s)){if(!s.length||Array.isArray(s[0]))return K(null,s,se);if(typeof s[0]=="object")return K(N||Object.keys(s[0]),s,se)}else if(typeof s=="object")return typeof s.data=="string"&&(s.data=JSON.parse(s.data)),Array.isArray(s.data)&&(s.fields||(s.fields=s.meta&&s.meta.fields||N),s.fields||(s.fields=Array.isArray(s.data[0])?s.fields:typeof s.data[0]=="object"?Object.keys(s.data[0]):[]),Array.isArray(s.data[0])||typeof s.data[0]=="object"||(s.data=[s.data])),K(s.fields||[],s.data||[],se);throw new Error("Unable to serialize unrecognized input");function K(m,a,V){var E="",D=(typeof m=="string"&&(m=JSON.parse(m)),typeof a=="string"&&(a=JSON.parse(a)),Array.isArray(m)&&0{for(var g=0;g=1e6?`${v(C/1e6)} km`:`${v(C/1e3,1)} m`}function Ke(k){const C=qe.unparse(k.map(H=>({...H,batteryHealth:JSON.stringify(H.batteryHealth)}))),P=URL.createObjectURL(new Blob([C],{type:"text/csv;charset=utf-8"})),j=document.createElement("a");j.href=P,j.download="fleet-battery-efficiency.csv",j.click(),URL.revokeObjectURL(P)}function ie({label:k,value:C,detail:P}){return e.jsxs("div",{className:"surface min-w-0 px-1 py-0.5",children:[e.jsx("div",{className:"text-[0.68rem] text-slate-400",children:k}),e.jsx("div",{className:"truncate text-sm font-semibold text-slate-100",children:C}),P?e.jsx("div",{className:"truncate text-[0.68rem] text-slate-500",children:P}):null]})}function L({field:k,sort:C,onSort:P,children:j}){return e.jsx("th",{children:e.jsxs("button",{type:"button",className:"whitespace-nowrap text-left",onClick:()=>P(k),children:[j,C.key===k?C.descending?" ↓":" ↑":""]})})}function Be({report:k,refresh:C}){const P=We(),j=Ee(u=>u.session?.role||null),H=j==="admin"||j==="lockdown",[q,p]=de.useState({roverId:k.rovers[0]?.roverId||"",chemistry:"unknown",ratedCapacityMah:"",installedDate:new Date().toISOString().slice(0,10),notes:""}),[fe,n]=de.useState("");function he(u){u.preventDefault(),n("Saving…"),P.emit("fleetReports:replaceBattery",{...q,ratedCapacityMah:Number(q.ratedCapacityMah),installedAt:new Date(`${q.installedDate}T12:00:00`).getTime()},(A={})=>{n(A.error||`Registered ${A.battery?.batteryKey||"battery"}`),A.error||C()})}return e.jsxs(oe,{title:"Battery identity and baselines",meta:`${k.batteryRegistry.length} records`,bodyClassName:"space-y-0.5 p-0.5",children:[e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[e.jsx("thead",{className:"text-slate-400",children:e.jsxs("tr",{children:[e.jsx("th",{children:"Rover"}),e.jsx("th",{children:"Battery"}),e.jsx("th",{children:"Chemistry"}),e.jsx("th",{children:"Rated mAh"}),e.jsx("th",{children:"Installed"}),e.jsx("th",{children:"Retired"}),e.jsx("th",{children:"Learned baseline mAh"}),e.jsx("th",{children:"Notes"})]})}),e.jsx("tbody",{children:k.batteryRegistry.map(u=>e.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[e.jsx("td",{children:u.roverId}),e.jsx("td",{children:u.batteryKey}),e.jsx("td",{children:u.chemistry||"--"}),e.jsx("td",{children:v(u.ratedCapacityMah,0)}),e.jsx("td",{children:xe(u.installedAt)}),e.jsx("td",{children:xe(u.retiredAt)}),e.jsx("td",{children:v(u.healthyBaselineMah,0)}),e.jsx("td",{children:u.notes||"--"})]},u.batteryKey))})]})}),H?e.jsxs("form",{className:"surface grid gap-0.5 p-1 text-xs md:grid-cols-2 xl:grid-cols-6",onSubmit:he,children:[e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Rover"}),e.jsx("select",{className:"w-full bg-neutral-800 p-0.5",value:q.roverId,onChange:u=>p(A=>({...A,roverId:u.target.value})),children:k.rovers.map(u=>e.jsx("option",{value:u.roverId,children:u.name},u.roverId))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Chemistry"}),e.jsxs("select",{className:"w-full bg-neutral-800 p-0.5",value:q.chemistry,onChange:u=>p(A=>({...A,chemistry:u.target.value})),children:[e.jsx("option",{value:"unknown",children:"Unknown"}),e.jsx("option",{value:"NiMH",children:"NiMH"}),e.jsx("option",{value:"Li-ion",children:"Li-ion"})]})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Rated capacity mAh"}),e.jsx("input",{required:!0,min:"1",max:"65535",type:"number",className:"w-full bg-neutral-800 p-0.5",value:q.ratedCapacityMah,onChange:u=>p(A=>({...A,ratedCapacityMah:u.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Installed"}),e.jsx("input",{required:!0,type:"date",className:"w-full bg-neutral-800 p-0.5",value:q.installedDate,onChange:u=>p(A=>({...A,installedDate:u.target.value}))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"text-slate-400",children:"Notes"}),e.jsx("input",{className:"w-full bg-neutral-800 p-0.5",value:q.notes,onChange:u=>p(A=>({...A,notes:u.target.value}))})]}),e.jsxs("div",{className:"flex items-end gap-0.5",children:[e.jsx("button",{type:"submit",className:"button-dark px-1 py-0.5",children:"Install or replace"}),e.jsx("span",{className:"text-slate-400",children:fe})]})]}):null]})}function Ve(){const[k,C]=de.useState(Ce[1].ms),[P,j]=de.useState(()=>Date.now()),[H,q]=de.useState(""),[p,fe]=de.useState({key:"name",descending:!1}),{report:n,loading:he,error:u,refresh:A}=Pe({since:P-k,until:P,includeEvents:!1}),ee=de.useMemo(()=>[...(n?.rovers||[]).filter(_=>`${_.name} ${_.roverId}`.toLowerCase().includes(H.trim().toLowerCase()))].sort((_,ne)=>{const ae=p.key.startsWith("batteryHealth.")?_.batteryHealth?.[p.key.slice(14)]:_[p.key],ye=p.key.startsWith("batteryHealth.")?ne.batteryHealth?.[p.key.slice(14)]:ne[p.key],pe=typeof ae=="string"?ae.localeCompare(String(ye??"")):(Number(ae)||0)-(Number(ye)||0);return p.descending?-pe:pe}),[H,n,p]);function S(o){fe(_=>({key:o,descending:_.key===o?!_.descending:!1}))}return e.jsxs(e.Fragment,{children:[e.jsxs(oe,{title:"Fleet battery health and efficiency",meta:n?xe(n.generatedAt):"Loading",bodyClassName:"space-y-0.5 p-0.5",children:[e.jsxs("div",{className:"surface flex flex-wrap items-end gap-0.5 p-0.5 text-xs",children:[e.jsxs("label",{children:[e.jsx("span",{className:"mr-0.5 text-slate-400",children:"Range"}),e.jsx("select",{className:"bg-neutral-800 p-0.5",value:k,onChange:o=>C(Number(o.target.value)),children:Ce.map(o=>e.jsx("option",{value:o.ms,children:o.label},o.ms))})]}),e.jsxs("label",{children:[e.jsx("span",{className:"mr-0.5 text-slate-400",children:"Find rover"}),e.jsx("input",{className:"bg-neutral-800 p-0.5",value:H,onChange:o=>q(o.target.value)})]}),e.jsx("button",{type:"button",className:"button-dark px-1 py-0.5",onClick:()=>{j(Date.now()),A()},children:"Refresh"}),e.jsx(Ne,{className:"button-dark px-1 py-0.5",to:"/",children:"Back"})]}),he&&!n?e.jsx("p",{className:"text-slate-400",children:"Loading fleet metrics…"}):null,u?e.jsx("p",{className:"text-red-300",children:u}):null,n?e.jsxs("div",{className:"grid grid-cols-2 gap-0.5 md:grid-cols-4 xl:grid-cols-8",children:[e.jsx(ie,{label:"Rovers online",value:`${n.totals.onlineRoverCount}/${n.totals.roverCount}`}),e.jsx(ie,{label:"Distance",value:ve(n.totals.distanceMm)}),e.jsx(ie,{label:"Energy used",value:`${v(n.totals.dischargedWh)} Wh`}),e.jsx(ie,{label:"Fleet Wh/km",value:n.totals.overallWhPerKm==null?"--":v(n.totals.overallWhPerKm)}),e.jsx(ie,{label:"Moving Wh/km",value:n.totals.movingWhPerKm==null?"--":v(n.totals.movingWhPerKm)}),e.jsx(ie,{label:"Moving energy",value:`${v(n.totals.movingDischargedWh)} Wh`}),e.jsx(ie,{label:"Stationary energy",value:`${v(n.totals.stationaryDischargedWh)} Wh`}),e.jsx(ie,{label:"Attention",value:v(n.totals.attentionCount,0)})]}):null]}),n?e.jsxs(e.Fragment,{children:[e.jsx(oe,{title:"All rovers",meta:`${ee.length} visible`,actions:e.jsx("button",{type:"button",className:"button-dark px-1 py-0.25 text-xs",onClick:()=>Ke(ee),children:"Export CSV"}),bodyClassName:"overflow-x-auto p-0.5",children:e.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[e.jsx("thead",{className:"sticky top-0 bg-neutral-900 text-slate-400",children:e.jsxs("tr",{children:[e.jsx(L,{field:"name",sort:p,onSort:S,children:"Rover"}),e.jsx(L,{field:"online",sort:p,onSort:S,children:"State"}),e.jsx(L,{field:"batteryHealth.capacityRetentionPercent",sort:p,onSort:S,children:"Health"}),e.jsx(L,{field:"batteryHealth.measuredUsableMah",sort:p,onSort:S,children:"Usable Ah"}),e.jsx(L,{field:"batteryHealth.measuredUsableWh",sort:p,onSort:S,children:"Usable Wh"}),e.jsx(L,{field:"batteryHealth.confidence",sort:p,onSort:S,children:"Confidence"}),e.jsx(L,{field:"overallWhPerKm",sort:p,onSort:S,children:"Wh/km"}),e.jsx(L,{field:"movingWhPerKm",sort:p,onSort:S,children:"Moving Wh/km"}),e.jsx(L,{field:"distanceMm",sort:p,onSort:S,children:"Distance"}),e.jsx(L,{field:"dischargedWh",sort:p,onSort:S,children:"Used Wh"}),e.jsx(L,{field:"movingDischargedWh",sort:p,onSort:S,children:"Moving Wh"}),e.jsx(L,{field:"stationaryDischargedWh",sort:p,onSort:S,children:"Stationary Wh"}),e.jsx(L,{field:"movingMs",sort:p,onSort:S,children:"Moving time"}),e.jsx(L,{field:"averageSpeedMmPerSecond",sort:p,onSort:S,children:"Average speed"}),e.jsx(L,{field:"maximumSpeedMmPerSecond",sort:p,onSort:S,children:"Maximum speed"}),e.jsx(L,{field:"latestChargeMah",sort:p,onSort:S,children:"Charge"}),e.jsx(L,{field:"averageVoltageMv",sort:p,onSort:S,children:"Voltage"}),e.jsx(L,{field:"averageCurrentMa",sort:p,onSort:S,children:"Current"}),e.jsx(L,{field:"maximumTemperatureC",sort:p,onSort:S,children:"Temperature"}),e.jsx(L,{field:"lastSampleAt",sort:p,onSort:S,children:"Last data"})]})}),e.jsx("tbody",{children:ee.map(o=>{const _=o.batteryHealth;return e.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[e.jsx("td",{className:"sticky left-0 bg-neutral-900 font-semibold",children:o.name}),e.jsx("td",{children:o.online?"online":"offline"}),e.jsx("td",{children:_.capacityRetentionPercent==null?"--":`${v(_.capacityRetentionPercent,1)}%`}),e.jsx("td",{children:_.measuredUsableMah==null?"--":v(_.measuredUsableMah/1e3,3)}),e.jsx("td",{children:v(_.measuredUsableWh)}),e.jsx("td",{title:_.confidenceReason,children:_.confidence}),e.jsx("td",{children:o.overallWhPerKm==null?`need ${ve(o.efficiencyDistanceRequiredMm)}`:v(o.overallWhPerKm)}),e.jsx("td",{children:v(o.movingWhPerKm)}),e.jsx("td",{children:ve(o.distanceMm)}),e.jsx("td",{children:v(o.dischargedWh)}),e.jsx("td",{children:v(o.movingDischargedWh)}),e.jsx("td",{children:v(o.stationaryDischargedWh)}),e.jsx("td",{children:ze(o.movingMs)}),e.jsx("td",{children:o.averageSpeedMmPerSecond==null?"--":`${v(o.averageSpeedMmPerSecond)} mm/s`}),e.jsx("td",{children:o.maximumSpeedMmPerSecond==null?"--":`${v(o.maximumSpeedMmPerSecond)} mm/s`}),e.jsxs("td",{children:[v(o.latestChargeMah,0)," mAh"]}),e.jsxs("td",{children:[v(o.averageVoltageMv,0)," mV"]}),e.jsxs("td",{children:[v(o.averageCurrentMa,0)," mA"]}),e.jsxs("td",{children:[v(o.maximumTemperatureC,1)," °C"]}),e.jsx("td",{children:xe(o.lastSampleAt)})]},o.roverId)})})]})}),e.jsx(oe,{title:"Battery-health evidence",meta:"All rovers",bodyClassName:"overflow-x-auto p-0.5",children:e.jsxs("table",{className:"w-full whitespace-nowrap text-left text-xs",children:[e.jsx("thead",{className:"text-slate-400",children:e.jsxs("tr",{children:[e.jsx("th",{children:"Rover"}),e.jsx("th",{children:"Battery"}),e.jsx("th",{children:"Reference mAh"}),e.jsx("th",{children:"Estimated usable mAh"}),e.jsx("th",{children:"Observed range floor"}),e.jsx("th",{children:"Retention"}),e.jsx("th",{children:"Observations"}),e.jsx("th",{children:"Average depth"}),e.jsx("th",{children:"Throughput"}),e.jsx("th",{children:"Latest evidence"}),e.jsx("th",{children:"Confidence basis"})]})}),e.jsx("tbody",{children:ee.map(o=>{const _=o.batteryHealth;return e.jsxs("tr",{className:"border-t border-neutral-700/70 text-slate-200",children:[e.jsx("td",{children:o.name}),e.jsx("td",{children:_.batteryKey}),e.jsx("td",{children:v(_.referenceMah,0)}),e.jsx("td",{children:v(_.measuredUsableMah,0)}),e.jsx("td",{children:v(_.observedUsableFloorMah,0)}),e.jsx("td",{children:_.capacityRetentionPercent==null?"--":`${v(_.capacityRetentionPercent,1)}%`}),e.jsx("td",{children:v(_.observationCount,0)}),e.jsxs("td",{children:[v(_.averageObservationDepthPercent,1),"%"]}),e.jsxs("td",{children:[v(_.dischargedThroughputMah,0)," mAh"]}),e.jsx("td",{children:xe(_.latestObservationAt)}),e.jsx("td",{children:_.confidenceReason})]},o.roverId)})})]})}),n.attention.length?e.jsx(oe,{title:"Attention",meta:n.attention.length,bodyClassName:"p-0.5 text-xs",children:e.jsxs("table",{className:"w-full text-left",children:[e.jsx("thead",{className:"text-slate-400",children:e.jsxs("tr",{children:[e.jsx("th",{children:"Rover"}),e.jsx("th",{children:"Severity"}),e.jsx("th",{children:"Reason"})]})}),e.jsx("tbody",{children:n.attention.map(o=>e.jsxs("tr",{className:"border-t border-neutral-700/70",children:[e.jsx("td",{children:o.roverId}),e.jsx("td",{children:o.severity}),e.jsx("td",{children:o.title})]},o.key))})]})}):null,e.jsx(Be,{report:n,refresh:A}),e.jsxs(oe,{title:"Methodology",bodyClassName:"space-y-0.5 p-1 text-xs text-slate-300",children:[e.jsx("p",{children:"Energy is integrated per sensor interval from OI voltage and signed current. Existing odometer distance and speed are consumed directly; reporting does not calculate a competing speed value."}),e.jsx("p",{children:"Capacity combines partial discharge current with packet 25 charge movement. Every usable observation contributes; deeper observations increase confidence without labeling cycles good or bad. Packet 26 is only a fixed reference."}),e.jsx("p",{children:"Wh/km appears after 25 m of selected-range odometer travel. Existing historical rows predate exact power integration, so their Wh fields remain zero rather than being backfilled with false precision."})]})]}):null]})}function Ge(){Me({identitySurface:"passive"});const k=Ee(j=>Ae(j,"fleetReports")),{value:C}=Te("page",{backgroundTheme:De}),P=Ie(C?.backgroundTheme);return e.jsxs("div",{className:`${P} min-h-screen text-slate-100`,children:[e.jsx(Le,{}),e.jsx("main",{className:`mx-auto flex min-h-screen w-full max-w-[120rem] flex-col ${Fe} p-1`,children:k?e.jsx(Ve,{}):e.jsxs(oe,{title:"Fleet reports unavailable",bodyClassName:"space-y-0.5 p-1 text-sm text-slate-300",children:[e.jsx("p",{children:"This server has not enabled fleet reporting."}),e.jsx(Ne,{className:"button-dark inline-block px-1 py-0.5 text-xs",to:"/",children:"Back to rover page"})]})})]})}export{Ge as default}; -//# sourceMappingURL=FleetReportsApp-DQYmyeBU.js.map diff --git a/server/public/assets/FleetReportsApp-DQYmyeBU.js.map b/server/public/assets/FleetReportsApp-DQYmyeBU.js.map deleted file mode 100644 index 3714ae99..00000000 --- a/server/public/assets/FleetReportsApp-DQYmyeBU.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FleetReportsApp-DQYmyeBU.js","sources":["../../../webui/node_modules/papaparse/papaparse.min.js","../../../webui/src/reports/FleetReportsApp.jsx"],"sourcesContent":["/* @license\nPapa Parse\nv5.7.0\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n((e,t)=>{\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()})(this,function r(){var n=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n?n:{};var s=!n.document&&!!n.postMessage,a=n.IS_PAPA_WORKER||!1,o={},h=0,w={};function q(e){return 65279===e.charCodeAt(0)?e.slice(1):e}function u(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=v(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new i(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(t,e){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview);if(a)n.postMessage({results:r,workerId:w.WORKER_ID,finished:i});else if(U(this._config.chunk)&&!e){if(this._config.chunk(r,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=r=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(r.data),this._completeResults.errors=this._completeResults.errors.concat(r.errors),this._completeResults.meta=r.meta),this._completed||!i||!U(this._config.complete)||r&&r.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||r&&r.meta.paused||this._nextChunk(),r}this._halted=!0},this._sendError=function(e){U(this._config.error)?this._config.error(e):a&&this._config.error&&n.postMessage({workerId:w.WORKER_ID,error:e,finished:!1})}}function d(e){var r;(e=e||{}).chunkSize||(e.chunkSize=w.RemoteChunkSize),u.call(this,e),this._nextChunk=s?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),s||(r.onload=m(this._chunkLoaded,this),r.onerror=m(this._chunkError,this)),r.ontimeout=m(this._chunkTimeout,this),r.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!s),this._config.downloadTimeout&&!s&&(r.timeout=this._config.downloadTimeout),this._config.downloadRequestHeaders){var e,t=this._config.downloadRequestHeaders;for(e in t)r.setRequestHeader(e,t[e])}var i;this._config.chunkSize&&(i=this._start+this._config.chunkSize-1,r.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+i));try{r.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}s&&0===r.status&&this._chunkError()}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize||r.responseText.length,this._finished=!this._config.chunkSize||this._start>=(e=>null!==(e=e.getResponseHeader(\"Content-Range\"))?parseInt(e.substring(e.lastIndexOf(\"/\")+1)):-1)(r),this.parseChunk(r.responseText)))},this._chunkError=function(e){e=r.statusText||e;this._sendError(new Error(e))},this._chunkTimeout=function(){this._chunkError(\"Request timed out after \"+this._config.downloadTimeout+\"ms\")}}function l(e){(e=e||{}).chunkSize||(e.chunkSize=w.LocalChunkSize),u.call(this,e);var i,r,n=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,n?((i=new FileReader).onload=m(this._chunkLoaded,this),i.onerror=m(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function f(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){var e,t;if(!this._finished)return e=this._config.chunkSize,i=e?(t=i.substring(0,e),i.substring(e)):(t=i,\"\"),this._finished=!i,this.parseChunk(t)}}function c(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0},this._streamData=m(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=m(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=m(function(){this._streamCleanUp(),r=!0,this._streamData(\"\")},this),this._streamCleanUp=m(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function i(m){var n,s,a,t,o=Math.pow(2,53),h=-o,u=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,d=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,i=this,r=0,l=0,f=!1,e=!1,c=[],p={data:[],errors:[],meta:{}};function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function _(){if(p&&a&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+w.DefaultDelimiter+\"'\"),a=!1),m.skipEmptyLines&&(p.data=p.data.filter(function(e){return!y(e)})),g()){if(p)if(Array.isArray(p.data[0])){for(var e=0;g()&&e(e=>(m.dynamicTypingFunction&&void 0===m.dynamicTyping[e]&&(m.dynamicTyping[e]=m.dynamicTypingFunction(e)),!0===(m.dynamicTyping[e]||m.dynamicTyping)))(e)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&((e=>{if(u.test(e)){e=parseFloat(e);if(h=c.length?\"__parsed_extra\":c[r]:n,s=m.transform?m.transform(s,n):s);\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>c.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+c.length+\" fields but parsed \"+r,l+t):rm.preview?s.abort():(p.data=p.data[0],t(p,i))))}),this.parse=function(e,t,i){var r=m.quoteChar||'\"',r=(m.newline||(m.newline=this.guessLineEndings(e,r)),a=!1,m.delimiter?U(m.delimiter)&&(m.delimiter=m.delimiter(e),p.meta.delimiter=m.delimiter):((r=((e,t,i,r,n)=>{var s,a,o,h;n=n||[\",\",\"\\t\",\"|\",\";\",w.RECORD_SEP,w.UNIT_SEP];for(var u=0;u=i.length/2?\"\\r\\n\":\"\\r\"}}function P(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(C){var S=(C=C||{}).delimiter,O=C.newline,x=C.comments,T=C.step,I=C.preview,A=C.fastMode,D=null,L=!1,F=null==C.quoteChar?'\"':C.quoteChar,z=F;if(void 0!==C.escapeChar&&(z=C.escapeChar),(\"string\"!=typeof S||-1=I)return b(!0);break}u.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:h.length,index:M}),m++}}else if(x&&0===d.length&&i.substring(M,M+a)===x){if(-1===_)return b();M=_+s,_=i.indexOf(O,M),p=i.indexOf(S,M)}else if(-1!==p&&(p<_||-1===_))d.push(i.substring(M,p)),M=p+e,p=i.indexOf(S,M);else{if(-1===_)break;if(d.push(i.substring(M,_)),v(_+s),o&&(R(),j))return b();if(I&&h.length>=I)return b(!0)}return E();function k(e){h.push(e),l=M}function w(e){var t=0;return t=-1!==e&&(e=i.substring(m+1,e))&&\"\"===e.trim()?e.length:t}function E(e){return r||(void 0===e&&(e=i.substring(M)),d.push(e),M=n,k(d),o&&R()),b()}function v(e){M=e,k(d),d=[],_=i.indexOf(O,M)}function b(e){if(C.header&&!t&&h.length&&!L){var s=h[0],a=Object.create(null),o=new Set(s);let n=!1;for(let r=0;r{var e;return!!w.WORKERS_SUPPORTED&&(e=(()=>{var e=n.URL||n.webkitURL||null,t=r.toString();return w.BLOB_URL||(w.BLOB_URL=e.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",t,\")();\"],{type:\"text/javascript\"})))})(),(e=new n.Worker(e)).onmessage=p,e.id=h++,o[e.id]=e)})()).userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=U(t.step),t.chunk=U(t.chunk),t.complete=U(t.complete),t.error=U(t.error),delete t.worker,i.postMessage({input:e,config:t,workerId:i.id})},w.unparse=function(e,t){var s=!1,g=!0,m=\",\",y=\"\\r\\n\",a='\"',o=a+a,i=!1,r=null,h=!1,u=((()=>{if(\"object\"==typeof t){if(\"string\"!=typeof t.delimiter||w.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter),\"boolean\"!=typeof t.quotes&&\"function\"!=typeof t.quotes&&!Array.isArray(t.quotes)||(s=t.quotes),\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines),\"string\"==typeof t.newline&&(y=t.newline),\"string\"==typeof t.quoteChar&&(a=t.quoteChar,o=a+a),\"boolean\"==typeof t.header&&(g=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");r=t.columns}void 0!==t.escapeChar&&(o=t.escapeChar+a),t.escapeFormulae instanceof RegExp?h=t.escapeFormulae:\"boolean\"==typeof t.escapeFormulae&&t.escapeFormulae&&(h=/^[=+\\-@\\t\\r].*$/)}})(),new RegExp(P(a),\"g\"));\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return n(null,e,i);if(\"object\"==typeof e[0])return n(r||Object.keys(e[0]),e,i)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),n(e.fields||[],e.data||[],i);throw new Error(\"Unable to serialize unrecognized input\");function n(e,t,i){var r=\"\",n=(\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0{for(var i=0;i= 1e6 ? `${number(millimeters / 1e6)} km` : `${number(millimeters / 1000, 1)} m`;\n}\n\nfunction exportCsv(rows) {\n // Papa Parse owns quoting and escaping so new metric columns cannot silently\n // corrupt exports when rover names or confidence explanations contain commas.\n const csv = Papa.unparse(rows.map((rover) => ({\n ...rover,\n batteryHealth: JSON.stringify(rover.batteryHealth),\n })));\n const url = URL.createObjectURL(new Blob([csv], { type: 'text/csv;charset=utf-8' }));\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = 'fleet-battery-efficiency.csv';\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nfunction Metric({ label, value, detail }) {\n return (\n
\n
{label}
\n
{value}
\n {detail ?
{detail}
: null}\n
\n );\n}\n\nfunction SortHeading({ field, sort, onSort, children }) {\n // Sorting is an explicit table interaction rather than hidden column state;\n // the arrow tells users which fleet comparison currently controls row order.\n return ;\n}\n\nfunction BatteryRegistry({ report, refresh }) {\n const socket = useSocket();\n const role = useSessionSelector((state) => state.session?.role || null);\n const canEdit = role === 'admin' || role === 'lockdown';\n const [draft, setDraft] = useState({\n roverId: report.rovers[0]?.roverId || '',\n chemistry: 'unknown',\n ratedCapacityMah: '',\n installedDate: new Date().toISOString().slice(0, 10),\n notes: '',\n });\n const [status, setStatus] = useState('');\n\n function submit(event) {\n event.preventDefault();\n setStatus('Saving…');\n socket.emit('fleetReports:replaceBattery', {\n ...draft,\n ratedCapacityMah: Number(draft.ratedCapacityMah),\n installedAt: new Date(`${draft.installedDate}T12:00:00`).getTime(),\n }, (response = {}) => {\n setStatus(response.error || `Registered ${response.battery?.batteryKey || 'battery'}`);\n if (!response.error) refresh();\n });\n }\n\n return (\n \n
\n \n \n {report.batteryRegistry.map((battery) => (\n \n \n \n \n \n ))}\n
RoverBatteryChemistryRated mAhInstalledRetiredLearned baseline mAhNotes
{battery.roverId}{battery.batteryKey}{battery.chemistry || '--'}{number(battery.ratedCapacityMah, 0)}{timestamp(battery.installedAt)}{timestamp(battery.retiredAt)}{number(battery.healthyBaselineMah, 0)}{battery.notes || '--'}
\n
\n {canEdit ? (\n
\n \n \n \n \n \n
{status}
\n
\n ) : null}\n
\n );\n}\n\nfunction FullReportContent() {\n const [rangeMs, setRangeMs] = useState(RANGE_OPTIONS[1].ms);\n const [rangeEnd, setRangeEnd] = useState(() => Date.now());\n const [query, setQuery] = useState('');\n const [sort, setSort] = useState({ key: 'name', descending: false });\n const { report, loading, error, refresh } = useFleetReport({\n since: rangeEnd - rangeMs,\n until: rangeEnd,\n includeEvents: false,\n });\n\n const rows = useMemo(() => {\n const filtered = (report?.rovers || []).filter((rover) =>\n `${rover.name} ${rover.roverId}`.toLowerCase().includes(query.trim().toLowerCase()),\n );\n return [...filtered].sort((left, right) => {\n const leftValue = sort.key.startsWith('batteryHealth.')\n ? left.batteryHealth?.[sort.key.slice('batteryHealth.'.length)]\n : left[sort.key];\n const rightValue = sort.key.startsWith('batteryHealth.')\n ? right.batteryHealth?.[sort.key.slice('batteryHealth.'.length)]\n : right[sort.key];\n const result = typeof leftValue === 'string'\n ? leftValue.localeCompare(String(rightValue ?? ''))\n : (Number(leftValue) || 0) - (Number(rightValue) || 0);\n return sort.descending ? -result : result;\n });\n }, [query, report, sort]);\n\n function sortBy(key) {\n setSort((current) => ({ key, descending: current.key === key ? !current.descending : false }));\n }\n\n return (\n <>\n \n
\n \n \n \n Back\n
\n {loading && !report ?

Loading fleet metrics…

: null}\n {error ?

{error}

: null}\n {report ? (\n
\n \n \n \n \n \n \n \n \n
\n ) : null}\n
\n\n {report ? (\n <>\n exportCsv(rows)}>Export CSV}\n bodyClassName=\"overflow-x-auto p-0.5\"\n >\n \n \n RoverState\n HealthUsable Ah\n Usable WhConfidence\n Wh/kmMoving Wh/km\n DistanceUsed Wh\n Moving WhStationary Wh\n Moving timeAverage speed\n Maximum speedCharge\n VoltageCurrent\n TemperatureLast data\n \n {rows.map((rover) => {\n const health = rover.batteryHealth;\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n })}\n
{rover.name}{rover.online ? 'online' : 'offline'}{health.capacityRetentionPercent == null ? '--' : `${number(health.capacityRetentionPercent, 1)}%`}{health.measuredUsableMah == null ? '--' : number(health.measuredUsableMah / 1000, 3)}{number(health.measuredUsableWh)}{health.confidence}{rover.overallWhPerKm == null ? `need ${distance(rover.efficiencyDistanceRequiredMm)}` : number(rover.overallWhPerKm)}{number(rover.movingWhPerKm)}{distance(rover.distanceMm)}{number(rover.dischargedWh)}{number(rover.movingDischargedWh)}{number(rover.stationaryDischargedWh)}{duration(rover.movingMs)}{rover.averageSpeedMmPerSecond == null ? '--' : `${number(rover.averageSpeedMmPerSecond)} mm/s`}{rover.maximumSpeedMmPerSecond == null ? '--' : `${number(rover.maximumSpeedMmPerSecond)} mm/s`}{number(rover.latestChargeMah, 0)} mAh{number(rover.averageVoltageMv, 0)} mV{number(rover.averageCurrentMa, 0)} mA{number(rover.maximumTemperatureC, 1)} °C{timestamp(rover.lastSampleAt)}
\n \n\n \n \n \n {rows.map((rover) => {\n const health = rover.batteryHealth;\n return ;\n })}\n
RoverBatteryReference mAhEstimated usable mAhObserved range floorRetentionObservationsAverage depthThroughputLatest evidenceConfidence basis
{rover.name}{health.batteryKey}{number(health.referenceMah, 0)}{number(health.measuredUsableMah, 0)}{number(health.observedUsableFloorMah, 0)}{health.capacityRetentionPercent == null ? '--' : `${number(health.capacityRetentionPercent, 1)}%`}{number(health.observationCount, 0)}{number(health.averageObservationDepthPercent, 1)}%{number(health.dischargedThroughputMah, 0)} mAh{timestamp(health.latestObservationAt)}{health.confidenceReason}
\n
\n\n {report.attention.length ? (\n \n {report.attention.map((item) => )}
RoverSeverityReason
{item.roverId}{item.severity}{item.title}
\n
\n ) : null}\n\n \n\n \n

Energy is integrated per sensor interval from OI voltage and signed current. Existing odometer distance and speed are consumed directly; reporting does not calculate a competing speed value.

\n

Capacity combines partial discharge current with packet 25 charge movement. Every usable observation contributes; deeper observations increase confidence without labeling cycles good or bad. Packet 26 is only a fixed reference.

\n

Wh/km appears after 25 m of selected-range odometer travel. Existing historical rows predate exact power integration, so their Wh fields remain zero rather than being backfilled with false precision.

\n
\n \n ) : null}\n \n );\n}\n\nexport default function FleetReportsApp() {\n useUserIdentitySync({ identitySurface: 'passive' });\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'fleetReports'));\n const { value: pageSettings } = useSettingsNamespace('page', { backgroundTheme: DEFAULT_PAGE_THEME_KEY });\n const pageBackgroundClass = usePageThemeClass(pageSettings?.backgroundTheme);\n return (\n
\n \n
\n {enabled ? : (\n \n

This server has not enabled fleet reporting.

\n Back to rover page\n
\n )}\n
\n
\n );\n}\n"],"names":["e","t","module","this","r","n","s","a","o","h","w","q","v","i","U","d","m","l","f","c","u","p","y","_","k","g","E","P","C","S","O","x","T","I","A","D","L","F","M","j","b","R","RANGE_OPTIONS","number","value","digits","timestamp","duration","minutes","distance","millimeters","exportCsv","rows","csv","Papa","rover","url","anchor","Metric","label","detail","jsxs","jsx","SortHeading","field","sort","onSort","children","BatteryRegistry","report","refresh","socket","useSocket","role","useSessionSelector","state","canEdit","draft","setDraft","useState","status","setStatus","submit","event","response","CardFrame","battery","FullReportContent","rangeMs","setRangeMs","rangeEnd","setRangeEnd","query","setQuery","setSort","loading","error","useFleetReport","useMemo","left","right","leftValue","rightValue","result","sortBy","key","current","Fragment","option","Link","health","item","FleetReportsApp","useUserIdentitySync","enabled","isFeatureEnabled","pageSettings","useSettingsNamespace","DEFAULT_PAGE_THEME_KEY","pageBackgroundClass","usePageThemeClass","SocketConnectionPill","themeGapClass"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/server/public/assets/Preview-O6d1niaS.js b/server/public/assets/Preview-O6d1niaS.js new file mode 100644 index 00000000..20701829 --- /dev/null +++ b/server/public/assets/Preview-O6d1niaS.js @@ -0,0 +1,2 @@ +import{r as g,R as a}from"./index-DCtVfg7-.js";const d="64px",u={},k=({src:s,light:t,oEmbedUrl:o,onClickPreview:n,playIcon:b,previewTabIndex:_,previewAriaLabel:p})=>{const[f,r]=g.useState(null);g.useEffect(()=>{!s||!t||!o||x({src:s,light:t,oEmbedUrl:o})},[s,t,o]);const x=async({src:e,light:i,oEmbedUrl:E})=>{if(a.isValidElement(i))return;if(typeof i=="string"){r(i);return}if(u[e]){r(u[e]);return}r(null);const m=await(await fetch(E.replace("{url}",e))).json();if(m.thumbnail_url){const h=m.thumbnail_url.replace("height=100","height=480").replace("-d_295x166","-d_640");r(h),u[e]=h}},I=e=>{(e.key==="Enter"||e.key===" ")&&n?.(e)},v=e=>{n?.(e)},l=a.isValidElement(t),y={display:"flex",alignItems:"center",justifyContent:"center"},c={preview:{width:"100%",height:"100%",backgroundImage:f&&!l?`url(${f})`:void 0,backgroundSize:"cover",backgroundPosition:"center",cursor:"pointer",...y},shadow:{background:"radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)",borderRadius:d,width:d,height:d,position:l?"absolute":void 0,...y},playIcon:{borderStyle:"solid",borderWidth:"16px 0 16px 26px",borderColor:"transparent transparent transparent white",marginLeft:"7px"}},w=a.createElement("div",{style:c.shadow,className:"react-player__shadow"},a.createElement("div",{style:c.playIcon,className:"react-player__play-icon"}));return a.createElement("div",{style:c.preview,className:"react-player__preview",tabIndex:_,onClick:v,onKeyDown:I,...p?{"aria-label":p}:{}},l?t:null,b||w)};var C=k;export{C as default}; +//# sourceMappingURL=Preview-O6d1niaS.js.map diff --git a/server/public/assets/Preview-O6d1niaS.js.map b/server/public/assets/Preview-O6d1niaS.js.map new file mode 100644 index 00000000..917209c2 --- /dev/null +++ b/server/public/assets/Preview-O6d1niaS.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Preview-O6d1niaS.js","sources":["../../../webui/node_modules/react-player/dist/Preview.js"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nconst ICON_SIZE = \"64px\";\nconst cache = {};\nconst Preview = ({\n src,\n light,\n oEmbedUrl,\n onClickPreview,\n playIcon,\n previewTabIndex,\n previewAriaLabel\n}) => {\n const [image, setImage] = useState(null);\n useEffect(() => {\n if (!src || !light || !oEmbedUrl) return;\n fetchImage({ src, light, oEmbedUrl });\n }, [src, light, oEmbedUrl]);\n const fetchImage = async ({\n src: src2,\n light: light2,\n oEmbedUrl: oEmbedUrl2\n }) => {\n if (React.isValidElement(light2)) {\n return;\n }\n if (typeof light2 === \"string\") {\n setImage(light2);\n return;\n }\n if (cache[src2]) {\n setImage(cache[src2]);\n return;\n }\n setImage(null);\n const response = await fetch(oEmbedUrl2.replace(\"{url}\", src2));\n const data = await response.json();\n if (data.thumbnail_url) {\n const fetchedImage = data.thumbnail_url.replace(\"height=100\", \"height=480\").replace(\"-d_295x166\", \"-d_640\");\n setImage(fetchedImage);\n cache[src2] = fetchedImage;\n }\n };\n const handleKeyPress = (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n onClickPreview == null ? void 0 : onClickPreview(e);\n }\n };\n const handleClick = (e) => {\n onClickPreview == null ? void 0 : onClickPreview(e);\n };\n const isElement = React.isValidElement(light);\n const flexCenter = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\"\n };\n const styles = {\n preview: {\n width: \"100%\",\n height: \"100%\",\n backgroundImage: image && !isElement ? `url(${image})` : void 0,\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n cursor: \"pointer\",\n ...flexCenter\n },\n shadow: {\n background: \"radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)\",\n borderRadius: ICON_SIZE,\n width: ICON_SIZE,\n height: ICON_SIZE,\n position: isElement ? \"absolute\" : void 0,\n ...flexCenter\n },\n playIcon: {\n borderStyle: \"solid\",\n borderWidth: \"16px 0 16px 26px\",\n borderColor: \"transparent transparent transparent white\",\n marginLeft: \"7px\"\n }\n };\n const defaultPlayIcon = /* @__PURE__ */ React.createElement(\"div\", { style: styles.shadow, className: \"react-player__shadow\" }, /* @__PURE__ */ React.createElement(\"div\", { style: styles.playIcon, className: \"react-player__play-icon\" }));\n return /* @__PURE__ */ React.createElement(\n \"div\",\n {\n style: styles.preview,\n className: \"react-player__preview\",\n tabIndex: previewTabIndex,\n onClick: handleClick,\n onKeyDown: handleKeyPress,\n ...previewAriaLabel ? { \"aria-label\": previewAriaLabel } : {}\n },\n isElement ? light : null,\n playIcon || defaultPlayIcon\n );\n};\nvar Preview_default = Preview;\nexport {\n Preview_default as default\n};\n"],"names":["ICON_SIZE","cache","Preview","src","light","oEmbedUrl","onClickPreview","playIcon","previewTabIndex","previewAriaLabel","image","setImage","useState","useEffect","fetchImage","src2","light2","oEmbedUrl2","React","data","fetchedImage","handleKeyPress","handleClick","isElement","flexCenter","styles","defaultPlayIcon","Preview_default"],"mappings":"+CACA,MAAMA,EAAY,OACZC,EAAQ,CAAA,EACRC,EAAU,CAAC,CACf,IAAAC,EACA,MAAAC,EACA,UAAAC,EACA,eAAAC,EACA,SAAAC,EACA,gBAAAC,EACA,iBAAAC,CACF,IAAM,CACJ,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,IAAI,EACvCC,EAAAA,UAAU,IAAM,CACV,CAACV,GAAO,CAACC,GAAS,CAACC,GACvBS,EAAW,CAAE,IAAAX,EAAK,MAAAC,EAAO,UAAAC,CAAS,CAAE,CACtC,EAAG,CAACF,EAAKC,EAAOC,CAAS,CAAC,EAC1B,MAAMS,EAAa,MAAO,CACxB,IAAKC,EACL,MAAOC,EACP,UAAWC,CACf,IAAQ,CACJ,GAAIC,EAAM,eAAeF,CAAM,EAC7B,OAEF,GAAI,OAAOA,GAAW,SAAU,CAC9BL,EAASK,CAAM,EACf,MACF,CACA,GAAIf,EAAMc,CAAI,EAAG,CACfJ,EAASV,EAAMc,CAAI,CAAC,EACpB,MACF,CACAJ,EAAS,IAAI,EAEb,MAAMQ,EAAO,MADI,MAAM,MAAMF,EAAW,QAAQ,QAASF,CAAI,CAAC,GAClC,KAAI,EAChC,GAAII,EAAK,cAAe,CACtB,MAAMC,EAAeD,EAAK,cAAc,QAAQ,aAAc,YAAY,EAAE,QAAQ,aAAc,QAAQ,EAC1GR,EAASS,CAAY,EACrBnB,EAAMc,CAAI,EAAIK,CAChB,CACF,EACMC,EAAkB,GAAM,EACxB,EAAE,MAAQ,SAAW,EAAE,MAAQ,MACCf,IAAe,CAAC,CAEtD,EACMgB,EAAe,GAAM,CACShB,IAAe,CAAC,CACpD,EACMiB,EAAYL,EAAM,eAAed,CAAK,EACtCoB,EAAa,CACjB,QAAS,OACT,WAAY,SACZ,eAAgB,QACpB,EACQC,EAAS,CACb,QAAS,CACP,MAAO,OACP,OAAQ,OACR,gBAAiBf,GAAS,CAACa,EAAY,OAAOb,CAAK,IAAM,OACzD,eAAgB,QAChB,mBAAoB,SACpB,OAAQ,UACR,GAAGc,CACT,EACI,OAAQ,CACN,WAAY,2DACZ,aAAcxB,EACd,MAAOA,EACP,OAAQA,EACR,SAAUuB,EAAY,WAAa,OACnC,GAAGC,CACT,EACI,SAAU,CACR,YAAa,QACb,YAAa,mBACb,YAAa,4CACb,WAAY,KAClB,CACA,EACQE,EAAkCR,EAAM,cAAc,MAAO,CAAE,MAAOO,EAAO,OAAQ,UAAW,sBAAsB,EAAoBP,EAAM,cAAc,MAAO,CAAE,MAAOO,EAAO,SAAU,UAAW,yBAAyB,CAAE,CAAC,EAC5O,OAAuBP,EAAM,cAC3B,MACA,CACE,MAAOO,EAAO,QACd,UAAW,wBACX,SAAUjB,EACV,QAASc,EACT,UAAWD,EACX,GAAGZ,EAAmB,CAAE,aAAcA,GAAqB,CAAA,CACjE,EACIc,EAAYnB,EAAQ,KACpBG,GAAYmB,CAChB,CACA,EACG,IAACC,EAAkBzB","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/server/public/assets/SetupApp-DBQeHfaN.js b/server/public/assets/SetupApp-CFFNNLJ4.js similarity index 94% rename from server/public/assets/SetupApp-DBQeHfaN.js rename to server/public/assets/SetupApp-CFFNNLJ4.js index a161309b..dfe141b1 100644 --- a/server/public/assets/SetupApp-DBQeHfaN.js +++ b/server/public/assets/SetupApp-CFFNNLJ4.js @@ -1,2 +1,2 @@ -import{e as F,r as s,j as e,S as P,C as c,L as q}from"./index-B0P8L1jr.js";import{o as $,p as D,q as I}from"./api-B8GGCEeo.js";function R(){const l=F(),[a,m]=s.useState(null),[n,b]=s.useState(""),[d,C]=s.useState(""),[p,N]=s.useState(""),[r,S]=s.useState(""),[f,v]=s.useState(""),[o,w]=s.useState(null),[x,h]=s.useState(!1),[g,i]=s.useState("");s.useEffect(()=>{$(l).then(t=>m(t.required)).catch(t=>i(t.message))},[l]);async function j(t){h(!0),i("");try{await t(),m(!1),i("Setup completed. You can now open the administration application and log in.")}catch(u){const E=Array.isArray(u.validationErrors)?` ${u.validationErrors.map(y=>`${y.path}: ${y.message}`).join("; ")}`:"";i(`${u.message}${E}`)}finally{h(!1)}}function k(t){if(t.preventDefault(),r!==f){i("Passwords do not match.");return}j(()=>D(l,{setupCode:n,username:d,discordId:p,password:r}))}function A(t){t.preventDefault(),o&&j(async()=>I(l,{setupCode:n,fileName:o.name,yaml:await o.text()}))}return e.jsxs("div",{className:"min-h-screen bg-neutral-950 p-1 text-slate-100",children:[e.jsx(P,{}),e.jsxs("main",{className:"mx-auto flex min-h-screen w-full max-w-3xl flex-col justify-center gap-0.5",children:[e.jsxs(c,{title:"MultiRover setup",meta:a===null?"checking":a?"required":"complete",bodyClassName:"space-y-0.5 p-1 text-sm",children:[a?e.jsx("p",{children:"Enter the one-time code from setup-code.txt in the server data folder, then create the first lockdown administrator or import an existing configuration."}):null,a===!1?e.jsx(q,{className:"button-dark inline-block",to:"/admin",children:"Open administration"}):null,g?e.jsx("p",{className:"surface p-1 text-sm text-slate-200",children:g}):null]}),a?e.jsxs(e.Fragment,{children:[e.jsxs(c,{title:"Setup authorization",bodyClassName:"p-1",children:[e.jsx("label",{className:"block text-xs font-semibold text-slate-200",children:"One-time setup code"}),e.jsx("input",{className:"field-input mt-0.5 w-full font-mono",value:n,onChange:t=>b(t.target.value)})]}),e.jsx(c,{title:"Create first administrator",bodyClassName:"p-1",children:e.jsxs("form",{className:"grid gap-0.5 md:grid-cols-2",onSubmit:k,children:[e.jsx("input",{className:"field-input",placeholder:"Username",value:d,onChange:t=>C(t.target.value)}),e.jsx("input",{className:"field-input",placeholder:"Discord id (optional)",value:p,onChange:t=>N(t.target.value)}),e.jsx("input",{className:"field-input",type:"password",placeholder:"Password",value:r,onChange:t=>S(t.target.value)}),e.jsx("input",{className:"field-input",type:"password",placeholder:"Confirm password",value:f,onChange:t=>v(t.target.value)}),e.jsx("button",{className:"button-dark md:col-span-2",type:"submit",disabled:x||!n||!d||!r,children:"Create lockdown administrator"})]})}),e.jsxs(c,{title:"Import configuration file",bodyClassName:"space-y-0.5 p-1 text-sm",children:[e.jsx("p",{className:"text-xs text-slate-400",children:"Choose an existing YAML configuration explicitly. The server validates and imports it once, and its secrets are never displayed back in the browser."}),e.jsxs("form",{className:"flex flex-col gap-0.5 md:flex-row",onSubmit:A,children:[e.jsx("input",{className:"field-input flex-1",type:"file",accept:".yaml,.yml,text/yaml",onChange:t=>w(t.target.files?.[0]||null)}),e.jsx("button",{className:"button-dark",type:"submit",disabled:x||!n||!o,children:"Import selected YAML"})]})]})]}):null]})]})}export{R as default}; -//# sourceMappingURL=SetupApp-DBQeHfaN.js.map +import{e as F,r as s,j as e,S as P,C as c,L as q}from"./index-DCtVfg7-.js";import{o as $,p as D,q as I}from"./api-B8GGCEeo.js";function R(){const l=F(),[a,m]=s.useState(null),[n,b]=s.useState(""),[d,C]=s.useState(""),[p,N]=s.useState(""),[r,S]=s.useState(""),[f,v]=s.useState(""),[o,w]=s.useState(null),[x,h]=s.useState(!1),[g,i]=s.useState("");s.useEffect(()=>{$(l).then(t=>m(t.required)).catch(t=>i(t.message))},[l]);async function j(t){h(!0),i("");try{await t(),m(!1),i("Setup completed. You can now open the administration application and log in.")}catch(u){const E=Array.isArray(u.validationErrors)?` ${u.validationErrors.map(y=>`${y.path}: ${y.message}`).join("; ")}`:"";i(`${u.message}${E}`)}finally{h(!1)}}function k(t){if(t.preventDefault(),r!==f){i("Passwords do not match.");return}j(()=>D(l,{setupCode:n,username:d,discordId:p,password:r}))}function A(t){t.preventDefault(),o&&j(async()=>I(l,{setupCode:n,fileName:o.name,yaml:await o.text()}))}return e.jsxs("div",{className:"min-h-screen bg-neutral-950 p-1 text-slate-100",children:[e.jsx(P,{}),e.jsxs("main",{className:"mx-auto flex min-h-screen w-full max-w-3xl flex-col justify-center gap-0.5",children:[e.jsxs(c,{title:"MultiRover setup",meta:a===null?"checking":a?"required":"complete",bodyClassName:"space-y-0.5 p-1 text-sm",children:[a?e.jsx("p",{children:"Enter the one-time code from setup-code.txt in the server data folder, then create the first lockdown administrator or import an existing configuration."}):null,a===!1?e.jsx(q,{className:"button-dark inline-block",to:"/admin",children:"Open administration"}):null,g?e.jsx("p",{className:"surface p-1 text-sm text-slate-200",children:g}):null]}),a?e.jsxs(e.Fragment,{children:[e.jsxs(c,{title:"Setup authorization",bodyClassName:"p-1",children:[e.jsx("label",{className:"block text-xs font-semibold text-slate-200",children:"One-time setup code"}),e.jsx("input",{className:"field-input mt-0.5 w-full font-mono",value:n,onChange:t=>b(t.target.value)})]}),e.jsx(c,{title:"Create first administrator",bodyClassName:"p-1",children:e.jsxs("form",{className:"grid gap-0.5 md:grid-cols-2",onSubmit:k,children:[e.jsx("input",{className:"field-input",placeholder:"Username",value:d,onChange:t=>C(t.target.value)}),e.jsx("input",{className:"field-input",placeholder:"Discord id (optional)",value:p,onChange:t=>N(t.target.value)}),e.jsx("input",{className:"field-input",type:"password",placeholder:"Password",value:r,onChange:t=>S(t.target.value)}),e.jsx("input",{className:"field-input",type:"password",placeholder:"Confirm password",value:f,onChange:t=>v(t.target.value)}),e.jsx("button",{className:"button-dark md:col-span-2",type:"submit",disabled:x||!n||!d||!r,children:"Create lockdown administrator"})]})}),e.jsxs(c,{title:"Import configuration file",bodyClassName:"space-y-0.5 p-1 text-sm",children:[e.jsx("p",{className:"text-xs text-slate-400",children:"Choose an existing YAML configuration explicitly. The server validates and imports it once, and its secrets are never displayed back in the browser."}),e.jsxs("form",{className:"flex flex-col gap-0.5 md:flex-row",onSubmit:A,children:[e.jsx("input",{className:"field-input flex-1",type:"file",accept:".yaml,.yml,text/yaml",onChange:t=>w(t.target.files?.[0]||null)}),e.jsx("button",{className:"button-dark",type:"submit",disabled:x||!n||!o,children:"Import selected YAML"})]})]})]}):null]})]})}export{R as default}; +//# sourceMappingURL=SetupApp-CFFNNLJ4.js.map diff --git a/server/public/assets/SetupApp-DBQeHfaN.js.map b/server/public/assets/SetupApp-CFFNNLJ4.js.map similarity index 99% rename from server/public/assets/SetupApp-DBQeHfaN.js.map rename to server/public/assets/SetupApp-CFFNNLJ4.js.map index 05fe5d97..6c4addff 100644 --- a/server/public/assets/SetupApp-DBQeHfaN.js.map +++ b/server/public/assets/SetupApp-CFFNNLJ4.js.map @@ -1 +1 @@ -{"version":3,"file":"SetupApp-DBQeHfaN.js","sources":["../../../webui/src/admin/SetupApp.jsx"],"sourcesContent":["// First-Run Setup Application\n// Purpose: Initializes a fresh server or imports an explicitly selected YAML configuration file through the restricted setup channel.\n// Scope: Exists only while the server reports setup required; ordinary administration belongs to /admin.\nimport { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport { createFirstAdministrator, getSetupStatus, importConfigurationFile } from './api.js';\n\nexport default function SetupApp() {\n const socket = useSocket();\n const [required, setRequired] = useState(null);\n const [setupCode, setSetupCode] = useState('');\n const [username, setUsername] = useState('');\n const [discordId, setDiscordId] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [configurationFile, setConfigurationFile] = useState(null);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState('');\n\n useEffect(() => {\n getSetupStatus(socket).then((response) => setRequired(response.required)).catch((error) => setMessage(error.message));\n }, [socket]);\n\n async function run(work) {\n setBusy(true);\n setMessage('');\n try {\n await work();\n setRequired(false);\n setMessage('Setup completed. You can now open the administration application and log in.');\n } catch (error) {\n const details = Array.isArray(error.validationErrors)\n ? ` ${error.validationErrors.map((entry) => `${entry.path}: ${entry.message}`).join('; ')}`\n : '';\n setMessage(`${error.message}${details}`);\n } finally {\n setBusy(false);\n }\n }\n\n function createAdministrator(event) {\n event.preventDefault();\n if (password !== confirmPassword) {\n setMessage('Passwords do not match.');\n return;\n }\n run(() => createFirstAdministrator(socket, { setupCode, username, discordId, password }));\n }\n\n function importSelectedConfiguration(event) {\n event.preventDefault();\n if (!configurationFile) return;\n run(async () => importConfigurationFile(socket, {\n setupCode,\n fileName: configurationFile.name,\n yaml: await configurationFile.text(),\n }));\n }\n\n return (\n
\n \n
\n \n {required ?

Enter the one-time code from setup-code.txt in the server data folder, then create the first lockdown administrator or import an existing configuration.

: null}\n {required === false ? Open administration : null}\n {message ?

{message}

: null}\n
\n\n {required ? (\n <>\n \n \n setSetupCode(event.target.value)} />\n \n \n
\n setUsername(event.target.value)} />\n setDiscordId(event.target.value)} />\n setPassword(event.target.value)} />\n setConfirmPassword(event.target.value)} />\n \n
\n
\n \n

Choose an existing YAML configuration explicitly. The server validates and imports it once, and its secrets are never displayed back in the browser.

\n
\n setConfigurationFile(event.target.files?.[0] || null)} />\n \n
\n
\n \n ) : null}\n
\n
\n );\n}\n"],"names":["SetupApp","socket","useSocket","required","setRequired","useState","setupCode","setSetupCode","username","setUsername","discordId","setDiscordId","password","setPassword","confirmPassword","setConfirmPassword","configurationFile","setConfigurationFile","busy","setBusy","message","setMessage","useEffect","getSetupStatus","response","error","run","work","details","entry","createAdministrator","event","createFirstAdministrator","importSelectedConfiguration","importConfigurationFile","jsxs","jsx","SocketConnectionPill","CardFrame","Link","Fragment"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"SetupApp-CFFNNLJ4.js","sources":["../../../webui/src/admin/SetupApp.jsx"],"sourcesContent":["// First-Run Setup Application\n// Purpose: Initializes a fresh server or imports an explicitly selected YAML configuration file through the restricted setup channel.\n// Scope: Exists only while the server reports setup required; ordinary administration belongs to /admin.\nimport { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport CardFrame from '../components/CardFrame/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport { createFirstAdministrator, getSetupStatus, importConfigurationFile } from './api.js';\n\nexport default function SetupApp() {\n const socket = useSocket();\n const [required, setRequired] = useState(null);\n const [setupCode, setSetupCode] = useState('');\n const [username, setUsername] = useState('');\n const [discordId, setDiscordId] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [configurationFile, setConfigurationFile] = useState(null);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState('');\n\n useEffect(() => {\n getSetupStatus(socket).then((response) => setRequired(response.required)).catch((error) => setMessage(error.message));\n }, [socket]);\n\n async function run(work) {\n setBusy(true);\n setMessage('');\n try {\n await work();\n setRequired(false);\n setMessage('Setup completed. You can now open the administration application and log in.');\n } catch (error) {\n const details = Array.isArray(error.validationErrors)\n ? ` ${error.validationErrors.map((entry) => `${entry.path}: ${entry.message}`).join('; ')}`\n : '';\n setMessage(`${error.message}${details}`);\n } finally {\n setBusy(false);\n }\n }\n\n function createAdministrator(event) {\n event.preventDefault();\n if (password !== confirmPassword) {\n setMessage('Passwords do not match.');\n return;\n }\n run(() => createFirstAdministrator(socket, { setupCode, username, discordId, password }));\n }\n\n function importSelectedConfiguration(event) {\n event.preventDefault();\n if (!configurationFile) return;\n run(async () => importConfigurationFile(socket, {\n setupCode,\n fileName: configurationFile.name,\n yaml: await configurationFile.text(),\n }));\n }\n\n return (\n
\n \n
\n \n {required ?

Enter the one-time code from setup-code.txt in the server data folder, then create the first lockdown administrator or import an existing configuration.

: null}\n {required === false ? Open administration : null}\n {message ?

{message}

: null}\n
\n\n {required ? (\n <>\n \n \n setSetupCode(event.target.value)} />\n \n \n
\n setUsername(event.target.value)} />\n setDiscordId(event.target.value)} />\n setPassword(event.target.value)} />\n setConfirmPassword(event.target.value)} />\n \n
\n
\n \n

Choose an existing YAML configuration explicitly. The server validates and imports it once, and its secrets are never displayed back in the browser.

\n
\n setConfigurationFile(event.target.files?.[0] || null)} />\n \n
\n
\n \n ) : null}\n
\n
\n );\n}\n"],"names":["SetupApp","socket","useSocket","required","setRequired","useState","setupCode","setSetupCode","username","setUsername","discordId","setDiscordId","password","setPassword","confirmPassword","setConfirmPassword","configurationFile","setConfigurationFile","busy","setBusy","message","setMessage","useEffect","getSetupStatus","response","error","run","work","details","entry","createAdministrator","event","createFirstAdministrator","importSelectedConfiguration","importConfigurationFile","jsxs","jsx","SocketConnectionPill","CardFrame","Link","Fragment"],"mappings":"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"} \ No newline at end of file diff --git a/server/public/assets/dash.all.min-C9gxBrL1.js b/server/public/assets/dash.all.min-C9gxBrL1.js new file mode 100644 index 00000000..33a67cd5 --- /dev/null +++ b/server/public/assets/dash.all.min-C9gxBrL1.js @@ -0,0 +1,23 @@ +var Yl={7267:function(wt,me){me.byteLength=function(w){var g=E(w),h=g[0],r=g[1];return 3*(h+r)/4-r},me.toByteArray=function(w){var g,h,r=E(w),H=r[0],G=r[1],le=new f((function(ce,Le,Be){return 3*(Le+Be)/4-Be})(0,H,G)),de=0,De=G>0?H-4:H;for(h=0;h>16&255,le[de++]=g>>8&255,le[de++]=255&g;return G===2&&(g=F[w.charCodeAt(h)]<<2|F[w.charCodeAt(h+1)]>>4,le[de++]=255&g),G===1&&(g=F[w.charCodeAt(h)]<<10|F[w.charCodeAt(h+1)]<<4|F[w.charCodeAt(h+2)]>>2,le[de++]=g>>8&255,le[de++]=255&g),le},me.fromByteArray=function(w){for(var g,h=w.length,r=h%3,H=[],G=16383,le=0,de=h-r;lede?de:le+G));return r===1?(g=w[h-1],H.push(P[g>>2]+P[g<<4&63]+"==")):r===2&&(g=(w[h-2]<<8)+w[h-1],H.push(P[g>>10]+P[g>>4&63]+P[g<<2&63]+"=")),H.join("")};for(var P=[],F=[],f=typeof Uint8Array<"u"?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0;p<64;++p)P[p]=o[p],F[o.charCodeAt(p)]=p;function E(w){var g=w.length;if(g%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var h=w.indexOf("=");return h===-1&&(h=g),[h,h===g?0:4-h%4]}function _(w,g,h){for(var r,H,G=[],le=g;le>18&63]+P[H>>12&63]+P[H>>6&63]+P[63&H]);return G.join("")}F[45]=62,F[95]=63},44:function(wt,me,P){const F=P(7267),f=P(7986),o=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;me.Buffer=_,me.SlowBuffer=function(i){return+i!=i&&(i=0),_.alloc(+i)},me.INSPECT_MAX_BYTES=50;const p=2147483647;function E(i){if(i>p)throw new RangeError('The value "'+i+'" is invalid for option "size"');const S=new Uint8Array(i);return Object.setPrototypeOf(S,_.prototype),S}function _(i,S,I){if(typeof i=="number"){if(typeof S=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return h(i)}return w(i,S,I)}function w(i,S,I){if(typeof i=="string")return(function(be,tt){if(typeof tt=="string"&&tt!==""||(tt="utf8"),!_.isEncoding(tt))throw new TypeError("Unknown encoding: "+tt);const ae=0|le(be,tt);let ze=E(ae);const je=ze.write(be,tt);return je!==ae&&(ze=ze.slice(0,je)),ze})(i,S);if(ArrayBuffer.isView(i))return(function(be){if(j(be,Uint8Array)){const tt=new Uint8Array(be);return H(tt.buffer,tt.byteOffset,tt.byteLength)}return r(be)})(i);if(i==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof i);if(j(i,ArrayBuffer)||i&&j(i.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(j(i,SharedArrayBuffer)||i&&j(i.buffer,SharedArrayBuffer)))return H(i,S,I);if(typeof i=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');const $=i.valueOf&&i.valueOf();if($!=null&&$!==i)return _.from($,S,I);const ie=(function(be){if(_.isBuffer(be)){const tt=0|G(be.length),ae=E(tt);return ae.length===0||be.copy(ae,0,0,tt),ae}return be.length!==void 0?typeof be.length!="number"||qe(be.length)?E(0):r(be):be.type==="Buffer"&&Array.isArray(be.data)?r(be.data):void 0})(i);if(ie)return ie;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof i[Symbol.toPrimitive]=="function")return _.from(i[Symbol.toPrimitive]("string"),S,I);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof i)}function g(i){if(typeof i!="number")throw new TypeError('"size" argument must be of type number');if(i<0)throw new RangeError('The value "'+i+'" is invalid for option "size"')}function h(i){return g(i),E(i<0?0:0|G(i))}function r(i){const S=i.length<0?0:0|G(i.length),I=E(S);for(let $=0;$=p)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+p.toString(16)+" bytes");return 0|i}function le(i,S){if(_.isBuffer(i))return i.length;if(ArrayBuffer.isView(i)||j(i,ArrayBuffer))return i.byteLength;if(typeof i!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof i);const I=i.length,$=arguments.length>2&&arguments[2]===!0;if(!$&&I===0)return 0;let ie=!1;for(;;)switch(S){case"ascii":case"latin1":case"binary":return I;case"utf8":case"utf-8":return V(i).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*I;case"hex":return I>>>1;case"base64":return B(i).length;default:if(ie)return $?-1:V(i).length;S=(""+S).toLowerCase(),ie=!0}}function de(i,S,I){let $=!1;if((S===void 0||S<0)&&(S=0),S>this.length||((I===void 0||I>this.length)&&(I=this.length),I<=0)||(I>>>=0)<=(S>>>=0))return"";for(i||(i="utf8");;)switch(i){case"hex":return pt(this,S,I);case"utf8":case"utf-8":return Ne(this,S,I);case"ascii":return ht(this,S,I);case"latin1":case"binary":return ye(this,S,I);case"base64":return Se(this,S,I);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return He(this,S,I);default:if($)throw new TypeError("Unknown encoding: "+i);i=(i+"").toLowerCase(),$=!0}}function De(i,S,I){const $=i[S];i[S]=i[I],i[I]=$}function ce(i,S,I,$,ie){if(i.length===0)return-1;if(typeof I=="string"?($=I,I=0):I>2147483647?I=2147483647:I<-2147483648&&(I=-2147483648),qe(I=+I)&&(I=ie?0:i.length-1),I<0&&(I=i.length+I),I>=i.length){if(ie)return-1;I=i.length-1}else if(I<0){if(!ie)return-1;I=0}if(typeof S=="string"&&(S=_.from(S,$)),_.isBuffer(S))return S.length===0?-1:Le(i,S,I,$,ie);if(typeof S=="number")return S&=255,typeof Uint8Array.prototype.indexOf=="function"?ie?Uint8Array.prototype.indexOf.call(i,S,I):Uint8Array.prototype.lastIndexOf.call(i,S,I):Le(i,[S],I,$,ie);throw new TypeError("val must be string, number or Buffer")}function Le(i,S,I,$,ie){let be,tt=1,ae=i.length,ze=S.length;if($!==void 0&&(($=String($).toLowerCase())==="ucs2"||$==="ucs-2"||$==="utf16le"||$==="utf-16le")){if(i.length<2||S.length<2)return-1;tt=2,ae/=2,ze/=2,I/=2}function je(Y,he){return tt===1?Y[he]:Y.readUInt16BE(he*tt)}if(ie){let Y=-1;for(be=I;beae&&(I=ae-ze),be=I;be>=0;be--){let Y=!0;for(let he=0;heie&&($=ie):$=ie;const be=S.length;let tt;for($>be/2&&($=be/2),tt=0;tt<$;++tt){const ae=parseInt(S.substr(2*tt,2),16);if(qe(ae))return tt;i[I+tt]=ae}return tt}function ot(i,S,I,$){return Pe(V(S,i.length-I),i,I,$)}function Ge(i,S,I,$){return Pe((function(ie){const be=[];for(let tt=0;tt>8,ze=tt%256,je.push(ze),je.push(ae);return je})(S,i.length-I),i,I,$)}function Se(i,S,I){return S===0&&I===i.length?F.fromByteArray(i):F.fromByteArray(i.slice(S,I))}function Ne(i,S,I){I=Math.min(i.length,I);const $=[];let ie=S;for(;ie239?4:be>223?3:be>191?2:1;if(ie+ae<=I){let ze,je,Y,he;switch(ae){case 1:be<128&&(tt=be);break;case 2:ze=i[ie+1],(192&ze)==128&&(he=(31&be)<<6|63&ze,he>127&&(tt=he));break;case 3:ze=i[ie+1],je=i[ie+2],(192&ze)==128&&(192&je)==128&&(he=(15&be)<<12|(63&ze)<<6|63&je,he>2047&&(he<55296||he>57343)&&(tt=he));break;case 4:ze=i[ie+1],je=i[ie+2],Y=i[ie+3],(192&ze)==128&&(192&je)==128&&(192&Y)==128&&(he=(15&be)<<18|(63&ze)<<12|(63&je)<<6|63&Y,he>65535&&he<1114112&&(tt=he))}}tt===null?(tt=65533,ae=1):tt>65535&&(tt-=65536,$.push(tt>>>10&1023|55296),tt=56320|1023&tt),$.push(tt),ie+=ae}return(function(be){const tt=be.length;if(tt<=ke)return String.fromCharCode.apply(String,be);let ae="",ze=0;for(;ze"u"||typeof console.error!="function"||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(_.prototype,"parent",{enumerable:!0,get:function(){if(_.isBuffer(this))return this.buffer}}),Object.defineProperty(_.prototype,"offset",{enumerable:!0,get:function(){if(_.isBuffer(this))return this.byteOffset}}),_.poolSize=8192,_.from=function(i,S,I){return w(i,S,I)},Object.setPrototypeOf(_.prototype,Uint8Array.prototype),Object.setPrototypeOf(_,Uint8Array),_.alloc=function(i,S,I){return(function($,ie,be){return g($),$<=0?E($):ie!==void 0?typeof be=="string"?E($).fill(ie,be):E($).fill(ie):E($)})(i,S,I)},_.allocUnsafe=function(i){return h(i)},_.allocUnsafeSlow=function(i){return h(i)},_.isBuffer=function(i){return i!=null&&i._isBuffer===!0&&i!==_.prototype},_.compare=function(i,S){if(j(i,Uint8Array)&&(i=_.from(i,i.offset,i.byteLength)),j(S,Uint8Array)&&(S=_.from(S,S.offset,S.byteLength)),!_.isBuffer(i)||!_.isBuffer(S))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(i===S)return 0;let I=i.length,$=S.length;for(let ie=0,be=Math.min(I,$);ie$.length?(_.isBuffer(be)||(be=_.from(be)),be.copy($,ie)):Uint8Array.prototype.set.call($,be,ie);else{if(!_.isBuffer(be))throw new TypeError('"list" argument must be an Array of Buffers');be.copy($,ie)}ie+=be.length}return $},_.byteLength=le,_.prototype._isBuffer=!0,_.prototype.swap16=function(){const i=this.length;if(i%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let S=0;SS&&(i+=" ... "),""},o&&(_.prototype[o]=_.prototype.inspect),_.prototype.compare=function(i,S,I,$,ie){if(j(i,Uint8Array)&&(i=_.from(i,i.offset,i.byteLength)),!_.isBuffer(i))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof i);if(S===void 0&&(S=0),I===void 0&&(I=i?i.length:0),$===void 0&&($=0),ie===void 0&&(ie=this.length),S<0||I>i.length||$<0||ie>this.length)throw new RangeError("out of range index");if($>=ie&&S>=I)return 0;if($>=ie)return-1;if(S>=I)return 1;if(this===i)return 0;let be=(ie>>>=0)-($>>>=0),tt=(I>>>=0)-(S>>>=0);const ae=Math.min(be,tt),ze=this.slice($,ie),je=i.slice(S,I);for(let Y=0;Y>>=0,isFinite(I)?(I>>>=0,$===void 0&&($="utf8")):($=I,I=void 0)}const ie=this.length-S;if((I===void 0||I>ie)&&(I=ie),i.length>0&&(I<0||S<0)||S>this.length)throw new RangeError("Attempt to write outside buffer bounds");$||($="utf8");let be=!1;for(;;)switch($){case"hex":return Be(this,i,S,I);case"utf8":case"utf-8":return ot(this,i,S,I);case"ascii":case"latin1":case"binary":return Ge(this,i,S,I);case"base64":return X(this,i,S,I);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Z(this,i,S,I);default:if(be)throw new TypeError("Unknown encoding: "+$);$=(""+$).toLowerCase(),be=!0}},_.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const ke=4096;function ht(i,S,I){let $="";I=Math.min(i.length,I);for(let ie=S;ie$)&&(I=$);let ie="";for(let be=S;beI)throw new RangeError("Trying to access beyond buffer length")}function Ke(i,S,I,$,ie,be){if(!_.isBuffer(i))throw new TypeError('"buffer" argument must be a Buffer instance');if(S>ie||Si.length)throw new RangeError("Index out of range")}function Pt(i,S,I,$,ie){Ie(S,$,ie,i,I,7);let be=Number(S&BigInt(4294967295));i[I++]=be,be>>=8,i[I++]=be,be>>=8,i[I++]=be,be>>=8,i[I++]=be;let tt=Number(S>>BigInt(32)&BigInt(4294967295));return i[I++]=tt,tt>>=8,i[I++]=tt,tt>>=8,i[I++]=tt,tt>>=8,i[I++]=tt,I}function Nt(i,S,I,$,ie){Ie(S,$,ie,i,I,7);let be=Number(S&BigInt(4294967295));i[I+7]=be,be>>=8,i[I+6]=be,be>>=8,i[I+5]=be,be>>=8,i[I+4]=be;let tt=Number(S>>BigInt(32)&BigInt(4294967295));return i[I+3]=tt,tt>>=8,i[I+2]=tt,tt>>=8,i[I+1]=tt,tt>>=8,i[I]=tt,I+8}function kt(i,S,I,$,ie,be){if(I+$>i.length)throw new RangeError("Index out of range");if(I<0)throw new RangeError("Index out of range")}function Ut(i,S,I,$,ie){return S=+S,I>>>=0,ie||kt(i,0,I,4),f.write(i,S,I,$,23,4),I+4}function ln(i,S,I,$,ie){return S=+S,I>>>=0,ie||kt(i,0,I,8),f.write(i,S,I,$,52,8),I+8}_.prototype.slice=function(i,S){const I=this.length;(i=~~i)<0?(i+=I)<0&&(i=0):i>I&&(i=I),(S=S===void 0?I:~~S)<0?(S+=I)<0&&(S=0):S>I&&(S=I),S>>=0,S>>>=0,I||Fe(i,S,this.length);let $=this[i],ie=1,be=0;for(;++be>>=0,S>>>=0,I||Fe(i,S,this.length);let $=this[i+--S],ie=1;for(;S>0&&(ie*=256);)$+=this[i+--S]*ie;return $},_.prototype.readUint8=_.prototype.readUInt8=function(i,S){return i>>>=0,S||Fe(i,1,this.length),this[i]},_.prototype.readUint16LE=_.prototype.readUInt16LE=function(i,S){return i>>>=0,S||Fe(i,2,this.length),this[i]|this[i+1]<<8},_.prototype.readUint16BE=_.prototype.readUInt16BE=function(i,S){return i>>>=0,S||Fe(i,2,this.length),this[i]<<8|this[i+1]},_.prototype.readUint32LE=_.prototype.readUInt32LE=function(i,S){return i>>>=0,S||Fe(i,4,this.length),(this[i]|this[i+1]<<8|this[i+2]<<16)+16777216*this[i+3]},_.prototype.readUint32BE=_.prototype.readUInt32BE=function(i,S){return i>>>=0,S||Fe(i,4,this.length),16777216*this[i]+(this[i+1]<<16|this[i+2]<<8|this[i+3])},_.prototype.readBigUInt64LE=_e((function(i){mt(i>>>=0,"offset");const S=this[i],I=this[i+7];S!==void 0&&I!==void 0||It(i,this.length-8);const $=S+256*this[++i]+65536*this[++i]+this[++i]*2**24,ie=this[++i]+256*this[++i]+65536*this[++i]+I*2**24;return BigInt($)+(BigInt(ie)<>>=0,"offset");const S=this[i],I=this[i+7];S!==void 0&&I!==void 0||It(i,this.length-8);const $=S*2**24+65536*this[++i]+256*this[++i]+this[++i],ie=this[++i]*2**24+65536*this[++i]+256*this[++i]+I;return(BigInt($)<>>=0,S>>>=0,I||Fe(i,S,this.length);let $=this[i],ie=1,be=0;for(;++be=ie&&($-=Math.pow(2,8*S)),$},_.prototype.readIntBE=function(i,S,I){i>>>=0,S>>>=0,I||Fe(i,S,this.length);let $=S,ie=1,be=this[i+--$];for(;$>0&&(ie*=256);)be+=this[i+--$]*ie;return ie*=128,be>=ie&&(be-=Math.pow(2,8*S)),be},_.prototype.readInt8=function(i,S){return i>>>=0,S||Fe(i,1,this.length),128&this[i]?-1*(255-this[i]+1):this[i]},_.prototype.readInt16LE=function(i,S){i>>>=0,S||Fe(i,2,this.length);const I=this[i]|this[i+1]<<8;return 32768&I?4294901760|I:I},_.prototype.readInt16BE=function(i,S){i>>>=0,S||Fe(i,2,this.length);const I=this[i+1]|this[i]<<8;return 32768&I?4294901760|I:I},_.prototype.readInt32LE=function(i,S){return i>>>=0,S||Fe(i,4,this.length),this[i]|this[i+1]<<8|this[i+2]<<16|this[i+3]<<24},_.prototype.readInt32BE=function(i,S){return i>>>=0,S||Fe(i,4,this.length),this[i]<<24|this[i+1]<<16|this[i+2]<<8|this[i+3]},_.prototype.readBigInt64LE=_e((function(i){mt(i>>>=0,"offset");const S=this[i],I=this[i+7];S!==void 0&&I!==void 0||It(i,this.length-8);const $=this[i+4]+256*this[i+5]+65536*this[i+6]+(I<<24);return(BigInt($)<>>=0,"offset");const S=this[i],I=this[i+7];S!==void 0&&I!==void 0||It(i,this.length-8);const $=(S<<24)+65536*this[++i]+256*this[++i]+this[++i];return(BigInt($)<>>=0,S||Fe(i,4,this.length),f.read(this,i,!0,23,4)},_.prototype.readFloatBE=function(i,S){return i>>>=0,S||Fe(i,4,this.length),f.read(this,i,!1,23,4)},_.prototype.readDoubleLE=function(i,S){return i>>>=0,S||Fe(i,8,this.length),f.read(this,i,!0,52,8)},_.prototype.readDoubleBE=function(i,S){return i>>>=0,S||Fe(i,8,this.length),f.read(this,i,!1,52,8)},_.prototype.writeUintLE=_.prototype.writeUIntLE=function(i,S,I,$){i=+i,S>>>=0,I>>>=0,$||Ke(this,i,S,I,Math.pow(2,8*I)-1,0);let ie=1,be=0;for(this[S]=255&i;++be>>=0,I>>>=0,$||Ke(this,i,S,I,Math.pow(2,8*I)-1,0);let ie=I-1,be=1;for(this[S+ie]=255&i;--ie>=0&&(be*=256);)this[S+ie]=i/be&255;return S+I},_.prototype.writeUint8=_.prototype.writeUInt8=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,1,255,0),this[S]=255&i,S+1},_.prototype.writeUint16LE=_.prototype.writeUInt16LE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,2,65535,0),this[S]=255&i,this[S+1]=i>>>8,S+2},_.prototype.writeUint16BE=_.prototype.writeUInt16BE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,2,65535,0),this[S]=i>>>8,this[S+1]=255&i,S+2},_.prototype.writeUint32LE=_.prototype.writeUInt32LE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,4,4294967295,0),this[S+3]=i>>>24,this[S+2]=i>>>16,this[S+1]=i>>>8,this[S]=255&i,S+4},_.prototype.writeUint32BE=_.prototype.writeUInt32BE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,4,4294967295,0),this[S]=i>>>24,this[S+1]=i>>>16,this[S+2]=i>>>8,this[S+3]=255&i,S+4},_.prototype.writeBigUInt64LE=_e((function(i,S=0){return Pt(this,i,S,BigInt(0),BigInt("0xffffffffffffffff"))})),_.prototype.writeBigUInt64BE=_e((function(i,S=0){return Nt(this,i,S,BigInt(0),BigInt("0xffffffffffffffff"))})),_.prototype.writeIntLE=function(i,S,I,$){if(i=+i,S>>>=0,!$){const ae=Math.pow(2,8*I-1);Ke(this,i,S,I,ae-1,-ae)}let ie=0,be=1,tt=0;for(this[S]=255&i;++ie>>=0,!$){const ae=Math.pow(2,8*I-1);Ke(this,i,S,I,ae-1,-ae)}let ie=I-1,be=1,tt=0;for(this[S+ie]=255&i;--ie>=0&&(be*=256);)i<0&&tt===0&&this[S+ie+1]!==0&&(tt=1),this[S+ie]=(i/be|0)-tt&255;return S+I},_.prototype.writeInt8=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,1,127,-128),i<0&&(i=255+i+1),this[S]=255&i,S+1},_.prototype.writeInt16LE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,2,32767,-32768),this[S]=255&i,this[S+1]=i>>>8,S+2},_.prototype.writeInt16BE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,2,32767,-32768),this[S]=i>>>8,this[S+1]=255&i,S+2},_.prototype.writeInt32LE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,4,2147483647,-2147483648),this[S]=255&i,this[S+1]=i>>>8,this[S+2]=i>>>16,this[S+3]=i>>>24,S+4},_.prototype.writeInt32BE=function(i,S,I){return i=+i,S>>>=0,I||Ke(this,i,S,4,2147483647,-2147483648),i<0&&(i=4294967295+i+1),this[S]=i>>>24,this[S+1]=i>>>16,this[S+2]=i>>>8,this[S+3]=255&i,S+4},_.prototype.writeBigInt64LE=_e((function(i,S=0){return Pt(this,i,S,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),_.prototype.writeBigInt64BE=_e((function(i,S=0){return Nt(this,i,S,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),_.prototype.writeFloatLE=function(i,S,I){return Ut(this,i,S,!0,I)},_.prototype.writeFloatBE=function(i,S,I){return Ut(this,i,S,!1,I)},_.prototype.writeDoubleLE=function(i,S,I){return ln(this,i,S,!0,I)},_.prototype.writeDoubleBE=function(i,S,I){return ln(this,i,S,!1,I)},_.prototype.copy=function(i,S,I,$){if(!_.isBuffer(i))throw new TypeError("argument should be a Buffer");if(I||(I=0),$||$===0||($=this.length),S>=i.length&&(S=i.length),S||(S=0),$>0&&$=this.length)throw new RangeError("Index out of range");if($<0)throw new RangeError("sourceEnd out of bounds");$>this.length&&($=this.length),i.length-S<$-I&&($=i.length-S+I);const ie=$-I;return this===i&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(S,I,$):Uint8Array.prototype.set.call(i,this.subarray(I,$),S),ie},_.prototype.fill=function(i,S,I,$){if(typeof i=="string"){if(typeof S=="string"?($=S,S=0,I=this.length):typeof I=="string"&&($=I,I=this.length),$!==void 0&&typeof $!="string")throw new TypeError("encoding must be a string");if(typeof $=="string"&&!_.isEncoding($))throw new TypeError("Unknown encoding: "+$);if(i.length===1){const be=i.charCodeAt(0);($==="utf8"&&be<128||$==="latin1")&&(i=be)}}else typeof i=="number"?i&=255:typeof i=="boolean"&&(i=Number(i));if(S<0||this.length>>=0,I=I===void 0?this.length:I>>>0,i||(i=0),typeof i=="number")for(ie=S;ie=$+4;I-=3)S=`_${i.slice(I-3,I)}${S}`;return`${i.slice(0,I)}${S}`}function Ie(i,S,I,$,ie,be){if(i>I||i= 0${tt} and < 2${tt} ** ${8*(be+1)}${tt}`:`>= -(2${tt} ** ${8*(be+1)-1}${tt}) and < 2 ** ${8*(be+1)-1}${tt}`,new an.ERR_OUT_OF_RANGE("value",ae,i)}(function(tt,ae,ze){mt(ae,"offset"),tt[ae]!==void 0&&tt[ae+ze]!==void 0||It(ae,tt.length-(ze+1))})($,ie,be)}function mt(i,S){if(typeof i!="number")throw new an.ERR_INVALID_ARG_TYPE(S,"number",i)}function It(i,S,I){throw Math.floor(i)!==i?(mt(i,I),new an.ERR_OUT_OF_RANGE("offset","an integer",i)):S<0?new an.ERR_BUFFER_OUT_OF_BOUNDS:new an.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${S}`,i)}En("ERR_BUFFER_OUT_OF_BOUNDS",(function(i){return i?`${i} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),En("ERR_INVALID_ARG_TYPE",(function(i,S){return`The "${i}" argument must be of type number. Received type ${typeof S}`}),TypeError),En("ERR_OUT_OF_RANGE",(function(i,S,I){let $=`The value of "${i}" is out of range.`,ie=I;return Number.isInteger(I)&&Math.abs(I)>4294967296?ie=Oe(String(I)):typeof I=="bigint"&&(ie=String(I),(I>BigInt(2)**BigInt(32)||I<-(BigInt(2)**BigInt(32)))&&(ie=Oe(ie)),ie+="n"),$+=` It must be ${S}. Received ${ie}`,$}),RangeError);const Ye=/[^+/0-9A-Za-z-_]/g;function V(i,S){let I;S=S||1/0;const $=i.length;let ie=null;const be=[];for(let tt=0;tt<$;++tt){if(I=i.charCodeAt(tt),I>55295&&I<57344){if(!ie){if(I>56319){(S-=3)>-1&&be.push(239,191,189);continue}if(tt+1===$){(S-=3)>-1&&be.push(239,191,189);continue}ie=I;continue}if(I<56320){(S-=3)>-1&&be.push(239,191,189),ie=I;continue}I=65536+(ie-55296<<10|I-56320)}else ie&&(S-=3)>-1&&be.push(239,191,189);if(ie=null,I<128){if((S-=1)<0)break;be.push(I)}else if(I<2048){if((S-=2)<0)break;be.push(I>>6|192,63&I|128)}else if(I<65536){if((S-=3)<0)break;be.push(I>>12|224,I>>6&63|128,63&I|128)}else{if(!(I<1114112))throw new Error("Invalid code point");if((S-=4)<0)break;be.push(I>>18|240,I>>12&63|128,I>>6&63|128,63&I|128)}}return be}function B(i){return F.toByteArray((function(S){if((S=(S=S.split("=")[0]).trim().replace(Ye,"")).length<2)return"";for(;S.length%4!=0;)S+="=";return S})(i))}function Pe(i,S,I,$){let ie;for(ie=0;ie<$&&!(ie+I>=S.length||ie>=i.length);++ie)S[ie+I]=i[ie];return ie}function j(i,S){return i instanceof S||i!=null&&i.constructor!=null&&i.constructor.name!=null&&i.constructor.name===S.name}function qe(i){return i!=i}const it=(function(){const i="0123456789abcdef",S=new Array(256);for(let I=0;I<16;++I){const $=16*I;for(let ie=0;ie<16;++ie)S[$+ie]=i[I]+i[ie]}return S})();function _e(i){return typeof BigInt>"u"?Ue:i}function Ue(){throw new Error("BigInt not supported")}},6877:function(wt,me){var P={parseBuffer:function(o){return new F(o).parse()},addBoxProcessor:function(o,p){typeof o=="string"&&typeof p=="function"&&(f.prototype._boxProcessors[o]=p)},createFile:function(){return new F},createBox:function(o,p,E){var _=f.create(o);return p&&p.append(_,E),_},createFullBox:function(o,p,E){var _=P.createBox(o,p,E);return _.version=0,_.flags=0,_},Utils:{}};P.Utils.dataViewToString=function(o,p){var E=p||"utf-8";if(typeof TextDecoder<"u")return new TextDecoder(E).decode(o);var _=[],w=0;if(E==="utf-8")for(;w>6),p.push(128|63&_)):_<65536?(p.push(224|_>>12),p.push(128|63&_>>6),p.push(128|63&_)):(p.push(240|_>>18),p.push(128|63&_>>12),p.push(128|63&_>>6),p.push(128|63&_))}return p},P.Utils.appendBox=function(o,p,E){if(p._offset=o._cursor.offset,p._root=o._root?o._root:o,p._raw=o._raw,p._parent=o,E!==-1)if(E!=null){var _,w=-1;if(typeof E=="number")w=E;else{if(typeof E=="string")_=E;else{if(typeof E!="object"||!E.type)return void o.boxes.push(p);_=E.type}for(var g=0;g>3,p},f.prototype._readUint=function(o){var p,E,_=null,w=this._cursor.offset-this._raw.byteOffset;switch(o){case 8:_=this._raw.getUint8(w);break;case 16:_=this._raw.getUint16(w);break;case 24:_=((p=this._raw.getUint16(w))<<8)+(E=this._raw.getUint8(w+2));break;case 32:_=this._raw.getUint32(w);break;case 64:p=this._raw.getUint32(w),E=this._raw.getUint32(w+4),_=p*Math.pow(2,32)+E}return this._cursor.offset+=o>>3,_},f.prototype._readString=function(o){for(var p="",E=0;E0?o:this._raw.byteLength-(this._cursor.offset-this._offset);if(p>0){var E=new Uint8Array(this._raw.buffer,this._cursor.offset,p);return this._cursor.offset+=p,E}return null},f.prototype._readUTF8String=function(){var o=this._raw.byteLength-(this._cursor.offset-this._offset),p=null;return o>0&&(p=new DataView(this._raw.buffer,this._cursor.offset,o),this._cursor.offset+=o),p&&P.Utils.dataViewToString(p)},f.prototype._readUTF8TerminatedString=function(){var o=this._raw.byteLength-(this._cursor.offset-this._offset),p=null;if(o>0){var E;for(p=new DataView(this._raw.buffer,this._cursor.offset,o),E=0;Ethis._raw.buffer.byteLength)this._root._incomplete=!0;else{switch(this._procField("size","uint",32),this._procField("type","string",4),this.size===1&&this._procField("largesize","uint",64),this.type==="uuid"&&this._procFieldArray("usertype",16,"uint",8),this.size){case 0:this._raw=new DataView(this._raw.buffer,this._offset);break;case 1:this._offset+this.size>this._raw.buffer.byteLength?(this._incomplete=!0,this._root._incomplete=!0):this._raw=new DataView(this._raw.buffer,this._offset,this.largesize);break;default:this._offset+this.size>this._raw.buffer.byteLength?(this._incomplete=!0,this._root._incomplete=!0):this._raw=new DataView(this._raw.buffer,this._offset,this.size)}this._incomplete||(this._boxProcessors[this.type]&&this._boxProcessors[this.type].call(this),this._boxContainers.indexOf(this.type)!==-1?this._parseContainerBox():this._data=this._readData())}},f.prototype._parseFullBox=function(){this.version=this._readUint(8),this.flags=this._readUint(24)},f.prototype._parseContainerBox=function(){for(this.boxes=[];this._cursor.offset-this._raw.byteOffset>3}else this.size+=o>>3},f.prototype._writeUint=function(o,p){if(this._rawo){var E,_,w=this._cursor.offset-this._rawo.byteOffset;switch(o){case 8:this._rawo.setUint8(w,p);break;case 16:this._rawo.setUint16(w,p);break;case 24:E=(16776960&p)>>8,_=255&p,this._rawo.setUint16(w,E),this._rawo.setUint8(w+2,_);break;case 32:this._rawo.setUint32(w,p);break;case 64:_=p-(E=Math.floor(p/Math.pow(2,32)))*Math.pow(2,32),this._rawo.setUint32(w,E),this._rawo.setUint32(w+4,_)}this._cursor.offset+=o>>3}else this.size+=o>>3},f.prototype._writeString=function(o,p){for(var E=0;E>10&31),96+(this.language>>5&31),96+(31&this.language))),this._procField("pre_defined","uint",16)},f.prototype._boxProcessors.mehd=function(){this._procFullBox(),this._procField("fragment_duration","uint",this.version==1?64:32)},f.prototype._boxProcessors.meta=function(){this._procFullBox()},f.prototype._boxProcessors.mfhd=function(){this._procFullBox(),this._procField("sequence_number","uint",32)},f.prototype._boxProcessors.mfro=function(){this._procFullBox(),this._procField("mfra_size","uint",32)},f.prototype._boxProcessors.mp4a=f.prototype._boxProcessors.enca=function(){this._procFieldArray("reserved1",6,"uint",8),this._procField("data_reference_index","uint",16),this._procFieldArray("reserved2",2,"uint",32),this._procField("channelcount","uint",16),this._procField("samplesize","uint",16),this._procField("pre_defined","uint",16),this._procField("reserved3","uint",16),this._procField("samplerate","template",32),this._procField("esds","data",-1)},f.prototype._boxProcessors.mvhd=function(){this._procFullBox(),this._procField("creation_time","uint",this.version==1?64:32),this._procField("modification_time","uint",this.version==1?64:32),this._procField("timescale","uint",32),this._procField("duration","uint",this.version==1?64:32),this._procField("rate","template",32),this._procField("volume","template",16),this._procField("reserved1","uint",16),this._procFieldArray("reserved2",2,"uint",32),this._procFieldArray("matrix",9,"template",32),this._procFieldArray("pre_defined",6,"uint",32),this._procField("next_track_ID","uint",32)},f.prototype._boxProcessors.payl=function(){this._procField("cue_text","utf8")},f.prototype._boxProcessors.prft=function(){this._procFullBox(),this._procField("reference_track_ID","uint",32),this._procField("ntp_timestamp_sec","uint",32),this._procField("ntp_timestamp_frac","uint",32),this._procField("media_time","uint",this.version==1?64:32)},f.prototype._boxProcessors.prsl=function(){this._procFullBox(),this._procField("group_id","uint",32),this._procField("num_entities_in_group","uint",32),this._procEntries("entities",this.num_entities_in_group,(function(o){this._procEntryField(o,"entity_id","uint",32)})),4096&this.flags&&this._procField("preselection_tag","utf8string"),8192&this.flags&&this._procField("selection_priority","uint",8),16384&this.flags&&this._procField("interleaving_tag","utf8string")},f.prototype._boxProcessors.pssh=function(){this._procFullBox(),this._procFieldArray("SystemID",16,"uint",8),this._procField("DataSize","uint",32),this._procFieldArray("Data",this.DataSize,"uint",8)},f.prototype._boxProcessors.schm=function(){this._procFullBox(),this._procField("scheme_type","uint",32),this._procField("scheme_version","uint",32),1&this.flags&&this._procField("scheme_uri","string",-1)},f.prototype._boxProcessors.sdtp=function(){this._procFullBox();var o=-1;this._parsing&&(o=this._raw.byteLength-(this._cursor.offset-this._raw.byteOffset)),this._procFieldArray("sample_dependency_table",o,"uint",8)},f.prototype._boxProcessors.sidx=function(){this._procFullBox(),this._procField("reference_ID","uint",32),this._procField("timescale","uint",32),this._procField("earliest_presentation_time","uint",this.version==1?64:32),this._procField("first_offset","uint",this.version==1?64:32),this._procField("reserved","uint",16),this._procField("reference_count","uint",16),this._procEntries("references",this.reference_count,(function(o){this._parsing||(o.reference=(1&o.reference_type)<<31,o.reference|=2147483647&o.referenced_size,o.sap=(1&o.starts_with_SAP)<<31,o.sap|=(3&o.SAP_type)<<28,o.sap|=268435455&o.SAP_delta_time),this._procEntryField(o,"reference","uint",32),this._procEntryField(o,"subsegment_duration","uint",32),this._procEntryField(o,"sap","uint",32),this._parsing&&(o.reference_type=o.reference>>31&1,o.referenced_size=2147483647&o.reference,o.starts_with_SAP=o.sap>>31&1,o.SAP_type=o.sap>>28&7,o.SAP_delta_time=268435455&o.sap)}))},f.prototype._boxProcessors.smhd=function(){this._procFullBox(),this._procField("balance","uint",16),this._procField("reserved","uint",16)},f.prototype._boxProcessors.ssix=function(){this._procFullBox(),this._procField("subsegment_count","uint",32),this._procEntries("subsegments",this.subsegment_count,(function(o){this._procEntryField(o,"ranges_count","uint",32),this._procSubEntries(o,"ranges",o.ranges_count,(function(p){this._procEntryField(p,"level","uint",8),this._procEntryField(p,"range_size","uint",24)}))}))},f.prototype._boxProcessors.stsd=function(){this._procFullBox(),this._procField("entry_count","uint",32),this._procSubBoxes("entries",this.entry_count)},f.prototype._boxProcessors.sttg=function(){this._procField("settings","utf8")},f.prototype._boxProcessors.stts=function(){this._procFullBox(),this._procField("entry_count","uint",32),this._procEntries("entries",this.entry_count,(function(o){this._procEntryField(o,"sample_count","uint",32),this._procEntryField(o,"sample_delta","uint",32)}))},f.prototype._boxProcessors.subs=function(){this._procFullBox(),this._procField("entry_count","uint",32),this._procEntries("entries",this.entry_count,(function(o){this._procEntryField(o,"sample_delta","uint",32),this._procEntryField(o,"subsample_count","uint",16),this._procSubEntries(o,"subsamples",o.subsample_count,(function(p){this._procEntryField(p,"subsample_size","uint",this.version===1?32:16),this._procEntryField(p,"subsample_priority","uint",8),this._procEntryField(p,"discardable","uint",8),this._procEntryField(p,"codec_specific_parameters","uint",32)}))}))},f.prototype._boxProcessors.tenc=function(){this._procFullBox(),this._procField("default_IsEncrypted","uint",24),this._procField("default_IV_size","uint",8),this._procFieldArray("default_KID",16,"uint",8)},f.prototype._boxProcessors.tfdt=function(){this._procFullBox(),this._procField("baseMediaDecodeTime","uint",this.version==1?64:32)},f.prototype._boxProcessors.tfhd=function(){this._procFullBox(),this._procField("track_ID","uint",32),1&this.flags&&this._procField("base_data_offset","uint",64),2&this.flags&&this._procField("sample_description_offset","uint",32),8&this.flags&&this._procField("default_sample_duration","uint",32),16&this.flags&&this._procField("default_sample_size","uint",32),32&this.flags&&this._procField("default_sample_flags","uint",32)},f.prototype._boxProcessors.tfra=function(){this._procFullBox(),this._procField("track_ID","uint",32),this._parsing||(this.reserved=0,this.reserved|=(48&this.length_size_of_traf_num)<<4,this.reserved|=(12&this.length_size_of_trun_num)<<2,this.reserved|=3&this.length_size_of_sample_num),this._procField("reserved","uint",32),this._parsing&&(this.length_size_of_traf_num=(48&this.reserved)>>4,this.length_size_of_trun_num=(12&this.reserved)>>2,this.length_size_of_sample_num=3&this.reserved),this._procField("number_of_entry","uint",32),this._procEntries("entries",this.number_of_entry,(function(o){this._procEntryField(o,"time","uint",this.version===1?64:32),this._procEntryField(o,"moof_offset","uint",this.version===1?64:32),this._procEntryField(o,"traf_number","uint",8*(this.length_size_of_traf_num+1)),this._procEntryField(o,"trun_number","uint",8*(this.length_size_of_trun_num+1)),this._procEntryField(o,"sample_number","uint",8*(this.length_size_of_sample_num+1))}))},f.prototype._boxProcessors.tkhd=function(){this._procFullBox(),this._procField("creation_time","uint",this.version==1?64:32),this._procField("modification_time","uint",this.version==1?64:32),this._procField("track_ID","uint",32),this._procField("reserved1","uint",32),this._procField("duration","uint",this.version==1?64:32),this._procFieldArray("reserved2",2,"uint",32),this._procField("layer","uint",16),this._procField("alternate_group","uint",16),this._procField("volume","template",16),this._procField("reserved3","uint",16),this._procFieldArray("matrix",9,"template",32),this._procField("width","template",32),this._procField("height","template",32)},f.prototype._boxProcessors.trex=function(){this._procFullBox(),this._procField("track_ID","uint",32),this._procField("default_sample_description_index","uint",32),this._procField("default_sample_duration","uint",32),this._procField("default_sample_size","uint",32),this._procField("default_sample_flags","uint",32)},f.prototype._boxProcessors.trun=function(){this._procFullBox(),this._procField("sample_count","uint",32),1&this.flags&&this._procField("data_offset","int",32),4&this.flags&&this._procField("first_sample_flags","uint",32),this._procEntries("samples",this.sample_count,(function(o){256&this.flags&&this._procEntryField(o,"sample_duration","uint",32),512&this.flags&&this._procEntryField(o,"sample_size","uint",32),1024&this.flags&&this._procEntryField(o,"sample_flags","uint",32),2048&this.flags&&this._procEntryField(o,"sample_composition_time_offset",this.version===1?"int":"uint",32)}))},f.prototype._boxProcessors["url "]=f.prototype._boxProcessors["urn "]=function(){this._procFullBox(),this.type==="urn "&&this._procField("name","string",-1),this._procField("location","string",-1)},f.prototype._boxProcessors.vlab=function(){this._procField("source_label","utf8")},f.prototype._boxProcessors.vmhd=function(){this._procFullBox(),this._procField("graphicsmode","uint",16),this._procFieldArray("opcolor",3,"uint",16)},f.prototype._boxProcessors.vttC=function(){this._procField("config","utf8")},f.prototype._boxProcessors.vtte=function(){}},9826:function(wt){var me,P=typeof Reflect=="object"?Reflect:null,F=P&&typeof P.apply=="function"?P.apply:function(de,De,ce){return Function.prototype.apply.call(de,De,ce)};me=P&&typeof P.ownKeys=="function"?P.ownKeys:Object.getOwnPropertySymbols?function(de){return Object.getOwnPropertyNames(de).concat(Object.getOwnPropertySymbols(de))}:function(de){return Object.getOwnPropertyNames(de)};var f=Number.isNaN||function(de){return de!=de};function o(){o.init.call(this)}wt.exports=o,wt.exports.once=function(de,De){return new Promise((function(ce,Le){function Be(Ge){de.removeListener(De,ot),Le(Ge)}function ot(){typeof de.removeListener=="function"&&de.removeListener("error",Be),ce([].slice.call(arguments))}le(de,De,ot,{once:!0}),De!=="error"&&(function(Ge,X){typeof Ge.on=="function"&&le(Ge,"error",X,{once:!0})})(de,Be)}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var p=10;function E(de){if(typeof de!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof de)}function _(de){return de._maxListeners===void 0?o.defaultMaxListeners:de._maxListeners}function w(de,De,ce,Le){var Be,ot,Ge,X;if(E(ce),(ot=de._events)===void 0?(ot=de._events=Object.create(null),de._eventsCount=0):(ot.newListener!==void 0&&(de.emit("newListener",De,ce.listener?ce.listener:ce),ot=de._events),Ge=ot[De]),Ge===void 0)Ge=ot[De]=ce,++de._eventsCount;else if(typeof Ge=="function"?Ge=ot[De]=Le?[ce,Ge]:[Ge,ce]:Le?Ge.unshift(ce):Ge.push(ce),(Be=_(de))>0&&Ge.length>Be&&!Ge.warned){Ge.warned=!0;var Z=new Error("Possible EventEmitter memory leak detected. "+Ge.length+" "+String(De)+" listeners added. Use emitter.setMaxListeners() to increase limit");Z.name="MaxListenersExceededWarning",Z.emitter=de,Z.type=De,Z.count=Ge.length,X=Z,console&&console.warn&&console.warn(X)}return de}function g(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(de,De,ce){var Le={fired:!1,wrapFn:void 0,target:de,type:De,listener:ce},Be=g.bind(Le);return Be.listener=ce,Le.wrapFn=Be,Be}function r(de,De,ce){var Le=de._events;if(Le===void 0)return[];var Be=Le[De];return Be===void 0?[]:typeof Be=="function"?ce?[Be.listener||Be]:[Be]:ce?(function(ot){for(var Ge=new Array(ot.length),X=0;X0&&(ot=De[0]),ot instanceof Error)throw ot;var Ge=new Error("Unhandled error."+(ot?" ("+ot.message+")":""));throw Ge.context=ot,Ge}var X=Be[de];if(X===void 0)return!1;if(typeof X=="function")F(X,this,De);else{var Z=X.length,Se=G(X,Z);for(ce=0;ce=0;ot--)if(ce[ot]===De||ce[ot].listener===De){Ge=ce[ot].listener,Be=ot;break}if(Be<0)return this;Be===0?ce.shift():(function(X,Z){for(;Z+1=0;Le--)this.removeListener(de,De[Le]);return this},o.prototype.listeners=function(de){return r(this,de,!0)},o.prototype.rawListeners=function(de){return r(this,de,!1)},o.listenerCount=function(de,De){return typeof de.listenerCount=="function"?de.listenerCount(De):H.call(de,De)},o.prototype.listenerCount=H,o.prototype.eventNames=function(){return this._eventsCount>0?me(this._events):[]}},7316:function(wt){wt.exports=function me(P,F){if(P===F)return!0;if(P&&F&&typeof P=="object"&&typeof F=="object"){if(P.constructor!==F.constructor)return!1;var f,o,p;if(Array.isArray(P)){if((f=P.length)!=F.length)return!1;for(o=f;o--!=0;)if(!me(P[o],F[o]))return!1;return!0}if(P.constructor===RegExp)return P.source===F.source&&P.flags===F.flags;if(P.valueOf!==Object.prototype.valueOf)return P.valueOf()===F.valueOf();if(P.toString!==Object.prototype.toString)return P.toString()===F.toString();if((f=(p=Object.keys(P)).length)!==Object.keys(F).length)return!1;for(o=f;o--!=0;)if(!Object.prototype.hasOwnProperty.call(F,p[o]))return!1;for(o=f;o--!=0;){var E=p[o];if(!me(P[E],F[E]))return!1}return!0}return P!=P&&F!=F}},7986:function(wt,me){me.read=function(P,F,f,o,p){var E,_,w=8*p-o-1,g=(1<>1,r=-7,H=f?p-1:0,G=f?-1:1,le=P[F+H];for(H+=G,E=le&(1<<-r)-1,le>>=-r,r+=w;r>0;E=256*E+P[F+H],H+=G,r-=8);for(_=E&(1<<-r)-1,E>>=-r,r+=o;r>0;_=256*_+P[F+H],H+=G,r-=8);if(E===0)E=1-h;else{if(E===g)return _?NaN:1/0*(le?-1:1);_+=Math.pow(2,o),E-=h}return(le?-1:1)*_*Math.pow(2,E-o)},me.write=function(P,F,f,o,p,E){var _,w,g,h=8*E-p-1,r=(1<>1,G=p===23?Math.pow(2,-24)-Math.pow(2,-77):0,le=o?0:E-1,de=o?1:-1,De=F<0||F===0&&1/F<0?1:0;for(F=Math.abs(F),isNaN(F)||F===1/0?(w=isNaN(F)?1:0,_=r):(_=Math.floor(Math.log(F)/Math.LN2),F*(g=Math.pow(2,-_))<1&&(_--,g*=2),(F+=_+H>=1?G/g:G*Math.pow(2,1-H))*g>=2&&(_++,g/=2),_+H>=r?(w=0,_=r):_+H>=1?(w=(F*g-1)*Math.pow(2,p),_+=H):(w=F*Math.pow(2,H-1)*Math.pow(2,p),_=0));p>=8;P[f+le]=255&w,le+=de,w/=256,p-=8);for(_=_<0;P[f+le]=255&_,le+=de,_/=256,h-=8);P[f+le-de]|=128*De}},5474:function(wt,me,P){(function(F){F.parser=function(V,B){return new p(V,B)},F.SAXParser=p,F.SAXStream=_,F.createStream=function(V,B){return new _(V,B)},F.MAX_BUFFER_LENGTH=65536;var f,o=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];function p(V,B){if(!(this instanceof p))return new p(V,B);var Pe=this;(function(j){for(var qe=0,it=o.length;qe"?(Fe(B,"onsgmldeclaration",B.sgmlDecl),B.sgmlDecl="",B.state=ye.TEXT):(Z(r,j)&&(B.state=ye.SGML_DECL_QUOTED),B.sgmlDecl+=j);continue;case ye.SGML_DECL_QUOTED:j===B.q&&(B.state=ye.SGML_DECL,B.q=""),B.sgmlDecl+=j;continue;case ye.DOCTYPE:j===">"?(B.state=ye.TEXT,Fe(B,"ondoctype",B.doctype),B.doctype=!0):(B.doctype+=j,j==="["?B.state=ye.DOCTYPE_DTD:Z(r,j)&&(B.state=ye.DOCTYPE_QUOTED,B.q=j));continue;case ye.DOCTYPE_QUOTED:B.doctype+=j,j===B.q&&(B.q="",B.state=ye.DOCTYPE);continue;case ye.DOCTYPE_DTD:B.doctype+=j,j==="]"?B.state=ye.DOCTYPE:Z(r,j)&&(B.state=ye.DOCTYPE_DTD_QUOTED,B.q=j);continue;case ye.DOCTYPE_DTD_QUOTED:B.doctype+=j,j===B.q&&(B.state=ye.DOCTYPE_DTD,B.q="");continue;case ye.COMMENT:j==="-"?B.state=ye.COMMENT_ENDING:B.comment+=j;continue;case ye.COMMENT_ENDING:j==="-"?(B.state=ye.COMMENT_ENDED,B.comment=Pt(B.opt,B.comment),B.comment&&Fe(B,"oncomment",B.comment),B.comment=""):(B.comment+="-"+j,B.state=ye.COMMENT);continue;case ye.COMMENT_ENDED:j!==">"?(Ut(B,"Malformed comment"),B.comment+="--"+j,B.state=ye.COMMENT):B.state=ye.TEXT;continue;case ye.CDATA:j==="]"?B.state=ye.CDATA_ENDING:B.cdata+=j;continue;case ye.CDATA_ENDING:j==="]"?B.state=ye.CDATA_ENDING_2:(B.cdata+="]"+j,B.state=ye.CDATA);continue;case ye.CDATA_ENDING_2:j===">"?(B.cdata&&Fe(B,"oncdata",B.cdata),Fe(B,"onclosecdata"),B.cdata="",B.state=ye.TEXT):j==="]"?B.cdata+="]":(B.cdata+="]]"+j,B.state=ye.CDATA);continue;case ye.PROC_INST:j==="?"?B.state=ye.PROC_INST_ENDING:Z(w,j)?B.state=ye.PROC_INST_BODY:B.procInstName+=j;continue;case ye.PROC_INST_BODY:if(!B.procInstBody&&Z(w,j))continue;j==="?"?B.state=ye.PROC_INST_ENDING:B.procInstBody+=j;continue;case ye.PROC_INST_ENDING:j===">"?(Fe(B,"onprocessinginstruction",{name:B.procInstName,body:B.procInstBody}),B.procInstName=B.procInstBody="",B.state=ye.TEXT):(B.procInstBody+="?"+j,B.state=ye.PROC_INST_BODY);continue;case ye.OPEN_TAG:Z(Be,j)?B.tagName+=j:(ln(B),j===">"?Oe(B):j==="/"?B.state=ye.OPEN_TAG_SLASH:(Se(w,j)&&Ut(B,"Invalid character in tag name"),B.state=ye.ATTRIB));continue;case ye.OPEN_TAG_SLASH:j===">"?(Oe(B,!0),Ie(B)):(Ut(B,"Forward-slash in opening tag not followed by >"),B.state=ye.ATTRIB);continue;case ye.ATTRIB:if(Z(w,j))continue;j===">"?Oe(B):j==="/"?B.state=ye.OPEN_TAG_SLASH:Z(Le,j)?(B.attribName=j,B.attribValue="",B.state=ye.ATTRIB_NAME):Ut(B,"Invalid attribute name");continue;case ye.ATTRIB_NAME:j==="="?B.state=ye.ATTRIB_VALUE:j===">"?(Ut(B,"Attribute without value"),B.attribValue=B.attribName,En(B),Oe(B)):Z(w,j)?B.state=ye.ATTRIB_NAME_SAW_WHITE:Z(Be,j)?B.attribName+=j:Ut(B,"Invalid attribute name");continue;case ye.ATTRIB_NAME_SAW_WHITE:if(j==="=")B.state=ye.ATTRIB_VALUE;else{if(Z(w,j))continue;Ut(B,"Attribute without value"),B.tag.attributes[B.attribName]="",B.attribValue="",Fe(B,"onattribute",{name:B.attribName,value:""}),B.attribName="",j===">"?Oe(B):Z(Le,j)?(B.attribName=j,B.state=ye.ATTRIB_NAME):(Ut(B,"Invalid attribute name"),B.state=ye.ATTRIB)}continue;case ye.ATTRIB_VALUE:if(Z(w,j))continue;Z(r,j)?(B.q=j,B.state=ye.ATTRIB_VALUE_QUOTED):(Ut(B,"Unquoted attribute value"),B.state=ye.ATTRIB_VALUE_UNQUOTED,B.attribValue=j);continue;case ye.ATTRIB_VALUE_QUOTED:if(j!==B.q){j==="&"?B.state=ye.ATTRIB_VALUE_ENTITY_Q:B.attribValue+=j;continue}En(B),B.q="",B.state=ye.ATTRIB_VALUE_CLOSED;continue;case ye.ATTRIB_VALUE_CLOSED:Z(w,j)?B.state=ye.ATTRIB:j===">"?Oe(B):j==="/"?B.state=ye.OPEN_TAG_SLASH:Z(Le,j)?(Ut(B,"No whitespace between attributes"),B.attribName=j,B.attribValue="",B.state=ye.ATTRIB_NAME):Ut(B,"Invalid attribute name");continue;case ye.ATTRIB_VALUE_UNQUOTED:if(Se(H,j)){j==="&"?B.state=ye.ATTRIB_VALUE_ENTITY_U:B.attribValue+=j;continue}En(B),j===">"?Oe(B):B.state=ye.ATTRIB;continue;case ye.CLOSE_TAG:if(B.tagName)j===">"?Ie(B):Z(Be,j)?B.tagName+=j:B.script?(B.script+=""?Ie(B):Ut(B,"Invalid characters in closing tag");continue;case ye.TEXT_ENTITY:case ye.ATTRIB_VALUE_ENTITY_Q:case ye.ATTRIB_VALUE_ENTITY_U:var _e,Ue;switch(B.state){case ye.TEXT_ENTITY:_e=ye.TEXT,Ue="textNode";break;case ye.ATTRIB_VALUE_ENTITY_Q:_e=ye.ATTRIB_VALUE_QUOTED,Ue="attribValue";break;case ye.ATTRIB_VALUE_ENTITY_U:_e=ye.ATTRIB_VALUE_UNQUOTED,Ue="attribValue"}j===";"?(B[Ue]+=mt(B),B.entity="",B.state=_e):Z(B.entity.length?Ge:ot,j)?B.entity+=j:(Ut(B,"Invalid character in entity name"),B[Ue]+="&"+B.entity+j,B.entity="",B.state=_e);continue;default:throw new Error(B,"Unknown state: "+B.state)}return B.position>=B.bufferCheckPosition&&(function(i){for(var S=Math.max(F.MAX_BUFFER_LENGTH,10),I=0,$=0,ie=o.length;$S)switch(o[$]){case"textNode":Ke(i);break;case"cdata":Fe(i,"oncdata",i.cdata),i.cdata="";break;case"script":Fe(i,"onscript",i.script),i.script="";break;default:Nt(i,"Max buffer length exceeded: "+o[$])}I=Math.max(I,be)}var tt=F.MAX_BUFFER_LENGTH-I;i.bufferCheckPosition=tt+i.position})(B),B},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){var V;Ke(V=this),V.cdata!==""&&(Fe(V,"oncdata",V.cdata),V.cdata=""),V.script!==""&&(Fe(V,"onscript",V.script),V.script="")}};try{f=P(3515).Stream}catch{f=function(){}}var E=F.EVENTS.filter((function(V){return V!=="error"&&V!=="end"}));function _(V,B){if(!(this instanceof _))return new _(V,B);f.apply(this),this._parser=new p(V,B),this.writable=!0,this.readable=!0;var Pe=this;this._parser.onend=function(){Pe.emit("end")},this._parser.onerror=function(j){Pe.emit("error",j),Pe._parser.error=null},this._decoder=null,E.forEach((function(j){Object.defineProperty(Pe,"on"+j,{get:function(){return Pe._parser["on"+j]},set:function(qe){if(!qe)return Pe.removeAllListeners(j),Pe._parser["on"+j]=qe,qe;Pe.on(j,qe)},enumerable:!0,configurable:!1})}))}_.prototype=Object.create(f.prototype,{constructor:{value:_}}),_.prototype.write=function(V){if(typeof Buffer=="function"&&typeof Buffer.isBuffer=="function"&&Buffer.isBuffer(V)){if(!this._decoder){var B=P(748).StringDecoder;this._decoder=new B("utf8")}V=this._decoder.write(V)}return this._parser.write(V.toString()),this.emit("data",V),!0},_.prototype.end=function(V){return V&&V.length&&this.write(V),this._parser.end(),!0},_.prototype.on=function(V,B){var Pe=this;return Pe._parser["on"+V]||E.indexOf(V)===-1||(Pe._parser["on"+V]=function(){var j=arguments.length===1?[arguments[0]]:Array.apply(null,arguments);j.splice(0,0,V),Pe.emit.apply(Pe,j)}),f.prototype.on.call(Pe,V,B)};var w=`\r + `,g="0124356789",h="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",r=`'"`,H=w+">",G="[CDATA[",le="DOCTYPE",de="http://www.w3.org/XML/1998/namespace",De="http://www.w3.org/2000/xmlns/",ce={xml:de,xmlns:De};w=X(w),g=X(g),h=X(h);var Le=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,Be=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/,ot=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,Ge=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/;function X(V){return V.split("").reduce((function(B,Pe){return B[Pe]=!0,B}),{})}function Z(V,B){return(function(Pe){return Object.prototype.toString.call(Pe)==="[object RegExp]"})(V)?!!B.match(V):V[B]}function Se(V,B){return!Z(V,B)}r=X(r),H=X(H);var Ne,ke,ht,ye=0;for(var pt in F.STATE={BEGIN:ye++,BEGIN_WHITESPACE:ye++,TEXT:ye++,TEXT_ENTITY:ye++,OPEN_WAKA:ye++,SGML_DECL:ye++,SGML_DECL_QUOTED:ye++,DOCTYPE:ye++,DOCTYPE_QUOTED:ye++,DOCTYPE_DTD:ye++,DOCTYPE_DTD_QUOTED:ye++,COMMENT_STARTING:ye++,COMMENT:ye++,COMMENT_ENDING:ye++,COMMENT_ENDED:ye++,CDATA:ye++,CDATA_ENDING:ye++,CDATA_ENDING_2:ye++,PROC_INST:ye++,PROC_INST_BODY:ye++,PROC_INST_ENDING:ye++,OPEN_TAG:ye++,OPEN_TAG_SLASH:ye++,ATTRIB:ye++,ATTRIB_NAME:ye++,ATTRIB_NAME_SAW_WHITE:ye++,ATTRIB_VALUE:ye++,ATTRIB_VALUE_QUOTED:ye++,ATTRIB_VALUE_CLOSED:ye++,ATTRIB_VALUE_UNQUOTED:ye++,ATTRIB_VALUE_ENTITY_Q:ye++,ATTRIB_VALUE_ENTITY_U:ye++,CLOSE_TAG:ye++,CLOSE_TAG_SAW_WHITE:ye++,SCRIPT:ye++,SCRIPT_ENDING:ye++},F.XML_ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},F.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(F.ENTITIES).forEach((function(V){var B=F.ENTITIES[V],Pe=typeof B=="number"?String.fromCharCode(B):B;F.ENTITIES[V]=Pe})),F.STATE)F.STATE[F.STATE[pt]]=pt;function He(V,B,Pe){V[B]&&V[B](Pe)}function Fe(V,B,Pe){V.textNode&&Ke(V),He(V,B,Pe)}function Ke(V){V.textNode=Pt(V.opt,V.textNode),V.textNode&&He(V,"ontext",V.textNode),V.textNode=""}function Pt(V,B){return V.trim&&(B=B.trim()),V.normalize&&(B=B.replace(/\s+/g," ")),B}function Nt(V,B){return Ke(V),V.trackPosition&&(B+=` +Line: `+V.line+` +Column: `+V.column+` +Char: `+V.c),B=new Error(B),V.error=B,He(V,"onerror",B),V}function kt(V){return V.sawRoot&&!V.closedRoot&&Ut(V,"Unclosed root tag"),V.state!==ye.BEGIN&&V.state!==ye.BEGIN_WHITESPACE&&V.state!==ye.TEXT&&Nt(V,"Unexpected end"),Ke(V),V.c="",V.closed=!0,He(V,"onend"),p.call(V,V.strict,V.opt),V}function Ut(V,B){if(typeof V!="object"||!(V instanceof p))throw new Error("bad call to strictFail");V.strict&&Nt(V,B)}function ln(V){V.strict||(V.tagName=V.tagName[V.looseCase]());var B=V.tags[V.tags.length-1]||V,Pe=V.tag={name:V.tagName,attributes:{}};V.opt.xmlns&&(Pe.ns=B.ns),V.attribList.length=0,Fe(V,"onopentagstart",Pe)}function an(V,B){var Pe=V.indexOf(":")<0?["",V]:V.split(":"),j=Pe[0],qe=Pe[1];return B&&V==="xmlns"&&(j="xmlns",qe=""),{prefix:j,local:qe}}function En(V){if(V.strict||(V.attribName=V.attribName[V.looseCase]()),V.attribList.indexOf(V.attribName)!==-1||V.tag.attributes.hasOwnProperty(V.attribName))V.attribName=V.attribValue="";else{if(V.opt.xmlns){var B=an(V.attribName,!0),Pe=B.prefix,j=B.local;if(Pe==="xmlns")if(j==="xml"&&V.attribValue!==de)Ut(V,"xml: prefix must be bound to "+de+` +Actual: `+V.attribValue);else if(j==="xmlns"&&V.attribValue!==De)Ut(V,"xmlns: prefix must be bound to "+De+` +Actual: `+V.attribValue);else{var qe=V.tag,it=V.tags[V.tags.length-1]||V;qe.ns===it.ns&&(qe.ns=Object.create(it.ns)),qe.ns[j]=V.attribValue}V.attribList.push([V.attribName,V.attribValue])}else V.tag.attributes[V.attribName]=V.attribValue,Fe(V,"onattribute",{name:V.attribName,value:V.attribValue});V.attribName=V.attribValue=""}}function Oe(V,B){if(V.opt.xmlns){var Pe=V.tag,j=an(V.tagName);Pe.prefix=j.prefix,Pe.local=j.local,Pe.uri=Pe.ns[j.prefix]||"",Pe.prefix&&!Pe.uri&&(Ut(V,"Unbound namespace prefix: "+JSON.stringify(V.tagName)),Pe.uri=j.prefix);var qe=V.tags[V.tags.length-1]||V;Pe.ns&&qe.ns!==Pe.ns&&Object.keys(Pe.ns).forEach((function(ae){Fe(V,"onopennamespace",{prefix:ae,uri:Pe.ns[ae]})}));for(var it=0,_e=V.attribList.length;it<_e;it++){var Ue=V.attribList[it],i=Ue[0],S=Ue[1],I=an(i,!0),$=I.prefix,ie=I.local,be=$===""?"":Pe.ns[$]||"",tt={name:i,value:S,prefix:$,local:ie,uri:be};$&&$!=="xmlns"&&!be&&(Ut(V,"Unbound namespace prefix: "+JSON.stringify($)),tt.uri=$),V.tag.attributes[i]=tt,Fe(V,"onattribute",tt)}V.attribList.length=0}V.tag.isSelfClosing=!!B,V.sawRoot=!0,V.tags.push(V.tag),Fe(V,"onopentag",V.tag),B||(V.noscript||V.tagName.toLowerCase()!=="script"?V.state=ye.TEXT:V.state=ye.SCRIPT,V.tag=null,V.tagName=""),V.attribName=V.attribValue="",V.attribList.length=0}function Ie(V){if(!V.tagName)return Ut(V,"Weird empty close tag."),V.textNode+="",void(V.state=ye.TEXT);if(V.script){if(V.tagName!=="script")return V.script+="",V.tagName="",void(V.state=ye.SCRIPT);Fe(V,"onscript",V.script),V.script=""}var B=V.tags.length,Pe=V.tagName;V.strict||(Pe=Pe[V.looseCase]());for(var j=Pe;B--&&V.tags[B].name!==j;)Ut(V,"Unexpected close tag");if(B<0)return Ut(V,"Unmatched closing tag: "+V.tagName),V.textNode+="",void(V.state=ye.TEXT);V.tagName=Pe;for(var qe=V.tags.length;qe-- >B;){var it=V.tag=V.tags.pop();V.tagName=V.tag.name,Fe(V,"onclosetag",V.tagName);var _e={};for(var Ue in it.ns)_e[Ue]=it.ns[Ue];var i=V.tags[V.tags.length-1]||V;V.opt.xmlns&&it.ns!==i.ns&&Object.keys(it.ns).forEach((function(S){var I=it.ns[S];Fe(V,"onclosenamespace",{prefix:S,uri:I})}))}B===0&&(V.closedRoot=!0),V.tagName=V.attribValue=V.attribName="",V.attribList.length=0,V.state=ye.TEXT}function mt(V){var B,Pe=V.entity,j=Pe.toLowerCase(),qe="";return V.ENTITIES[Pe]?V.ENTITIES[Pe]:V.ENTITIES[j]?V.ENTITIES[j]:((Pe=j).charAt(0)==="#"&&(Pe.charAt(1)==="x"?(Pe=Pe.slice(2),qe=(B=parseInt(Pe,16)).toString(16)):(Pe=Pe.slice(1),qe=(B=parseInt(Pe,10)).toString(10))),Pe=Pe.replace(/^0+/,""),qe.toLowerCase()!==Pe?(Ut(V,"Invalid character entity"),"&"+V.entity+";"):String.fromCodePoint(B))}function It(V,B){B==="<"?(V.state=ye.OPEN_WAKA,V.startTagPosition=V.position):Se(w,B)&&(Ut(V,"Non-whitespace before first tag."),V.textNode=B,V.state=ye.TEXT)}function Ye(V,B){var Pe="";return B1114111||ke(_e)!==_e)throw RangeError("Invalid code point: "+_e);_e<=65535?Pe.push(_e):(V=55296+((_e-=65536)>>10),B=_e%1024+56320,Pe.push(V,B)),(j+1===qe||Pe.length>16384)&&(it+=Ne.apply(null,Pe),Pe.length=0)}return it},Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:ht,configurable:!0,writable:!0}):String.fromCodePoint=ht)})(me)},6739:function(wt,me,P){(function(F,f,o,p,E){function _(Ye){if("contents"in Ye)for(var V=("styleAttrs"in Ye)?Ye.styleAttrs[p.byName.ruby.qname]:null,B=Ye.kind==="span"&&(V==="container"||V==="textContainer"||V==="baseContainer"),Pe=Ye.contents.length-1;Pe>=0;Pe--)!B||"styleAttrs"in Ye.contents[Pe]&&p.byName.ruby.qname in Ye.contents[Pe].styleAttrs?_(Ye.contents[Pe]):delete Ye.contents[Pe]}function w(Ye,V,B,Pe){var j=Pe&&Pe.timeContainer==="seq",qe=0;Pe&&(qe=j&&B?B.end:Pe.begin),V.begin=V.explicit_begin?V.explicit_begin+qe:qe;var it=V.begin,_e=null;if("sets"in V)for(var Ue=0;Ue "+Ye.attributes[Pe].value)}}return B}function kt(Ye,V,B){for(var Pe in Ye.attributes)if(Ye.attributes[Pe].uri===V&&Ye.attributes[Pe].local===B)return Ye.attributes[Pe].value;return null}function Ut(Ye,V,B){var Pe,j=null;return(Pe=/^(\d+(?:\.\d+)?)f$/.exec(B))!==null?V!==null&&(j=parseFloat(Pe[1])/V):(Pe=/^(\d+(?:\.\d+)?)t$/.exec(B))!==null?Ye!==null&&(j=parseFloat(Pe[1])/Ye):(Pe=/^(\d+(?:\.\d+)?)ms$/.exec(B))!==null?j=parseFloat(Pe[1])/1e3:(Pe=/^(\d+(?:\.\d+)?)s$/.exec(B))!==null?j=parseFloat(Pe[1]):(Pe=/^(\d+(?:\.\d+)?)h$/.exec(B))!==null?j=3600*parseFloat(Pe[1]):(Pe=/^(\d+(?:\.\d+)?)m$/.exec(B))!==null?j=60*parseFloat(Pe[1]):(Pe=/^(\d{2,}):(\d\d):(\d\d(?:\.\d+)?)$/.exec(B))!==null?j=3600*parseInt(Pe[1])+60*parseInt(Pe[2])+parseFloat(Pe[3]):(Pe=/^(\d{2,}):(\d\d):(\d\d)\:(\d{2,})$/.exec(B))!==null&&V!==null&&(j=3600*parseInt(Pe[1])+60*parseInt(Pe[2])+parseInt(Pe[3])+(Pe[4]===null?0:parseInt(Pe[4])/V)),j}function ln(Ye,V,B){for(;V.styleRefs.length>0;){var Pe=V.styleRefs.pop();Pe in Ye.styles?(ln(Ye,Ye.styles[Pe],B),En(Ye.styles[Pe].styleAttrs,V.styleAttrs)):Ie(B,"Non-existant style id referenced")}}function an(Ye,V,B,Pe){for(var j=V.length-1;j>=0;j--){var qe=V[j];qe in Ye.styles?En(Ye.styles[qe].styleAttrs,B):Ie(Pe,"Non-existant style id referenced")}}function En(Ye,V){for(var B in Ye)Ye.hasOwnProperty(B)&&(B in V||(V[B]=Ye[B]))}function Oe(Ye,V){if(Ye&&Ye.warn&&Ye.warn(V))throw V}function Ie(Ye,V){if(Ye&&Ye.error&&Ye.error(V))throw V}function mt(Ye,V){throw Ye&&Ye.fatal&&Ye.fatal(V),V}function It(Ye,V){for(var B,Pe=0,j=Ye.length-1;Pe<=j;){var qe=Ye[B=Math.floor((Pe+j)/2)];if(qeV))return{found:!0,index:B};j=B-1}}return{found:!1,index:Pe}}F.fromXML=function(Ye,V,B){var Pe=f.parser(!0,{xmlns:!0}),j=[],qe=[],it=[],_e=0,Ue=null;Pe.onclosetag=function(ie){if(j[0]instanceof He)Ue.head!==null&&Ue.head.styling!==null&&an(Ue.head.styling,j[0].styleRefs,j[0].styleAttrs,V),delete j[0].styleRefs;else if(j[0]instanceof H)for(var be in j[0].styles)j[0].styles.hasOwnProperty(be)&&ln(j[0],j[0].styles[be],V);else if(j[0]instanceof ke||j[0]instanceof ht){if(j[0].contents.length>1){var tt,ae=[j[0].contents[0]];for(tt=1;tt0&&B&&"onCloseTag"in B&&B.onCloseTag());it.shift(),qe.shift(),j.shift()},Pe.ontext=function(ie){if(j[0]!==void 0)if(j[0]instanceof ht||j[0]instanceof ke){if(j[0]instanceof ht){var be=j[0].styleAttrs[p.byName.ruby.qname];if(be==="container"||be==="textContainer"||be==="baseContainer")return}var tt=new ye;tt.initFromText(Ue,j[0],ie,qe[0],it[0],V),j[0].contents.push(tt)}else j[0]instanceof g&&_e>0&&B&&"onText"in B&&B.onText(ie)},Pe.onopentag=function(ie){var be=ie.attributes["xml:space"];be?it.unshift(be.value):it.length===0?it.unshift("default"):it.unshift(it[0]);var tt=ie.attributes["xml:lang"];if(tt?qe.unshift(tt.value):qe.length===0?qe.unshift(""):qe.unshift(qe[0]),ie.uri===o.ns_tt)if(ie.local==="tt")Ue!==null&&mt(V,"Two elements at ("+this.line+","+this.column+")"),(Ue=new h).initFromNode(ie,qe[0],V),j.unshift(Ue);else if(ie.local==="head")j[0]instanceof h||mt(V,"Parent of element is not at ("+this.line+","+this.column+")"),j.unshift(Ue.head);else if(ie.local==="styling")j[0]instanceof r||mt(V,"Parent of element is not at ("+this.line+","+this.column+")"),j.unshift(Ue.head.styling);else if(ie.local==="style"){var ae;j[0]instanceof H?((ae=new G).initFromNode(ie,V),ae.id?Ue.head.styling.styles[ae.id]=ae:Ie(V,"\n

\n Barcode scanned:\n {label}\n {wikiUrl ? (\n \n Wiki link\n \n ) : null}\n

\n \n );\n}\n\nfunction UndockedExitWarningToast() {\n return (\n \n

Please dock your rover

\n

\n Your rover is still undocked. Please dock it before leaving the page.\n

\n \n );\n}\n\nfunction AlertToast({ alert }) {\n if (alert.kind === 'buttonbox-active' && alert.payload) {\n const payload = alert.payload;\n return (\n
\n \n {payload.description ? (\n

\n {payload.description}\n

\n ) : null}\n
\n );\n }\n if (alert.kind === 'chat' && alert.payload) {\n return ;\n }\n if (alert.kind === 'chat-typing' && alert.payload) {\n return ;\n }\n if (alert.kind === 'barcode-scan' && alert.payload) {\n return ;\n }\n if (alert.kind === 'undocked-exit-warning') {\n return ;\n }\n return (\n \n

\n {alert.title || 'Alert'}\n · \n {alert.message}\n

\n \n );\n}\n","// Control System Constants\n// Purpose: Defines immutable control tuning and command constants for input pipelines. Scope: Central source of truth for movement scaling, deadzones, and timing values.\nexport const AUX_LIMITS = {\n main: [-127, 127],\n side: [-127, 127],\n vacuum: [0, 127],\n};\n\nexport const DRIVE_LIMITS = {\n maxSpeed: 500,\n baseSpeed: 250,\n boostSpeed: 400,\n};\n\nexport const MANUAL_DOCK_ASSIST_MAX_SPEED = 60;\n\nexport const COMMAND_DELAY_MS = 100;\n\nexport const SONG_NOTE_RANGE = [31, 127];\nexport const SONG_DEFAULT_NOTE = 60;\nexport const SONG_DEFAULT_DURATION = 8;\nexport const SONG_REPEAT_MS = 250;\n\nexport const HORN_MAX_MS = 4000;\nexport const HORN_MAX_FREQUENCY = 2000;\nexport const HORN_HEAT_UP_PER_SEC = 0.4;\nexport const HORN_HEAT_COOL_PER_SEC = 0.2;\nexport const HORN_HEAT_RESUME_THRESHOLD = 0.8;\n\nexport const OI_COMMANDS = {\n start: [128],\n safe: [131],\n full: [132],\n passive: [128],\n dock: [143],\n};\n\nexport const DEFAULT_KEYMAP = {\n driveForward: ['w'],\n driveBackward: ['s'],\n driveLeft: ['a'],\n driveRight: ['d'],\n boostModifier: ['\\\\'],\n slowModifier: ['shift'],\n auxMainForward: ['i'],\n auxMainReverse: ['k'],\n auxSideForward: ['o'],\n auxSideReverse: ['l'],\n auxVacuumFast: ['p'],\n auxVacuumSlow: [';'],\n auxAllForward: [\",\"],\n cameraUp: ['u'],\n cameraDown: ['j'],\n headlightToggle: ['e'],\n laserToggle: ['r'],\n videoFilterCycle: ['2'],\n hornHonk: ['h'],\n micPtt: ['m'],\n driveMacro: ['f'],\n dockMacro: ['g'],\n chatFocus: ['enter'],\n songNoteUp: ['ArrowUp'],\n songNoteDown: ['ArrowDown'],\n homeAssistantOn: ['ArrowRight'],\n homeAssistantOff: ['ArrowLeft'],\n};\n\nexport const DEFAULT_MACROS = [\n {\n id: 'drive-sequence',\n label: 'Drive',\n description: 'Start, undock, and full command sequence used by the drive button.',\n steps: [\n { type: 'servo', angle: 0 },\n { type: 'oi', command: 'start' },\n { type: 'pause', duration: COMMAND_DELAY_MS },\n { type: 'oi', command: 'dock' },\n { type: 'pause', duration: COMMAND_DELAY_MS },\n { type: 'oi', command: 'full' },\n { type: 'pause', duration: 300 },\n { type: 'drive', speeds: { left: -300, right: -300 } },\n { type: 'pause', duration: 600 },\n { type: 'drive', speeds: { left: 0, right: 0 } },\n ],\n },\n];\n","// Control State Reducer\n// Purpose: Implements reducer transitions for control-system runtime state. Scope: Centralizes deterministic state updates for input, mode, and dispatch events.\nimport { DEFAULT_KEYMAP, DEFAULT_MACROS, SONG_DEFAULT_NOTE } from './constants.js';\n\nfunction createDriveState() {\n return {\n vector: { x: 0, y: 0, boost: false },\n speeds: { left: 0, right: 0 },\n source: null,\n lastUpdatedAt: 0,\n };\n}\n\nfunction createAuxState() {\n return { main: 0, side: 0, vacuum: 0 };\n}\n\nfunction createCameraState() {\n return {\n enabled: false,\n angle: null,\n config: null,\n /*\n Servo precision is UI/control state, not rover hardware state. Keeping it\n beside the camera angle lets every camera-tilt surface use the same\n precision setting while still sending the normal decimal angle commands.\n */\n precisionMode: false,\n };\n}\n\nfunction createSongState() {\n return {\n note: SONG_DEFAULT_NOTE,\n };\n}\n\nfunction createHornState() {\n return {\n active: false,\n heat: 0,\n overheated: false,\n };\n}\n\nfunction createMicState() {\n return {\n pttActive: false,\n };\n}\n\nfunction createManualDockAssistState() {\n return {\n active: false,\n };\n}\n\nexport const initialControlState = {\n roverId: null,\n mode: 'drive',\n drive: createDriveState(),\n aux: createAuxState(),\n camera: createCameraState(),\n song: createSongState(),\n horn: createHornState(),\n mic: createMicState(),\n manualDockAssist: createManualDockAssistState(),\n lastControlIntentAt: 0,\n macros: DEFAULT_MACROS,\n keymap: DEFAULT_KEYMAP,\n inputs: {},\n // Generic accessory controls do not currently report state back from roverd.\n // Keep the last browser-issued value per rover/device/control so closing a\n // drawer or changing responsive layouts does not make the UI lie about it.\n peripheralValues: {},\n};\n\nexport function controlReducer(state, action) {\n switch (action.type) {\n case 'control/set-rover':\n return {\n ...state,\n roverId: action.payload ?? null,\n drive: action.payload ? state.drive : createDriveState(),\n aux: action.payload ? state.aux : createAuxState(),\n song: action.payload ? state.song : createSongState(),\n horn: action.payload ? state.horn : createHornState(),\n mic: action.payload ? state.mic : createMicState(),\n manualDockAssist: action.payload ? state.manualDockAssist : createManualDockAssistState(),\n lastControlIntentAt: action.payload ? state.lastControlIntentAt : 0,\n };\n case 'control/set-mode':\n return state.mode === action.payload\n ? state\n : { ...state, mode: action.payload === 'dock' ? 'dock' : 'drive' };\n case 'control/update-drive': {\n const { vector, speeds, source } = action.payload;\n return {\n ...state,\n drive: {\n vector: vector ?? state.drive.vector,\n speeds: speeds ?? state.drive.speeds,\n source: source ?? state.drive.source,\n lastUpdatedAt: Date.now(),\n },\n };\n }\n case 'control/set-aux-motors':\n return {\n ...state,\n aux: {\n ...state.aux,\n ...action.payload,\n },\n };\n case 'control/set-camera-config':\n return {\n ...state,\n camera: {\n ...state.camera,\n enabled: Boolean(action.payload?.config),\n config: action.payload?.config ?? null,\n precisionMode: action.payload?.config ? state.camera.precisionMode : false,\n angle:\n typeof action.payload?.angle === 'number'\n ? action.payload.angle\n : action.payload?.config\n ? action.payload.config.homeAngle ?? state.camera.angle\n : null,\n },\n };\n case 'control/set-camera-angle':\n return {\n ...state,\n camera: { ...state.camera, angle: action.payload },\n };\n case 'control/set-camera-precision-mode':\n if (state.camera.precisionMode === Boolean(action.payload)) {\n return state;\n }\n return {\n ...state,\n camera: {\n ...state.camera,\n /*\n Movement inputs own this flag because precision camera mode is meant\n to follow movement precision mode automatically instead of becoming a\n separate toggle the driver has to remember to reset.\n */\n precisionMode: Boolean(action.payload),\n },\n };\n case 'control/register-input-state': {\n const sourceKey = action.payload?.source || 'unknown';\n return {\n ...state,\n inputs: {\n ...state.inputs,\n [sourceKey]: {\n ...(state.inputs[sourceKey] ?? {}),\n ...action.payload?.state,\n updatedAt: Date.now(),\n },\n },\n };\n }\n case 'control/set-keymap':\n return {\n ...state,\n keymap: { ...state.keymap, ...(action.payload ?? {}) },\n };\n case 'control/set-macros':\n return {\n ...state,\n macros: Array.isArray(action.payload) ? action.payload : state.macros,\n };\n case 'control/reset':\n return {\n ...state,\n drive: createDriveState(),\n aux: createAuxState(),\n song: createSongState(),\n horn: createHornState(),\n mic: createMicState(),\n lastControlIntentAt: 0,\n };\n case 'control/set-horn-active':\n return {\n ...state,\n horn: {\n ...(state.horn || createHornState()),\n active: Boolean(action.payload),\n },\n };\n case 'control/set-horn-heat':\n return {\n ...state,\n horn: {\n ...(state.horn || createHornState()),\n heat: typeof action.payload?.heat === 'number' ? action.payload.heat : 0,\n overheated: Boolean(action.payload?.overheated),\n },\n };\n case 'control/record-intent':\n return {\n ...state,\n lastControlIntentAt: Date.now(),\n };\n case 'control/set-song-note':\n return {\n ...state,\n song: {\n ...(state.song || createSongState()),\n note: action.payload ?? SONG_DEFAULT_NOTE,\n },\n };\n case 'control/set-mic-ptt':\n return {\n ...state,\n mic: {\n ...(state.mic || createMicState()),\n pttActive: Boolean(action.payload),\n },\n };\n case 'control/set-manual-dock-assist':\n return {\n ...state,\n manualDockAssist: {\n ...(state.manualDockAssist || createManualDockAssistState()),\n active: Boolean(action.payload),\n },\n };\n case 'control/set-peripheral-value': {\n const roverId = String(action.payload?.roverId || '');\n const peripheralId = String(action.payload?.peripheralId || '');\n const controlId = String(action.payload?.controlId || '');\n if (!roverId || !peripheralId || !controlId) return state;\n const roverValues = state.peripheralValues?.[roverId] || {};\n const peripheralValues = roverValues[peripheralId] || {};\n return {\n ...state,\n peripheralValues: {\n ...(state.peripheralValues || {}),\n [roverId]: {\n ...roverValues,\n [peripheralId]: {\n ...peripheralValues,\n [controlId]: action.payload.value,\n },\n },\n },\n };\n }\n default:\n return state;\n }\n}\n","// Control Math Utilities\n// Purpose: Contains numeric transforms for joystick/keyboard input normalization and shaping. Scope: Implements deadzone, clamp, and mixing math used by control dispatch logic.\n/* global Buffer */\n\nimport { DRIVE_LIMITS } from './constants.js';\n\nexport function clamp(value, min, max) {\n if (typeof value !== 'number' || Number.isNaN(value)) return min;\n return Math.max(min, Math.min(max, value));\n}\n\nexport function clampUnit(value) {\n if (typeof value !== 'number' || Number.isNaN(value)) return 0;\n return Math.max(-1, Math.min(1, value));\n}\n\nexport function clampRange(value, range) {\n if (!Array.isArray(range) || range.length !== 2) return value;\n return clamp(value, range[0], range[1]);\n}\n\nexport function normalizeDriveVector(vector = {}) {\n const x = clampUnit(vector.x ?? 0);\n const y = clampUnit(vector.y ?? 0);\n return {\n x,\n y,\n boost: Boolean(vector.boost),\n };\n}\n\nexport function computeDifferentialSpeeds(vector = {}, options = {}) {\n const normalized = normalizeDriveVector(vector);\n const maxSpeed = typeof options.maxSpeed === 'number' ? options.maxSpeed : DRIVE_LIMITS.maxSpeed;\n const baseSpeed = typeof options.baseSpeed === 'number' ? options.baseSpeed : DRIVE_LIMITS.baseSpeed;\n const boostSpeed = typeof options.boostSpeed === 'number' ? options.boostSpeed : DRIVE_LIMITS.boostSpeed;\n const base = normalized.boost ? boostSpeed : baseSpeed;\n const forward = normalized.y * base;\n const turn = normalized.x * base;\n return {\n vector: normalized,\n speeds: {\n left: clamp(Math.round(forward + turn), -maxSpeed, maxSpeed),\n right: clamp(Math.round(forward - turn), -maxSpeed, maxSpeed),\n },\n };\n}\n\nexport function bytesToBase64(bytes) {\n const safeBytes = Array.isArray(bytes) ? bytes : [];\n const binary = String.fromCharCode(...safeBytes);\n if (typeof btoa === 'function') return btoa(binary);\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(safeBytes).toString('base64');\n }\n throw new Error('No base64 encoder available');\n}\n\nexport function sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","// Control Command Pipeline\n// Purpose: Converts normalized inputs into command packets sent to the server. Scope: Applies throttling/coalescing/safety filters before socket command emission.\nimport { useCallback, useMemo } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport {\n AUX_LIMITS,\n COMMAND_DELAY_MS,\n OI_COMMANDS,\n SONG_DEFAULT_DURATION,\n SONG_DEFAULT_NOTE,\n SONG_NOTE_RANGE,\n} from './constants.js';\nimport { bytesToBase64, clampRange, sleep } from './controlMath.js';\n\nexport function useCommandPipeline(options = {}) {\n const { driveTransform, auxTransform } = options;\n const socket = useSocket();\n const roverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const roster = useSessionSelector((state) => state.session?.roster ?? []);\n\n const rosterEntry = useMemo(() => {\n if (!roverId || !Array.isArray(roster)) return null;\n return roster.find((entry) => String(entry.id) === String(roverId)) || null;\n }, [roverId, roster]);\n\n const servoConfig = useMemo(() => {\n if (!rosterEntry?.cameraServo || !rosterEntry.cameraServo.enabled) return null;\n return rosterEntry.cameraServo;\n }, [rosterEntry]);\n\n const headlight = useMemo(() => {\n if (!rosterEntry?.headlight || !rosterEntry.headlight.enabled) return null;\n return rosterEntry.headlight;\n }, [rosterEntry]);\n\n const laser = useMemo(() => {\n if (!rosterEntry?.laser || !rosterEntry.laser.enabled) return null;\n return rosterEntry.laser;\n }, [rosterEntry]);\n\n const horn = useMemo(() => {\n if (!rosterEntry?.horn || !rosterEntry.horn.enabled) return null;\n return rosterEntry.horn;\n }, [rosterEntry]);\n\n const peripherals = useMemo(\n () => (Array.isArray(rosterEntry?.peripherals) ? rosterEntry.peripherals : []),\n [rosterEntry],\n );\n\n const headlightState = useMemo(() => rosterEntry?.headlight?.state ?? null, [rosterEntry]);\n const laserState = useMemo(() => rosterEntry?.laser?.state ?? null, [rosterEntry]);\n const emitCommand = useCallback(\n (payload, cb) => {\n if (!roverId) return;\n socket.emit('command', { roverId, ...payload }, cb);\n },\n [socket, roverId],\n );\n\n const enableSensorStream = useCallback(() => {\n if (!roverId) return;\n emitCommand({\n type: 'sensorStream',\n data: { sensorStream: { enable: true } },\n });\n }, [emitCommand, roverId]);\n\n const sendDriveDirect = useCallback(\n (speeds) => {\n const rawPayload = {\n left: clampRange(speeds?.left ?? 0, [-500, 500]),\n right: clampRange(speeds?.right ?? 0, [-500, 500]),\n };\n const transformed = driveTransform ? driveTransform(rawPayload) : rawPayload;\n const payload = {\n left: clampRange(transformed?.left ?? 0, [-500, 500]),\n right: clampRange(transformed?.right ?? 0, [-500, 500]),\n };\n if (!roverId) return null;\n emitCommand({\n type: 'drive',\n data: { driveDirect: payload },\n });\n return payload;\n },\n [driveTransform, emitCommand, roverId],\n );\n\n const sendAuxMotors = useCallback(\n ({ main = 0, side = 0, vacuum = 0 } = {}) => {\n if (!roverId) return null;\n const rawPayload = {\n main: clampRange(main, AUX_LIMITS.main),\n side: clampRange(side, AUX_LIMITS.side),\n vacuum: clampRange(vacuum, AUX_LIMITS.vacuum),\n };\n const transformed = auxTransform ? auxTransform(rawPayload) : rawPayload;\n const payload = {\n main: clampRange(transformed?.main ?? 0, AUX_LIMITS.main),\n side: clampRange(transformed?.side ?? 0, AUX_LIMITS.side),\n vacuum: clampRange(transformed?.vacuum ?? 0, AUX_LIMITS.vacuum),\n };\n emitCommand({\n type: 'motors',\n data: { motorPwm: payload },\n });\n return payload;\n },\n [auxTransform, emitCommand, roverId],\n );\n\n const sendServoAngle = useCallback(\n (angle) => {\n if (!roverId || !servoConfig) return null;\n emitCommand({\n type: 'servo',\n data: { servo: { angle } },\n });\n return angle;\n },\n [emitCommand, roverId, servoConfig],\n );\n\n const sendOiCommand = useCallback(\n (keyOrBytes) => {\n if (!roverId) return false;\n const bytes = Array.isArray(keyOrBytes)\n ? keyOrBytes\n : typeof keyOrBytes === 'string'\n ? OI_COMMANDS[keyOrBytes]\n : null;\n if (!bytes) return false;\n emitCommand({\n type: 'raw',\n data: { raw: bytesToBase64(bytes) },\n });\n enableSensorStream();\n return true;\n },\n [emitCommand, enableSensorStream, roverId],\n );\n\n const runMacroSteps = useCallback(\n async (macro) => {\n if (!macro || !Array.isArray(macro.steps) || !roverId) return;\n for (const step of macro.steps) {\n if (!roverId) break;\n switch (step.type) {\n case 'oi':\n sendOiCommand(step.command);\n break;\n case 'drive':\n sendDriveDirect(step.speeds ?? { left: 0, right: 0 });\n break;\n case 'motors':\n sendAuxMotors(step.values ?? {});\n break;\n case 'servo':\n sendServoAngle(step.angle);\n break;\n case 'pause':\n await sleep(step.duration ?? COMMAND_DELAY_MS); // eslint-disable-line no-await-in-loop\n break;\n default:\n break;\n }\n if (step.delay || step.delayMs) {\n const delay = step.delayMs ?? step.delay;\n if (typeof delay === 'number' && delay > 0) {\n await sleep(delay); // eslint-disable-line no-await-in-loop\n }\n }\n }\n },\n [roverId, sendOiCommand, sendDriveDirect, sendAuxMotors, sendServoAngle],\n );\n\n const sendHeadlight = useCallback(\n (action = 'toggle') => {\n if (!roverId || !headlight) return null;\n emitCommand({\n type: 'headlight',\n data: { headlight: { action } },\n });\n return action;\n },\n [emitCommand, headlight, roverId],\n );\n\n const sendLaser = useCallback(\n (action = 'toggle') => {\n if (!roverId || !laser) return null;\n emitCommand({\n type: 'laser',\n data: { laser: { action } },\n });\n return action;\n },\n [emitCommand, laser, roverId],\n );\n\n const sendHorn = useCallback(\n (payload) => {\n if (!roverId) return null;\n emitCommand({\n type: 'horn',\n data: { horn: payload },\n });\n return payload;\n },\n [emitCommand, roverId],\n );\n\n const sendPeripheralControl = useCallback(\n (peripheralId, controlId, value) => {\n if (!roverId || !peripheralId || !controlId) return null;\n const peripheral = { id: peripheralId, control: controlId, value };\n // Peripheral commands deliberately use the same command envelope as all\n // other rover actuation. This keeps turn authorization, acknowledgements,\n // and rover WebSocket routing in the server's existing command boundary.\n emitCommand({\n type: 'peripheral',\n data: { peripheral },\n });\n return peripheral;\n },\n [emitCommand, roverId],\n );\n\n const sendSong = useCallback(\n (notes = [], options = {}) => {\n if (!roverId) return null;\n const prepared =\n Array.isArray(notes) && notes.length > 0\n ? notes\n : [{ note: SONG_DEFAULT_NOTE, duration: SONG_DEFAULT_DURATION }];\n const payloadNotes = prepared.slice(0, 16).map((entry) => ({\n note: clampRange(Math.round(entry?.note ?? SONG_DEFAULT_NOTE), SONG_NOTE_RANGE),\n duration: clampRange(Math.round(entry?.duration ?? SONG_DEFAULT_DURATION), [1, 255]),\n }));\n emitCommand({\n type: 'song',\n data: {\n song: {\n notes: payloadNotes,\n slot: options.slot,\n loop: options.loop,\n },\n },\n });\n return payloadNotes;\n },\n [emitCommand, roverId],\n );\n\n return useMemo(\n () => ({\n roverId,\n rosterEntry,\n servoConfig,\n headlight,\n headlightState,\n laser,\n laserState,\n horn,\n peripherals,\n emitCommand,\n enableSensorStream,\n sendDriveDirect,\n sendAuxMotors,\n sendServoAngle,\n sendOiCommand,\n sendHeadlight,\n sendLaser,\n sendHorn,\n sendPeripheralControl,\n sendSong,\n runMacroSteps,\n }),\n [\n roverId,\n rosterEntry,\n servoConfig,\n headlight,\n headlightState,\n laser,\n laserState,\n horn,\n peripherals,\n emitCommand,\n enableSensorStream,\n sendDriveDirect,\n sendAuxMotors,\n sendServoAngle,\n sendOiCommand,\n sendHeadlight,\n sendLaser,\n sendHorn,\n sendPeripheralControl,\n sendSong,\n runMacroSteps,\n ],\n );\n}\n","// Keymap Utilities\n// Purpose: Normalizes key binding definitions and lookup behavior for control settings. Scope: Provides conversion/validation helpers for keyboard mapping workflows.\nconst KEY_ALIASES = {\n '{': '[',\n '}': ']',\n ':': ';',\n '\"': \"'\",\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\',\n '_': '-',\n '+': '=',\n};\n\nconst BINDING_CODE_MAP = {\n '[': 'BracketLeft',\n ']': 'BracketRight',\n '\\\\': 'Backslash',\n ';': 'Semicolon',\n \"'\": 'Quote',\n ',': 'Comma',\n '.': 'Period',\n '/': 'Slash',\n '-': 'Minus',\n '=': 'Equal',\n '`': 'Backquote',\n};\n\nexport function canonicalizeKeyInput(value) {\n if (typeof value !== 'string') return '';\n const lower = value.toLowerCase();\n return KEY_ALIASES[lower] ?? lower;\n}\n\nexport function deriveCodeForKey(value) {\n const canonical = canonicalizeKeyInput(value);\n if (!canonical) return null;\n if (BINDING_CODE_MAP[canonical]) return BINDING_CODE_MAP[canonical];\n if (canonical.length === 1) {\n if (/[a-z]/.test(canonical)) return `Key${canonical.toUpperCase()}`;\n if (/[0-9]/.test(canonical)) return `Digit${canonical}`;\n }\n return null;\n}\n\nexport function createKeyToken(value) {\n const canonical = canonicalizeKeyInput(value);\n return canonical ? `key:${canonical}` : null;\n}\n\nexport function createCodeToken(value) {\n const code = deriveCodeForKey(value);\n return code ? `code:${code}` : null;\n}\n\nexport function tokensForEvent(event) {\n const tokens = new Set();\n const keyToken = createKeyToken(event?.key ?? '');\n if (keyToken) tokens.add(keyToken);\n const codeToken = event?.code ? `code:${event.code}` : null;\n if (codeToken) tokens.add(codeToken);\n return Array.from(tokens);\n}\n\nexport function normalizeKeymapEntries(keymap = {}) {\n return Object.fromEntries(\n Object.entries(keymap).map(([action, bindings]) => {\n const values = Array.isArray(bindings) ? bindings : [bindings];\n const normalized = new Set();\n values.forEach((value) => {\n const keyToken = createKeyToken(String(value));\n if (keyToken) normalized.add(keyToken);\n const codeToken = createCodeToken(String(value));\n if (codeToken) normalized.add(codeToken);\n });\n return [action, normalized];\n }),\n );\n}\n\nexport function formatKeyLabel(value) {\n const canonical = canonicalizeKeyInput(value);\n if (!canonical) return '—';\n if (canonical === ' ') return 'Space';\n if (canonical === '\\\\') return 'Backslash';\n if (canonical === '`') return 'Backtick';\n if (canonical === '[') return '[ or {';\n if (canonical === ']') return '] or }';\n if (canonical === ';') return '; or :';\n if (canonical === \"'\") return \"' or \\\"\";\n if (canonical === ',') return ', or <';\n if (canonical === '.') return '. or >';\n if (canonical === '/') return '/ or ?';\n if (canonical === '-') return '- or _';\n if (canonical === '=') return '= or +';\n if (canonical === 'arrowup') return 'Arrow Up';\n if (canonical === 'arrowdown') return 'Arrow Down';\n if (canonical === 'arrowleft') return 'Arrow Left';\n if (canonical === 'arrowright') return 'Arrow Right';\n return canonical.length === 1 ? canonical.toUpperCase() : canonical;\n}\n","// Settings Provider\n// Purpose: Supplies app-wide settings state and namespace-scoped update APIs. Scope: Bridges persistence helpers with React context for consistent settings access.\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { loadSettings, saveSettings } from './persistence.js';\n\nconst SettingsContext = createContext(null);\n\nexport function SettingsProvider({ children }) {\n const [state, setState] = useState(() => ({ status: 'loading', data: {} }));\n\n useEffect(() => {\n const loaded = loadSettings();\n setState({ status: 'ready', data: loaded ?? {} });\n }, []);\n\n const reload = useCallback(() => {\n const loaded = loadSettings();\n setState({ status: 'ready', data: loaded ?? {} });\n }, []);\n\n const saveAll = useCallback((nextData) => {\n const success = saveSettings(nextData ?? {});\n if (success) {\n setState({ status: 'ready', data: nextData ?? {} });\n } else {\n setState((prev) => ({ ...prev, status: 'error' }));\n }\n return success;\n }, []);\n\n const setNamespace = useCallback((namespace, updater) => {\n setState((prev) => {\n const baseData = prev.status === 'ready' ? prev.data : loadSettings() ?? {};\n const current = baseData[namespace] || {};\n const nextValue = typeof updater === 'function' ? updater(current) : { ...current, ...(updater ?? {}) };\n const nextData = { ...baseData, [namespace]: nextValue };\n const success = saveSettings(nextData);\n if (!success) {\n return { ...prev, status: 'error' };\n }\n return { status: 'ready', data: nextData };\n });\n }, []);\n\n const contextValue = useMemo(\n () => ({\n data: state.data,\n status: state.status,\n reload,\n saveAll,\n setNamespace,\n }),\n [state, reload, saveAll, setNamespace],\n );\n\n return {children};\n}\n\nexport function useSettings() {\n const ctx = useContext(SettingsContext);\n if (!ctx) {\n throw new Error('useSettings must be used within SettingsProvider');\n }\n return ctx;\n}\n\nexport function useSettingsNamespace(namespace, defaults = {}) {\n const { data, status, setNamespace } = useSettings();\n /*\n Defaults describe the initial shape of a namespace; they are not live state.\n Keep the first supplied value in lazy hook state because callers naturally pass object\n literals. Returning each newly-created literal while the namespace is absent\n would make an unchanged setting appear to change on every parent render and\n could retrigger effects that synchronize settings to the server.\n */\n const [initialDefaults] = useState(() => defaults ?? {});\n const value = data[namespace] ?? initialDefaults;\n\n const save = useCallback(\n (update) => {\n setNamespace(namespace, (current) => {\n const base = current ?? {};\n if (typeof update === 'function') {\n return update(base);\n }\n return { ...base, ...(update ?? {}) };\n });\n },\n [namespace, setNamespace],\n );\n\n const replace = useCallback(\n (nextValue) => {\n setNamespace(namespace, () => nextValue ?? {});\n },\n [namespace, setNamespace],\n );\n\n const reset = useCallback(() => {\n /*\n Reset uses the same stable initial defaults exposed above. This keeps the\n namespace contract consistent even if a caller recreates its defaults\n object during later renders.\n */\n const base = typeof initialDefaults === 'object' ? { ...initialDefaults } : initialDefaults;\n setNamespace(namespace, () => base ?? {});\n }, [initialDefaults, namespace, setNamespace]);\n\n return { value, status, save, replace, reset };\n}\n","// Settings Namespaces\n// Purpose: Defines namespace identifiers used to segment persisted settings data. Scope: Prevents key collisions and standardizes settings lookup domains.\nexport const INPUT_SETTINGS_DEFAULTS = {\n keyboard: {\n baseSpeed: 210,\n turboSpeed: 500,\n precisionSpeed: 100,\n tiltSpeed: 90,\n tiltIntervalMs: 110,\n },\n};\n\nexport const GAMEPAD_PROFILE_DEFAULT = {\n behaviorVersion: 4,\n label: 'Default',\n promptStyle: 'auto',\n calibration: {\n // Steering mode changes only how controller axes are interpreted. Both modes still emit the\n // same normalized drive vector consumed by the shared rover control pipeline.\n driveMode: 'single',\n driveDeadzone: 0.18,\n cameraDeadzone: 0.08,\n auxDeadzone: 0.05,\n driveCurve: 'linear',\n cameraCurve: 'linear',\n auxCurve: 'linear',\n cameraMode: 'velocity',\n cameraSensitivity: 60,\n auxSideScale: 0.55,\n baseSpeed: 500,\n turboSpeed: 500,\n precisionSpeed: 100,\n },\n bindings: {\n drive: {\n kind: 'axisPair',\n sources: [{ kind: 'axisPair', x: 0, y: 1, invertX: false, invertY: true }],\n },\n // Tank steering treats the two vertical stick axes as independent wheel throttles. These\n // remain separate bindings so controllers with unusual layouts can capture and invert each\n // track without affecting the conventional single-stick mapping above.\n tankLeft: {\n kind: 'axis',\n sources: [{ kind: 'axis', index: 1, invert: true }],\n },\n tankRight: {\n kind: 'axis',\n sources: [{ kind: 'axis', index: 3, invert: true }],\n },\n cameraTilt: {\n kind: 'axis',\n sources: [{ kind: 'axis', index: 3, invert: true }],\n },\n // Tank mode consumes both stick Y axes for driving, so its existing camera axis is exposed as\n // two independently remappable buttons. Runtime combines them into the same signed camera\n // value used by the analog single-stick binding; no camera-specific command path is added.\n tankCameraUp: {\n kind: 'button',\n sources: [{ kind: 'button', index: 12 }],\n },\n tankCameraDown: {\n kind: 'button',\n sources: [{ kind: 'button', index: 13 }],\n },\n mainBrush: {\n kind: 'axis',\n sources: [{ kind: 'buttonAxis', index: 6 }],\n },\n sideBrush: {\n kind: 'axis',\n sources: [{ kind: 'buttonAxis', index: 7 }],\n },\n vacuum: {\n kind: 'button',\n sources: [{ kind: 'button', index: 1 }],\n },\n allAux: {\n kind: 'button',\n sources: [{ kind: 'button', index: 0 }],\n },\n mainReverse: {\n kind: 'button',\n sources: [],\n },\n sideReverse: {\n kind: 'button',\n sources: [],\n },\n driveMacro: {\n kind: 'button',\n sources: [{ kind: 'button', index: 9 }],\n },\n dockMacro: {\n kind: 'button',\n sources: [{ kind: 'button', index: 3 }],\n },\n headlightToggle: {\n kind: 'button',\n sources: [{ kind: 'button', index: 4 }],\n },\n laserToggle: {\n kind: 'button',\n sources: [{ kind: 'button', index: 5 }],\n },\n boostModifier: {\n kind: 'button',\n // Full-stick driving already reaches the rover's 500-unit limit, so a default turbo button\n // would claim a useful physical control without changing output.\n sources: [],\n },\n slowModifier: {\n kind: 'button',\n sources: [{ kind: 'button', index: 10 }],\n },\n hornHonk: {\n kind: 'button',\n sources: [{ kind: 'button', index: 2 }],\n },\n micPtt: {\n kind: 'button',\n sources: [],\n },\n videoFilterCycle: {\n kind: 'button',\n sources: [],\n },\n chatFocus: {\n kind: 'button',\n sources: [],\n },\n songNoteUp: {\n kind: 'button',\n sources: [{ kind: 'button', index: 12 }],\n },\n songNoteDown: {\n kind: 'button',\n sources: [{ kind: 'button', index: 13 }],\n },\n homeAssistantOn: {\n kind: 'button',\n sources: [{ kind: 'button', index: 15 }],\n },\n homeAssistantOff: {\n kind: 'button',\n sources: [{ kind: 'button', index: 14 }],\n },\n /* These direct digital aux actions mirror the keyboard contract exactly. They start empty\n because the analog trigger/stick defaults above are friendlier on a controller, but users\n can bind either style without the shared control system knowing which device produced it. */\n auxMainForward: { kind: 'button', sources: [] },\n auxMainReverse: { kind: 'button', sources: [] },\n auxSideForward: { kind: 'button', sources: [] },\n auxSideReverse: { kind: 'button', sources: [] },\n auxVacuumFast: { kind: 'button', sources: [] },\n auxVacuumSlow: { kind: 'button', sources: [] },\n auxAllForward: { kind: 'button', sources: [] },\n },\n};\n\nexport const GAMEPAD_SETTINGS_DEFAULTS = {\n // Runtime instance selection includes the browser slot so two identical controllers remain\n // distinguishable, while profiles below stay keyed by reusable hardware signature.\n activeInstanceKey: null,\n profiles: {},\n defaults: {\n profile: GAMEPAD_PROFILE_DEFAULT,\n },\n};\n\nexport const HORN_SETTINGS_DEFAULTS = {\n waveform: 'saw',\n freqs: [440, 550, 660, 0],\n};\n\nexport const AUDIO_SETTINGS_DEFAULTS = {\n masterVolume: 1,\n alertVolume: 0.5,\n roverVolume: 1,\n mainBrushDuckEnabled: true,\n mainBrushDuckAmount: 0.75,\n};\n\nexport const VIDEO_SETTINGS_DEFAULTS = {\n // Keep the default as unfiltered color because most rovers still provide useful color\n // information. The filter is an operator preference, so it belongs in persisted UI\n // settings instead of being inferred from a rover stream or camera URL.\n colorFilter: 'none',\n};\n","// Telemetry Context Provider\n// Purpose: Maintains shared telemetry snapshots and rover status streams for UI consumers. Scope: Subscribes to telemetry events and exposes normalized read APIs to components.\n/* eslint-disable react-refresh/only-export-components */\n\nimport { createContext, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport { useSocket } from './SocketContext.jsx';\nimport { useSessionSelector } from './SessionContext.jsx';\n\nconst EMPTY_FRAMES = Object.freeze({});\nconst EMPTY_FRAME = null;\nconst DEFAULT_VISUAL_THROTTLE_MS = 250;\n\nconst TelemetryContext = createContext(null);\n\nexport function shallowArrayEqual(left, right) {\n if (Object.is(left, right)) return true;\n if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) return false;\n for (let idx = 0; idx < left.length; idx += 1) {\n if (!Object.is(left[idx], right[idx])) return false;\n }\n return true;\n}\n\nexport function shallowObjectEqual(left, right) {\n if (Object.is(left, right)) return true;\n if (!left || !right || typeof left !== 'object' || typeof right !== 'object') return false;\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n if (leftKeys.length !== rightKeys.length) return false;\n for (const key of leftKeys) {\n if (!Object.prototype.hasOwnProperty.call(right, key) || !Object.is(left[key], right[key])) {\n return false;\n }\n }\n return true;\n}\n\nfunction selectFrameIdentity(frame) {\n return frame;\n}\n\nexport function TelemetryProvider({ children }) {\n const socket = useSocket();\n const sessionRole = useSessionSelector((state) => state.session?.role || null);\n const framesRef = useRef({});\n const roverSubscribersRef = useRef(new Map());\n const allSubscribersRef = useRef(new Set());\n const visualAllSubscribersRef = useRef(new Set());\n const selectorSubscribersRef = useRef(new Map());\n const pendingVisualRoversRef = useRef(new Set());\n const visualAllPendingRef = useRef(false);\n const sessionRoleRef = useRef(sessionRole);\n const visualPolicyRef = useRef({ mobile: false });\n const visualTimerRef = useRef(null);\n sessionRoleRef.current = sessionRole;\n\n const defaultVisualThrottleMs = () => {\n // The throttle policy is intentionally sourced from existing app state:\n // session role identifies spectator-style pages, and App publishes its\n // already-computed layout mode. Telemetry should not independently inspect\n // paths or viewport dimensions because that would duplicate page policy and\n // drift from the rest of the UI.\n const spectator = sessionRoleRef.current === 'spectator';\n const mobile = Boolean(visualPolicyRef.current.mobile);\n return spectator || mobile ? DEFAULT_VISUAL_THROTTLE_MS : 0;\n };\n\n const throttleMsForEntry = (entry) => (\n Number.isFinite(entry.throttleMs) ? entry.throttleMs : defaultVisualThrottleMs()\n );\n\n const notifyRover = (roverId) => {\n const listeners = roverSubscribersRef.current.get(roverId);\n if (listeners) {\n listeners.forEach((listener) => listener());\n }\n allSubscribersRef.current.forEach((listener) => listener());\n };\n\n const evaluateSelectorEntries = (roverId, entries) => {\n const frame = framesRef.current[roverId] ?? EMPTY_FRAME;\n entries.forEach((entry) => {\n const nextValue = entry.selector(frame);\n if (entry.equalityFn(entry.currentValue, nextValue)) return;\n entry.currentValue = nextValue;\n entry.listener(nextValue);\n });\n };\n\n const notifyRawSelectors = (roverId) => {\n const entries = selectorSubscribersRef.current.get(roverId);\n if (!entries) return;\n evaluateSelectorEntries(\n roverId,\n [...entries].filter((entry) => entry.mode !== 'visual'),\n );\n };\n\n const flushVisualSelectors = () => {\n visualTimerRef.current = null;\n const roverIds = [...pendingVisualRoversRef.current];\n pendingVisualRoversRef.current.clear();\n roverIds.forEach((roverId) => {\n const entries = selectorSubscribersRef.current.get(roverId);\n if (!entries) return;\n evaluateSelectorEntries(\n roverId,\n [...entries].filter((entry) => entry.mode === 'visual' && throttleMsForEntry(entry) > 0),\n );\n });\n if (visualAllPendingRef.current) {\n visualAllPendingRef.current = false;\n visualAllSubscribersRef.current.forEach((listener) => listener());\n }\n };\n\n const notifyVisualSelectors = (roverId) => {\n const entries = selectorSubscribersRef.current.get(roverId);\n if (!entries) return;\n const visualEntries = [...entries].filter((entry) => entry.mode === 'visual');\n const immediateEntries = visualEntries.filter((entry) => throttleMsForEntry(entry) <= 0);\n const throttledEntries = visualEntries.filter((entry) => throttleMsForEntry(entry) > 0);\n\n // Desktop visual subscriptions still benefit from field-level selectors, but\n // they do not need cadence throttling. Evaluate those entries immediately so\n // desktop dashboards keep the same responsiveness they had before this change.\n if (immediateEntries.length) {\n evaluateSelectorEntries(roverId, immediateEntries);\n }\n if (!throttledEntries.length) return;\n\n pendingVisualRoversRef.current.add(roverId);\n if (visualTimerRef.current) return;\n\n const delay = throttledEntries.reduce(\n (lowest, entry) => Math.min(lowest, throttleMsForEntry(entry)),\n DEFAULT_VISUAL_THROTTLE_MS,\n );\n visualTimerRef.current = setTimeout(flushVisualSelectors, delay);\n };\n\n const notifyVisualAll = () => {\n const throttleMs = defaultVisualThrottleMs();\n if (throttleMs <= 0) {\n visualAllSubscribersRef.current.forEach((listener) => listener());\n return;\n }\n visualAllPendingRef.current = true;\n if (visualTimerRef.current) return;\n visualTimerRef.current = setTimeout(flushVisualSelectors, throttleMs);\n };\n\n const store = useMemo(\n () => ({\n getFrames: () => framesRef.current,\n getFrame: (roverId) => {\n if (!roverId) return EMPTY_FRAME;\n return framesRef.current[roverId] ?? EMPTY_FRAME;\n },\n subscribeAll: (listener) => {\n allSubscribersRef.current.add(listener);\n return () => {\n allSubscribersRef.current.delete(listener);\n };\n },\n subscribeAllVisual: (listener) => {\n visualAllSubscribersRef.current.add(listener);\n return () => {\n visualAllSubscribersRef.current.delete(listener);\n };\n },\n setVisualPolicy: (policy = {}) => {\n visualPolicyRef.current = {\n ...visualPolicyRef.current,\n ...policy,\n };\n },\n subscribeRover: (roverId, listener) => {\n if (!roverId) return () => {};\n let listeners = roverSubscribersRef.current.get(roverId);\n if (!listeners) {\n listeners = new Set();\n roverSubscribersRef.current.set(roverId, listeners);\n }\n listeners.add(listener);\n return () => {\n const current = roverSubscribersRef.current.get(roverId);\n if (!current) return;\n current.delete(listener);\n if (!current.size) {\n roverSubscribersRef.current.delete(roverId);\n }\n };\n },\n subscribeSelector: (roverId, selector, listener, equalityFn = Object.is, options = {}) => {\n if (!roverId || typeof selector !== 'function') return () => {};\n let listeners = selectorSubscribersRef.current.get(roverId);\n if (!listeners) {\n listeners = new Set();\n selectorSubscribersRef.current.set(roverId, listeners);\n }\n\n const mode = options.mode === 'visual' ? 'visual' : 'raw';\n const throttleMs =\n mode === 'visual' && Number.isFinite(options.throttleMs)\n ? Math.max(0, options.throttleMs)\n : null;\n const entry = {\n selector,\n listener,\n equalityFn,\n mode,\n throttleMs,\n // The current value is stored with the subscription so selector\n // equality is checked before React is notified. This keeps unrelated\n // sensor fields from invalidating components that do not read them.\n currentValue: selector(framesRef.current[roverId] ?? EMPTY_FRAME),\n };\n listeners.add(entry);\n\n // React renders before effects subscribe. A sensor frame can therefore\n // arrive after the hook's render-time read but before this entry exists.\n // Publish the exact snapshot used to initialize the subscription so the\n // component cannot remain stuck on that stale render-time value until a\n // selected field changes again. Registering first is important: any\n // frame arriving after this point will also notify the listener normally.\n listener(entry.currentValue);\n return () => {\n const current = selectorSubscribersRef.current.get(roverId);\n if (!current) return;\n current.delete(entry);\n if (!current.size) {\n selectorSubscribersRef.current.delete(roverId);\n }\n };\n },\n }),\n [],\n );\n\n useEffect(() => {\n function handleSensorFrame({ roverId, sensors = {}, frame = {}, overcurrentProtection = null }) {\n if (!roverId) return;\n const previous = framesRef.current[roverId] ?? {};\n framesRef.current = {\n ...framesRef.current,\n [roverId]: {\n ...previous,\n roverId,\n sensors,\n // Protection is server-calculated policy state, not a native Roomba\n // sensor. Keeping it beside `sensors` preserves that distinction while\n // allowing selectors to read one coherent telemetry snapshot.\n overcurrentProtection,\n raw: frame?.data || null,\n receivedAt: Date.now(),\n },\n };\n notifyRover(roverId);\n notifyRawSelectors(roverId);\n notifyVisualSelectors(roverId);\n notifyVisualAll();\n }\n\n function handleRoverHostStats({ roverId, stats = {}, receivedAt = null }) {\n if (!roverId) return;\n const previous = framesRef.current[roverId] ?? {};\n const now = Date.now();\n framesRef.current = {\n ...framesRef.current,\n [roverId]: {\n ...previous,\n roverId,\n // Host stats are Pi/Linux metadata. They live beside sensors so UI\n // consumers can render Pi health without treating it as raw Roomba\n // sensor data.\n hostStats: stats,\n hostStatsReceivedAt: Number.isFinite(receivedAt) ? receivedAt : now,\n },\n };\n notifyRover(roverId);\n notifyRawSelectors(roverId);\n notifyVisualSelectors(roverId);\n notifyVisualAll();\n }\n\n socket.on('sensorFrame', handleSensorFrame);\n socket.on('roverHostStats', handleRoverHostStats);\n return () => {\n socket.off('sensorFrame', handleSensorFrame);\n socket.off('roverHostStats', handleRoverHostStats);\n if (visualTimerRef.current) {\n clearTimeout(visualTimerRef.current);\n visualTimerRef.current = null;\n }\n };\n // The notification helpers above read only refs and constants; tying this\n // socket subscription to their render-time identities would churn socket\n // listeners without changing what data they read. The socket object is the\n // actual external dependency that should resubscribe this effect.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [socket]);\n\n return {children};\n}\n\nexport function useTelemetryFrames() {\n const store = useContext(TelemetryContext);\n if (!store) {\n throw new Error('useTelemetryFrames must be used within TelemetryProvider');\n }\n return useSyncExternalStore(store.subscribeAll, store.getFrames, () => EMPTY_FRAMES);\n}\n\nexport function useVisualTelemetryFrames() {\n const store = useContext(TelemetryContext);\n if (!store) {\n throw new Error('useVisualTelemetryFrames must be used within TelemetryProvider');\n }\n return useSyncExternalStore(store.subscribeAllVisual, store.getFrames, () => EMPTY_FRAMES);\n}\n\nexport function useTelemetryVisualPolicy(policy) {\n const store = useContext(TelemetryContext);\n if (!store) {\n throw new Error('useTelemetryVisualPolicy must be used within TelemetryProvider');\n }\n\n const mobile = Boolean(policy?.mobile);\n useEffect(() => {\n store.setVisualPolicy({ mobile });\n return () => {\n store.setVisualPolicy({ mobile: false });\n };\n }, [mobile, store]);\n}\n\nexport function useTelemetryFrame(roverId) {\n const store = useContext(TelemetryContext);\n if (!store) {\n throw new Error('useTelemetryFrame must be used within TelemetryProvider');\n }\n return useSyncExternalStore(\n (listener) => store.subscribeRover(roverId, listener),\n () => store.getFrame(roverId),\n () => EMPTY_FRAME,\n );\n}\n\nexport function useTelemetrySelector(roverId, selector = selectFrameIdentity, equalityFn = Object.is, options = {}) {\n const store = useContext(TelemetryContext);\n if (!store) {\n throw new Error('useTelemetrySelector must be used within TelemetryProvider');\n }\n const mode = options.mode === 'visual' ? 'visual' : 'raw';\n const throttleMs = Number.isFinite(options.throttleMs) ? Math.max(0, options.throttleMs) : undefined;\n const [selectionState, setSelectionState] = useState(() => ({\n roverId,\n selector,\n value: selector(store.getFrame(roverId)),\n }));\n const renderedSelected =\n selectionState.roverId === roverId && selectionState.selector === selector\n ? selectionState.value\n : selector(store.getFrame(roverId));\n\n useEffect(() => {\n const publishSelected = (value) => {\n setSelectionState({ roverId, selector, value });\n };\n return store.subscribeSelector(roverId, selector, publishSelected, equalityFn, { mode, throttleMs });\n }, [equalityFn, mode, roverId, selector, store, throttleMs]);\n\n return renderedSelected;\n}\n\nexport function useVisualTelemetrySelector(roverId, selector, equalityFn = Object.is, options = {}) {\n return useTelemetrySelector(roverId, selector, equalityFn, { ...options, mode: 'visual' });\n}\n","// Overcurrent Protection View Hook\n// Purpose: Adapts server-authoritative protection telemetry for existing control and HUD consumers.\n// Scope: Contains no protection timers or command scaling; enforcement belongs exclusively to the server service.\n\nimport { useMemo } from 'react';\nimport { useTelemetrySelector } from '../context/TelemetryContext.jsx';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\n\nexport const OVERCURRENT_GROUPS = [\n { key: 'drive', motors: ['leftWheel', 'rightWheel'] },\n { key: 'aux', motors: ['mainBrush', 'sideBrush'] },\n];\n\nconst EMPTY_PROTECTION = Object.freeze({\n status: 'idle',\n bypassed: false,\n drive: Object.freeze({ cap: 1, blocked: false, requiresNeutral: false, stopReason: null }),\n motors: Object.freeze({}),\n config: Object.freeze({}),\n});\n\nfunction selectOvercurrentProtection(frame) {\n return frame?.overcurrentProtection || EMPTY_PROTECTION;\n}\n\nexport function useOvercurrentLimiter(roverId) {\n const role = useSessionSelector((state) => state.session?.role || null);\n const protection = useTelemetrySelector(roverId, selectOvercurrentProtection);\n const adminImmune = role === 'admin' || role === 'lockdown';\n\n return useMemo(() => {\n const motors = protection?.motors || {};\n const driveCap = Number.isFinite(protection?.drive?.cap) ? protection.drive.cap : 1;\n const mainCap = Number.isFinite(motors?.mainBrush?.cap) ? motors.mainBrush.cap : 1;\n const sideCap = Number.isFinite(motors?.sideBrush?.cap) ? motors.sideBrush.cap : 1;\n const auxCap = Math.min(mainCap, sideCap);\n const motorFlags = OVERCURRENT_GROUPS.reduce((result, group) => {\n group.motors.forEach((motor) => {\n result[motor] = Boolean(motors?.[motor]?.overcurrent);\n });\n return result;\n }, {});\n const groupFlags = OVERCURRENT_GROUPS.reduce((result, group) => {\n result[group.key] = group.motors.some((motor) => motorFlags[motor]);\n return result;\n }, {});\n\n /*\n The compatibility-shaped fields keep existing control-context consumers\n simple while every value now comes from the same server snapshot. There\n is deliberately no local recovery loop: a stale or disconnected browser\n must never invent a safer state than the server actually calculated.\n */\n return {\n ...protection,\n caps: {\n drive: { cap: driveCap },\n aux: { cap: auxCap },\n },\n scales: {\n perGroup: { drive: driveCap, aux: auxCap },\n drive: { left: driveCap, right: driveCap },\n aux: { main: mainCap, side: sideCap, vacuum: 1 },\n },\n overcurrent: { motors: motorFlags, groups: groupFlags },\n isActive: protection?.status === 'limiting'\n || protection?.status === 'overcurrent'\n || protection?.status === 'stopped'\n || protection?.status === 'recovering',\n adminImmune,\n };\n }, [adminImmune, protection]);\n}\n","// PTZ Control Adapter\n// Purpose: Hooks the single PTZ camera into the internal control action layer.\n// Scope: Owns PTZ-specific control mixing and socket commands so keyboard,\n// mobile, desktop, and gamepad inputs do not each learn camera-specific rules.\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport { useSessionActions, useSessionSelector } from '../context/SessionContext.jsx';\n\nconst PTZ_STOP = { pan: 0, tilt: 0, zoom: 0 };\nconst PTZ_SPEEDS = {\n slow: 0.1,\n medium: 0.5,\n fast: 1,\n};\n// The TrackMix advertises a minimum ONVIF movement timeout of one second. A\n// quarter-second browser heartbeat gives the server several opportunities to\n// renew a genuinely held intent while still letting its watchdog distinguish a\n// live control from a browser that disappeared without delivering a release.\nconst MOTION_HEARTBEAT_MS = 250;\n\nfunction clampUnit(value) {\n const number = Number(value) || 0;\n return Math.max(-1, Math.min(1, number));\n}\n\nfunction axisSign(value) {\n const number = Number(value) || 0;\n if (number > 0.05) return 1;\n if (number < -0.05) return -1;\n return 0;\n}\n\nfunction pickPanTiltSpeed(vector = {}, meta = {}) {\n /*\n PTZ movement should not inherit rover wheel speeds. Inputs only choose a\n speed tier here: precision/low-magnitude input is slow, normal input is\n medium, and explicit boost is fast. That gives every control surface the\n same camera feel without remixing differential-drive output.\n */\n if (vector?.boost) return PTZ_SPEEDS.fast;\n const maxAxis = Math.max(Math.abs(Number(vector?.x) || 0), Math.abs(Number(vector?.y) || 0));\n const baseSpeed = Number(meta?.speedOptions?.baseSpeed);\n if (maxAxis > 0 && maxAxis <= 0.45) return PTZ_SPEEDS.slow;\n if (Number.isFinite(baseSpeed) && baseSpeed > 0 && baseSpeed <= 150) return PTZ_SPEEDS.slow;\n return PTZ_SPEEDS.medium;\n}\n\nfunction payloadSignature(payload = PTZ_STOP) {\n return [\n Number(payload.pan || 0).toFixed(3),\n Number(payload.tilt || 0).toFixed(3),\n Number(payload.zoom || 0).toFixed(3),\n ].join(':');\n}\n\nfunction isIdlePayload(payload = PTZ_STOP) {\n return !payload.pan && !payload.tilt && !payload.zoom;\n}\n\nfunction buildPanTiltPayload(vector = {}, meta = {}) {\n const panSign = axisSign(vector.x);\n const tiltSign = axisSign(vector.y);\n if (!panSign && !tiltSign) return PTZ_STOP;\n\n const speed = pickPanTiltSpeed(vector, meta);\n const diagonalScale = panSign && tiltSign ? Math.SQRT1_2 : 1;\n return {\n pan: clampUnit(panSign * speed * diagonalScale),\n tilt: clampUnit(tiltSign * speed * diagonalScale),\n zoom: 0,\n };\n}\n\nfunction isSpotlightOn(light = {}) {\n if (typeof light?.on === 'boolean') return light.on;\n const raw = light?.state;\n if (typeof raw === 'string') {\n const normalized = raw.trim().toLowerCase();\n return !['', '0', 'off', 'false'].includes(normalized);\n }\n return Boolean(Number(raw));\n}\n\nfunction normalizeIrMode(mode) {\n const normalized = String(mode || '').trim().toLowerCase();\n if (normalized === 'on') return 'On';\n if (normalized === 'off') return 'Off';\n return 'Auto';\n}\n\nfunction nextIrMode(currentMode) {\n /*\n The rover laser button becomes the PTZ camera's IR mode control while the\n PTZ camera is active. Cycle all three modes exposed by this Reolink camera\n instead of reducing the control to a two-state toggle.\n */\n const current = normalizeIrMode(currentMode);\n if (current === 'Auto') return 'On';\n if (current === 'On') return 'Off';\n return 'Auto';\n}\n\nexport function usePtzControlAdapter() {\n const socket = useSocket();\n const { ptzSpotlight, ptzIr } = useSessionActions();\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n const isActive = Boolean(ptz?.isOperator);\n const lastMotionSignatureRef = useRef(payloadSignature(PTZ_STOP));\n const desiredMotionRef = useRef(PTZ_STOP);\n const panTiltIntentRef = useRef({ pan: 0, tilt: 0 });\n const zoomIntentRef = useRef(0);\n const heartbeatTimerRef = useRef(null);\n\n const emitPtz = useCallback(\n (eventName, payload = {}) => {\n if (!socket || !isActive) return;\n socket.emit(eventName, payload);\n },\n [isActive, socket],\n );\n\n const clearHeartbeat = useCallback(() => {\n if (!heartbeatTimerRef.current) return;\n clearInterval(heartbeatTimerRef.current);\n heartbeatTimerRef.current = null;\n }, []);\n\n const publishMotion = useCallback(\n (payload, options = {}) => {\n if (!isActive) return false;\n const nextPayload = {\n pan: clampUnit(payload?.pan),\n tilt: clampUnit(payload?.tilt),\n zoom: clampUnit(payload?.zoom),\n };\n const nextSignature = payloadSignature(nextPayload);\n desiredMotionRef.current = nextPayload;\n\n if (isIdlePayload(nextPayload)) {\n clearHeartbeat();\n } else if (!heartbeatTimerRef.current) {\n /*\n Movement is renewed from the complete desired vector, not from the\n individual input event that happened to start it. This is what makes\n pan/tilt and zoom independent: every heartbeat describes all axes as\n they should be now, and no delayed zoom pulse can resurrect an older\n direction after a release.\n */\n heartbeatTimerRef.current = setInterval(() => {\n const current = desiredMotionRef.current;\n if (isIdlePayload(current)) {\n clearHeartbeat();\n return;\n }\n emitPtz('ptzCamera:motion', current);\n }, MOTION_HEARTBEAT_MS);\n }\n\n if (!options.force && lastMotionSignatureRef.current === nextSignature) return true;\n lastMotionSignatureRef.current = nextSignature;\n // Zero is a first-class desired state. The server translates the complete\n // idle vector into ONVIF Stop inside the same serialized command stream as\n // movement, which prevents separate move/stop handlers from racing.\n emitPtz('ptzCamera:motion', nextPayload);\n return true;\n },\n [clearHeartbeat, emitPtz, isActive],\n );\n\n const stopMotion = useCallback(\n (options = {}) => {\n // A global stop deliberately clears every axis. Safety/lifecycle callers\n // use force so the server receives a fresh stop even when the browser's\n // local signature already says it is idle after a dropped connection.\n panTiltIntentRef.current = { pan: 0, tilt: 0 };\n zoomIntentRef.current = 0;\n return publishMotion(PTZ_STOP, { force: Boolean(options.force) });\n },\n [publishMotion],\n );\n\n const applyDriveVector = useCallback(\n (vector, meta = {}) => {\n if (!isActive) return false;\n const panTilt = buildPanTiltPayload(vector, meta);\n panTiltIntentRef.current = {\n pan: panTilt.pan,\n tilt: panTilt.tilt,\n };\n /*\n ONVIF continuous movement accepts pan, tilt, and zoom in one command.\n Preserve the current zoom intent when a direction update arrives so a\n keyboard or touch event on one axis cannot erase another held axis.\n */\n publishMotion({\n ...panTiltIntentRef.current,\n zoom: zoomIntentRef.current,\n });\n return true;\n },\n [isActive, publishMotion],\n );\n\n const setZoomIntent = useCallback(\n (direction) => {\n if (!isActive) return false;\n const numeric = clampUnit(direction);\n const sign = axisSign(numeric);\n /*\n PTZ zoom is a held velocity, not a rover servo nudge. Convert the input\n magnitude to the same precision/normal tiers used for pan and tilt, then\n retain it until the input surface explicitly publishes zero. The shared\n heartbeat renews that state; there are no per-button repeat or delayed\n stop timers left to race with pointer/key release.\n */\n const speed = !sign ? 0 : Math.abs(numeric) <= 0.45 ? PTZ_SPEEDS.slow : PTZ_SPEEDS.medium;\n zoomIntentRef.current = sign * speed;\n publishMotion({\n ...panTiltIntentRef.current,\n zoom: zoomIntentRef.current,\n });\n return true;\n },\n [isActive, publishMotion],\n );\n\n const setSpotlight = useCallback(\n (nextOn) => {\n if (!isActive) return false;\n const desiredOn = typeof nextOn === 'boolean' ? nextOn : !isSpotlightOn(ptz?.light);\n /*\n Lighting keybinds should use the exact acknowledged command action as\n the visible PTZ buttons. Movement remains fire-and-forget because it is\n continuous and high frequency, but a discrete light toggle benefits\n from the existing authorization/error contract and must not maintain a\n second socket-only behavior merely because its source is a keybind.\n */\n ptzSpotlight({ state: desiredOn ? 1 : 0 }).catch(() => {});\n return true;\n },\n [isActive, ptz?.light, ptzSpotlight],\n );\n\n const setIr = useCallback(\n (nextOn) => {\n if (!isActive) return false;\n const desiredState = typeof nextOn === 'boolean'\n ? (nextOn ? 'On' : 'Off')\n : nextIrMode(ptz?.ir?.state);\n // Match the button path for the same reason as spotlight above. The\n // shared laser key continues to select IR; only its transport is unified.\n ptzIr({ state: desiredState }).catch(() => {});\n return true;\n },\n [isActive, ptz?.ir?.state, ptzIr],\n );\n\n useEffect(() => {\n if (isActive) return undefined;\n lastMotionSignatureRef.current = payloadSignature(PTZ_STOP);\n desiredMotionRef.current = PTZ_STOP;\n panTiltIntentRef.current = { pan: 0, tilt: 0 };\n zoomIntentRef.current = 0;\n clearHeartbeat();\n return undefined;\n }, [clearHeartbeat, isActive]);\n\n useEffect(() => {\n if (!isActive) return undefined;\n\n const forceSafetyStop = () => stopMotion({ force: true });\n const handleVisibility = () => {\n if (document.visibilityState === 'hidden') forceSafetyStop();\n };\n\n /*\n Input components handle ordinary pointer/key releases, but the adapter is\n the only layer guaranteed to see every PTZ control surface. Centralizing\n browser lifecycle stops here covers touch, keyboard, and gamepad equally\n when a tab hides, a window blurs, or mobile navigation fires pagehide.\n */\n window.addEventListener('blur', forceSafetyStop);\n window.addEventListener('pagehide', forceSafetyStop);\n document.addEventListener('visibilitychange', handleVisibility);\n return () => {\n window.removeEventListener('blur', forceSafetyStop);\n window.removeEventListener('pagehide', forceSafetyStop);\n document.removeEventListener('visibilitychange', handleVisibility);\n };\n }, [isActive, stopMotion]);\n\n useEffect(\n () => () => {\n clearHeartbeat();\n },\n [clearHeartbeat],\n );\n\n return useMemo(\n () => ({\n isActive,\n state: ptz,\n applyDriveVector,\n setZoomIntent,\n setSpotlight,\n setIr,\n stopMotion,\n }),\n [applyDriveVector, isActive, ptz, setIr, setSpotlight, setZoomIntent, stopMotion],\n );\n}\n","// Analytics Bridge\n// Purpose: Gives React a tiny, provider-neutral analytics surface. Scope:\n// forwards optional app events to a runtime-injected browser adapter without\n// importing Umami, embedding website ids, or making rover controls depend on\n// analytics availability.\n\nconst MAX_EVENT_NAME_LENGTH = 80;\nconst MAX_PROPERTY_KEY_LENGTH = 80;\nconst MAX_STRING_VALUE_LENGTH = 240;\n\nfunction getAdapter() {\n if (typeof window === 'undefined') return null;\n return window.roverAnalytics && typeof window.roverAnalytics === 'object'\n ? window.roverAnalytics\n : null;\n}\n\nfunction normalizeEventName(name) {\n if (typeof name !== 'string') return null;\n const normalized = name.trim().toLowerCase().replace(/[^a-z0-9_:-]+/g, '_');\n return normalized ? normalized.slice(0, MAX_EVENT_NAME_LENGTH) : null;\n}\n\nfunction normalizeValue(value) {\n if (value === null || value === undefined) return undefined;\n if (typeof value === 'boolean') return value;\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed ? trimmed.slice(0, MAX_STRING_VALUE_LENGTH) : undefined;\n }\n if (Array.isArray(value)) {\n /*\n Analytics properties should stay compact and dashboard-friendly. Arrays\n are reduced to primitive strings instead of sending nested structures that\n Umami cannot use well for event breakdowns.\n */\n const normalized = value\n .map((entry) => normalizeValue(entry))\n .filter((entry) => entry !== undefined)\n .map((entry) => String(entry));\n return normalized.length ? normalized.slice(0, 12).join(',') : undefined;\n }\n return undefined;\n}\n\nfunction normalizePayload(payload = {}) {\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) return {};\n return Object.entries(payload).reduce((clean, [key, value]) => {\n if (typeof key !== 'string') return clean;\n const normalizedKey = key.trim().replace(/[^a-zA-Z0-9_:-]+/g, '_').slice(0, MAX_PROPERTY_KEY_LENGTH);\n if (!normalizedKey) return clean;\n const normalizedValue = normalizeValue(value);\n if (normalizedValue === undefined) return clean;\n clean[normalizedKey] = normalizedValue;\n return clean;\n }, {});\n}\n\nexport function trackAnalyticsEvent(name, payload = {}) {\n const eventName = normalizeEventName(name);\n if (!eventName) return;\n const adapter = getAdapter();\n if (!adapter || typeof adapter.track !== 'function') return;\n const cleanPayload = normalizePayload(payload);\n\n try {\n /*\n Analytics must be observability-only. Catching adapter errors here keeps a\n broken or blocked third-party script from interfering with rover driving,\n scanner input, chat, or any other live-control UI.\n */\n /*\n Umami accepts an event name without a data object. Avoid forwarding `{}` so\n events that only need counting do not create noisy empty-property requests\n in the dashboard or the network payload.\n */\n if (Object.keys(cleanPayload).length) {\n adapter.track(eventName, cleanPayload);\n } else {\n adapter.track(eventName);\n }\n } catch (error) {\n console.warn('Analytics event failed', error);\n }\n}\n\nexport function identifyAnalyticsSession(payload = {}) {\n const adapter = getAdapter();\n if (!adapter || typeof adapter.identify !== 'function') return;\n\n try {\n /*\n Session identity is centralized so individual events do not need to repeat\n nickname, rover, role, layout, and route data. The injected build-time\n adapter still decides which fields are forwarded to the actual provider.\n */\n adapter.identify(normalizePayload(payload));\n } catch (error) {\n console.warn('Analytics identify failed', error);\n }\n}\n","// Control Context Provider\n// Purpose: Exposes control-system state/actions to control-capable components. Scope: Owns reducer wiring, pipeline integration, and top-level provider hooks.\n/* eslint-disable react-refresh/only-export-components */\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport { controlReducer, initialControlState } from './controlReducer.js';\nimport { computeDifferentialSpeeds, clamp } from './controlMath.js';\nimport { useCommandPipeline } from './commandPipeline.js';\nimport {\n DEFAULT_KEYMAP,\n DEFAULT_MACROS,\n HORN_HEAT_COOL_PER_SEC,\n HORN_HEAT_RESUME_THRESHOLD,\n HORN_HEAT_UP_PER_SEC,\n HORN_MAX_FREQUENCY,\n HORN_MAX_MS,\n MANUAL_DOCK_ASSIST_MAX_SPEED,\n SONG_DEFAULT_NOTE,\n} from './constants.js';\nimport { canonicalizeKeyInput } from './keymapUtils.js';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { useSessionActions, useSessionSelector } from '../context/SessionContext.jsx';\nimport { HORN_SETTINGS_DEFAULTS } from '../settings/namespaces.js';\nimport { useOvercurrentLimiter } from './overcurrentLimiter.js';\nimport { usePtzControlAdapter } from './ptzControlAdapter.js';\nimport { trackAnalyticsEvent } from '../analytics/index.js';\n\nconst ControlSystemContext = createContext(null);\n\nfunction normalizeSelector(selector) {\n return typeof selector === 'function' ? selector : (snapshot) => snapshot;\n}\n\nconst CONTROL_ACTION_NAMES = [\n 'setMode',\n 'setDriveVector',\n 'setAuxMotors',\n 'setServoAngle',\n 'nudgeServo',\n 'setCameraAxisIntent',\n 'goServoHome',\n 'setCameraPrecisionMode',\n 'runMacro',\n 'stopAllMotion',\n 'sendOiCommand',\n 'setSensorStream',\n 'setHeadlight',\n 'toggleHeadlight',\n 'setLaser',\n 'toggleLaser',\n 'updateKeyBinding',\n 'resetKeyBindings',\n 'registerInputState',\n 'setManualDockAssistActive',\n 'toggleManualDockAssist',\n 'setSongNote',\n 'sendSong',\n 'startHorn',\n 'stopHorn',\n 'setPeripheralControl',\n 'setMicPttActive',\n];\n\nfunction cloneKeymap(map) {\n return Object.fromEntries(\n Object.entries(map || {}).map(([key, values]) => [key, Array.isArray(values) ? [...values] : []]),\n );\n}\n\nfunction clampServoAngle(config, value) {\n if (!config) return value;\n const min = typeof config.minAngle === 'number' ? config.minAngle : -45;\n const max = typeof config.maxAngle === 'number' ? config.maxAngle : 45;\n return clamp(value, min, max);\n}\n\nfunction removeDriveSequenceBackoff(steps = []) {\n if (!Array.isArray(steps) || steps.length < 3) return steps;\n const last3 = steps.slice(-3);\n const [backoffStep, pauseStep, stopStep] = last3;\n const isBackoffStep =\n backoffStep?.type === 'drive' &&\n Number(backoffStep?.speeds?.left) === -300 &&\n Number(backoffStep?.speeds?.right) === -300;\n const isPauseStep = pauseStep?.type === 'pause' && Number(pauseStep?.duration) === 600;\n const isStopStep =\n stopStep?.type === 'drive' &&\n Number(stopStep?.speeds?.left) === 0 &&\n Number(stopStep?.speeds?.right) === 0;\n if (!isBackoffStep || !isPauseStep || !isStopStep) return steps;\n return steps.slice(0, -3);\n}\n\nexport function ControlSystemProvider({ children }) {\n const [state, dispatch] = useReducer(controlReducer, initialControlState);\n const snapshotRef = useRef(null);\n const subscribersRef = useRef(new Set());\n const actionImplementationsRef = useRef({});\n const [stableActions] = useState(() => {\n /*\n Public action functions intentionally keep stable identities. Each wrapper\n reads the current implementation at call time, so consumers can depend on\n actions without re-rendering just because the real implementation now\n closes over a new state slice, pipeline object, or settings value.\n */\n return Object.fromEntries(\n CONTROL_ACTION_NAMES.map((name) => [\n name,\n (...args) => actionImplementationsRef.current[name]?.(...args),\n ]),\n );\n }, []);\n const getControlSnapshot = useCallback(() => snapshotRef.current, []);\n const subscribeControlSnapshot = useCallback((selector, listener, equalityFn = Object.is) => {\n const normalizedSelector = normalizeSelector(selector);\n const currentSnapshot = snapshotRef.current;\n const subscriber = {\n selector: normalizedSelector,\n equalityFn,\n listener,\n current: normalizedSelector(currentSnapshot),\n };\n subscribersRef.current.add(subscriber);\n return () => {\n subscribersRef.current.delete(subscriber);\n };\n }, []);\n const notifyControlSubscribers = useCallback((nextSnapshot) => {\n /*\n The provider context value below is stable, so React will not fan out an\n update to every consumer automatically. This loop is the replacement: it\n asks each subscribed component whether the exact value it selected changed\n and only wakes that component when its selected value is different.\n */\n subscribersRef.current.forEach((subscriber) => {\n const nextSelected = subscriber.selector(nextSnapshot);\n if (!subscriber.equalityFn(subscriber.current, nextSelected)) {\n subscriber.current = nextSelected;\n subscriber.listener(nextSelected);\n }\n });\n }, []);\n const prevModeRef = useRef(null);\n const pendingLightsRef = useRef(false);\n const servoAngleRef = useRef(initialControlState.camera.angle);\n const hornAutoStopRef = useRef(null);\n const hornStartAtRef = useRef(0);\n const hornHeatTickRef = useRef(0);\n const {\n value: controlSettings,\n save: saveControlSettings,\n } = useSettingsNamespace('controls', { keymap: DEFAULT_KEYMAP, macros: DEFAULT_MACROS });\n const { value: pageSettings } = useSettingsNamespace('page', { driveMacroBackoffEnabled: true });\n const { value: hornSettings } = useSettingsNamespace('horn', HORN_SETTINGS_DEFAULTS);\n const driveMacroBackoffEnabled =\n typeof pageSettings?.driveMacroBackoffEnabled === 'boolean'\n ? pageSettings.driveMacroBackoffEnabled\n : true;\n const roverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const homeAssistantEntities = useSessionSelector((state) => state.session?.homeAssistant?.entities ?? []);\n const roomLightsLocked = useSessionSelector((state) =>\n Boolean(state.session?.homeAssistant?.lightPolicy?.locked || state.session?.homeAssistant?.lightPolicy?.lockedOn),\n );\n const roomLightsLockedOn = useSessionSelector((state) =>\n Boolean(state.session?.homeAssistant?.lightPolicy?.lockedOn),\n );\n const { homeAssistantSetState } = useSessionActions();\n const overcurrentLimiter = useOvercurrentLimiter(roverId);\n /*\n Motor commands now remain raw until they reach the server-owned protection\n service. Applying another transform here would make non-admin commands pass\n through two independent limiters and would let browser lifecycle determine\n whether protection exists at all.\n */\n const pipeline = useCommandPipeline();\n const ptzControls = usePtzControlAdapter();\n\n const turnOnAllLights = useCallback(() => {\n /*\n Automatic drive-mode lighting is convenience behavior for the open room.\n A room-light lock is an explicit policy decision, including locked-off,\n so this helper must not issue any Home Assistant commands while that\n policy is active. Admins can still use the dedicated room lights when\n they need to override individual lamps.\n */\n if (roomLightsLocked) {\n pendingLightsRef.current = false;\n return;\n }\n const entities = homeAssistantEntities || [];\n const targets = entities.filter(\n (ent) =>\n (ent.type === 'light' || ent.type === 'switch') &&\n ent.available !== false &&\n ent.state !== 'on',\n );\n if (targets.length === 0) {\n pendingLightsRef.current = false;\n return;\n }\n pendingLightsRef.current = true;\n targets.forEach((ent) => {\n homeAssistantSetState(ent.id, 'on').catch(() => {});\n });\n // Give the loop a chance; clear pending after issuing commands.\n pendingLightsRef.current = false;\n }, [homeAssistantEntities, homeAssistantSetState, roomLightsLocked]);\n\n useEffect(() => {\n dispatch({ type: 'control/set-rover', payload: pipeline.roverId });\n }, [pipeline.roverId]);\n\n useEffect(() => {\n const prevMode = prevModeRef.current;\n prevModeRef.current = state.mode;\n if (prevMode !== 'drive' && state.mode === 'drive' && homeAssistantEntities?.length) {\n turnOnAllLights();\n } else if (prevMode !== 'drive' && state.mode === 'drive') {\n pendingLightsRef.current = true;\n }\n }, [state.mode, homeAssistantEntities, turnOnAllLights]);\n\n useEffect(() => {\n if (pendingLightsRef.current && homeAssistantEntities?.length) {\n turnOnAllLights();\n }\n }, [homeAssistantEntities, turnOnAllLights]);\n\n useEffect(() => {\n const mergedKeymap = { ...DEFAULT_KEYMAP, ...(controlSettings?.keymap || {}) };\n dispatch({ type: 'control/set-keymap', payload: mergedKeymap });\n if (controlSettings?.macros) {\n dispatch({ type: 'control/set-macros', payload: controlSettings.macros });\n }\n }, [controlSettings?.keymap, controlSettings?.macros]);\n\n useEffect(() => {\n const config = pipeline.servoConfig;\n if (!config) {\n dispatch({ type: 'control/set-camera-config', payload: { config: null } });\n servoAngleRef.current = null;\n return;\n }\n const min = typeof config.minAngle === 'number' ? config.minAngle : -45;\n const max = typeof config.maxAngle === 'number' ? config.maxAngle : 45;\n const base = typeof config.homeAngle === 'number' ? config.homeAngle : (min + max) / 2;\n const preserved =\n typeof servoAngleRef.current === 'number' ? clamp(servoAngleRef.current, min, max) : null;\n const angle = preserved != null ? preserved : clamp(base, min, max);\n dispatch({\n type: 'control/set-camera-config',\n payload: { config, angle },\n });\n servoAngleRef.current = angle;\n }, [pipeline.servoConfig]);\n\n useEffect(() => {\n servoAngleRef.current =\n typeof state.camera.angle === 'number' ? state.camera.angle : servoAngleRef.current;\n }, [state.camera.angle]);\n\n useEffect(() => {\n if (pipeline.roverId) {\n pipeline.enableSensorStream();\n }\n }, [pipeline.roverId, pipeline.enableSensorStream]);\n\n const setMode = useCallback(\n (mode) => {\n dispatch({ type: 'control/set-mode', payload: mode });\n },\n [],\n );\n\n const recordControlIntent = useCallback(() => {\n dispatch({ type: 'control/record-intent' });\n }, []);\n\n const driveEngagementRoverRef = useRef(null);\n\n useEffect(() => {\n /* A new assignment gets one meaningful movement conversion event. */\n driveEngagementRoverRef.current = null;\n }, [pipeline.roverId]);\n\n const setDriveVector = useCallback(\n (vector, meta = {}) => {\n const speedOptions = { ...(meta.speedOptions || {}) };\n if (state.manualDockAssist?.active) {\n const capped = Math.max(1, Math.min(MANUAL_DOCK_ASSIST_MAX_SPEED, 500));\n speedOptions.maxSpeed = Math.min(\n typeof speedOptions.maxSpeed === 'number' ? speedOptions.maxSpeed : capped,\n capped,\n );\n speedOptions.baseSpeed = Math.min(\n typeof speedOptions.baseSpeed === 'number' ? speedOptions.baseSpeed : capped,\n capped,\n );\n speedOptions.boostSpeed = Math.min(\n typeof speedOptions.boostSpeed === 'number' ? speedOptions.boostSpeed : capped,\n capped,\n );\n }\n const computed = computeDifferentialSpeeds(vector, speedOptions);\n const isMoving = computed.speeds.left !== 0 || computed.speeds.right !== 0;\n if (pipeline.roverId && isMoving && driveEngagementRoverRef.current !== pipeline.roverId) {\n driveEngagementRoverRef.current = pipeline.roverId;\n trackAnalyticsEvent('drive_engaged', {\n roverId: pipeline.roverId,\n source: meta.source || 'unknown',\n });\n }\n dispatch({\n type: 'control/update-drive',\n payload: { ...computed, source: meta.source ?? null },\n });\n recordControlIntent();\n if (ptzControls.applyDriveVector(vector, meta)) return;\n pipeline.sendDriveDirect(computed.speeds);\n },\n [pipeline, ptzControls, recordControlIntent, state.manualDockAssist?.active],\n );\n\n const setAuxMotors = useCallback(\n (values = {}) => {\n const payload = pipeline.sendAuxMotors(values) ?? values;\n dispatch({\n type: 'control/set-aux-motors',\n payload,\n });\n recordControlIntent();\n },\n [pipeline, recordControlIntent],\n );\n\n const updateKeyBinding = useCallback(\n (bindingId, keyValue) => {\n if (!bindingId) return false;\n const canonical = canonicalizeKeyInput(keyValue);\n if (!canonical) return false;\n const next = cloneKeymap(state.keymap);\n next[bindingId] = [canonical];\n dispatch({ type: 'control/set-keymap', payload: next });\n saveControlSettings((current) => ({\n ...(current ?? {}),\n keymap: next,\n }));\n return true;\n },\n [state.keymap, saveControlSettings],\n );\n\n const resetKeyBindings = useCallback(() => {\n const defaults = cloneKeymap(DEFAULT_KEYMAP);\n dispatch({ type: 'control/set-keymap', payload: defaults });\n saveControlSettings((current) => ({\n ...(current ?? {}),\n keymap: defaults,\n }));\n }, [saveControlSettings]);\n\n const setServoAngle = useCallback(\n (value, options = {}) => {\n /*\n Absolute servo positions belong only to rover hardware. PTZ zoom now\n enters through setCameraAxisIntent as a signed held velocity, so this\n function must not infer zoom direction by comparing unrelated absolute\n angle values from gamepad/manual-dock callers.\n */\n if (!pipeline.servoConfig) return;\n const force = Boolean(options?.force);\n if (state.manualDockAssist?.active && !force) return;\n const clamped = clampServoAngle(pipeline.servoConfig, value);\n dispatch({ type: 'control/set-camera-angle', payload: clamped });\n pipeline.sendServoAngle(clamped);\n servoAngleRef.current = clamped;\n recordControlIntent();\n },\n [pipeline, recordControlIntent, state.manualDockAssist?.active],\n );\n\n const nudgeServo = useCallback(\n (delta = 0) => {\n if (ptzControls.isActive) {\n /*\n A PTZ camera has no absolute browser-side servo angle. Treat a nudge\n as held zoom direction and, importantly, preserve zero as an explicit\n release. The previous fallback converted nudgeServo(0) into a positive\n default step, so releasing the mobile zoom button could zoom in again.\n */\n ptzControls.setZoomIntent(delta);\n recordControlIntent();\n return;\n }\n const config = pipeline.servoConfig;\n if (!config) return;\n const step = typeof delta === 'number' && delta !== 0 ? delta : config?.nudgeDegrees || 1;\n const baseline =\n typeof servoAngleRef.current === 'number'\n ? servoAngleRef.current\n : typeof config?.homeAngle === 'number'\n ? config.homeAngle\n : 0;\n setServoAngle(baseline + step);\n },\n [pipeline.servoConfig, ptzControls, recordControlIntent, setServoAngle],\n );\n\n const setCameraAxisIntent = useCallback(\n (direction = 0) => {\n /*\n Keyboard, touch, and gamepad all need an explicit way to say that a\n camera axis returned to neutral. Rover servos remain position/nudge\n based, so returning false tells those callers to continue through their\n existing rover implementation without introducing PTZ rules there.\n */\n if (!ptzControls.isActive) return false;\n ptzControls.setZoomIntent(direction);\n /*\n Do not dispatch recordControlIntent here. Gamepads publish their neutral\n and held axes every animation frame; the PTZ adapter deduplicates state\n and owns its 250 ms heartbeat, so a React reducer update per frame would\n add churn without representing a new user action.\n */\n return true;\n },\n [ptzControls],\n );\n\n const goServoHome = useCallback(() => {\n const config = pipeline.servoConfig;\n if (!config) return;\n const target =\n typeof config.homeAngle === 'number'\n ? config.homeAngle\n : typeof config.minAngle === 'number' && typeof config.maxAngle === 'number'\n ? (config.minAngle + config.maxAngle) / 2\n : 0;\n setServoAngle(target);\n }, [pipeline.servoConfig, setServoAngle]);\n\n const setCameraPrecisionMode = useCallback((active) => {\n /*\n This action only changes how the browser chooses servo increments. The Pi\n already accepts decimal angle targets, so no server or rover command shape\n changes are needed for precision camera mode.\n */\n dispatch({ type: 'control/set-camera-precision-mode', payload: Boolean(active) });\n }, []);\n\n const runMacro = useCallback(\n async (macroId) => {\n const macro = state.macros.find((item) => item.id === macroId) || null;\n if (!macro) return;\n let macroToRun = macro;\n if (macroId === 'drive-sequence') {\n turnOnAllLights();\n if (!homeAssistantEntities?.length) {\n pendingLightsRef.current = true;\n }\n recordControlIntent();\n if (!driveMacroBackoffEnabled) {\n macroToRun = {\n ...macro,\n steps: removeDriveSequenceBackoff(macro.steps),\n };\n }\n }\n await pipeline.runMacroSteps(macroToRun);\n },\n [\n driveMacroBackoffEnabled,\n pipeline,\n recordControlIntent,\n homeAssistantEntities,\n state.macros,\n turnOnAllLights,\n ],\n );\n\n const stopAllMotion = useCallback(() => {\n dispatch({\n type: 'control/update-drive',\n payload: {\n vector: { x: 0, y: 0, boost: false },\n speeds: { left: 0, right: 0 },\n source: 'system-stop',\n },\n });\n if (ptzControls.isActive) {\n ptzControls.stopMotion();\n return;\n }\n pipeline.sendDriveDirect({ left: 0, right: 0 });\n pipeline.sendAuxMotors({ main: 0, side: 0, vacuum: 0 });\n }, [pipeline, ptzControls]);\n\n const sendOiCommand = useCallback(\n (command) => {\n pipeline.sendOiCommand(command);\n },\n [pipeline],\n );\n\n const setSensorStream = useCallback(\n (enable) => {\n if (!pipeline.roverId) return;\n pipeline.emitCommand({\n type: 'sensorStream',\n data: { sensorStream: { enable } },\n });\n },\n [pipeline],\n );\n\n const setHeadlight = useCallback(\n (headlightOn) => {\n if (ptzControls.setSpotlight(headlightOn)) {\n recordControlIntent();\n return;\n }\n if (!pipeline.headlight) return;\n // Web controls now speak in logical device state. Any electrical\n // inversion needed by the actual GPIO driver is handled by roverd's\n // activeLow config, so this command stays readable and direct.\n const action = typeof headlightOn === 'boolean' ? (headlightOn ? 'on' : 'off') : 'toggle';\n pipeline.sendHeadlight(action);\n recordControlIntent();\n },\n [pipeline, ptzControls, recordControlIntent],\n );\n\n const toggleHeadlight = useCallback(() => {\n setHeadlight();\n }, [setHeadlight]);\n\n const setLaser = useCallback(\n (laserOn) => {\n if (ptzControls.setIr(laserOn)) {\n recordControlIntent();\n return;\n }\n if (!pipeline.laser) return;\n if (roomLightsLockedOn && laserOn !== false) return;\n // The laser shares the same logical toggle contract as the headlight; it\n // is separate only because it has its own GPIO pin, UI control, and keybind.\n const action = typeof laserOn === 'boolean' ? (laserOn ? 'on' : 'off') : 'toggle';\n pipeline.sendLaser(action);\n recordControlIntent();\n },\n [pipeline, ptzControls, recordControlIntent, roomLightsLockedOn],\n );\n\n const toggleLaser = useCallback(() => {\n setLaser();\n }, [setLaser]);\n\n const setSongNote = useCallback(\n (note) => {\n const next = typeof note === 'number' ? note : SONG_DEFAULT_NOTE;\n dispatch({ type: 'control/set-song-note', payload: next });\n return next;\n },\n [],\n );\n\n const sendSong = useCallback(\n (notes, options) => {\n return pipeline.sendSong(notes, options);\n },\n [pipeline],\n );\n\n const normalizedHornSettings = useMemo(() => {\n const base = hornSettings ?? HORN_SETTINGS_DEFAULTS;\n const waveform = base.waveform === 'sine' ? 'sine' : 'saw';\n const freqs = Array.isArray(base.freqs) ? base.freqs : HORN_SETTINGS_DEFAULTS.freqs;\n const normalized = [...freqs, 0, 0, 0, 0]\n .slice(0, 4)\n .map((value) => {\n const num = Number(value);\n if (!Number.isFinite(num)) return 0;\n return num <= 0 ? 0 : Math.min(HORN_MAX_FREQUENCY, Math.round(num));\n });\n return { waveform, freqs: normalized };\n }, [hornSettings]);\n\n const stopHornRef = useRef(null);\n\n const startHorn = useCallback(() => {\n if (!pipeline.horn) return;\n if (state.horn?.overheated) return false;\n if ((state.horn?.heat ?? 0) >= 1) return false;\n if (state.horn?.active) return false;\n const now = Date.now();\n pipeline.sendHorn({ action: 'start', ...normalizedHornSettings });\n dispatch({ type: 'control/set-horn-active', payload: true });\n hornStartAtRef.current = now;\n hornHeatTickRef.current = now;\n if (hornAutoStopRef.current) {\n clearTimeout(hornAutoStopRef.current);\n hornAutoStopRef.current = null;\n }\n hornAutoStopRef.current = setTimeout(() => {\n stopHornRef.current?.();\n }, HORN_MAX_MS);\n recordControlIntent();\n return true;\n }, [dispatch, normalizedHornSettings, pipeline, recordControlIntent, state.horn?.active, state.horn?.heat, state.horn?.overheated]);\n\n const stopHorn = useCallback(() => {\n if (!pipeline.horn) return;\n pipeline.sendHorn({ action: 'stop' });\n dispatch({ type: 'control/set-horn-active', payload: false });\n if (hornAutoStopRef.current) {\n clearTimeout(hornAutoStopRef.current);\n hornAutoStopRef.current = null;\n }\n const now = Date.now();\n const startedAt = hornStartAtRef.current || now;\n const holdMs = Math.max(0, now - startedAt);\n hornStartAtRef.current = 0;\n if (holdMs > 0) {\n const currentHeat = state.horn?.heat ?? 0;\n const added = (holdMs / 1000) * HORN_HEAT_UP_PER_SEC;\n let nextHeat = Math.max(0, Math.min(1, currentHeat + added));\n let nextOverheated = state.horn?.overheated ?? false;\n if (nextHeat >= 1) {\n nextHeat = 1;\n nextOverheated = true;\n }\n dispatch({ type: 'control/set-horn-heat', payload: { heat: nextHeat, overheated: nextOverheated } });\n }\n }, [dispatch, pipeline, state.horn?.heat, state.horn?.overheated]);\n\n const hornStateRef = useRef({\n active: Boolean(state.horn?.active),\n heat: state.horn?.heat ?? 0,\n overheated: Boolean(state.horn?.overheated),\n });\n useEffect(() => {\n hornStateRef.current = {\n active: Boolean(state.horn?.active),\n heat: state.horn?.heat ?? 0,\n overheated: Boolean(state.horn?.overheated),\n };\n }, [state.horn?.active, state.horn?.heat, state.horn?.overheated]);\n\n useEffect(() => {\n stopHornRef.current = stopHorn;\n }, [stopHorn]);\n\n const hornNeedsTick = Boolean(state.horn?.active) || (state.horn?.heat ?? 0) > 0 || Boolean(state.horn?.overheated);\n useEffect(() => {\n if (!hornNeedsTick) return undefined;\n const tickMs = 100;\n const interval = setInterval(() => {\n const now = Date.now();\n const last = hornHeatTickRef.current || now;\n hornHeatTickRef.current = now;\n const dt = Math.min(1000, Math.max(0, now - last)) / 1000;\n const current = hornStateRef.current;\n const currentHeat = current.heat ?? 0;\n const active = Boolean(current.active);\n const overheated = Boolean(current.overheated);\n const delta = dt * (active ? HORN_HEAT_UP_PER_SEC : -HORN_HEAT_COOL_PER_SEC);\n let nextHeat = Math.max(0, Math.min(1, currentHeat + delta));\n let nextOverheated = overheated;\n if (nextHeat >= 1) {\n nextHeat = 1;\n nextOverheated = true;\n if (active) {\n stopHornRef.current();\n }\n } else if (nextOverheated && nextHeat <= HORN_HEAT_RESUME_THRESHOLD) {\n nextOverheated = false;\n }\n if (nextHeat !== currentHeat || nextOverheated !== overheated) {\n dispatch({ type: 'control/set-horn-heat', payload: { heat: nextHeat, overheated: nextOverheated } });\n }\n }, tickMs);\n return () => clearInterval(interval);\n }, [dispatch, hornNeedsTick]);\n\n const setManualDockAssistActive = useCallback(\n (active) => {\n const nextActive = Boolean(active);\n const prevActive = Boolean(state.manualDockAssist?.active);\n if (prevActive === nextActive) return;\n dispatch({ type: 'control/set-manual-dock-assist', payload: nextActive });\n if (!nextActive) {\n pipeline.sendSong([{ note: 83, duration: 10 }, { note: 76, duration: 10 }], { slot: 0 });\n setServoAngle(0, { force: true });\n return;\n }\n const minAngle =\n typeof pipeline.servoConfig?.minAngle === 'number'\n ? pipeline.servoConfig.minAngle\n : -45;\n setServoAngle(minAngle, { force: true });\n pipeline.sendSong([{ note: 76, duration: 10 }, { note: 83, duration: 10 }], { slot: 0 });\n recordControlIntent();\n },\n [pipeline, recordControlIntent, setServoAngle, state.manualDockAssist?.active],\n );\n\n const toggleManualDockAssist = useCallback(() => {\n setManualDockAssistActive(!state.manualDockAssist?.active);\n }, [setManualDockAssistActive, state.manualDockAssist?.active]);\n\n const registerInputState = useCallback((source, data) => {\n dispatch({ type: 'control/register-input-state', payload: { source, state: data } });\n }, []);\n\n const setMicPttActive = useCallback((active) => {\n dispatch({ type: 'control/set-mic-ptt', payload: Boolean(active) });\n }, []);\n\n const setPeripheralControl = useCallback(\n (peripheralId, controlId, value) => {\n const sent = pipeline.sendPeripheralControl(peripheralId, controlId, value);\n if (sent) {\n // The generic protocol is currently command-only. Recording the value\n // here lets every renderer instance share the browser's latest intent\n // without pretending that it is device-reported telemetry.\n dispatch({\n type: 'control/set-peripheral-value',\n payload: {\n roverId: pipeline.roverId,\n peripheralId,\n controlId,\n value,\n },\n });\n recordControlIntent();\n }\n return sent;\n },\n [pipeline, recordControlIntent],\n );\n\n const actionImplementations = useMemo(\n () => ({\n setMode,\n setDriveVector,\n setAuxMotors,\n setServoAngle,\n nudgeServo,\n setCameraAxisIntent,\n goServoHome,\n setCameraPrecisionMode,\n runMacro,\n stopAllMotion,\n sendOiCommand,\n setSensorStream,\n setHeadlight,\n toggleHeadlight,\n setLaser,\n toggleLaser,\n updateKeyBinding,\n resetKeyBindings,\n registerInputState,\n setManualDockAssistActive,\n toggleManualDockAssist,\n setSongNote,\n sendSong,\n startHorn,\n stopHorn,\n setPeripheralControl,\n setMicPttActive,\n }),\n [\n setMode,\n setDriveVector,\n setAuxMotors,\n setServoAngle,\n nudgeServo,\n setCameraAxisIntent,\n goServoHome,\n setCameraPrecisionMode,\n runMacro,\n stopAllMotion,\n sendOiCommand,\n setSensorStream,\n setHeadlight,\n toggleHeadlight,\n setLaser,\n toggleLaser,\n updateKeyBinding,\n resetKeyBindings,\n registerInputState,\n setManualDockAssistActive,\n toggleManualDockAssist,\n setSongNote,\n sendSong,\n startHorn,\n stopHorn,\n setPeripheralControl,\n setMicPttActive,\n ],\n );\n\n const snapshot = useMemo(\n () => ({\n state,\n dispatch,\n pipeline,\n ptzControls,\n overcurrentLimiter,\n actions: stableActions,\n }),\n [state, pipeline, ptzControls, overcurrentLimiter, stableActions],\n );\n\n if (snapshotRef.current == null) {\n /*\n The first render has to make a snapshot available synchronously because\n descendants can call selector hooks during that same render pass. Later\n renders publish updates from the layout effect below, after React has\n committed the provider's new state.\n */\n snapshotRef.current = snapshot;\n }\n\n useLayoutEffect(() => {\n actionImplementationsRef.current = actionImplementations;\n }, [actionImplementations]);\n\n useLayoutEffect(() => {\n if (snapshotRef.current === snapshot) return;\n snapshotRef.current = snapshot;\n notifyControlSubscribers(snapshot);\n }, [notifyControlSubscribers, snapshot]);\n\n const store = useMemo(\n () => ({\n getSnapshot: getControlSnapshot,\n subscribe: subscribeControlSnapshot,\n actions: stableActions,\n }),\n [getControlSnapshot, stableActions, subscribeControlSnapshot],\n );\n\n return {children};\n}\n\nexport function useControlSelector(selector, equalityFn = Object.is) {\n const store = useContext(ControlSystemContext);\n if (!store) {\n throw new Error('useControlSelector must be used within ControlSystemProvider');\n }\n const selectorRef = useRef(selector);\n const equalityRef = useRef(equalityFn);\n\n const [selected, setSelected] = useState(() => selector(store.getSnapshot()));\n\n useEffect(() => {\n /*\n Selector functions are often declared inline at the call site. Refreshing\n these refs from an effect keeps the subscription callback pointed at the\n newest selector/equality pair without making render mutate refs.\n */\n selectorRef.current = selector;\n equalityRef.current = equalityFn;\n }, [equalityFn, selector]);\n\n useEffect(() => {\n /*\n Recheck once after subscribing because the provider may have published a\n newer snapshot between this component's render and its effect. The equality\n guard keeps that synchronization from causing a redundant render.\n */\n setSelected((prev) => {\n const next = selectorRef.current(store.getSnapshot());\n return equalityRef.current(prev, next) ? prev : next;\n });\n\n return store.subscribe(\n (snapshot) => selectorRef.current(snapshot),\n (nextSelected) => {\n setSelected((prev) => (equalityRef.current(prev, nextSelected) ? prev : nextSelected));\n },\n (a, b) => equalityRef.current(a, b),\n );\n }, [store]);\n\n return selected;\n}\n\nexport function useControlActions() {\n const store = useContext(ControlSystemContext);\n if (!store) {\n throw new Error('useControlActions must be used within ControlSystemProvider');\n }\n return store.actions;\n}\n\nexport function useControlSystem() {\n /*\n This compatibility hook intentionally selects the whole snapshot, so it has\n the same broad update behavior as the old context API. New and migrated\n consumers should prefer useControlSelector/useControlActions so they only\n re-render for data they actually read.\n */\n return useControlSelector((snapshot) => snapshot);\n}\n","export default \"data:audio/mpeg;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAANAAAIpQBKSkpKSkpKXFxcXFxcXFxra2tra2tra3p6enp6enqJiYmJiYmJiZiYmJiYmJiYpqampqamprW1tbW1tbW1xMTExMTExMTT09PT09PT4uLi4uLi4uLx8fHx8fHx8f////////8AAABQTEFNRTMuMTAwBLkAAAAAAAAAABUgJAUYQQAB4AAACKVpqtMZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//ugxAAAwqQPR8CIwCh0BCj5jDwlIAAjW87wAACcOsAKPMk8ARj8w9OAWwNlV/gCgQMHEhAOVnFaNzWWAPI2zyjHjd8FAoKqyAa88AAAAABNjEd9CQOglIY9dtC+a51bGZrZgTewD3c+AAYx5hxIMheIcudKAyaykG1/h5EsPB0iTEFNRTMuMTAwqqqqqqrIBZqvAAAAAC9JXFIAHrCgAp0D0hUYOInIluqg1TNdKCzMeAAFQCKKsxUmVfireKILLBgSVgb4qBVtPWpMQU1FMy4xMDCqqqqqqqqqqqqqqqqpApm/AAAAAC7QYaHPHoCjkCysmc+QY9NNWRbKE+mqowNobwAAoSQQMLGChDlOrKMqVMC/6xy/CXbFaL7AZUxBTUUzLjEwMFVVVVVVVVVVVacDqZ8AAAAAMgzaYFBPNgIOnVCQfFfwmBBhLVNJQSdxdQRofwAGxF9xAAYs4AZDuE87li0YCASIBwaCiXUj+2BqTEFNRTMuMTAwqqqqqqqqlwOonwAAAAAtkABQSEZ1INNDgx8HeaaLCXiu5dqSciylQNXjv8GdmACQ5ogYKbnsmxkoChog+w9IhU6GsgzCIQBSxFpMQQAAMBiHjgAAAAv6FQQILmJmGLltnax9HszIVEAoEq1p8olpcPLlGpXFastuWosKNFlmlqADJbwAEFRI4iJJy0oDumUW//sgxOEAw5wfU8fnAGBvg6n5nDxUh7QuwcEzkK5Ztz7AZUxBTUUzLjEwMFVVVVVVVZUAhd8AAAAALZAAamQMWKtC7Avib0WLplt2IAp0SKV0pFFxCADLX6AIPFrWJIBQqPGW/x0QDTRLGaQYCRAZzKeoU6uqTEFN6AB3n/7wAAAxq//7EMT0AMPUHU/MawJgc4PpuYy8VQZjocBw2OgQQyQyECnbABEUC/ZoM0J56Jm0tqzNJaq8KospqUAQ5/QBghnCqQAhR4Mz1D1gJPstYsI1sYIg079I5cYjY6pMQU1FMy4xMDCqqqqq//sQxPUAw+AdT8zvAih6hCk5nWBFqqqWAFOf4AAAAEAIQZPkMcwUzFVE51cSBjIHpJRIEIjWgGar9VhgCUvwAFAUMk0RCpMkwXjPQDcoLBU+n5RuR4ZrPQLPckxBTUUzLjEwMKqqqqr/+xDE9oDEAB1NzG8CKIGEKPmd5EWqxgBWn9AAAAAKIiC5GcLJIczCEvNbWsF31jo4Bw0rXktvJF5YRyABlj+ABIQ2RGsHgdc0XsPntoEDUzaQOjTBqblFPUE1TEFNRckAt68AAAAALv/7EMT4AMQIHU3M7wIojwUo+Y2MZfAgKcwITAQIYN1TosJeLtDA0ubWNrFSADJoln4AC0hVaLiIIUChs+4HST4BgCpQHITPMBQkEnj73ORZfylh+sRLEGUiNIpMQU1FMy4xMDCqqqqq//sQxP6AxlgtK+13Yih3hCj5neBNqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrIkT7UNAZ7NS7yMqcihSKLMn8DlKYq8ZdPCVEoJBuWqkxBTUUzLjEwMKqqqqr/+xDE+ADEXCVHzGjDIIQEqLm9PIWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7EMT+AMWoL0XNcwJoiASoeY3gVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQxPgAxHAnRcxvAmiBBKj5jehEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xDE+IDEmCVDzPMCKH6EqLmNYE2qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7EMT9gEPgI0vMZwQgvYWlPY5gFaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQxOYDw+gpIIfgwWgAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=\"","// Chat Context Provider\n// Purpose: Maintains global chat message state, posting helpers, and typing indicators. Scope: Provides chat event subscriptions and mutation actions for chat-capable components.\n/* eslint-disable react-refresh/only-export-components */\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { useSocket } from './SocketContext.jsx';\nimport { useSessionActions, useSessionSelector } from './SessionContext.jsx';\nimport messageSound from '../assets/message.mp3';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { AUDIO_SETTINGS_DEFAULTS } from '../settings/namespaces.js';\nimport { trackAnalyticsEvent } from '../analytics/index.js';\n\nconst CHAT_TIMELINE_DEFAULT = {\n messages: [],\n typing: [],\n};\n\nconst CHAT_ACTIONS_DEFAULT = {\n sendMessage: async () => {},\n focusChat: () => {},\n blurChat: () => {},\n registerInputRef: () => {},\n onInputFocus: () => {},\n onInputBlur: () => {},\n setTypingActive: () => {},\n};\n\nconst CHAT_FOCUS_DEFAULT = {\n isChatFocused: false,\n selfSocketId: null,\n};\n\nconst CHAT_HISTORY_DEFAULT = {\n messageHistory: [],\n};\nconst CHAT_HISTORY_LIMIT = 10;\nconst CHAT_HISTORY_ENTRY_LIMIT = 200;\n\n// Chat messages and typing indicators are the highest-churn chat data. Keeping\n// them in their own context lets transcript components update without forcing\n// controlled composer inputs to re-render and re-commit unchanged attributes.\nconst ChatTimelineContext = createContext(CHAT_TIMELINE_DEFAULT);\n\n// Actions are intentionally separate from timeline state. Consumers such as the\n// HUD composer only need stable command functions, so subscribing them to the\n// message array would recreate the performance issue this provider is avoiding.\nconst ChatActionsContext = createContext(CHAT_ACTIONS_DEFAULT);\n\n// Focus state is used by keyboard input capture. It changes for input focus and\n// blur events, but it should not be tied to incoming chat traffic either.\nconst ChatFocusContext = createContext(CHAT_FOCUS_DEFAULT);\n\n// Sent-message history has its own subscription because it changes only when\n// this browser successfully posts a message. Keeping it separate prevents the\n// transcript and focus consumers from re-rendering when the persisted history\n// changes, while still giving every mounted composer one shared history source.\nconst ChatHistoryContext = createContext(CHAT_HISTORY_DEFAULT);\n\nconst ChatContext = createContext({\n ...CHAT_TIMELINE_DEFAULT,\n ...CHAT_ACTIONS_DEFAULT,\n ...CHAT_FOCUS_DEFAULT,\n});\n\nexport function ChatProvider({ children }) {\n const socket = useSocket();\n const session = useSessionSelector((state) => state.session);\n const { pushAlert } = useSessionActions();\n const { value: audioSettings } = useSettingsNamespace('audio', AUDIO_SETTINGS_DEFAULTS);\n const { value: profileSettings } = useSettingsNamespace('profile', { nickname: '', profileImageUrl: '' });\n const { value: chatSettings, save: saveChatSettings } = useSettingsNamespace('chat', CHAT_HISTORY_DEFAULT);\n const [messages, setMessages] = useState([]);\n const [typing, setTyping] = useState([]);\n const [isChatFocused, setIsChatFocused] = useState(false);\n const panelInputRef = useRef(null);\n const hudInputRef = useRef(null);\n const overlayInputRef = useRef(null);\n const audioRef = useRef(null);\n const typingRef = useRef(new Map());\n const typingAlertRef = useRef(new Map());\n const typingStateRef = useRef({ isTyping: false, lastSent: 0 });\n const masterVolume = Number.isFinite(audioSettings?.masterVolume) ? audioSettings.masterVolume : AUDIO_SETTINGS_DEFAULTS.masterVolume;\n const alertVolume = Number.isFinite(audioSettings?.alertVolume) ? audioSettings.alertVolume : AUDIO_SETTINGS_DEFAULTS.alertVolume;\n const effectiveAlertVolume = Math.max(0, Math.min(1, masterVolume * alertVolume));\n const isVerified = Boolean(session?.isVerified);\n const profileImage = isVerified ? String(profileSettings?.profileImageUrl || '').trim() : '';\n\n const rebuildTyping = useCallback(() => {\n const entries = Array.from(typingRef.current.values())\n .sort((a, b) => a.lastUpdate - b.lastUpdate)\n .map((entry) => entry.payload);\n setTyping(entries);\n }, []);\n\n const resolveTypingKey = useCallback((payload) => {\n if (!payload || typeof payload !== 'object') return null;\n if (payload.typingId) return payload.typingId;\n if (payload.fromDiscord) {\n return `discord:${payload.discordUserId || payload.discordUserName || payload.nickname || 'unknown'}`;\n }\n return `socket:${payload.socketId || payload.nickname || 'unknown'}`;\n }, []);\n\n useEffect(() => {\n audioRef.current = new Audio(messageSound);\n audioRef.current.volume = effectiveAlertVolume;\n audioRef.current.load();\n }, [effectiveAlertVolume]);\n\n const playSound = useCallback(() => {\n const audio = audioRef.current;\n if (!audio) return;\n audio.volume = effectiveAlertVolume;\n audio.currentTime = 0;\n audio.play().catch(() => {});\n }, [effectiveAlertVolume]);\n\n useEffect(() => {\n function handleMessage(payload = {}) {\n setMessages((prev) => [...prev.slice(-99), payload]);\n if (payload?.socketId && session?.socketId && payload.socketId === session.socketId) {\n return;\n }\n playSound();\n pushAlert?.({\n kind: 'chat',\n payload,\n id: `chat-${payload.id || Math.random().toString(36).slice(2)}`,\n receivedAt: Date.now(),\n });\n }\n socket.on('chat:message', handleMessage);\n return () => {\n socket.off('chat:message', handleMessage);\n };\n }, [playSound, pushAlert, session?.socketId, socket]);\n\n useEffect(() => {\n function handleTyping(payload = {}) {\n const key = resolveTypingKey(payload);\n if (!key) return;\n const now = Date.now();\n if (payload?.socketId && session?.socketId && payload.socketId === session.socketId) {\n if (!payload.isTyping) {\n typingRef.current.delete(key);\n rebuildTyping();\n }\n return;\n }\n if (payload.isTyping) {\n typingRef.current.set(key, {\n payload,\n expiresAt: now + 6000,\n lastUpdate: now,\n });\n const lastAlertAt = typingAlertRef.current.get(key) || 0;\n if (now - lastAlertAt >= 2500) {\n typingAlertRef.current.set(key, now);\n pushAlert?.({\n kind: 'chat-typing',\n payload,\n id: `chat-typing-${key}-${payload.id || Math.random().toString(36).slice(2)}`,\n receivedAt: now,\n });\n }\n } else {\n typingRef.current.delete(key);\n }\n rebuildTyping();\n }\n socket.on('chat:typing', handleTyping);\n return () => {\n socket.off('chat:typing', handleTyping);\n };\n }, [pushAlert, rebuildTyping, resolveTypingKey, session?.socketId, socket]);\n\n useEffect(() => {\n const interval = setInterval(() => {\n const now = Date.now();\n let changed = false;\n typingRef.current.forEach((entry, key) => {\n if (entry.expiresAt <= now) {\n typingRef.current.delete(key);\n changed = true;\n }\n });\n if (changed) {\n rebuildTyping();\n }\n }, 2000);\n return () => clearInterval(interval);\n }, [rebuildTyping]);\n\n useEffect(() => {\n function handleInit(payload = []) {\n if (!Array.isArray(payload)) return;\n setMessages((prev) => {\n if (prev.length === 0) {\n return payload.slice(-100);\n }\n const seen = new Set(payload.map((entry) => entry?.id));\n const merged = [...payload, ...prev.filter((entry) => entry?.id && !seen.has(entry.id))];\n return merged.slice(-100);\n });\n }\n socket.on('chat:init', handleInit);\n return () => {\n socket.off('chat:init', handleInit);\n };\n }, [socket]);\n\n const setTypingActive = useCallback(\n (next) => {\n const isTyping = Boolean(next);\n const now = Date.now();\n const last = typingStateRef.current;\n const shouldSendStop = !isTyping && last.isTyping;\n const shouldSendStart =\n isTyping && (!last.isTyping || now - last.lastSent >= 3500);\n if (!shouldSendStart && !shouldSendStop) return;\n typingStateRef.current = { isTyping, lastSent: now };\n socket.emit('chat:typing', { isTyping });\n },\n [socket],\n );\n\n const sendMessage = useCallback(\n (text, tts = null) =>\n new Promise((resolve, reject) => {\n const payload = { text, tts };\n if (profileImage) payload.profileImage = profileImage;\n socket.emit('chat:send', payload, (resp = {}) => {\n if (resp.error) {\n reject(new Error(resp.error));\n } else {\n /*\n Count successful chat sends without forwarding chat text. The\n centralized analytics session identity adds aggregate role and\n assignment context without attaching message text or nickname.\n */\n trackAnalyticsEvent('chat_send', {\n hasTts: Boolean(tts),\n length: typeof text === 'string' ? text.trim().length : 0,\n });\n\n /*\n Record only messages accepted by the server so ArrowUp never\n recalls a draft that failed to send. The settings subsystem uses\n one browser cookie for every namespace, so both the entry length\n and history count are deliberately bounded to leave room for the\n user's other persisted preferences.\n */\n const historyEntry = typeof text === 'string' ? text.slice(0, CHAT_HISTORY_ENTRY_LIMIT) : '';\n if (historyEntry) {\n saveChatSettings((current) => {\n const currentHistory = Array.isArray(current?.messageHistory) ? current.messageHistory : [];\n return {\n ...(current || {}),\n messageHistory: [...currentHistory.slice(-(CHAT_HISTORY_LIMIT - 1)), historyEntry],\n };\n });\n }\n resolve(resp);\n }\n });\n }),\n [profileImage, saveChatSettings, socket],\n );\n\n const registerInputRef = useCallback((el, options = {}) => {\n const target = options?.target === 'overlay' ? 'overlay' : options?.target === 'hud' ? 'hud' : 'panel';\n /*\n Fullscreen surfaces such as PTZ need chat-key focus while they are mounted\n without stealing the normal HUD ref permanently. Keep overlay chat as a\n separate highest-priority slot so unmounting the portal only clears the\n overlay target and leaves the driver HUD/panel refs intact.\n */\n if (target === 'overlay') {\n overlayInputRef.current = el;\n return;\n }\n if (target === 'hud') {\n hudInputRef.current = el;\n } else {\n panelInputRef.current = el;\n }\n }, []);\n\n const focusChat = useCallback(() => {\n setIsChatFocused(true);\n (overlayInputRef.current || hudInputRef.current || panelInputRef.current)?.focus();\n }, []);\n\n const blurChat = useCallback(() => {\n setIsChatFocused(false);\n overlayInputRef.current?.blur();\n hudInputRef.current?.blur();\n panelInputRef.current?.blur();\n }, []);\n\n const onInputFocus = useCallback(() => setIsChatFocused(true), []);\n const onInputBlur = useCallback(() => setIsChatFocused(false), []);\n\n // Each published value is memoized independently so React only wakes the\n // consumers attached to the slice that actually changed.\n const timelineValue = useMemo(\n () => ({\n messages,\n typing,\n }),\n [messages, typing],\n );\n\n const actionsValue = useMemo(\n () => ({\n sendMessage,\n focusChat,\n blurChat,\n registerInputRef,\n onInputFocus,\n onInputBlur,\n setTypingActive,\n }),\n [blurChat, focusChat, onInputBlur, onInputFocus, registerInputRef, sendMessage, setTypingActive],\n );\n\n const focusValue = useMemo(\n () => ({\n isChatFocused,\n selfSocketId: session?.socketId || null,\n }),\n [isChatFocused, session?.socketId],\n );\n\n const historyValue = useMemo(\n () => ({\n // Treat malformed or hand-edited cookie data as an empty history. This\n // keeps keyboard navigation safe without mutating unrelated settings.\n messageHistory: Array.isArray(chatSettings?.messageHistory) ? chatSettings.messageHistory : [],\n }),\n [chatSettings],\n );\n\n const value = useMemo(\n () => ({\n ...timelineValue,\n ...actionsValue,\n ...focusValue,\n ...historyValue,\n }),\n [actionsValue, focusValue, historyValue, timelineValue],\n );\n\n return (\n // Nesting the focused providers keeps the public provider API unchanged for\n // callers while giving individual consumers smaller subscriptions.\n \n \n \n \n {children}\n \n \n \n \n );\n}\n\nexport function useChat() {\n const ctx = useContext(ChatContext);\n if (!ctx) {\n throw new Error('useChat must be used inside ChatProvider');\n }\n return ctx;\n}\n\nexport function useChatTimeline() {\n const ctx = useContext(ChatTimelineContext);\n if (!ctx) {\n throw new Error('useChatTimeline must be used inside ChatProvider');\n }\n return ctx;\n}\n\nexport function useChatActions() {\n const ctx = useContext(ChatActionsContext);\n if (!ctx) {\n throw new Error('useChatActions must be used inside ChatProvider');\n }\n return ctx;\n}\n\nexport function useChatFocus() {\n const ctx = useContext(ChatFocusContext);\n if (!ctx) {\n throw new Error('useChatFocus must be used inside ChatProvider');\n }\n return ctx;\n}\n\nexport function useChatHistory() {\n const ctx = useContext(ChatHistoryContext);\n if (!ctx) {\n throw new Error('useChatHistory must be used inside ChatProvider');\n }\n return ctx;\n}\n","// Keyboard Capture Lock Helper\n// Purpose: Coordinates global keyboard-capture lock state across UI regions. Scope: Ensures only intended surfaces receive keyboard control events at runtime.\nlet keyboardCaptureLocked = false;\n\nexport function setKeyboardCaptureLocked(value) {\n keyboardCaptureLocked = Boolean(value);\n}\n\nexport function isKeyboardCaptureLocked() {\n return keyboardCaptureLocked;\n}\n","// Controller Runtime Coordination\n// Purpose: Shares controller-only runtime facts without pushing animation-frame data through\n// React's application-wide control reducer.\n// Scope: Owns prompt modality, the last controller used, and temporary command suppression while\n// a controller is being configured. It does not send rover commands or interpret bindings.\nimport { useSyncExternalStore } from 'react';\n\nconst listeners = new Set();\nconst controlLocks = new Set();\n\nlet snapshot = {\n inputMethod: 'keyboard',\n controller: null,\n};\n\nfunction publish(nextSnapshot) {\n if (\n nextSnapshot.inputMethod === snapshot.inputMethod &&\n nextSnapshot.controller?.signature === snapshot.controller?.signature &&\n nextSnapshot.controller?.id === snapshot.controller?.id &&\n nextSnapshot.controller?.mapping === snapshot.controller?.mapping\n ) {\n return;\n }\n snapshot = nextSnapshot;\n listeners.forEach((listener) => listener());\n}\n\nexport function markKeyboardInputActive() {\n publish({ ...snapshot, inputMethod: 'keyboard' });\n}\n\nexport function markControllerInputActive(controller) {\n if (!controller) return;\n publish({\n inputMethod: 'controller',\n controller: {\n signature: controller.signature ?? null,\n id: controller.id ?? 'Unknown controller',\n mapping: controller.mapping ?? '',\n },\n });\n}\n\nexport function markControllerDisconnected(signature) {\n if (!snapshot.controller || snapshot.controller.signature !== signature) return;\n publish({ inputMethod: 'keyboard', controller: null });\n}\n\nexport function acquireControllerControlLock(reason = 'controller-configuration') {\n /*\n A tokenized lock is used instead of one boolean because a capture dialog and its parent\n settings surface can overlap during React cleanup. Releasing either owner must not briefly\n re-enable commands while the other owner still expects input to be diagnostic-only.\n */\n const token = Symbol(reason);\n controlLocks.add(token);\n return () => controlLocks.delete(token);\n}\n\nexport function isControllerControlLocked() {\n return controlLocks.size > 0;\n}\n\nexport function subscribeControllerRuntime(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function getControllerRuntimeSnapshot() {\n return snapshot;\n}\n\nexport function useControllerRuntime() {\n return useSyncExternalStore(\n subscribeControllerRuntime,\n getControllerRuntimeSnapshot,\n getControllerRuntimeSnapshot,\n );\n}\n","// Input Focus Utilities\n// Purpose: Handles focus/blur guards so controls only capture input when appropriate. Scope: Prevents accidental command capture while typing or using form elements.\nconst TEXT_INPUT_TYPES = new Set([\n '',\n 'text',\n 'search',\n 'email',\n 'password',\n 'url',\n 'tel',\n 'number',\n 'date',\n 'datetime-local',\n 'month',\n 'time',\n 'week',\n]);\n\nexport function isTextInputElement(target) {\n if (!target || target.nodeType !== 1) return false;\n const tag = target.tagName;\n if (tag === 'TEXTAREA') return true;\n if (target.isContentEditable) return true;\n if (tag !== 'INPUT') return false;\n const type = target.type ? target.type.toLowerCase() : '';\n return TEXT_INPUT_TYPES.has(type);\n}\n\nexport function isTextEntryActive() {\n if (typeof document === 'undefined') return false;\n return isTextInputElement(document.activeElement);\n}\n","// Telemetry Views\n// Purpose: Defines small, stable telemetry projections for UI components.\n// Scope: Keeps rendering subscriptions focused on the sensor fields each view actually uses.\n\nimport { shallowArrayEqual, shallowObjectEqual } from './TelemetryContext.jsx';\n\nconst EMPTY_BATTERY_TELEMETRY = Object.freeze({\n batteryChargeMah: null,\n batteryCapacityMah: null,\n batteryVoltage: null,\n});\n\nconst EMPTY_DOCK_TELEMETRY = Object.freeze({\n oiModeLabel: 'Unknown',\n chargingStateLabel: '',\n homeBase: false,\n});\n\nconst EMPTY_SPECTATOR_TELEMETRY = Object.freeze({\n voltageMv: null,\n currentMa: null,\n batteryChargeMah: null,\n batteryCapacityMah: null,\n oiModeLabel: 'Unknown',\n chargingStateLabel: '',\n homeBase: false,\n});\n\nconst EMPTY_HOST_STATS = Object.freeze({});\nconst EMPTY_OVERCURRENT_FLAGS = Object.freeze({\n leftWheel: false,\n rightWheel: false,\n mainBrush: false,\n sideBrush: false,\n});\nconst EMPTY_MAIN_BRUSH_AUDIO = Object.freeze({\n mainBrushCurrentMa: 0,\n mainBrushOvercurrent: false,\n});\n\nfunction bucketNumber(value, step) {\n // Visual widgets do not benefit from repainting for tiny analog jitter. The\n // bucket step intentionally applies only to display selectors; raw telemetry\n // remains available through useTelemetryFrame for control and debugging code.\n if (value == null || !Number.isFinite(Number(value))) return value ?? null;\n return Math.round(Number(value) / step) * step;\n}\n\nfunction sensorNumber(value) {\n // Some visual sensors, especially light bumps, need every reported value to\n // be eligible for rendering because coarse bucketing can leave the UI looking\n // stuck near object edges. This still benefits from selector equality because\n // only the specific subscribed field can trigger its consumer.\n if (value == null || !Number.isFinite(Number(value))) return value ?? null;\n return Number(value);\n}\n\nexport function batteryTelemetryEqual(left, right) {\n return shallowObjectEqual(left, right);\n}\n\nexport function dockTelemetryEqual(left, right) {\n return shallowObjectEqual(left, right);\n}\n\nexport function hostStatsEqual(left, right) {\n return shallowObjectEqual(left, right);\n}\n\nexport function selectLightBumpTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return [];\n return [\n sensorNumber(sensors.lightBumpLeftSignal),\n sensorNumber(sensors.lightBumpFrontLeftSignal),\n sensorNumber(sensors.lightBumpCenterLeftSignal),\n sensorNumber(sensors.lightBumpCenterRightSignal),\n sensorNumber(sensors.lightBumpFrontRightSignal),\n sensorNumber(sensors.lightBumpRightSignal),\n ];\n}\n\nexport function lightBumpTelemetryEqual(left, right) {\n return shallowArrayEqual(left, right);\n}\n\nexport function selectBatteryTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_BATTERY_TELEMETRY;\n return {\n batteryChargeMah: sensors.batteryChargeMah ?? null,\n batteryCapacityMah: sensors.batteryCapacityMah ?? null,\n batteryVoltage: (sensors.voltageMv/1000).toPrecision(4) ?? null,\n batteryCurrent: (sensors.currentMa) ?? null,\n };\n}\n\nexport function selectOvercurrentFlags(frame) {\n const wheelOvercurrents = frame?.sensors?.wheelOvercurrents;\n if (!wheelOvercurrents) return EMPTY_OVERCURRENT_FLAGS;\n return {\n leftWheel: Boolean(wheelOvercurrents.leftWheel),\n rightWheel: Boolean(wheelOvercurrents.rightWheel),\n mainBrush: Boolean(wheelOvercurrents.mainBrush),\n sideBrush: Boolean(wheelOvercurrents.sideBrush),\n };\n}\n\nexport function selectMainBrushAudioTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_MAIN_BRUSH_AUDIO;\n return {\n mainBrushCurrentMa: bucketNumber(sensors.mainBrushCurrentMa ?? 0, 25),\n mainBrushOvercurrent: Boolean(sensors.wheelOvercurrents?.mainBrush),\n };\n}\n\nexport function mainBrushAudioTelemetryEqual(left, right) {\n return shallowObjectEqual(left, right);\n}\n\nexport function overcurrentFlagsEqual(left, right) {\n return shallowObjectEqual(left, right);\n}\n\nexport function selectDockTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_DOCK_TELEMETRY;\n return {\n oiModeLabel: sensors.oiMode?.label || 'Unknown',\n chargingStateLabel: sensors.chargingState?.label || '',\n // OI packet 34 is the authoritative charging-sources packet. Charging\n // state describes the battery charger state and must not stand in for the\n // physical home-base contact bit.\n homeBase: Boolean(sensors.chargingSources?.homeBase),\n };\n}\n\nexport function selectSpectatorTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_SPECTATOR_TELEMETRY;\n return {\n voltageMv: bucketNumber(sensors.voltageMv, 25),\n currentMa: bucketNumber(sensors.currentMa, 25),\n batteryChargeMah: sensors.batteryChargeMah ?? null,\n batteryCapacityMah: sensors.batteryCapacityMah ?? null,\n oiModeLabel: sensors.oiMode?.label || 'Unknown',\n chargingStateLabel: sensors.chargingState?.label || '',\n homeBase: Boolean(sensors.chargingSources?.homeBase),\n };\n}\n\nexport function spectatorTelemetryEqual(left, right) {\n return shallowObjectEqual(left, right);\n}\n\nexport function selectHostStats(frame) {\n return frame?.hostStats || EMPTY_HOST_STATS;\n}\n\nexport function selectFrameForDisplay(frame) {\n return frame || null;\n}\n","import { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { useControlActions, useControlSelector } from '../../controls/index.js';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\nimport { dockTelemetryEqual, selectDockTelemetry } from '../../context/telemetryViews.js';\n\nexport function useManualDockAssist(options = {}) {\n const { manageLifecycle = false } = options;\n const roverId = useControlSelector((control) => control.state.roverId);\n const active = useControlSelector((control) => Boolean(control.state.manualDockAssist?.active));\n const actions = useControlActions();\n const dockTelemetry = useTelemetrySelector(roverId, selectDockTelemetry, dockTelemetryEqual);\n const chargingLabel = dockTelemetry.chargingStateLabel || '';\n const docked = Boolean(dockTelemetry.homeBase);\n const charging = docked && chargingLabel.toLowerCase() !== 'not charging' && chargingLabel !== '';\n const wasDockedRef = useRef(false);\n\n const enterAssist = useCallback(() => {\n actions.setManualDockAssistActive(true);\n }, [actions]);\n\n const exitAssist = useCallback(() => {\n actions.setManualDockAssistActive(false);\n }, [actions]);\n\n const toggleAssist = useCallback(() => {\n actions.toggleManualDockAssist();\n }, [actions]);\n\n useEffect(() => {\n if (!manageLifecycle) return;\n const justDocked = docked && !wasDockedRef.current;\n const justUndocked = !docked && wasDockedRef.current;\n if (active && justDocked) {\n // Stop on the first home-base contact so continued input cannot push the rover against the dock.\n actions.stopAllMotion();\n actions.sendSong([{ note: 84, duration: 6 }], { slot: 1 });\n } else if (active && justUndocked) {\n actions.sendSong([{ note: 72, duration: 6 }], { slot: 1 });\n }\n wasDockedRef.current = docked;\n }, [actions, active, docked, manageLifecycle]);\n\n useEffect(() => {\n if (!manageLifecycle || !active || !charging) return;\n exitAssist();\n }, [active, charging, exitAssist, manageLifecycle]);\n\n const statusLabel = charging ? 'Docked and charging' : docked ? 'Docked' : 'Docking assist active';\n const statusTone = charging ? 'good' : docked ? 'warn' : 'active';\n const visible = active || docked;\n\n return useMemo(\n () => ({\n active,\n docked,\n charging,\n cameraLocked: active,\n visible,\n statusLabel,\n statusTone,\n enterAssist,\n exitAssist,\n toggleAssist,\n }),\n [active, charging, docked, enterAssist, exitAssist, statusLabel, statusTone, toggleAssist, visible],\n );\n}\n","// Drive Intent Helpers\n// Purpose: Shares keyboard-style drive intent math between physical keyboard input and mobile thumb controls.\n// Scope: Converts active key tokens into normalized drive vectors, auxiliary motor values, and speed options.\nimport { INPUT_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\n\nexport function clampKeyboardSpeed(value, fallback) {\n const num = Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(0, Math.min(500, num));\n}\n\nexport function resolveKeyboardSpeeds(inputSettings) {\n const defaults = INPUT_SETTINGS_DEFAULTS.keyboard;\n const current = inputSettings?.keyboard ?? {};\n return {\n baseSpeed: clampKeyboardSpeed(current.baseSpeed, defaults.baseSpeed),\n turboSpeed: clampKeyboardSpeed(current.turboSpeed, defaults.turboSpeed),\n precisionSpeed: clampKeyboardSpeed(current.precisionSpeed, defaults.precisionSpeed),\n };\n}\n\nexport function bindingActive(bindingSet, keys) {\n if (!bindingSet || bindingSet.size === 0) return false;\n for (const key of keys) {\n if (bindingSet.has(key)) return true;\n }\n return false;\n}\n\nexport function computeKeyboardDriveVector(keys, keymap) {\n const forward = bindingActive(keymap.driveForward, keys);\n const backward = bindingActive(keymap.driveBackward, keys);\n const left = bindingActive(keymap.driveLeft, keys);\n const right = bindingActive(keymap.driveRight, keys);\n const boost = bindingActive(keymap.boostModifier, keys);\n const slow = bindingActive(keymap.slowModifier, keys);\n\n let y = 0;\n if (forward && !backward) y = 1;\n else if (backward && !forward) y = -1;\n\n let x = 0;\n if (left && !right) x = -1;\n else if (right && !left) x = 1;\n\n // The keyboard precision modifier intentionally reduces the vector as well as the\n // speed cap. Mobile precision mode uses the same path so thumb driving feels like\n // holding the same keyboard modifier, not like a separate mobile-only tune.\n const scale = slow ? 0.4 : 1;\n return {\n x: x * scale,\n y: y * scale,\n boost: boost && !slow,\n };\n}\n\nexport function isPrecisionDriveActive(keys, keymap) {\n /*\n The slow modifier is the canonical precision-drive signal shared by physical\n keyboard input and the mobile pad's virtual-key path. Centralizing the check\n keeps camera precision coupled to the same driver intent instead of copying\n modifier-specific knowledge into each caller.\n */\n return bindingActive(keymap?.slowModifier, keys);\n}\n\nexport function computeKeyboardAuxMotors(keys, keymap) {\n const allForward = bindingActive(keymap.auxAllForward, keys);\n if (allForward) {\n return { main: 127, side: 127, vacuum: 127 };\n }\n const main = bindingActive(keymap.auxMainForward, keys)\n ? 127\n : bindingActive(keymap.auxMainReverse, keys)\n ? -127\n : 0;\n const side = bindingActive(keymap.auxSideForward, keys)\n ? 127\n : bindingActive(keymap.auxSideReverse, keys)\n ? -70\n : 0;\n const vacuum = bindingActive(keymap.auxVacuumFast, keys)\n ? 127\n : bindingActive(keymap.auxVacuumSlow, keys)\n ? 50\n : 0;\n return { main, side, vacuum };\n}\n\nexport function getKeyboardDriveSpeedOptions(keys, keymap, keyboardSpeeds) {\n const slowActive = isPrecisionDriveActive(keys, keymap);\n return slowActive\n ? { baseSpeed: keyboardSpeeds.precisionSpeed, boostSpeed: keyboardSpeeds.precisionSpeed }\n : { baseSpeed: keyboardSpeeds.baseSpeed, boostSpeed: keyboardSpeeds.turboSpeed };\n}\n","// Keyboard Input Manager\n// Purpose: Captures and translates keyboard events into normalized control intents. Scope: Owns keydown/keyup listeners and dispatch coordination for drive controls.\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useControlActions, useControlSelector } from '../ControlContext.jsx';\nimport { useChatActions, useChatFocus } from '../../context/ChatContext.jsx';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { normalizeKeymapEntries, tokensForEvent } from '../keymapUtils.js';\nimport { isKeyboardCaptureLocked } from './keyboardCaptureLock.js';\nimport { markKeyboardInputActive } from './controllerRuntime.js';\nimport { isTextInputElement } from './inputFocusUtils.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { INPUT_SETTINGS_DEFAULTS, VIDEO_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport { useManualDockAssist } from '../../features/manualDockAssist/useManualDockAssist.js';\nimport {\n SONG_DEFAULT_DURATION,\n SONG_DEFAULT_NOTE,\n SONG_NOTE_RANGE,\n SONG_REPEAT_MS,\n} from '../constants.js';\nimport {\n bindingActive,\n computeKeyboardAuxMotors,\n computeKeyboardDriveVector,\n getKeyboardDriveSpeedOptions,\n isPrecisionDriveActive,\n resolveKeyboardSpeeds,\n} from './driveIntent.js';\n\nconst SOURCE = 'keyboard';\nconst ZERO_VECTOR = { x: 0, y: 0, boost: false };\nconst ZERO_AUX = { main: 0, side: 0, vacuum: 0 };\nconst NOTE_MIN = SONG_NOTE_RANGE[0];\nconst NOTE_MAX = SONG_NOTE_RANGE[1];\nconst TILT_INTERVAL_MIN = 5;\nconst TILT_INTERVAL_MAX = 500;\nconst TILT_SPEED_MIN = 1;\nconst TILT_SPEED_MAX = 100;\nconst PRECISION_SERVO_NUDGE_DEGREES = 0.25;\nconst VIDEO_FILTER_SEQUENCE = ['none', 'grayscale', 'greenscale'];\n\nfunction normalizeVideoFilter(value) {\n // The setting is persisted in a browser cookie and can become stale if filter names change.\n // Normalizing before cycling keeps the shortcut deterministic instead of getting stuck on an\n // unknown value.\n return VIDEO_FILTER_SEQUENCE.includes(value) ? value : VIDEO_SETTINGS_DEFAULTS.colorFilter;\n}\n\nfunction nextVideoFilter(value) {\n const current = normalizeVideoFilter(value);\n const currentIndex = VIDEO_FILTER_SEQUENCE.indexOf(current);\n\n // The modulo wrap intentionally makes the shortcut a simple single-key cycle:\n // Color -> Gray -> Green -> Color. That is faster while driving than needing separate keys.\n return VIDEO_FILTER_SEQUENCE[(currentIndex + 1) % VIDEO_FILTER_SEQUENCE.length];\n}\n\nfunction clampTiltInterval(value, fallback) {\n const num = Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(TILT_INTERVAL_MIN, Math.min(TILT_INTERVAL_MAX, num));\n}\n\nfunction clampTiltSpeed(value, fallback) {\n const num = Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(TILT_SPEED_MIN, Math.min(TILT_SPEED_MAX, num));\n}\n\nfunction mapTiltSpeedToInterval(speed) {\n const clampedSpeed = clampTiltSpeed(speed, speed);\n const ratio = (clampedSpeed - TILT_SPEED_MIN) / (TILT_SPEED_MAX - TILT_SPEED_MIN);\n const interval = TILT_INTERVAL_MAX - ratio * (TILT_INTERVAL_MAX - TILT_INTERVAL_MIN);\n return Math.round(interval);\n}\n\nfunction mapTiltIntervalToSpeed(interval) {\n const clampedInterval = clampTiltInterval(interval, interval);\n const ratio = (TILT_INTERVAL_MAX - clampedInterval) / (TILT_INTERVAL_MAX - TILT_INTERVAL_MIN);\n const speed = TILT_SPEED_MIN + ratio * (TILT_SPEED_MAX - TILT_SPEED_MIN);\n return Math.round(speed);\n}\n\nfunction shouldIgnoreEvent(event) {\n return isTextInputElement(event?.target);\n}\n\nexport default function KeyboardInputManager() {\n const {\n setMode,\n setDriveVector,\n setAuxMotors,\n nudgeServo,\n setCameraAxisIntent,\n runMacro,\n stopAllMotion,\n registerInputState,\n setCameraPrecisionMode,\n toggleHeadlight,\n toggleLaser,\n startHorn,\n stopHorn,\n setMicPttActive,\n setSongNote,\n sendSong,\n } = useControlActions();\n const rawKeymap = useControlSelector((control) => control.state.keymap);\n const cameraNudgeDegrees = useControlSelector((control) => control.state.camera?.config?.nudgeDegrees);\n const songNote = useControlSelector((control) => control.state.song?.note);\n const roverId = useControlSelector((control) => control.state.roverId);\n const hornActive = useControlSelector((control) => Boolean(control.state.horn?.active));\n const homeAssistant = useSessionSelector((state) => state.session?.homeAssistant || null);\n const role = useSessionSelector((state) => state.session?.role || null);\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const adminCanControlLockedLights = role === 'lockdown' || (role === 'admin' && mode !== 'lockdown');\n const dockAssist = useManualDockAssist();\n const { homeAssistantSetState, pushAlert } = useSessionActions();\n const { focusChat } = useChatActions();\n const { isChatFocused } = useChatFocus();\n const { value: inputSettings } = useSettingsNamespace('inputs', INPUT_SETTINGS_DEFAULTS);\n const { value: videoSettings, save: saveVideoSettings } = useSettingsNamespace('video', VIDEO_SETTINGS_DEFAULTS);\n const videoColorFilter = normalizeVideoFilter(videoSettings?.colorFilter);\n const keymap = useMemo(() => normalizeKeymapEntries(rawKeymap), [rawKeymap]);\n const actionTokens = useMemo(() => {\n const tokens = new Set();\n Object.values(keymap).forEach((bindingSet) => {\n if (!bindingSet) return;\n bindingSet.forEach((token) => tokens.add(token));\n });\n return tokens;\n }, [keymap]);\n const keyboardSpeeds = useMemo(() => {\n return resolveKeyboardSpeeds(inputSettings);\n }, [inputSettings]);\n const servoRepeatMs = useMemo(() => {\n const defaults = INPUT_SETTINGS_DEFAULTS.keyboard;\n const current = inputSettings?.keyboard ?? {};\n const tiltSpeed = clampTiltSpeed(\n typeof current.tiltSpeed === 'number'\n ? current.tiltSpeed\n : typeof current.tiltIntervalMs === 'number'\n ? mapTiltIntervalToSpeed(current.tiltIntervalMs)\n : defaults.tiltSpeed,\n defaults.tiltSpeed,\n );\n return mapTiltSpeedToInterval(tiltSpeed);\n }, [inputSettings?.keyboard]);\n const servoStep = useMemo(\n () => Math.abs(cameraNudgeDegrees || 1),\n [cameraNudgeDegrees],\n );\n\n const activeTokensRef = useRef(new Set());\n const lastVectorRef = useRef(ZERO_VECTOR);\n const lastAuxRef = useRef(ZERO_AUX);\n const servoIntervalRef = useRef(null);\n const songIntervalRef = useRef(null);\n const hornActiveRef = useRef(false);\n // Global keyboard listeners must stay mounted while React state churns underneath them. This\n // ref is rewritten after every commit so the stable handlers can still use fresh settings,\n // keymaps, and action callbacks without making listener registration depend on those values.\n const latestRef = useRef(null);\n\n const driveFromKeys = useCallback(() => {\n const latest = latestRef.current;\n if (!latest) return;\n const tokensSnapshot = new Set(activeTokensRef.current);\n const precisionActive = isPrecisionDriveActive(tokensSnapshot, latest.keymap);\n const speedOptions = getKeyboardDriveSpeedOptions(tokensSnapshot, latest.keymap, latest.keyboardSpeeds);\n const vector = computeKeyboardDriveVector(tokensSnapshot, latest.keymap);\n const aux = computeKeyboardAuxMotors(tokensSnapshot, latest.keymap);\n /*\n Keyboard precision is a held modifier, so publish the camera precision\n state from the same token snapshot that drives movement. This keeps the\n servo UI in lockstep with the actual precision-driving intent.\n */\n latest.setCameraPrecisionMode(precisionActive);\n if (\n vector.x !== lastVectorRef.current.x ||\n vector.y !== lastVectorRef.current.y ||\n vector.boost !== lastVectorRef.current.boost\n ) {\n lastVectorRef.current = vector;\n latest.setDriveVector(vector, { source: SOURCE, speedOptions });\n }\n if (\n aux.main !== lastAuxRef.current.main ||\n aux.side !== lastAuxRef.current.side ||\n aux.vacuum !== lastAuxRef.current.vacuum\n ) {\n lastAuxRef.current = aux;\n latest.setAuxMotors(aux);\n }\n latest.registerInputState(SOURCE, {\n keys: Array.from(tokensSnapshot),\n vector,\n aux,\n });\n }, []);\n\n const stopServoLoop = useCallback(() => {\n if (servoIntervalRef.current) {\n clearTimeout(servoIntervalRef.current);\n servoIntervalRef.current = null;\n }\n }, []);\n\n const computeServoDirection = useCallback(() => {\n const latest = latestRef.current;\n if (!latest) return 0;\n const tokensSnapshot = new Set(activeTokensRef.current);\n const up = bindingActive(latest.keymap.cameraUp, tokensSnapshot);\n const down = bindingActive(latest.keymap.cameraDown, tokensSnapshot);\n return (up ? 1 : 0) - (down ? 1 : 0);\n }, []);\n\n const ensureServoLoop = useCallback(() => {\n const direction = computeServoDirection();\n if (direction === 0) {\n /*\n Keyup must publish a real neutral PTZ zoom intent before the repeat loop\n disappears. Rover servos ignore this generic axis release and retain\n their existing nudge behavior because setCameraAxisIntent returns false\n whenever PTZ is not the active target.\n */\n latestRef.current?.setCameraAxisIntent(0);\n stopServoLoop();\n return;\n }\n if (servoIntervalRef.current) {\n return;\n }\n const tick = () => {\n const nextDirection = computeServoDirection();\n if (nextDirection === 0) {\n stopServoLoop();\n return;\n }\n const latest = latestRef.current;\n if (!latest) {\n stopServoLoop();\n return;\n }\n const tokensSnapshot = new Set(activeTokensRef.current);\n const precisionActive = isPrecisionDriveActive(tokensSnapshot, latest.keymap);\n const servoStep = precisionActive ? PRECISION_SERVO_NUDGE_DEGREES : latest.servoStep;\n if (!latest.setCameraAxisIntent(nextDirection)) {\n latest.nudgeServo(nextDirection * servoStep);\n }\n servoIntervalRef.current = setTimeout(tick, latest.servoRepeatMs);\n };\n servoIntervalRef.current = setTimeout(tick, 0);\n }, [computeServoDirection, stopServoLoop]);\n\n const stopSongLoop = useCallback(() => {\n if (songIntervalRef.current) {\n clearTimeout(songIntervalRef.current);\n songIntervalRef.current = null;\n }\n }, []);\n\n const computeSongDirection = useCallback(() => {\n const latest = latestRef.current;\n if (!latest) return 0;\n const tokensSnapshot = new Set(activeTokensRef.current);\n const up = bindingActive(latest.keymap.songNoteUp, tokensSnapshot);\n const down = bindingActive(latest.keymap.songNoteDown, tokensSnapshot);\n return (up ? 1 : 0) - (down ? 1 : 0);\n }, []);\n\n const triggerSongChange = useCallback((direction) => {\n const latest = latestRef.current;\n if (!latest || direction === 0) return;\n const current = typeof latest.songNote === 'number' ? latest.songNote : SONG_DEFAULT_NOTE;\n let next = current + direction;\n if (next > NOTE_MAX) {\n next = NOTE_MIN;\n } else if (next < NOTE_MIN) {\n next = NOTE_MAX;\n }\n const finalNote = latest.setSongNote(next);\n latest.sendSong([{ note: finalNote, duration: SONG_DEFAULT_DURATION }], { slot: 0 });\n }, []);\n\n const ensureSongLoop = useCallback(() => {\n const direction = computeSongDirection();\n if (direction === 0) {\n stopSongLoop();\n return;\n }\n if (songIntervalRef.current) {\n return;\n }\n const tick = () => {\n const nextDirection = computeSongDirection();\n if (nextDirection === 0) {\n stopSongLoop();\n return;\n }\n triggerSongChange(nextDirection);\n songIntervalRef.current = setTimeout(tick, SONG_REPEAT_MS);\n };\n songIntervalRef.current = setTimeout(tick, 0);\n }, [computeSongDirection, stopSongLoop, triggerSongChange]);\n\n const resetAll = useCallback(() => {\n const latest = latestRef.current;\n activeTokensRef.current.clear();\n lastVectorRef.current = ZERO_VECTOR;\n lastAuxRef.current = ZERO_AUX;\n stopServoLoop();\n stopSongLoop();\n if (hornActiveRef.current) {\n hornActiveRef.current = false;\n latest?.stopHorn();\n }\n latest?.setMicPttActive(false);\n latest?.setCameraPrecisionMode(false);\n latest?.stopAllMotion();\n latest?.registerInputState(SOURCE, { keys: [], vector: ZERO_VECTOR, aux: ZERO_AUX });\n }, [stopServoLoop, stopSongLoop]);\n\n const triggerHomeAssistantCycle = useCallback((targetState) => {\n const latest = latestRef.current;\n const ha = latest?.homeAssistant;\n if (!ha?.enabled || !ha?.connected) return;\n /*\n Room-light lock disables keyboard cycling for normal users because those\n shortcuts are part of the public room-control surface. Admin sessions are\n allowed through when the current site mode would also allow their socket\n command, so keyboard behavior matches the server-side authorization and\n the clickable Room Lights panel.\n */\n if ((ha?.lightPolicy?.locked || ha?.lightPolicy?.lockedOn) && !latest?.adminCanControlLockedLights) return;\n const entities = ha.entities || [];\n const eligible = entities.filter(\n (ent) =>\n (ent.type === 'light' || ent.type === 'switch') &&\n ent.available !== false &&\n ent.state !== 'unavailable',\n );\n if (eligible.length === 0) return;\n if (targetState === 'on') {\n const next = eligible.find((ent) => ent.state !== 'on');\n if (next) {\n latest.homeAssistantSetState(next.id, 'on').catch(() => {});\n }\n return;\n }\n if (targetState === 'off') {\n for (let idx = eligible.length - 1; idx >= 0; idx -= 1) {\n const ent = eligible[idx];\n if (ent.state === 'on') {\n latest.homeAssistantSetState(ent.id, 'off').catch(() => {});\n break;\n }\n }\n }\n }, []);\n\n const cycleVideoFilter = useCallback(() => {\n // Update through the same settings namespace as the Page settings dropdown so the keyboard\n // shortcut and menu never maintain separate copies of the selected filter.\n const latest = latestRef.current;\n if (!latest) return;\n const nextFilter = nextVideoFilter(latest.videoColorFilter);\n latest.saveVideoSettings((current) => ({\n ...(current ?? {}),\n colorFilter: nextFilter,\n }));\n latest.pushAlert({\n // Reuse one alert lane for filter changes so fast key-repeat-like cycling refreshes the\n // indicator instead of covering the interface with a stack of filter toasts.\n id: 'video-filter-active',\n title: 'Video filter',\n // The message intentionally uses the raw filter key; no label mapping is needed because\n // these are the same keys persisted in the setting and cycled by the shortcut.\n message: `Rover video filter: ${nextFilter}`,\n color: '#38bdf8',\n lifetimeMs: 1600,\n });\n }, []);\n\n useLayoutEffect(() => {\n // The assignment lives in a layout effect instead of render because the current React lint\n // rules reserve refs for effects and event handlers. Layout timing keeps the ref current\n // before the browser can deliver the next keyboard event after a committed render.\n latestRef.current = {\n actionTokens,\n dockAssist,\n focusChat,\n homeAssistant,\n homeAssistantSetState,\n isChatFocused,\n adminCanControlLockedLights,\n keyboardSpeeds,\n keymap,\n nudgeServo,\n pushAlert,\n registerInputState,\n roverId,\n runMacro,\n saveVideoSettings,\n sendSong,\n servoRepeatMs,\n servoStep,\n setAuxMotors,\n setCameraAxisIntent,\n setCameraPrecisionMode,\n setDriveVector,\n setMicPttActive,\n setMode,\n setSongNote,\n songNote,\n startHorn,\n stopAllMotion,\n stopHorn,\n toggleHeadlight,\n toggleLaser,\n videoColorFilter,\n };\n });\n\n useEffect(() => {\n function handleKeyDown(event) {\n const latest = latestRef.current;\n if (!latest) return;\n if (isKeyboardCaptureLocked()) return;\n if (shouldIgnoreEvent(event)) return;\n const tokens = tokensForEvent(event);\n if (tokens.length === 0) return;\n const tokenSet = new Set(tokens);\n /*\n Shortcut prompts follow the last meaningful control device, not arbitrary typing. Only a\n key that participates in the configured control map claims keyboard modality.\n */\n if (tokens.some((token) => latest.actionTokens.has(token))) {\n markKeyboardInputActive();\n }\n if (bindingActive(latest.keymap.chatFocus, tokenSet)) {\n event.preventDefault();\n resetAll();\n if (!latest.isChatFocused) {\n latest.focusChat();\n }\n return;\n }\n if (tokens.some((token) => latest.actionTokens.has(token))) {\n event.preventDefault();\n }\n const newlyPressed = tokens.filter((token) => !activeTokensRef.current.has(token));\n newlyPressed.forEach((token) => activeTokensRef.current.add(token));\n\n if (newlyPressed.length > 0) {\n if (newlyPressed.some((token) => latest.keymap.driveMacro?.has(token))) {\n latest.dockAssist.exitAssist();\n latest.setMode('drive');\n latest.runMacro('drive-sequence');\n } else if (newlyPressed.some((token) => latest.keymap.dockMacro?.has(token))) {\n latest.dockAssist.toggleAssist();\n } else if (newlyPressed.some((token) => latest.keymap.headlightToggle?.has(token))) {\n latest.toggleHeadlight();\n } else if (newlyPressed.some((token) => latest.keymap.laserToggle?.has(token))) {\n latest.toggleLaser();\n } else if (newlyPressed.some((token) => latest.keymap.videoFilterCycle?.has(token))) {\n cycleVideoFilter();\n } else if (newlyPressed.some((token) => latest.keymap.hornHonk?.has(token))) {\n if (!hornActiveRef.current) {\n const started = latest.startHorn();\n hornActiveRef.current = Boolean(started);\n }\n } else if (newlyPressed.some((token) => latest.keymap.micPtt?.has(token))) {\n latest.setMicPttActive(true);\n } else if (newlyPressed.some((token) => latest.keymap.homeAssistantOn?.has(token))) {\n triggerHomeAssistantCycle('on');\n } else if (newlyPressed.some((token) => latest.keymap.homeAssistantOff?.has(token))) {\n triggerHomeAssistantCycle('off');\n }\n }\n\n ensureServoLoop();\n ensureSongLoop();\n driveFromKeys();\n }\n\n function handleKeyUp(event) {\n const latest = latestRef.current;\n if (!latest) return;\n if (isKeyboardCaptureLocked()) return;\n const tokens = tokensForEvent(event);\n tokens.forEach((token) => activeTokensRef.current.delete(token));\n if (hornActiveRef.current && !bindingActive(latest.keymap.hornHonk, activeTokensRef.current)) {\n hornActiveRef.current = false;\n latest.stopHorn();\n }\n if (!bindingActive(latest.keymap.micPtt, activeTokensRef.current)) {\n latest.setMicPttActive(false);\n }\n ensureServoLoop();\n ensureSongLoop();\n driveFromKeys();\n }\n\n function handleBlur() {\n resetAll();\n }\n\n // The global listeners are intentionally registered through stable handlers. High-frequency\n // control context updates should refresh latestRef.current, not force the browser to detach\n // and reattach window listeners while someone may be driving.\n window.addEventListener('keydown', handleKeyDown, { capture: true });\n window.addEventListener('keyup', handleKeyUp, { capture: true });\n window.addEventListener('blur', handleBlur);\n return () => {\n window.removeEventListener('keydown', handleKeyDown, { capture: true });\n window.removeEventListener('keyup', handleKeyUp, { capture: true });\n window.removeEventListener('blur', handleBlur);\n };\n }, [cycleVideoFilter, driveFromKeys, ensureServoLoop, ensureSongLoop, resetAll, triggerHomeAssistantCycle]);\n\n const latestResetAllRef = useRef(resetAll);\n useEffect(() => {\n latestResetAllRef.current = resetAll;\n }, [resetAll]);\n\n useEffect(() => {\n latestResetAllRef.current();\n }, [roverId]);\n\n useEffect(() => {\n hornActiveRef.current = hornActive;\n }, [hornActive]);\n\n useEffect(\n () => () => {\n stopServoLoop();\n stopSongLoop();\n },\n [stopServoLoop, stopSongLoop],\n );\n\n return null;\n}\n","// Gamepad Bindings\n// Purpose: Defines default gamepad axis/button-to-action mappings and lookup helpers. Scope: Supplies binding metadata for gamepad input manager and settings UI.\nconst CURVE_EXPO = 1.6;\nconst ABSOLUTE_CAMERA_DEADZONE = 0.01;\n\n/*\n Binary actions share one resolver so the runtime, settings UI, diagnostics, and adaptive\n prompts all operate on the same complete action set. Adding an action here is intentionally\n controller-local and does not add controller concepts to the shared command pipeline.\n*/\nexport const GAMEPAD_BUTTON_ACTION_IDS = [\n 'tankCameraUp',\n 'tankCameraDown',\n 'vacuum',\n 'allAux',\n 'mainReverse',\n 'sideReverse',\n 'driveMacro',\n 'dockMacro',\n 'headlightToggle',\n 'laserToggle',\n 'boostModifier',\n 'slowModifier',\n 'hornHonk',\n 'micPtt',\n 'videoFilterCycle',\n 'chatFocus',\n 'songNoteUp',\n 'songNoteDown',\n 'homeAssistantOn',\n 'homeAssistantOff',\n 'auxMainForward',\n 'auxMainReverse',\n 'auxSideForward',\n 'auxSideReverse',\n 'auxVacuumFast',\n 'auxVacuumSlow',\n 'auxAllForward',\n];\n\nexport function getPadSignature(pad) {\n if (!pad) return 'unknown::none::0::0';\n const id = pad.id || 'unknown';\n const mapping = pad.mapping || 'none';\n const axes = Array.isArray(pad.axes) ? pad.axes.length : 0;\n const buttons = Array.isArray(pad.buttons) ? pad.buttons.length : 0;\n return `${id}::${mapping}::${axes}::${buttons}`;\n}\n\nexport function cloneProfile(profile) {\n return JSON.parse(JSON.stringify(profile ?? {}));\n}\n\nexport function createProfileForPad(pad, baseProfile) {\n const profile = cloneProfile(baseProfile);\n profile.meta = {\n id: pad?.id ?? 'Unknown',\n mapping: pad?.mapping ?? 'none',\n axes: pad?.axes?.length ?? 0,\n buttons: pad?.buttons?.length ?? 0,\n };\n return profile;\n}\n\nexport function resolveGamepadProfile(profile, defaults) {\n /*\n Profiles are persisted independently per controller. Merge at the binding and calibration\n levels so adding a newly supported logical action immediately gives existing controllers a\n usable default without overwriting any binding the user deliberately customized.\n */\n const base = defaults ?? {};\n const current = profile ?? {};\n const requiresBehaviorUpgrade = current.behaviorVersion !== base.behaviorVersion;\n return {\n ...base,\n ...current,\n behaviorVersion: base.behaviorVersion,\n /* Old detector-specific prompt values are invalid for the replacement library. Returning to\n automatic detection ensures a previously selected workaround cannot mask the real device. */\n promptStyle: requiresBehaviorUpgrade ? base.promptStyle : current.promptStyle ?? base.promptStyle,\n calibration: {\n ...(base.calibration ?? {}),\n ...(current.calibration ?? {}),\n /* Profile upgrades retain personal response tuning except for defaults whose old values\n caused broken camera behavior or imposed an unintended drive-speed ceiling. */\n ...(requiresBehaviorUpgrade\n ? {\n cameraMode: base.calibration?.cameraMode,\n baseSpeed: base.calibration?.baseSpeed,\n }\n : {}),\n },\n bindings: {\n /* Version four intentionally replaces the old arbitrary default layout as one coherent\n migration. Bindings are controller-local preferences, and the project does not retain\n backwards compatibility with obsolete layouts; calibration and hardware metadata remain. */\n ...(requiresBehaviorUpgrade\n ? cloneProfile(base.bindings ?? {})\n : { ...(base.bindings ?? {}), ...(current.bindings ?? {}) }),\n },\n };\n}\n\nexport function advanceCameraAngle(currentAngle, axisValue, sensitivity, elapsedMs, limits) {\n /* Velocity camera state must never accumulate beyond the physical servo limits. Otherwise a\n long hold at an endpoint creates an invisible overshoot that has to unwind before reversing. */\n const min = Number.isFinite(limits?.min) ? limits.min : -45;\n const max = Number.isFinite(limits?.max) ? limits.max : 45;\n const baseline = Number.isFinite(currentAngle) ? currentAngle : (min + max) / 2;\n const safeElapsedMs = Math.max(0, Math.min(50, Number(elapsedMs) || 0));\n const degreesPerSecond = Math.max(1, Math.min(180, Number(sensitivity) || 60));\n const candidate = baseline + axisValue * degreesPerSecond * (safeElapsedMs / 1000);\n return Math.max(min, Math.min(max, candidate));\n}\n\nfunction clampUnit(value) {\n if (!Number.isFinite(value)) return 0;\n return Math.max(-1, Math.min(1, value));\n}\n\nfunction applyCurve(value, curve) {\n if (!value) return 0;\n const abs = Math.abs(value);\n if (curve === 'expo') {\n return Math.sign(value) * Math.pow(abs, CURVE_EXPO);\n }\n return value;\n}\n\nfunction applyAxisDeadzone(value, deadzone) {\n const abs = Math.abs(value);\n if (abs <= deadzone) return 0;\n const scaled = (abs - deadzone) / (1 - deadzone);\n return Math.sign(value) * scaled;\n}\n\nfunction applyRadialDeadzone(x, y, deadzone) {\n const mag = Math.hypot(x, y);\n if (mag <= deadzone) return { x: 0, y: 0 };\n const scaled = (mag - deadzone) / (1 - deadzone);\n const ratio = scaled / mag;\n return { x: x * ratio, y: y * ratio };\n}\n\nfunction readAxis(padState, index) {\n if (!padState || !Array.isArray(padState.axes)) return null;\n const value = padState.axes[index];\n if (!Number.isFinite(value)) return null;\n return clampUnit(value);\n}\n\nfunction readButton(padState, index) {\n if (!padState || !Array.isArray(padState.buttons)) return null;\n const btn = padState.buttons[index];\n if (!btn) return null;\n const value = typeof btn.value === 'number' ? btn.value : btn.pressed ? 1 : 0;\n return {\n pressed: Boolean(btn.pressed || value > 0.5),\n value: Math.max(0, Math.min(1, value)),\n };\n}\n\nfunction resolveAxisSource(padState, sources = []) {\n for (const source of sources) {\n if (!source) continue;\n if (source.kind === 'axis') {\n const value = readAxis(padState, source.index);\n if (value === null) continue;\n return { value: source.invert ? -value : value, source };\n }\n if (source.kind === 'buttonAxis') {\n const button = readButton(padState, source.index);\n if (!button) continue;\n return { value: clampUnit(button.value), source };\n }\n }\n return { value: 0, source: null };\n}\n\nfunction resolveAxisPairSource(padState, sources = []) {\n for (const source of sources) {\n if (!source || source.kind !== 'axisPair') continue;\n const rawX = readAxis(padState, source.x);\n const rawY = readAxis(padState, source.y);\n if (rawX === null || rawY === null) continue;\n const x = source.invertX ? -rawX : rawX;\n const y = source.invertY ? -rawY : rawY;\n return { x, y, source };\n }\n return { x: 0, y: 0, source: null };\n}\n\nfunction resolveButtonSource(padState, sources = []) {\n let firstReadableSource = null;\n for (const source of sources) {\n if (!source) continue;\n if (source.kind === 'chord') {\n const inputs = Array.isArray(source.inputs) ? source.inputs : [];\n if (inputs.length === 0) continue;\n const pressed = inputs.every((input) => resolveButtonSource(padState, [input]).pressed);\n if (pressed) return { pressed: true, source };\n firstReadableSource ??= source;\n continue;\n }\n if (source.kind === 'button') {\n const btn = readButton(padState, source.index);\n if (!btn) continue;\n if (btn.pressed) return { pressed: true, source };\n firstReadableSource ??= source;\n continue;\n }\n if (source.kind === 'axisButton') {\n const value = readAxis(padState, source.index);\n if (value === null) continue;\n const direction = source.direction || 1;\n const threshold = typeof source.threshold === 'number' ? source.threshold : 0.6;\n if (value * direction > threshold) return { pressed: true, source };\n firstReadableSource ??= source;\n continue;\n }\n if (source.kind === 'buttonAxis') {\n const btn = readButton(padState, source.index);\n if (!btn) continue;\n if (btn.value > 0.5) return { pressed: true, source };\n firstReadableSource ??= source;\n }\n }\n return { pressed: false, source: firstReadableSource };\n}\n\nexport function computeGamepadOutputs(padState, profile) {\n const bindings = profile?.bindings ?? {};\n const calibration = profile?.calibration ?? {};\n\n const driveDeadzone = Math.min(Math.max(calibration.driveDeadzone ?? 0.18, 0), 0.8);\n const driveMode = calibration.driveMode === 'tank' ? 'tank' : 'single';\n let driveX = 0;\n let driveY = 0;\n let driveSources;\n let tankTracks = null;\n\n if (driveMode === 'tank') {\n const leftSource = resolveAxisSource(padState, bindings.tankLeft?.sources);\n const rightSource = resolveAxisSource(padState, bindings.tankRight?.sources);\n /* Each track gets its own axial deadzone and response curve before mixing. Applying a radial\n deadzone to two independent throttles would make one track's drift or movement change the\n activation threshold of the other, which is especially unpleasant during slow pivots. */\n const leftTrack = applyCurve(\n applyAxisDeadzone(clampUnit(leftSource.value), driveDeadzone),\n calibration.driveCurve,\n );\n const rightTrack = applyCurve(\n applyAxisDeadzone(clampUnit(rightSource.value), driveDeadzone),\n calibration.driveCurve,\n );\n /* The shared drive mixer later computes left = forward + turn and right = forward - turn.\n This inverse transform therefore preserves the requested track values exactly while keeping\n tank-controller knowledge out of ControlContext and the rover command transport. */\n driveX = clampUnit((leftTrack - rightTrack) / 2);\n driveY = clampUnit((leftTrack + rightTrack) / 2);\n tankTracks = { left: leftTrack, right: rightTrack };\n driveSources = { tankLeft: leftSource.source, tankRight: rightSource.source };\n } else {\n const driveBinding = bindings.drive ?? {};\n const driveSource = resolveAxisPairSource(padState, driveBinding.sources);\n const driveCurved = applyRadialDeadzone(\n clampUnit(driveSource.x),\n clampUnit(driveSource.y),\n driveDeadzone,\n );\n driveX = applyCurve(driveCurved.x, calibration.driveCurve);\n driveY = applyCurve(driveCurved.y, calibration.driveCurve);\n driveSources = { drive: driveSource.source };\n }\n\n const cameraBinding = bindings.cameraTilt ?? {};\n const cameraSource = driveMode === 'tank'\n ? { value: 0, source: null }\n : resolveAxisSource(padState, cameraBinding.sources);\n /* Absolute mode maps the stick directly across the servo's physical range. Its center needs\n only a tiny noise guard; applying the velocity deadzone there creates a visibly unresponsive\n band around the home angle and makes small position corrections feel delayed. */\n const configuredCameraDeadzone = Math.min(\n Math.max(calibration.cameraDeadzone ?? 0.08, 0),\n 0.8,\n );\n const cameraDeadzone = calibration.cameraMode === 'absolute'\n ? ABSOLUTE_CAMERA_DEADZONE\n : configuredCameraDeadzone;\n let cameraAxis = applyAxisDeadzone(clampUnit(cameraSource.value), cameraDeadzone);\n\n const auxDeadzone = Math.min(Math.max(calibration.auxDeadzone ?? 0.05, 0), 0.6);\n const mainBinding = bindings.mainBrush ?? {};\n const mainSource = resolveAxisSource(padState, mainBinding.sources);\n let mainAxis = applyAxisDeadzone(clampUnit(mainSource.value), auxDeadzone);\n mainAxis = applyCurve(mainAxis, calibration.auxCurve);\n\n const sideBinding = bindings.sideBrush ?? {};\n const sideSource = resolveAxisSource(padState, sideBinding.sources);\n let sideAxis = applyAxisDeadzone(clampUnit(sideSource.value), auxDeadzone);\n sideAxis = applyCurve(sideAxis, calibration.auxCurve);\n\n const buttonOutputs = Object.fromEntries(\n GAMEPAD_BUTTON_ACTION_IDS.map((actionId) => {\n /* D-pad vertical has two deliberate owners, one per steering mode. Suppressing the inactive\n owner here lets both recommended layouts coexist in one controller profile without a\n camera press also playing a song note after switching to tank steering. */\n const inactiveForMode =\n (driveMode === 'tank' && (actionId === 'songNoteUp' || actionId === 'songNoteDown')) ||\n (driveMode === 'single' && (actionId === 'tankCameraUp' || actionId === 'tankCameraDown'));\n return [\n actionId,\n inactiveForMode\n ? { pressed: false, source: null }\n : resolveButtonSource(padState, bindings[actionId]?.sources),\n ];\n }),\n );\n\n if (driveMode === 'tank') {\n /* Direction buttons form the signed equivalent of the single analog camera axis. Opposing\n presses cancel to zero, providing an immediate and deterministic stop for velocity mode. */\n cameraAxis = Number(buttonOutputs.tankCameraUp.pressed) -\n Number(buttonOutputs.tankCameraDown.pressed);\n }\n cameraAxis = applyCurve(cameraAxis, calibration.cameraCurve);\n\n return {\n driveVector: { x: driveX, y: driveY, boost: false },\n // Track values are diagnostic-only; the runtime continues consuming driveVector exclusively.\n tankTracks,\n cameraAxis,\n auxAxis: { main: mainAxis, side: sideAxis },\n buttons: Object.fromEntries(\n Object.entries(buttonOutputs).map(([actionId, output]) => [actionId, output.pressed]),\n ),\n sources: {\n ...driveSources,\n cameraTilt: driveMode === 'tank'\n ? buttonOutputs.tankCameraUp.source ?? buttonOutputs.tankCameraDown.source\n : cameraSource.source,\n mainBrush: mainSource.source,\n sideBrush: sideSource.source,\n ...Object.fromEntries(\n Object.entries(buttonOutputs).map(([actionId, output]) => [actionId, output.source]),\n ),\n },\n };\n}\n","// Gamepad Hub Runtime\n// Purpose: Tracks connected gamepads and polls input state for downstream handlers. Scope: Encapsulates browser Gamepad API access and per-frame update orchestration.\nimport { useEffect, useState } from 'react';\nimport { getPadSignature } from './gamepadBindings.js';\n\nconst listeners = new Set();\nlet rafId = null;\nlet lastState = { pads: [], timestamp: 0, supported: true, error: null };\nlet hasDeviceListeners = false;\nlet deviceChangeHandler = null;\nlet lastReadError = null;\n\nfunction hasConnectedPads() {\n return readGamepads().some((pad) => pad?.connected !== false);\n}\n\nfunction readGamepads() {\n if (typeof navigator === 'undefined' || !navigator.getGamepads) {\n lastReadError = new Error('This browser does not support the Gamepad API.');\n return [];\n }\n try {\n const pads = navigator.getGamepads();\n lastReadError = null;\n if (!pads) return [];\n return Array.from(pads).filter(Boolean);\n } catch (error) {\n /* Permissions Policy can make getGamepads throw instead of returning an empty list. Preserve\n that distinction so the setup UI can explain why reconnecting hardware will not help. */\n lastReadError = error instanceof Error ? error : new Error(String(error));\n return [];\n }\n}\n\nfunction buildPadState(pad) {\n const signature = getPadSignature(pad);\n return {\n index: pad.index,\n id: pad.id,\n mapping: pad.mapping,\n connected: pad.connected !== false,\n timestamp: pad.timestamp,\n axes: Array.from(pad.axes ?? []),\n buttons: (pad.buttons ?? []).map((btn) => ({\n pressed: Boolean(btn?.pressed),\n value: typeof btn?.value === 'number' ? btn.value : btn?.pressed ? 1 : 0,\n })),\n signature,\n instanceKey: `${signature}::slot-${pad.index}`,\n };\n}\n\nfunction updateState() {\n const pads = readGamepads().map(buildPadState);\n lastState = {\n pads,\n timestamp: typeof performance !== 'undefined' ? performance.now() : Date.now(),\n supported: typeof navigator !== 'undefined' && typeof navigator.getGamepads === 'function',\n error: lastReadError?.message ?? null,\n };\n listeners.forEach((listener) => listener(lastState));\n}\n\nfunction loop() {\n updateState();\n if (lastState.pads.length === 0) {\n stopLoop();\n return;\n }\n rafId = requestAnimationFrame(loop);\n}\n\nfunction startLoop() {\n if (rafId) return;\n updateState();\n if (lastState.pads.length === 0) return;\n rafId = requestAnimationFrame(loop);\n}\n\nfunction stopLoop() {\n if (!rafId) return;\n cancelAnimationFrame(rafId);\n rafId = null;\n}\n\nexport function subscribeGamepadHub(listener) {\n listeners.add(listener);\n if (!hasDeviceListeners && typeof window !== 'undefined') {\n const handleDeviceChange = () => {\n updateState();\n if (listeners.size === 0) return;\n if (hasConnectedPads()) {\n startLoop();\n } else {\n stopLoop();\n }\n };\n window.addEventListener('gamepadconnected', handleDeviceChange);\n window.addEventListener('gamepaddisconnected', handleDeviceChange);\n deviceChangeHandler = handleDeviceChange;\n hasDeviceListeners = true;\n }\n if (hasConnectedPads()) {\n startLoop();\n } else {\n updateState();\n }\n listener(lastState);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) {\n stopLoop();\n if (hasDeviceListeners && typeof window !== 'undefined') {\n window.removeEventListener('gamepadconnected', deviceChangeHandler);\n window.removeEventListener('gamepaddisconnected', deviceChangeHandler);\n deviceChangeHandler = null;\n hasDeviceListeners = false;\n }\n }\n };\n}\n\nexport function getGamepadHubState() {\n return lastState;\n}\n\nexport function useGamepadHubState() {\n const [state, setState] = useState(lastState);\n\n useEffect(() => {\n return subscribeGamepadHub(setState);\n }, []);\n\n return state;\n}\n","// Gamepad Input Manager\n// Purpose: Converts polled gamepad state into normalized control actions/commands. Scope: Integrates bindings, deadzone math, and dispatch callbacks for driving.\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';\nimport { useControlActions, useControlSelector } from '../ControlContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport {\n GAMEPAD_SETTINGS_DEFAULTS,\n GAMEPAD_PROFILE_DEFAULT,\n VIDEO_SETTINGS_DEFAULTS,\n} from '../../settings/namespaces.js';\nimport {\n advanceCameraAngle,\n computeGamepadOutputs,\n createProfileForPad,\n getPadSignature,\n resolveGamepadProfile,\n} from './gamepadBindings.js';\nimport { subscribeGamepadHub } from './gamepadHub.js';\nimport { isTextEntryActive } from './inputFocusUtils.js';\nimport { useManualDockAssist } from '../../features/manualDockAssist/useManualDockAssist.js';\nimport {\n isControllerControlLocked,\n markControllerDisconnected,\n markControllerInputActive,\n} from './controllerRuntime.js';\nimport { useChatActions, useChatFocus } from '../../context/ChatContext.jsx';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { SONG_DEFAULT_DURATION, SONG_DEFAULT_NOTE, SONG_NOTE_RANGE } from '../constants.js';\n\nconst SOURCE = 'gamepad';\nconst ZERO_VECTOR = { x: 0, y: 0, boost: false };\nconst ZERO_AUX = { main: 0, side: 0, vacuum: 0 };\nconst DRIVE_RATE_MS = 100;\nconst AUX_RATE_MS = 100;\nconst CONTROLLER_ACTIVITY_AXIS_MIN = 0.24;\nconst CONTROLLER_ACTIVITY_AXIS_DELTA = 0.08;\nconst VIDEO_FILTER_SEQUENCE = ['none', 'grayscale', 'greenscale'];\n\nfunction areVectorsEqual(a, b) {\n return a && b && a.x === b.x && a.y === b.y && a.boost === b.boost;\n}\n\nfunction areAuxEqual(a, b) {\n return a && b && a.main === b.main && a.side === b.side && a.vacuum === b.vacuum;\n}\n\nfunction vectorMagnitude(vector) {\n if (!vector) return 0;\n return Math.hypot(vector.x || 0, vector.y || 0);\n}\n\nfunction isAuxIdle(aux) {\n if (!aux) return true;\n return !aux.main && !aux.side && !aux.vacuum;\n}\n\nfunction pickActivePad(pads, activeInstanceKey) {\n if (!pads || pads.length === 0) return null;\n if (activeInstanceKey) {\n const match = pads.find((pad) => pad.instanceKey === activeInstanceKey);\n if (match) return match;\n }\n return pads[0];\n}\n\nfunction hasMeaningfulControllerChange(pad, previous) {\n if (!previous) {\n return pad.buttons.some((button) => button.pressed) ||\n pad.axes.some((axis) => Math.abs(axis) >= CONTROLLER_ACTIVITY_AXIS_MIN);\n }\n const buttonPressed = pad.buttons.some(\n (button, index) => button.pressed && !previous.buttons?.[index]?.pressed,\n );\n if (buttonPressed) return true;\n return pad.axes.some((axis, index) => {\n const oldAxis = previous.axes?.[index] ?? 0;\n return Math.abs(axis) >= CONTROLLER_ACTIVITY_AXIS_MIN &&\n Math.abs(axis - oldAxis) >= CONTROLLER_ACTIVITY_AXIS_DELTA;\n });\n}\n\nfunction isControllerNeutral(pad) {\n return !pad.buttons.some((button) => button.pressed || button.value > 0.1) &&\n !pad.axes.some((axis) => Math.abs(axis) > 0.2);\n}\n\nfunction nextVideoFilter(value) {\n const index = VIDEO_FILTER_SEQUENCE.indexOf(value);\n return VIDEO_FILTER_SEQUENCE[(index < 0 ? 0 : index + 1) % VIDEO_FILTER_SEQUENCE.length];\n}\n\nfunction cycleHomeAssistant(latest, targetState) {\n const homeAssistant = latest.homeAssistant;\n if (!homeAssistant?.enabled || !homeAssistant?.connected) return;\n if (\n (homeAssistant.lightPolicy?.locked || homeAssistant.lightPolicy?.lockedOn) &&\n !latest.adminCanControlLockedLights\n ) {\n return;\n }\n const entities = (homeAssistant.entities ?? []).filter(\n (entity) =>\n (entity.type === 'light' || entity.type === 'switch') &&\n entity.available !== false &&\n entity.state !== 'unavailable',\n );\n const ordered = targetState === 'on' ? entities : [...entities].reverse();\n const next = ordered.find((entity) =>\n targetState === 'on' ? entity.state !== 'on' : entity.state === 'on',\n );\n if (next) latest.homeAssistantSetState(next.id, targetState).catch(() => {});\n}\n\nexport default function GamepadInputManager() {\n const {\n setMode,\n setDriveVector,\n setAuxMotors,\n setServoAngle,\n setCameraAxisIntent,\n runMacro,\n toggleHeadlight,\n toggleLaser,\n registerInputState,\n sendSong,\n setSongNote,\n startHorn,\n stopHorn,\n setMicPttActive,\n } = useControlActions();\n const cameraAngle = useControlSelector((control) => control.state.camera?.angle);\n const cameraConfig = useControlSelector((control) => control.state.camera?.config);\n const roverId = useControlSelector((control) => control.state.roverId);\n const dockAssist = useManualDockAssist();\n const { focusChat } = useChatActions();\n const { isChatFocused } = useChatFocus();\n const { homeAssistantSetState, pushAlert } = useSessionActions();\n const homeAssistant = useSessionSelector((state) => state.session?.homeAssistant || null);\n const role = useSessionSelector((state) => state.session?.role || null);\n const sessionMode = useSessionSelector((state) => state.session?.mode || null);\n const songNote = useControlSelector((control) => control.state.song?.note);\n const { value: videoSettings, save: saveVideoSettings } = useSettingsNamespace(\n 'video',\n VIDEO_SETTINGS_DEFAULTS,\n );\n const { value: gamepadSettings, save: saveGamepadSettings } = useSettingsNamespace(\n 'gamepad',\n GAMEPAD_SETTINGS_DEFAULTS,\n );\n const profileCacheRef = useRef(new Set());\n const lastVectorRef = useRef(ZERO_VECTOR);\n const lastAuxRef = useRef(ZERO_AUX);\n const reverseStateRef = useRef({ main: false, side: false });\n const buttonStateRef = useRef(new Map());\n const lastDriveSentAtRef = useRef(0);\n const lastAuxSentAtRef = useRef(0);\n const lastServoAtRef = useRef(0);\n const lastServoAngleRef = useRef(null);\n const previousPadRef = useRef(null);\n const lastConnectedSignatureRef = useRef(null);\n const lastConnectedInstanceKeyRef = useRef(null);\n const lastRegisteredSignatureRef = useRef(null);\n const controllerLockedRef = useRef(false);\n const waitingForNeutralRef = useRef(false);\n // The hub subscription is intentionally stable, so this ref is the bridge back to the latest\n // React values. Rewriting it after each commit is cheaper than tearing down browser gamepad\n // listeners every time settings, camera state, or control callbacks change.\n const latestRef = useRef(null);\n\n const ensureProfile = useCallback((padState) => {\n const latest = latestRef.current;\n if (!latest) return;\n const signature = padState.signature ?? getPadSignature(padState);\n if (latest.gamepadSettings?.profiles?.[signature] || profileCacheRef.current.has(signature)) {\n return;\n }\n profileCacheRef.current.add(signature);\n latest.saveGamepadSettings((prev) => {\n const current = prev ?? GAMEPAD_SETTINGS_DEFAULTS;\n if (current.profiles?.[signature]) return current;\n const base = resolveGamepadProfile(\n current?.defaults?.profile,\n GAMEPAD_PROFILE_DEFAULT,\n );\n const nextProfile = createProfileForPad(padState, base);\n return {\n ...current,\n profiles: {\n ...(current.profiles ?? {}),\n [signature]: nextProfile,\n },\n };\n });\n }, []);\n\n const handleButtonEdge = useCallback((key, pressed) => {\n const prev = buttonStateRef.current.get(key) || false;\n buttonStateRef.current.set(key, pressed);\n return pressed && !prev;\n }, []);\n\n const handleCameraAxis = useCallback((axisValue, calibration) => {\n const latest = latestRef.current;\n const config = latest?.cameraConfig;\n if (!latest || !config) return;\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const cameraMode = calibration?.cameraMode ?? 'velocity';\n const sensitivity = calibration?.cameraSensitivity ?? 60;\n const min = typeof config.minAngle === 'number' ? config.minAngle : -45;\n const max = typeof config.maxAngle === 'number' ? config.maxAngle : 45;\n if (cameraMode === 'velocity') {\n if (Math.abs(axisValue) <= 0.001) {\n /* Neutral is the safe synchronization point: no controller motion is being integrated, so\n an angle changed by another UI can replace our accumulator without causing jitter. */\n if (typeof latest.cameraAngle === 'number') lastServoAngleRef.current = latest.cameraAngle;\n lastServoAtRef.current = now;\n return;\n }\n const dt = Math.min(50, now - lastServoAtRef.current || 16);\n const baseline =\n typeof lastServoAngleRef.current === 'number'\n ? lastServoAngleRef.current\n : typeof latest.cameraAngle === 'number'\n ? latest.cameraAngle\n : typeof config.homeAngle === 'number'\n ? config.homeAngle\n : 0;\n const nextAngle = advanceCameraAngle(baseline, axisValue, sensitivity, dt, { min, max });\n latest.setServoAngle(nextAngle);\n lastServoAngleRef.current = nextAngle;\n lastServoAtRef.current = now;\n return;\n }\n const home = typeof config.homeAngle === 'number' ? config.homeAngle : (min + max) / 2;\n const angle =\n axisValue < 0\n ? home + axisValue * (home - min)\n : home + axisValue * (max - home);\n if (\n typeof lastServoAngleRef.current === 'number' &&\n Math.abs(lastServoAngleRef.current - angle) < 0.35 &&\n now - lastServoAtRef.current < 80\n ) {\n return;\n }\n lastServoAtRef.current = now;\n lastServoAngleRef.current = angle;\n latest.setServoAngle(angle);\n }, []);\n\n const neutralizeController = useCallback((latest) => {\n /*\n Every path that makes controller commands unsafe converges here. In particular, held horn\n and microphone actions need releases just as much as drive and motor axes need zeroes.\n */\n latest.setCameraAxisIntent(0);\n if (!areVectorsEqual(lastVectorRef.current, ZERO_VECTOR)) {\n lastVectorRef.current = ZERO_VECTOR;\n latest.setDriveVector(ZERO_VECTOR, { source: SOURCE });\n }\n if (!areAuxEqual(lastAuxRef.current, ZERO_AUX)) {\n lastAuxRef.current = ZERO_AUX;\n latest.setAuxMotors(ZERO_AUX);\n }\n if (buttonStateRef.current.get('hornHonk')) latest.stopHorn();\n if (buttonStateRef.current.get('micPtt')) latest.setMicPttActive(false);\n buttonStateRef.current = new Map();\n reverseStateRef.current = { main: false, side: false };\n }, []);\n\n const activeInstanceKey = useMemo(\n () => gamepadSettings?.activeInstanceKey ?? null,\n [gamepadSettings?.activeInstanceKey],\n );\n\n useLayoutEffect(() => {\n // Layout timing matters because the requestAnimationFrame gamepad poll can run immediately\n // after React commits. Updating this ref before paint keeps the stable hub callback aligned\n // with the newest settings and control actions without resubscribing to the hub.\n latestRef.current = {\n activeInstanceKey,\n adminCanControlLockedLights:\n role === 'lockdown' || (role === 'admin' && sessionMode !== 'lockdown'),\n cameraAngle,\n cameraConfig,\n dockAssist,\n focusChat,\n gamepadSettings,\n homeAssistant,\n homeAssistantSetState,\n isChatFocused,\n pushAlert,\n registerInputState,\n roverId,\n runMacro,\n saveGamepadSettings,\n saveVideoSettings,\n sendSong,\n setAuxMotors,\n setCameraAxisIntent,\n setDriveVector,\n setMicPttActive,\n setMode,\n setSongNote,\n setServoAngle,\n songNote,\n startHorn,\n stopHorn,\n toggleHeadlight,\n toggleLaser,\n videoColorFilter: videoSettings?.colorFilter ?? VIDEO_SETTINGS_DEFAULTS.colorFilter,\n };\n });\n\n useEffect(() => {\n const unsubscribe = subscribeGamepadHub((hubState) => {\n const latest = latestRef.current;\n if (!latest) return;\n const activePad = pickActivePad(hubState.pads, latest.activeInstanceKey);\n if (!activePad) {\n // A disconnect cannot provide release samples, so synthesize every required release once.\n neutralizeController(latest);\n markControllerDisconnected(lastConnectedSignatureRef.current);\n previousPadRef.current = null;\n lastConnectedSignatureRef.current = null;\n lastConnectedInstanceKeyRef.current = null;\n lastRegisteredSignatureRef.current = null;\n controllerLockedRef.current = false;\n waitingForNeutralRef.current = false;\n lastDriveSentAtRef.current = 0;\n lastAuxSentAtRef.current = 0;\n latest.registerInputState(SOURCE, { connected: false });\n return;\n }\n\n if (\n lastConnectedInstanceKeyRef.current &&\n lastConnectedInstanceKeyRef.current !== activePad.instanceKey\n ) {\n /* Browser slots distinguish two identical controllers. Neutralize the old owner before\n accepting the replacement and require any controls already held on the new pad to be\n released, preventing a selection change from inheriting drive, horn, or microphone. */\n neutralizeController(latest);\n previousPadRef.current = null;\n lastRegisteredSignatureRef.current = null;\n waitingForNeutralRef.current = true;\n }\n\n if (hasMeaningfulControllerChange(activePad, previousPadRef.current)) {\n markControllerInputActive(activePad);\n }\n previousPadRef.current = activePad;\n lastConnectedSignatureRef.current = activePad.signature;\n lastConnectedInstanceKeyRef.current = activePad.instanceKey;\n\n const controlsBlocked = isTextEntryActive() || isControllerControlLocked();\n if (controlsBlocked) {\n /* Configuration and text entry still receive hub snapshots, but they must never leak\n through to physical rover actions. Only publish/reset on the transition into the lock. */\n if (!controllerLockedRef.current) {\n neutralizeController(latest);\n latest.registerInputState(SOURCE, { connected: true, blocked: true });\n }\n controllerLockedRef.current = true;\n waitingForNeutralRef.current = true;\n return;\n }\n if (controllerLockedRef.current) {\n controllerLockedRef.current = false;\n latest.registerInputState(SOURCE, { connected: true, blocked: false });\n }\n /* A control held while a dialog closes must not become a fresh command. Require a neutral\n sample before rearming the controller, just like releasing an emergency-stop switch. */\n if (waitingForNeutralRef.current) {\n if (!isControllerNeutral(activePad)) return;\n waitingForNeutralRef.current = false;\n }\n\n ensureProfile(activePad);\n const signature = activePad.signature;\n const storedProfile =\n latest.gamepadSettings?.profiles?.[signature] ??\n latest.gamepadSettings?.defaults?.profile ??\n GAMEPAD_PROFILE_DEFAULT;\n const profile = resolveGamepadProfile(storedProfile, GAMEPAD_PROFILE_DEFAULT);\n const outputs = computeGamepadOutputs(activePad, profile);\n\n const driveVector = {\n ...outputs.driveVector,\n boost: Boolean(outputs.buttons.boostModifier),\n };\n if (!areVectorsEqual(driveVector, lastVectorRef.current)) {\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n const idle = vectorMagnitude(driveVector) < 0.02;\n if (idle || now - lastDriveSentAtRef.current >= DRIVE_RATE_MS) {\n lastVectorRef.current = driveVector;\n lastDriveSentAtRef.current = now;\n const precisionSpeed = profile.calibration?.precisionSpeed ?? 100;\n const baseSpeed = profile.calibration?.baseSpeed ?? 500;\n const turboSpeed = profile.calibration?.turboSpeed ?? 500;\n latest.setDriveVector(driveVector, {\n source: SOURCE,\n speedOptions: outputs.buttons.slowModifier\n ? { baseSpeed: precisionSpeed, boostSpeed: precisionSpeed }\n : { baseSpeed, boostSpeed: turboSpeed },\n });\n }\n }\n\n const auxSideScale = profile.calibration?.auxSideScale ?? 0.55;\n const mainMagnitude = Math.round(Math.min(Math.abs(outputs.auxAxis.main), 1) * 127);\n const sideMagnitude = Math.round(Math.min(Math.abs(outputs.auxAxis.side), 1) * 127);\n const main = reverseStateRef.current.main ? -mainMagnitude : mainMagnitude;\n const side = reverseStateRef.current.side\n ? -Math.round(sideMagnitude * auxSideScale)\n : Math.round(sideMagnitude * auxSideScale);\n /* Digital bindings intentionally override proportional axes. This mirrors keyboard aux\n precedence exactly while preserving the controller-friendly analog defaults. */\n let aux = {\n main: outputs.buttons.auxMainForward\n ? 127\n : outputs.buttons.auxMainReverse\n ? -127\n : outputs.auxAxis.main !== 0\n ? main\n : 0,\n side: outputs.buttons.auxSideForward\n ? 127\n : outputs.buttons.auxSideReverse\n ? -70\n : outputs.auxAxis.side !== 0\n ? side\n : 0,\n vacuum: (outputs.buttons.vacuum || outputs.buttons.auxVacuumFast)\n ? 127\n : outputs.buttons.auxVacuumSlow\n ? 50\n : 0,\n };\n if (outputs.buttons.allAux || outputs.buttons.auxAllForward) {\n aux = { main: 127, side: 127, vacuum: 127 };\n }\n if (!areAuxEqual(aux, lastAuxRef.current)) {\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n if (isAuxIdle(aux) || now - lastAuxSentAtRef.current >= AUX_RATE_MS) {\n lastAuxRef.current = aux;\n lastAuxSentAtRef.current = now;\n latest.setAuxMotors(aux);\n }\n }\n\n if (outputs.buttons.mainReverse && handleButtonEdge('mainReverse', true)) {\n reverseStateRef.current.main = !reverseStateRef.current.main;\n } else if (!outputs.buttons.mainReverse) {\n handleButtonEdge('mainReverse', false);\n }\n\n if (outputs.buttons.sideReverse && handleButtonEdge('sideReverse', true)) {\n reverseStateRef.current.side = !reverseStateRef.current.side;\n } else if (!outputs.buttons.sideReverse) {\n handleButtonEdge('sideReverse', false);\n }\n\n if (outputs.buttons.driveMacro && handleButtonEdge('driveMacro', true)) {\n latest.dockAssist.exitAssist();\n latest.setMode('drive');\n latest.runMacro('drive-sequence');\n } else if (!outputs.buttons.driveMacro) {\n handleButtonEdge('driveMacro', false);\n }\n\n if (outputs.buttons.dockMacro && handleButtonEdge('dockMacro', true)) {\n latest.dockAssist.toggleAssist();\n } else if (!outputs.buttons.dockMacro) {\n handleButtonEdge('dockMacro', false);\n }\n\n if (outputs.buttons.headlightToggle && handleButtonEdge('headlightToggle', true)) {\n latest.toggleHeadlight();\n } else if (!outputs.buttons.headlightToggle) {\n handleButtonEdge('headlightToggle', false);\n }\n\n if (outputs.buttons.laserToggle && handleButtonEdge('laserToggle', true)) {\n latest.toggleLaser();\n } else if (!outputs.buttons.laserToggle) {\n handleButtonEdge('laserToggle', false);\n }\n\n const hornWasPressed = buttonStateRef.current.get('hornHonk') || false;\n if (outputs.buttons.hornHonk && handleButtonEdge('hornHonk', true)) {\n latest.startHorn();\n } else if (!outputs.buttons.hornHonk) {\n handleButtonEdge('hornHonk', false);\n if (hornWasPressed) latest.stopHorn();\n }\n\n const micWasPressed = buttonStateRef.current.get('micPtt') || false;\n if (outputs.buttons.micPtt && handleButtonEdge('micPtt', true)) {\n latest.setMicPttActive(true);\n } else if (!outputs.buttons.micPtt) {\n handleButtonEdge('micPtt', false);\n if (micWasPressed) latest.setMicPttActive(false);\n }\n\n if (outputs.buttons.videoFilterCycle && handleButtonEdge('videoFilterCycle', true)) {\n const nextFilter = nextVideoFilter(latest.videoColorFilter);\n latest.saveVideoSettings((current) => ({ ...(current ?? {}), colorFilter: nextFilter }));\n latest.pushAlert({\n id: 'video-filter-active',\n title: 'Video filter',\n message: `Rover video filter: ${nextFilter}`,\n color: '#38bdf8',\n lifetimeMs: 1600,\n });\n } else if (!outputs.buttons.videoFilterCycle) {\n handleButtonEdge('videoFilterCycle', false);\n }\n\n if (outputs.buttons.chatFocus && handleButtonEdge('chatFocus', true)) {\n if (!latest.isChatFocused) latest.focusChat();\n } else if (!outputs.buttons.chatFocus) {\n handleButtonEdge('chatFocus', false);\n }\n\n /* Song directions share identical edge and wrap behavior; the table keeps the two actions\n symmetric and prevents one direction from silently diverging during later changes. */\n for (const [actionId, direction] of [['songNoteUp', 1], ['songNoteDown', -1]]) {\n if (outputs.buttons[actionId] && handleButtonEdge(actionId, true)) {\n const [minNote, maxNote] = SONG_NOTE_RANGE;\n const currentNote = typeof latest.songNote === 'number' ? latest.songNote : SONG_DEFAULT_NOTE;\n const candidate = currentNote + direction;\n const nextNote = candidate > maxNote ? minNote : candidate < minNote ? maxNote : candidate;\n latest.setSongNote(nextNote);\n latest.sendSong([{ note: nextNote, duration: SONG_DEFAULT_DURATION }], { slot: 0 });\n } else if (!outputs.buttons[actionId]) {\n handleButtonEdge(actionId, false);\n }\n }\n\n /* Room-control cycling differs only by target state, so both bindings use the same policy\n checks and ordered entity selection. */\n for (const [actionId, targetState] of [['homeAssistantOn', 'on'], ['homeAssistantOff', 'off']]) {\n if (outputs.buttons[actionId] && handleButtonEdge(actionId, true)) {\n cycleHomeAssistant(latest, targetState);\n } else if (!outputs.buttons[actionId]) {\n handleButtonEdge(actionId, false);\n }\n }\n\n /*\n PTZ zoom consumes the live signed gamepad axis, including its zero\n position, so releasing the stick is an explicit stop instead of merely\n ending calls to the old servo updater. Rover camera servos return false\n here and continue through their established absolute/velocity mapping.\n */\n const handledAsPtzZoom = latest.setCameraAxisIntent(outputs.cameraAxis);\n /* Tank mode's camera input is a pair of direction buttons rather than a position-bearing\n analog axis. Always interpret those buttons as velocity commands; absolute mode would\n incorrectly jump directly to a servo endpoint on every D-pad press. The saved analog\n camera preference remains untouched and resumes when single-stick steering is selected. */\n const cameraCalibration = profile.calibration?.driveMode === 'tank'\n ? { ...profile.calibration, cameraMode: 'velocity' }\n : profile.calibration;\n if (\n !handledAsPtzZoom &&\n (cameraCalibration?.cameraMode === 'velocity' || Math.abs(outputs.cameraAxis) > 0.001)\n ) {\n handleCameraAxis(outputs.cameraAxis, cameraCalibration);\n }\n\n /* Raw values remain in the dedicated hub used by diagnostics. The shared reducer only\n needs connection identity, which avoids forcing the entire provider through 60 updates/s. */\n if (lastRegisteredSignatureRef.current !== signature) {\n lastRegisteredSignatureRef.current = signature;\n latest.registerInputState(SOURCE, {\n connected: true,\n blocked: false,\n signature,\n id: activePad.id,\n index: activePad.index,\n });\n }\n });\n return () => {\n unsubscribe();\n const latest = latestRef.current;\n if (latest) neutralizeController(latest);\n markControllerDisconnected(lastConnectedSignatureRef.current);\n };\n }, [ensureProfile, handleButtonEdge, handleCameraAxis, neutralizeController]);\n\n return null;\n}\n","import { useSessionSelector } from '../../context/SessionContext.jsx';\n\n// Utilities\nfunction cx(...values) {\n return values.filter(Boolean).join(' ');\n}\n\n// Color helpers\nfunction hexToRgb(hex) {\n const raw = String(hex || '').trim();\n const normalized = raw.startsWith('#') ? raw.slice(1) : raw;\n if (!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$/.test(normalized)) return null;\n const expanded =\n normalized.length === 3\n ? normalized\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : normalized;\n return {\n r: Number.parseInt(expanded.slice(0, 2), 16),\n g: Number.parseInt(expanded.slice(2, 4), 16),\n b: Number.parseInt(expanded.slice(4, 6), 16),\n };\n}\n\nfunction rgba(rgb, alpha) {\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n}\n\n// Component\nexport default function CardFrame({\n title = '',\n meta = null,\n actions = null,\n color = null,\n hideHeader = false,\n stickyHeader = false,\n className = '',\n headerClassName = '',\n bodyClassName = '',\n fillHeight = false,\n clipOverflow = true,\n children,\n}) {\n const showHeader = !hideHeader && (title || meta != null || actions);\n const greenMode = useSessionSelector((state) => Boolean(state.session?.greenMode));\n const ownRoverColor = useSessionSelector((state) => {\n const roverId = String(state.session?.assignment?.roverId || '').trim();\n if (!roverId) return null;\n const roster = Array.isArray(state.session?.roster) ? state.session.roster : [];\n const rover = roster.find((entry) => String(entry?.id) === roverId);\n return rover?.color || null;\n });\n\n // Callers can supply a structural accent, while ordinary cards continue to\n // inherit the assigned rover's color without needing to know session state.\n const accentRgb = hexToRgb(color || ownRoverColor);\n\n const cardStyle = greenMode\n ? { borderColor: '#008a35' }\n : accentRgb\n ? { borderColor: rgba(accentRgb, 0.3) }\n : undefined;\n\n const headerStyle = greenMode\n ? { borderColor: '#008a35' }\n : accentRgb\n ? {\n // The header divider uses the same accent as the outside border. This\n // makes the color describe the complete CardFrame rather than looking\n // like an unrelated tint applied only behind its title.\n borderColor: rgba(accentRgb, 0.3),\n backgroundImage: `linear-gradient(90deg, ${rgba(accentRgb, 0.2)} 100%)`,\n }\n : undefined;\n\n return (\n \n {showHeader ? (\n // Header row\n \n
\n {title ? (\n

\n {title}\n

\n ) : null}\n {meta != null ? {meta} : null}\n
\n {actions ?
{actions}
: null}\n \n ) : null}\n
{children}
\n \n );\n}\n","// Auth Panel\n// Purpose: Defines the Auth Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useState } from 'react';\nimport { useSessionActions } from '../../context/SessionContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\n\nexport default function AuthPanel() {\n const { login } = useSessionActions();\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n const [loading, setLoading] = useState(false);\n\n async function handleLogin(event) {\n event.preventDefault();\n setLoading(true);\n try {\n await login(username, password);\n setUsername('');\n setPassword('');\n } catch (err) {\n alert(err.message);\n } finally {\n setLoading(false);\n }\n }\n\n return (\n \n
\n setUsername(e.target.value)}\n />\n setPassword(e.target.value)}\n />\n \n \n {/*
\n \n \n
*/}\n
\n );\n}\n","// Shared Clock Hook\n// Purpose: Lets display-only countdown components share one browser interval per cadence.\n// Scope: Keeps timers out of control/safety paths; callers opt in only for UI text that can tolerate coarse updates.\nimport { useEffect, useState } from 'react';\n\nconst clockStores = new Map();\n\nfunction nowMs() {\n return Date.now();\n}\n\nfunction normalizeDelay(delayMs) {\n const delay = Number(delayMs);\n if (!Number.isFinite(delay) || delay <= 0) return 1000;\n return Math.max(16, Math.round(delay));\n}\n\nfunction getStore(delayMs) {\n const delay = normalizeDelay(delayMs);\n const existing = clockStores.get(delay);\n if (existing) return existing;\n\n const store = {\n delay,\n timer: null,\n visibilityHandler: null,\n current: nowMs(),\n listeners: new Set(),\n };\n clockStores.set(delay, store);\n return store;\n}\n\nfunction stopStore(store) {\n if (store.timer) {\n clearInterval(store.timer);\n store.timer = null;\n }\n if (store.visibilityHandler && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', store.visibilityHandler);\n store.visibilityHandler = null;\n }\n}\n\nfunction publish(store) {\n store.current = nowMs();\n store.listeners.forEach((listener) => listener(store.current));\n}\n\nfunction ensureVisibilityHandler(store) {\n if (store.visibilityHandler || typeof document === 'undefined') return;\n store.visibilityHandler = () => {\n if (!store.listeners.size) return;\n if (document.visibilityState === 'visible') {\n /*\n Hidden tabs do not need display-only countdown work. When the tab comes\n back, publish immediately so labels catch up before the next interval.\n */\n publish(store);\n startStore(store);\n return;\n }\n if (store.timer) {\n clearInterval(store.timer);\n store.timer = null;\n }\n };\n document.addEventListener('visibilitychange', store.visibilityHandler);\n}\n\nfunction startStore(store) {\n if (store.timer || !store.listeners.size) return;\n ensureVisibilityHandler(store);\n if (typeof document !== 'undefined' && document.visibilityState === 'hidden') return;\n /*\n One interval fans out to every mounted consumer using the same cadence. The\n previous pattern created independent intervals in each countdown component,\n which meant several panels could wake the main thread separately even though\n they only needed the same \"current time\" value for human-readable labels.\n */\n store.timer = setInterval(() => {\n publish(store);\n }, store.delay);\n}\n\nfunction subscribe(store, listener) {\n store.listeners.add(listener);\n startStore(store);\n\n return () => {\n store.listeners.delete(listener);\n /*\n Stop the interval as soon as the last consumer leaves. This matters for\n tab panels and overlays because hidden or unmounted UI should not keep a\n display clock alive just because another render path created it earlier.\n */\n if (!store.listeners.size) {\n stopStore(store);\n }\n };\n}\n\nexport function useSharedClock(delayMs = 1000, enabled = true) {\n const [now, setNow] = useState(() => nowMs());\n\n useEffect(() => {\n if (!enabled) return undefined;\n const store = getStore(delayMs);\n /*\n Subscribing starts the shared interval but does not synchronously push\n state from inside the effect. React's newer lint rules flag synchronous\n effect-time state writes because they can cascade renders; the hook's\n initial Date.now state is already fresh for the first paint, and later\n updates arrive through the interval or visibility callback.\n */\n return subscribe(store, setNow);\n }, [delayMs, enabled]);\n\n return now;\n}\n","export function getSessionSocials(state) {\n const socials = state?.session?.socials;\n return Array.isArray(socials) ? socials : [];\n}\n\nexport function getSocialById(state, socialId) {\n const key = String(socialId || '').trim().toLowerCase();\n if (!key) return null;\n return (\n getSessionSocials(state).find((entry) => {\n const entryKey = String(entry?.id || entry?.label || '').trim().toLowerCase();\n return entryKey === key;\n }) || null\n );\n}\n","// Social Button\n// Purpose: Defines the Social Button module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport * as FaIcons from 'react-icons/fa';\nimport { FaLink } from 'react-icons/fa';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { getSocialById } from '../../lib/socials.js';\nimport { trackAnalyticsEvent } from '../../analytics/index.js';\n\nfunction sanitizeCssColor(value) {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n if (!trimmed) return null;\n if (/^#[0-9a-fA-F]{3,8}$/.test(trimmed)) return trimmed;\n if (/^(rgb|rgba|hsl|hsla)\\([^)]+\\)$/.test(trimmed)) return trimmed;\n return null;\n}\n\nfunction resolveIcon(iconName) {\n if (typeof iconName !== 'string' || !iconName.trim()) return FaLink;\n const icon = FaIcons[iconName.trim()];\n return typeof icon === 'function' ? icon : FaLink;\n}\n\nexport default function SocialButton({ id = null, label, url, icon, color, layout = 'stacked', className = '' }) {\n const socialFromId = useSessionSelector((state) => (id ? getSocialById(state, id) : null));\n const resolvedUrl = url || socialFromId?.url || null;\n if (!resolvedUrl) return null;\n const resolvedIcon = icon || socialFromId?.icon || null;\n const resolvedColor = color || socialFromId?.color || null;\n const Icon = resolveIcon(resolvedIcon);\n const bgColor = sanitizeCssColor(resolvedColor);\n const text = label || socialFromId?.label || 'Link';\n const isInline = layout === 'inline';\n\n return (\n {\n trackAnalyticsEvent('social_link_clicked', {\n destination: id || 'custom',\n label: text,\n layout,\n });\n }}\n className={`grid h-full min-h-0 w-full place-items-center rounded-md bg-slate-700 px-0.5 ${isInline ? 'py-0.5' : 'pb-3'} text-center text-sm font-medium text-white transition hover:opacity-90 ${className}`}\n style={bgColor ? { backgroundColor: bgColor } : undefined}\n >\n {isInline ? (\n \n \n {text}\n \n ) : (\n \n \n \n {/* */}\n \n {text}\n \n )}\n \n );\n}\n","// Chat Message History Navigation\n// Purpose: Gives each chat input Bash-style traversal over the shared persisted send history.\n// Scope: Owns only draft/navigation state; it does not register global keys or interact with rover controls.\nimport { useCallback, useRef } from 'react';\nimport { useChatHistory } from '../context/ChatContext.jsx';\n\nexport default function useChatMessageHistoryNavigation() {\n const { messageHistory } = useChatHistory();\n const historyIndexRef = useRef(null);\n const preservedDraftRef = useRef('');\n\n const resetHistoryNavigation = useCallback(() => {\n // Manual edits and successful sends begin a new navigation session. The\n // current input value remains owned by the composer and is not changed here.\n historyIndexRef.current = null;\n preservedDraftRef.current = '';\n }, []);\n\n const navigateHistory = useCallback(\n (direction, currentDraft) => {\n if (!messageHistory.length) return null;\n\n if (direction === 'previous') {\n if (historyIndexRef.current === null) {\n // Save the in-progress draft exactly once so ArrowDown can restore it\n // after the user reaches the newest edge of history, like a shell.\n preservedDraftRef.current = currentDraft;\n historyIndexRef.current = messageHistory.length - 1;\n } else {\n historyIndexRef.current = Math.max(0, historyIndexRef.current - 1);\n }\n return messageHistory[historyIndexRef.current];\n }\n\n if (direction === 'next' && historyIndexRef.current !== null) {\n if (historyIndexRef.current < messageHistory.length - 1) {\n historyIndexRef.current += 1;\n return messageHistory[historyIndexRef.current];\n }\n\n const preservedDraft = preservedDraftRef.current;\n resetHistoryNavigation();\n return preservedDraft;\n }\n\n return null;\n },\n [messageHistory, resetHistoryNavigation],\n );\n\n return { navigateHistory, resetHistoryNavigation };\n}\n","// Nickname Form\n// Purpose: Defines the Nickname Form module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useState } from 'react';\nimport { useSessionActions } from '../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { trackAnalyticsEvent } from '../../analytics/index.js';\n\nexport default function NicknameForm({ compact = false }) {\n const { setNickname } = useSessionActions();\n const { value, save } = useSettingsNamespace('profile', { nickname: '' });\n const [nicknameInput, setNicknameInput] = useState(value.nickname || '');\n const [saving, setSaving] = useState(false);\n\n useEffect(() => {\n setNicknameInput(value.nickname || '');\n }, [value.nickname]);\n\n async function handleSave(event) {\n event.preventDefault();\n const trimmed = (nicknameInput || '').trim().slice(0, 32);\n if (!trimmed) return;\n setSaving(true);\n try {\n // Nicknames are identity metadata rather than rover-control permission.\n // Spectator pages use the same socket action and local profile storage as\n // the driver UI so chat/user-list labels stay consistent across routes.\n await setNickname(trimmed);\n save({ nickname: trimmed });\n /*\n The event records that a nickname was saved, while the shared analytics\n session reporter owns the actual nickname field. Keeping that split\n prevents every form call site from needing to know privacy/config rules.\n */\n trackAnalyticsEvent('nickname_set', {\n length: trimmed.length,\n });\n } catch (err) {\n alert(err.message);\n } finally {\n setSaving(false);\n }\n }\n\n return (\n
\n setNicknameInput(e.target.value)}\n onKeyDown={(event) => {\n if (event.key !== 'Enter') return;\n event.preventDefault();\n handleSave(event);\n }}\n maxLength={32}\n placeholder=\"Enter a nickname\"\n />\n \n {saving ? 'Saving…' : compact ? 'Set' : 'Save'}\n \n
\n );\n}\n","// Chat Panel\n// Purpose: Renders the chat transcript, nickname editor, message composer, and optional TTS controls.\n// Scope: Keeps timeline updates isolated from controlled form inputs so incoming chat activity does not\n// force the composer DOM to re-commit while a user is simply watching or driving.\nimport { memo, useEffect, useMemo, useRef, useState } from 'react';\nimport './styles.css';\nimport { useChatActions, useChatTimeline } from '../../context/ChatContext.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport useChatMessageHistoryNavigation from '../../hooks/useChatMessageHistoryNavigation.js';\nimport ChatMessageRow from '../ChatMessageRow/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport NicknameForm from '../NicknameForm/index.jsx';\n\nconst FLITE_VOICES = ['kal', 'rms', 'slt', 'ksp', 'bdl'];\nconst CHROME_TTS_VOICES = ['sfg', 'iob', 'iog', 'iol', 'iom', 'tpc', 'tpd', 'tpf'];\nconst ESPEAK_PITCHES = Array.from({ length: 10 }, (_, idx) => idx * 10);\nconst GOOGLE_TTS_VALUES = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0];\nconst DEFAULT_GOOGLE_TTS_VALUE = 1.0;\nconst DEFAULT_GOOGLE_TTS_VOICE = 'tpf';\n\nconst TTS_SETTINGS_DEFAULTS = {\n engine: 'chromegtts',\n voice: DEFAULT_GOOGLE_TTS_VOICE,\n pitch: 50,\n googlePitch: DEFAULT_GOOGLE_TTS_VALUE,\n googleSpeed: DEFAULT_GOOGLE_TTS_VALUE,\n};\n\nfunction formatGoogleSpeedLabel(engineSpeed) {\n // Chrome's local Google TTS model treats this parameter like a duration\n // multiplier, so larger raw values sound slower. Keep the raw saved value and\n // rover payload unchanged, but show the reciprocal so the dropdown reads like\n // a normal user-facing speed control where larger means faster.\n return (1 / engineSpeed).toFixed(2);\n}\n\nfunction resolveTtsSettings(settings) {\n return {\n engine: settings?.engine || TTS_SETTINGS_DEFAULTS.engine,\n voice: settings?.voice || TTS_SETTINGS_DEFAULTS.voice,\n pitch: Number.isFinite(settings?.pitch) ? settings.pitch : TTS_SETTINGS_DEFAULTS.pitch,\n googlePitch: Number.isFinite(settings?.googlePitch)\n ? settings.googlePitch\n : TTS_SETTINGS_DEFAULTS.googlePitch,\n googleSpeed: Number.isFinite(settings?.googleSpeed)\n ? settings.googleSpeed\n : TTS_SETTINGS_DEFAULTS.googleSpeed,\n };\n}\n\nfunction useChatComposerSessionState(allowSpectatorInput) {\n const role = useSessionSelector((state) => state.session?.role || null);\n const socketId = useSessionSelector((state) => state.session?.socketId || null);\n const currentRoverId = useSessionSelector((state) => state.session?.assignment?.roverId || null);\n const users = useSessionSelector((state) => state.session?.users ?? []);\n const roster = useSessionSelector((state) => state.session?.roster ?? []);\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n\n const chatTargetId = useMemo(() => {\n /*\n PTZ is intentionally not a roster entry, but session users expose the\n current chat target for each socket. Prefer the self user entry so the TTS\n control follows PTZ queue/operation state instead of only physical rover\n assignment state.\n */\n const self = users.find((entry) => entry?.socketId === socketId);\n if (!self?.roverId && ptz?.id && (ptz?.isOperator || ptz?.queuedPosition)) return ptz.id;\n return self?.roverId || currentRoverId || null;\n }, [currentRoverId, ptz?.id, ptz?.isOperator, ptz?.queuedPosition, socketId, users]);\n\n const rover = useMemo(\n () => roster.find((entry) => String(entry.id) === String(chatTargetId)) || null,\n [chatTargetId, roster],\n );\n const ptzTtsSupported = Boolean(\n ptz?.id &&\n String(chatTargetId) === String(ptz.id) &&\n ptz?.audio?.enabled &&\n (ptz?.isOperator || ptz?.queuedPosition),\n );\n\n return {\n canChat: role !== 'spectator' || allowSpectatorInput,\n ttsSupported: Boolean(rover?.audio?.ttsEnabled || ptzTtsSupported),\n };\n}\n\nfunction ChatMessageList({ fillHeight = false }) {\n const { messages, typing } = useChatTimeline();\n const listRef = useRef(null);\n const sorted = useMemo(() => messages.slice(-200), [messages]);\n const typingRows = useMemo(() => typing || [], [typing]);\n const listClass = fillHeight ? 'flex-1 min-h-0 overflow-y-auto' : 'h-48 overflow-y-auto';\n\n useEffect(() => {\n if (!listRef.current) return;\n\n // Keep the transcript pinned to the newest activity. This effect intentionally\n // lives with the timeline subscriber, because scrolling the message list is the\n // only DOM work that should happen when messages or typing indicators change.\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }, [sorted, typingRows]);\n\n return (\n
\n {sorted.length === 0 && typingRows.length === 0 ? (\n

No messages yet.

\n ) : (\n sorted.map((msg) => )\n )}\n {typingRows.map((entry) => (\n \n ))}\n
\n );\n}\n\nconst MemoizedNicknameForm = memo(NicknameForm);\n\nfunction TtsControls({\n ttsSupported,\n speak,\n onSpeakChange,\n engine,\n voice,\n pitch,\n googlePitch,\n googleSpeed,\n saveTtsSettings,\n}) {\n if (!ttsSupported) return null;\n\n // Native selects include generous built-in padding and try to preserve the\n // width of their longest option. Removing horizontal padding and forcing\n // min-w-0 lets the row stay intact while keeping labels readable.\n const compactSelectClass = 'field-input min-w-0 max-w-full px-0 text-xs';\n\n return (\n
\n \n {\n const next = event.target.value;\n const nextVoice =\n next === 'chromegtts' && !CHROME_TTS_VOICES.includes(voice)\n ? DEFAULT_GOOGLE_TTS_VOICE\n : next === 'flite' && !FLITE_VOICES.includes(voice)\n ? 'rms'\n : voice;\n saveTtsSettings((current) => ({ ...(current || {}), engine: next, voice: nextVoice }));\n }}\n className={`${compactSelectClass} w-[5.5rem] shrink`}\n >\n \n \n \n \n {engine === 'flite' || engine === 'chromegtts' ? (\n <>\n {\n const next = event.target.value;\n saveTtsSettings((current) => ({ ...(current || {}), voice: next }));\n }}\n className={`${compactSelectClass} w-[3.25rem] shrink`}\n >\n {(engine === 'chromegtts' ? CHROME_TTS_VOICES : FLITE_VOICES).map((v) => (\n \n ))}\n \n {engine === 'chromegtts' && (\n <>\n {\n const next = Number(event.target.value);\n saveTtsSettings((current) => ({ ...(current || {}), googlePitch: next }));\n }}\n className={`${compactSelectClass} w-[5rem] shrink`}\n >\n {GOOGLE_TTS_VALUES.map((value) => (\n \n ))}\n \n {\n const next = Number(event.target.value);\n saveTtsSettings((current) => ({ ...(current || {}), googleSpeed: next }));\n }}\n className={`${compactSelectClass} w-[5rem] shrink`}\n >\n {GOOGLE_TTS_VALUES.map((value) => (\n \n ))}\n \n \n )}\n \n ) : (\n {\n const next = Number(event.target.value);\n saveTtsSettings((current) => ({ ...(current || {}), pitch: next }));\n }}\n className={`${compactSelectClass} w-[4.5rem] shrink`}\n >\n {ESPEAK_PITCHES.map((p) => (\n \n ))}\n \n )}\n
\n );\n}\n\nfunction ChatComposer({\n allowSpectatorInput = false,\n hideSpectatorNotice = false,\n inputTarget = 'panel',\n}) {\n const {\n sendMessage,\n registerInputRef,\n onInputFocus,\n onInputBlur,\n blurChat,\n setTypingActive,\n } = useChatActions();\n const { canChat, ttsSupported } = useChatComposerSessionState(allowSpectatorInput);\n const {\n value: ttsSettings,\n save: saveTtsSettings,\n } = useSettingsNamespace('tts', TTS_SETTINGS_DEFAULTS);\n const {\n engine,\n voice,\n pitch,\n googlePitch,\n googleSpeed,\n } = resolveTtsSettings(ttsSettings);\n const [draft, setDraft] = useState('');\n const [sending, setSending] = useState(false);\n const [speak, setSpeak] = useState(true);\n const { navigateHistory, resetHistoryNavigation } = useChatMessageHistoryNavigation();\n const effectiveSpeak = ttsSupported && speak;\n const ttsPayload = useMemo(() => {\n if (!effectiveSpeak) return null;\n\n // The payload is derived during render from the current settings instead of\n // mirrored into local state. That removes an effect-driven state sync path and\n // keeps the composer render count tied to real user/settings changes.\n if (engine === 'espeak') {\n return { speak: true, engine, pitch };\n }\n if (engine === 'chromegtts') {\n return { speak: true, engine, voice, pitch: googlePitch, speed: googleSpeed };\n }\n return { speak: true, engine, voice };\n }, [effectiveSpeak, engine, googlePitch, googleSpeed, pitch, voice]);\n\n async function handleSend(event) {\n event.preventDefault();\n if (!canChat) return;\n\n // Allow users to type \"\\n\" to represent a newline in messages. This keeps the\n // single-line composer compatible with users who still want line breaks in the\n // delivered chat payload.\n const normalizedDraft = draft.replace(/\\\\n/g, '\\n');\n const clean = normalizedDraft.trim();\n if (!clean) return;\n\n setSending(true);\n try {\n await sendMessage(clean, ttsPayload);\n setDraft('');\n resetHistoryNavigation();\n blurChat();\n setTypingActive(false);\n } catch (err) {\n alert(err.message);\n } finally {\n setSending(false);\n }\n }\n\n // The composer class owns the responsive row behavior in CSS. A container\n // query is used instead of JavaScript so the layout responds to the actual\n // panel width, which matters because this component appears in sidebars and\n // mobile layouts that do not map cleanly to viewport breakpoints.\n return (\n
\n
\n \n
\n {\n const next = event.target.value;\n // A direct edit starts a fresh history traversal. This prevents an\n // old ArrowDown position from overwriting text the user just typed.\n resetHistoryNavigation();\n setDraft(next);\n setTypingActive(Boolean(next.trim()));\n }}\n onFocus={(event) => {\n onInputFocus(event);\n setTypingActive(Boolean(draft.trim()));\n }}\n onBlur={(event) => {\n onInputBlur(event);\n setTypingActive(false);\n }}\n onKeyDown={(event) => {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n const recalledDraft = navigateHistory(event.key === 'ArrowUp' ? 'previous' : 'next', draft);\n if (recalledDraft !== null) {\n event.preventDefault();\n setDraft(recalledDraft);\n setTypingActive(Boolean(recalledDraft.trim()));\n }\n return;\n }\n if (event.key === 'Enter' && !draft.trim()) {\n event.preventDefault();\n blurChat();\n setTypingActive(false);\n }\n }}\n ref={(el) => registerInputRef(el, { target: inputTarget })}\n placeholder={canChat ? 'Type a message…' : hideSpectatorNotice ? '' : 'Spectators cannot chat'}\n disabled={!canChat}\n />\n \n {sending ? '...' : 'Send'}\n \n \n \n );\n}\n\nconst MemoizedChatMessageList = memo(ChatMessageList);\nconst MemoizedChatComposer = memo(ChatComposer);\n\nexport default function ChatPanel({\n hideInput = false,\n hideSpectatorNotice = false,\n fillHeight = false,\n allowSpectatorInput = false,\n title = 'Chat and speech',\n minimal = false,\n inputTarget = 'panel',\n}) {\n const effectiveHideInput = minimal || hideInput;\n const effectiveTitle = minimal ? '' : title;\n\n return (\n \n \n {!effectiveHideInput && (\n \n )}\n \n );\n}\n","// Auto Fit Text\n// Purpose: Sizes one unwrapped label to the largest font that fits its container.\n// Scope: Supports the existing width-only labels and full-box overlays from one shared implementation.\nimport { useLayoutEffect, useRef, useState } from 'react';\n\nexport default function AutoFitText({\n children,\n className = '',\n containerClassName = '',\n maxSize = 1000,\n minSize = 14,\n fitHeight = false,\n style = undefined,\n}) {\n const containerRef = useRef(null);\n const textRef = useRef(null);\n const [fontSize, setFontSize] = useState(maxSize);\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n const textEl = textRef.current;\n if (!container || !textEl) return undefined;\n\n let animationFrame = null;\n const fit = () => {\n const width = container.clientWidth;\n const height = container.clientHeight;\n if (!width || (fitHeight && !height)) {\n scheduleFit();\n return;\n }\n\n // Binary search avoids stepping through hundreds of possible font sizes.\n // Overlay labels test both axes; ordinary rover labels preserve their\n // previous width-only behavior so this shared move changes no layout.\n let low = minSize;\n let high = maxSize;\n let best = minSize;\n while (low <= high) {\n const middle = Math.floor((low + high) / 2);\n textEl.style.fontSize = `${middle}px`;\n const fitsWidth = textEl.scrollWidth <= width;\n const fitsHeight = !fitHeight || textEl.scrollHeight <= height;\n if (fitsWidth && fitsHeight) {\n best = middle;\n low = middle + 1;\n } else {\n high = middle - 1;\n }\n }\n setFontSize(best);\n };\n\n const scheduleFit = () => {\n if (animationFrame) cancelAnimationFrame(animationFrame);\n animationFrame = requestAnimationFrame(fit);\n };\n\n scheduleFit();\n const observer = new ResizeObserver(scheduleFit);\n observer.observe(container);\n return () => {\n if (animationFrame) cancelAnimationFrame(animationFrame);\n observer.disconnect();\n };\n }, [children, fitHeight, maxSize, minSize]);\n\n return (\n \n \n {children}\n \n \n );\n}\n","// Rover Help Overlay\n// Purpose: Gives every rover surface one unmistakable, responsive HELP treatment.\n// Scope: Renders only the shared visual; server roster state decides when it is active.\nimport AutoFitText from '../AutoFitText/index.jsx';\nimport './styles.css';\n\nexport default function RoverHelpOverlay({ active = false }) {\n if (!active) return null;\n\n return (\n \n \n HELP\n \n \n );\n}\n","// Queue Target Row\n// Purpose: Renders the shared queue-row visual language used by rover queues and PTZ.\n// Scope: Owns row chrome, queue chips, timer labels, and row/button event plumbing;\n// callers still own target-specific permission checks and request actions.\nimport RoverLabel from '../RoverLabel/index.jsx';\nimport RoverHelpOverlay from '../RoverHelpOverlay/index.jsx';\n\nfunction classNames(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nfunction roleColors(role) {\n switch (role) {\n case 'admin':\n case 'lockdown':\n return 'text-amber-300';\n case 'spectator':\n return 'text-slate-400';\n default:\n return 'text-sky-300';\n }\n}\n\nfunction formatQueueUserLabel(user, selfId) {\n /*\n Queue chips need to be readable even when a socket has no nickname yet.\n Keeping the socket-prefix fallback here means rover queues and PTZ queues\n degrade identically instead of each target inventing its own anonymous label.\n */\n if (!user) return '';\n const base = user.nickname || user.label || user.socketId?.slice(0, 6) || 'unknown';\n if (user.socketId && user.socketId === selfId) {\n return `${base} (you)`;\n }\n return base;\n}\n\nexport function QueueUserChips({\n targetId,\n queue = [],\n currentId = null,\n nextId = null,\n selfId = null,\n lookupUser,\n}) {\n if (!queue.length) {\n return

No queue.

;\n }\n\n return (\n
\n {queue.map((socketId, idx) => {\n const user = lookupUser?.(socketId) || { socketId, nickname: null, role: null };\n const isCurrent = socketId === currentId;\n const isNext = Boolean(nextId && socketId === nextId && !isCurrent);\n /*\n These classes intentionally mirror the original rover queue styling.\n PTZ feeds the same current/next model into this component, so the user\n does not have to learn a different visual vocabulary for camera turns.\n */\n const highlightClass = isCurrent\n ? 'bg-sky-600 text-white ring-2 ring-amber-300'\n : isNext\n ? 'bg-emerald-700/60 text-emerald-100 ring-1 ring-emerald-300/70'\n : 'bg-slate-800 text-slate-200';\n return (\n \n \n {formatQueueUserLabel(user, selfId)}\n \n {isCurrent && now}\n {isNext && next}\n \n );\n })}\n
\n );\n}\n\nexport default function QueueTargetRow({\n target,\n queue = [],\n currentId = null,\n nextId = null,\n selfId = null,\n lookupUser,\n canClick = false,\n pending = false,\n locked = false,\n lockedBlocked = false,\n privateOpen = false,\n buttonLabel = '',\n batteryLabel = '',\n batteryClassName = 'text-slate-400',\n timerLabel = '',\n thumbnailUrl = '',\n onRequest,\n showAction = true,\n}) {\n const targetId = String(target?.id || '');\n const targetLabel = target?.label || target?.name || targetId;\n\n return (\n {\n /*\n The whole row is a large target because queue selection is one of the\n main touch/click actions on the page. The caller still decides whether\n clicking is currently allowed, so disabled PTZ and locked rover states\n cannot accidentally request control through the shared renderer.\n */\n if (!canClick) return;\n onRequest?.(targetId);\n }}\n >\n {thumbnailUrl ? (\n \n ) : null}\n
\n
\n
\n

\n \n {target?.description ? (\n \n {target.description}\n \n ) : null}\n

\n {timerLabel ? (\n \n {timerLabel}\n \n ) : null}\n
\n {batteryLabel ? (\n \n {batteryLabel}\n \n ) : null}\n
\n \n
\n {showAction ? (\n {\n /*\n Stop propagation so button clicks do not double-fire the row\n request. This keeps mouse, touch, and keyboard activation on the\n explicit button consistent with clicking the row background.\n */\n event.stopPropagation();\n onRequest?.(targetId);\n }}\n disabled={pending || lockedBlocked || !canClick}\n className={classNames(\n 'button-dark disabled:opacity-40',\n locked && 'bg-red-600/70 text-white hover:bg-red-600',\n )}\n >\n {buttonLabel}\n \n ) : null}\n {/* Queue rows use the exact overlay component as the large video and\n display surfaces; its measured font automatically adapts to this box. */}\n \n \n );\n}\n","// Inter-Instance Transfer Helpers\n// Purpose: Builds cross-server links and optionally carries the local settings cookie when page settings allow it.\n// Scope: Keeps URL encoding and settings-transfer behavior out of the rover queue rendering code.\nimport { loadSettings } from '../settings/persistence.js';\n\nfunction base64UrlEncodeJson(value) {\n const json = JSON.stringify(value ?? {});\n const bytes = new TextEncoder().encode(json);\n let binary = '';\n bytes.forEach((byte) => {\n binary += String.fromCharCode(byte);\n });\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/g, '');\n}\n\nexport function base64UrlDecodeJson(value) {\n const raw = String(value || '').replace(/-/g, '+').replace(/_/g, '/');\n const padded = raw.padEnd(Math.ceil(raw.length / 4) * 4, '=');\n const binary = atob(padded);\n const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));\n return JSON.parse(new TextDecoder().decode(bytes));\n}\n\nexport function buildExternalRoverUrl(instance, roverId, { includeSettings = false } = {}) {\n const publicUrl = String(instance?.instance?.publicUrl || instance?.publicUrl || instance?.url || '').trim();\n if (!publicUrl) return '';\n const url = new URL(publicUrl);\n if (roverId) url.searchParams.set('rover', String(roverId));\n /*\n The destination always applies settingsTransfer if present. Whether this\n source page includes the payload is controlled by the persistent Page\n settings toggle, so cross-server navigation does not need a per-click popup.\n */\n if (includeSettings) {\n url.searchParams.set('settingsTransfer', base64UrlEncodeJson(loadSettings()));\n }\n return url.toString();\n}\n\nexport function openExternalRover(instance, roverId, { includeSettings = true } = {}) {\n const targetUrl = buildExternalRoverUrl(instance, roverId, { includeSettings });\n if (!targetUrl) return;\n window.location.href = targetUrl;\n}\n","// Feature Helpers\n// Purpose: Centralizes client-side reads of configuration-generated optional feature switches.\n// Scope: Keeps layout/components from interpreting the server's public enabled map differently.\nexport function isFeatureEnabled(state, featureName) {\n /*\n The server configuration definition declares which items are public features.\n React treats missing flags as disabled so partial session payloads fail\n closed without deriving availability from credentials or service data.\n */\n return Boolean(state?.session?.features?.[featureName]);\n}\n\nexport function anyFeatureEnabled(state, featureNames = []) {\n return featureNames.some((featureName) => isFeatureEnabled(state, featureName));\n}\n","// Rover Queues Panel\n// Purpose: Defines the Rover Queues Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSharedClock } from '../../hooks/useSharedClock.js';\nimport CardFrame from '../CardFrame/index.jsx';\nimport QueueTargetRow from '../QueueTargetRow/index.jsx';\nimport { trackAnalyticsEvent } from '../../analytics/index.js';\nimport { openExternalRover } from '../../lib/interInstanceTransfer.js';\nimport { ExternalInstancesCompact, InterInstancePopup } from '../InterInstancePanel/index.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\n\nfunction formatBattery(rover) {\n const percent = rover?.batteryState?.percentDisplay;\n if (percent == null) return '--';\n return `${percent}%`;\n}\n\nfunction batteryClass(rover) {\n if (!rover?.batteryState) return 'text-slate-400';\n if (rover.batteryState.urgentActive) return 'text-red-400';\n if (rover.batteryState.warnActive) return 'text-amber-300';\n return 'text-emerald-300';\n}\n\nfunction ScrollableQueueContent({ enabled = false, children }) {\n const viewportRef = useRef(null);\n const contentRef = useRef(null);\n const [canScrollDown, setCanScrollDown] = useState(false);\n\n const measureScrollRemainder = useCallback(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n\n /*\n Fractional layout measurements can leave a sub-pixel remainder even at\n the bottom. The tolerance keeps the cue from flickering there while still\n showing it for any meaningful hidden queue content.\n */\n const remaining = viewport.scrollHeight - viewport.scrollTop - viewport.clientHeight;\n setCanScrollDown(remaining > 2);\n }, []);\n\n useEffect(() => {\n if (!enabled) return undefined;\n const viewport = viewportRef.current;\n const content = contentRef.current;\n if (!viewport || !content) return undefined;\n\n /*\n Queue membership, user chips, and remote instances all update from live\n session state and may change the content height without resizing the\n window. Observing both boxes keeps the overflow cue accurate without\n using JavaScript to calculate or assign the panel's actual height.\n */\n const observer = new ResizeObserver(measureScrollRemainder);\n observer.observe(viewport);\n observer.observe(content);\n const animationFrame = window.requestAnimationFrame(measureScrollRemainder);\n\n return () => {\n window.cancelAnimationFrame(animationFrame);\n observer.disconnect();\n };\n }, [enabled, measureScrollRemainder]);\n\n if (!enabled) return children;\n\n return (\n
\n \n
{children}
\n
\n {canScrollDown ? (\n /*\n This indicator is deliberately removed from layout so it consumes no\n permanent panel height. It also adds no padding to the scroll content,\n keeping scrollHeight stable when the indicator disappears at the\n bottom. The explicit stacking level and opaque background keep queue\n cards from painting through or over the message.\n */\n
\n Scroll for more ↓\n
\n ) : null}\n \n );\n}\n\nexport default function RoverQueuesPanel({\n title = 'Rovers',\n roster: rosterOverride = null,\n turnQueues: turnQueuesOverride = null,\n users: usersOverride = null,\n externalInstance = null,\n disabledOverlay = '',\n fillHeight = false,\n}) {\n const role = useSessionSelector((state) => state.session?.role || null);\n const localRoster = useSessionSelector((state) => state.session?.roster ?? []);\n const localTurnQueues = useSessionSelector((state) => state.session?.turnQueues ?? {});\n const localUsers = useSessionSelector((state) => state.session?.users ?? []);\n const interInstanceEnabled = useSessionSelector((state) => isFeatureEnabled(state, 'interInstance'));\n const { value: pageSettings } = useSettingsNamespace('page', { interInstanceTransferSettings: true });\n const selfId = useSessionSelector((state) => state.session?.socketId || null);\n const assignedRoverId = useSessionSelector((state) => String(state.session?.assignment?.roverId || '').trim());\n const assignedRoverName = useSessionSelector((state) => {\n const roverId = String(state.session?.assignment?.roverId || '').trim();\n if (!roverId) return '';\n const rover = (state.session?.roster || []).find((entry) => String(entry?.id) === roverId);\n return rover?.name || roverId;\n });\n const { requestControl, rebootOwnRover } = useSessionActions();\n const [pending, setPending] = useState({});\n const [rebootPending, setRebootPending] = useState(false);\n const [interInstancePopupOpen, setInterInstancePopupOpen] = useState(false);\n const externalMode = Boolean(externalInstance);\n const externalBlocked = Boolean(externalMode && disabledOverlay);\n const includeInterInstanceSettings = pageSettings?.interInstanceTransferSettings !== false;\n const roster = Array.isArray(rosterOverride) ? rosterOverride : localRoster;\n const turnQueues = turnQueuesOverride && typeof turnQueuesOverride === 'object' ? turnQueuesOverride : localTurnQueues;\n const users = Array.isArray(usersOverride) ? usersOverride : localUsers;\n\n const canRequest = useMemo(\n () => (externalMode ? !externalBlocked : role && role !== 'spectator'),\n [externalBlocked, externalMode, role],\n );\n const adminCapable = useMemo(\n () => role === 'admin' || role === 'lockdown',\n [role],\n );\n const hasDeadlines = useMemo(\n () => Object.values(turnQueues || {}).some((info) => info?.deadline || info?.idleDeadline),\n [turnQueues],\n );\n /*\n Queue timers are shown in whole seconds, and several queue panels can be\n mounted across desktop/mobile/spectator layouts. Sharing the one-second\n clock keeps those labels in sync while using a single interval globally.\n */\n const now = useSharedClock(1000, hasDeadlines);\n\n const rosterItems = useMemo(() => {\n const known = new Set(roster.map((rover) => String(rover.id)));\n const extra = Object.keys(turnQueues || {})\n .filter((id) => !known.has(String(id)))\n .map((id) => ({ id, name: id, locked: false, batteryState: null }));\n return [...roster, ...extra];\n }, [roster, turnQueues]);\n\n async function handleRequest(targetRoverId) {\n if (!targetRoverId) return;\n if (externalBlocked) return;\n if (externalMode) {\n /*\n External queue cards deliberately reuse the local row layout, but their\n action cannot go through this Socket.IO server. The row opens the remote\n instance and follows the saved Page setting for cookie/settings transfer\n instead of interrupting each click with a confirmation popup.\n */\n openExternalRover(externalInstance, targetRoverId, { includeSettings: includeInterInstanceSettings });\n return;\n }\n setPending((prev) => ({ ...prev, [targetRoverId]: true }));\n trackAnalyticsEvent('rover_selected', {\n roverId: targetRoverId,\n alreadySelected: assignedRoverId === String(targetRoverId),\n });\n try {\n await requestControl(targetRoverId);\n } catch (err) {\n alert(err.message);\n } finally {\n setPending((prev) => ({ ...prev, [targetRoverId]: false }));\n }\n }\n\n const lookupUser = (socketId) =>\n users.find((u) => u.socketId === socketId) || { socketId, nickname: null, role: null };\n\n async function handleRebootOwnRover() {\n if (rebootPending) return;\n const ok = window.confirm(`Reboot your rover \"${assignedRoverName}\" now?`);\n if (!ok) return;\n setRebootPending(true);\n try {\n await rebootOwnRover();\n alert('Reboot command sent.');\n } catch (err) {\n alert(err.message);\n } finally {\n setRebootPending(false);\n }\n }\n\n const rebootAction =\n role !== 'spectator' && assignedRoverId ? (\n \n {rebootPending ? 'Rebooting...' : 'Reboot My Rover'}\n \n ) : null;\n\n const headerActions = !externalMode ? rebootAction : null;\n\n return (\n <>\n \n \n
\n {rosterItems.length === 0 ? (\n

No rovers registered.

\n ) : (\n
    \n {rosterItems.map((rover) => {\n const roverId = String(rover.id);\n const info = turnQueues?.[roverId] || null;\n const queue = info?.queue || [];\n /*\n A turn handoff and an inactivity skip are separate server\n deadlines. Keep them separate through formatting so an idle\n warning cannot masquerade as the length of the whole turn or\n jump from seven seconds back to the turn countdown.\n */\n const turnDeadline = info?.deadline || null;\n const idleDeadline = info?.idleDeadline || null;\n const turnRemainingSeconds = turnDeadline\n ? Math.max(0, Math.ceil((turnDeadline - now) / 1000))\n : null;\n const idleRemainingSeconds = idleDeadline\n ? Math.max(0, Math.ceil((idleDeadline - now) / 1000))\n : null;\n const currentId = info?.current || null;\n const currentIdx = currentId ? queue.findIndex((id) => id === currentId) : -1;\n const nextId =\n queue.length > 1\n ? currentIdx >= 0\n ? queue[(currentIdx + 1) % queue.length]\n : queue[0]\n : null;\n const isSelfCurrent = Boolean(selfId && currentId && currentId === selfId);\n const isSelfNext = Boolean(selfId && nextId && nextId === selfId);\n const timerLabel = isSelfCurrent\n ? [\n turnRemainingSeconds != null ? `${turnRemainingSeconds}s left` : '',\n idleRemainingSeconds != null ? `Idle skip in ${idleRemainingSeconds}s` : '',\n ].filter(Boolean).join(' · ')\n : isSelfNext && turnRemainingSeconds != null\n ? `Your turn in ${turnRemainingSeconds}s`\n : '';\n const isPrivateOpen = Boolean(rover?.private?.enabled && rover?.private?.open);\n const isGrantedClosedPrivate = Boolean(rover?.private?.enabled && !rover?.private?.open);\n const locked = Boolean(rover.locked);\n const lockedBlocked = locked && (externalMode || (!adminCapable && !isGrantedClosedPrivate));\n const lockLabel = rover.lockReason ? `locked: ${rover.lockReason}` : 'locked';\n const buttonLabel = pending[roverId]\n ? '...'\n : lockedBlocked\n ? lockLabel\n : externalMode\n ? 'Open'\n : 'request';\n const canClickRow = canRequest && !lockedBlocked && !pending[roverId];\n return (\n \n );\n })}\n
\n )}\n {externalBlocked ? (\n
\n {disabledOverlay}\n
\n ) : null}\n {!externalMode && interInstanceEnabled ? (\n setInterInstancePopupOpen(true)} />\n ) : null}\n
\n
\n \n {interInstancePopupOpen ? (\n /*\n The popup remains owned by the local Rover Queues panel because its\n title-bar action opens it. External queue panels never render that\n action, which prevents recursively opening browsers from remote rows.\n */\n setInterInstancePopupOpen(false)} />\n ) : null}\n \n );\n}\n","// Inter Instance Panel\n// Purpose: Renders remote rover servers discovered through the inter-instance directory.\n// Scope: Owns external server metadata presentation while reusing RoverQueuesPanel for rover/queue rows.\nimport { useMemo } from 'react';\nimport './styles.css';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport RoverQueuesPanel from '../RoverQueuesPanel/index.jsx';\nimport { openExternalRover } from '../../lib/interInstanceTransfer.js';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\n\nfunction classNames(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nfunction useRemoteInstances() {\n return useSessionSelector((state) => state.session?.interInstances?.instances ?? []);\n}\n\nfunction useInterInstanceEnabled() {\n return useSessionSelector((state) => isFeatureEnabled(state, 'interInstance'));\n}\n\nfunction featureEntries(features = {}) {\n return Object.entries(features || {})\n .filter(([, enabled]) => Boolean(enabled))\n .map(([name]) => name);\n}\n\nfunction getRemoteAvailability(remote) {\n const mode = remote?.instance?.mode || 'unknown';\n if (!remote?.online) return { blocked: true, label: 'Offline', overlay: 'This server is offline', tone: 'red' };\n if (mode === 'lockdown') return { blocked: true, label: 'Lockdown', overlay: 'This server is currently in lockdown mode', tone: 'red' };\n if (mode === 'admin') return { blocked: true, label: 'Admin only', overlay: 'This server is currently admin locked', tone: 'red' };\n if (mode === 'turns') return { blocked: false, label: 'Turns mode (open)', tone: 'emerald' };\n if (mode === 'open') return { blocked: false, label: 'Open mode', tone: 'emerald' };\n return { blocked: false, label: mode, tone: 'slate' };\n}\n\nfunction statusClass(tone) {\n switch (tone) {\n case 'emerald':\n return 'bg-emerald-700/70 text-emerald-50 ring-1 ring-emerald-300/50';\n case 'sky':\n return 'bg-sky-700/70 text-sky-50 ring-1 ring-sky-300/50';\n case 'amber':\n return 'bg-amber-600/80 text-amber-50 ring-1 ring-amber-200/60';\n case 'red':\n return 'bg-red-700/80 text-red-50 ring-1 ring-red-300/60';\n default:\n return 'bg-slate-700/80 text-slate-50 ring-1 ring-slate-400/40';\n }\n}\n\nfunction InstanceStatus({ remote }) {\n const availability = getRemoteAvailability(remote);\n return (\n
\n \n {availability.label}\n \n
\n );\n}\n\nfunction InstanceLatency({ remote }) {\n if (remote?.latencyMs == null) return null;\n return {remote.latencyMs}ms;\n}\n\nfunction InstancePanel({ remote, children = null }) {\n const instance = remote?.instance || {};\n const features = featureEntries(instance.features);\n const color = instance.color || '#64748b';\n const online = Boolean(remote?.online);\n const { value: pageSettings } = useSettingsNamespace('page', { interInstanceTransferSettings: true });\n const includeSettings = pageSettings?.interInstanceTransferSettings !== false;\n return (\n }\n bodyClassName=\"space-y-0.5 p-0.5 text-sm\"\n >\n
\n\n
\n {/*\n The status is the main operational signal for a remote instance, so it\n stays beside the human-facing description where users naturally scan\n the server summary. Latency is intentionally moved to the title bar as\n quiet metadata because it is useful detail, not the primary decision.\n */}\n
\n {online && instance.description ?

{instance.description}

: null}\n
\n
\n \n openExternalRover(remote, '', { includeSettings })}\n >\n Visit server\n \n
\n\n {online && features.length ? (\n
\n {features.map((feature) => (\n \n {feature}\n \n ))}\n
\n ) : null}\n
\n {online ? children : null}\n \n );\n}\n\nfunction RemoteMediaStrip({ remote }) {\n const roomCameras = Array.isArray(remote.roomCameras) ? remote.roomCameras.filter((camera) => camera.snapshotUrl) : [];\n if (!roomCameras.length) return null;\n return (\n
\n {roomCameras.map((camera) => (\n
\n {camera.name\n
\n ))}\n
\n );\n}\n\nexport function ExternalInstancesCompact({ onBrowse = null }) {\n const enabled = useInterInstanceEnabled();\n const instances = useRemoteInstances();\n const visible = useMemo(() => instances.filter((remote) => remote?.online || remote?.url), [instances]);\n if (!enabled) return null;\n if (!visible.length) return null;\n const browseAction = onBrowse ? (\n \n ) : null;\n return (\n /*\n External instances are intentionally always mounted. Besides removing an\n unnecessary disclosure click, this preserves the live queue rows while\n the local Rover Queues card can provide one continuous scroll surface for\n both its local and external rows. Scrolling belongs to that owning panel,\n so this nested section deliberately keeps its natural content height.\n */\n \n {/*\n One containing card gives the remote-server collection a clear boundary\n below the local rover rows. Individual remote queue cards stay intact\n inside it because they still own each server's title and operational\n status, while this outer title bar owns the collection-wide browser.\n */}\n {visible.map((remote) =>\n remote.online ? (\n \n ) : (\n \n ),\n )}\n \n );\n}\n\nexport function InterInstancePopup({ onClose }) {\n return (\n
\n \n
\n );\n}\n\nfunction InterInstanceCards({ instances, centered = false, singleColumn = false }) {\n return (\n
\n {instances.map((remote) => (\n
\n \n {/*\n The large browser should read as one card per external server:\n the server metadata, room snapshots, and the exact existing rover\n queues panel are grouped together here. RoverQueuesPanel keeps its\n own CardFrame and default title, so this component only controls\n where that already-existing panel is placed.\n */}\n <>\n \n \n \n \n
\n ))}\n
\n );\n}\n\nexport function InterInstanceBrowserFrame({\n onClose = null,\n hideWhenEmpty = false,\n className = '',\n bodyClassName = 'p-0.5',\n centered = false,\n scaledOverlay = false,\n singleColumn = false,\n}) {\n const enabled = useInterInstanceEnabled();\n const instances = useRemoteInstances();\n if (!enabled) return null;\n if (!instances.length && hideWhenEmpty) return null;\n const actions = onClose ? (\n \n ) : null;\n /*\n This frame is shared by the popup and the admin/lockdown overlay. Keeping\n the wrapper here means those surfaces get the same external-instance card\n without placing it inside the login card or duplicating layout behavior.\n */\n return (\n \n {instances.length ? (\n \n ) : (\n

No external instances discovered.

\n )}\n \n );\n}\n\nexport default function InterInstancePanel({ compact = false, centered = false }) {\n const enabled = useInterInstanceEnabled();\n const instances = useRemoteInstances();\n if (!enabled) return null;\n if (compact) return ;\n if (!instances.length) {\n return (\n \n

No external instances discovered.

\n
\n );\n }\n return ;\n}\n","// Driver Ad Card\n// Purpose: Renders the optional server-configured advertisement in the desktop\n// driver column. Scope: This component owns presentation and self-gating only;\n// the server remains the source of both the title and trusted HTML markup.\nimport CardFrame from '../CardFrame/index.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\n\nexport default function DriverAdCard({ className = '' }) {\n const driverAd = useSessionSelector((state) => state.session?.driverAd || null);\n const title = typeof driverAd?.title === 'string' ? driverAd.title : '';\n const html = typeof driverAd?.html === 'string' ? driverAd.html.trim() : '';\n\n /*\n The HTML value is the feature gate. A configured title without content\n should not reserve desktop space or display an empty CardFrame.\n */\n if (!html) return null;\n\n return (\n \n {/*\n This markup is deliberately not sanitized: the requested contract is\n trusted HTML authored by the server operator. Anyone allowed to edit\n server configuration must therefore be treated as having control over\n content rendered in connected driver browsers.\n\n React's inner-HTML insertion renders markup such as links, images, and\n iframes, but browsers do not normally execute script elements inserted\n this way. Providers that require a script loader need a separate,\n explicit integration rather than silently changing this contract.\n */}\n {/*\n The slot deliberately imposes no rules on the operator-authored child\n markup. Images, iframes, or more complex embeds keep their own sizing\n contract instead of inheriting assumptions from one ad provider.\n */}\n
\n \n );\n}\n","// Mode Gate Overlay\n// Purpose: Defines the Mode Gate Overlay module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo } from 'react';\nimport '../InterInstancePanel/styles.css';\nimport AuthPanel from '../AuthPanel/index.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSharedClock } from '../../hooks/useSharedClock.js';\nimport SocialButton from '../SocialButton/index.jsx';\nimport ChatPanel from '../ChatPanel/index.jsx';\nimport { InterInstanceBrowserFrame } from '../InterInstancePanel/index.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport DriverAdCard from '../DriverAdCard/index.jsx';\n\nconst PRIVILEGED_ROLES = new Set(['admin', 'lockdown']);\nconst LOCKDOWN_ROLES = new Set(['lockdown']);\nconst RESTRICTED_MODES = new Set(['admin', 'lockdown']);\n\nfunction getModeDetails(mode = 'admin') {\n if (mode === 'lockdown') {\n return {\n title: 'Lockdown mode active',\n description:\n 'Only the server owners can access the interface at this time.',\n };\n }\n return {\n title: 'Admin mode active',\n // description:\n // 'The server is currently in admin mode. Only admins can access the interface.',\n };\n}\n\nfunction ServerTime({ timezone }) {\n /*\n Keep the one-second clock subscription in this leaf component. If the mode\n gate itself owns the changing timestamp, React rerenders the authentication\n card, chat, external-instance browser, and raw ad iframe every second even\n though only this short label changed.\n\n ServerTime is only mounted while the gate is visible, so useSharedClock\n automatically removes its listener when access is restored and no hidden\n overlay interval remains active.\n */\n const nowMs = useSharedClock(1000);\n const formattedTime = useMemo(() => {\n const now = new Date(nowMs);\n try {\n return new Intl.DateTimeFormat('en-US', {\n timeZone: timezone,\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n }).format(now);\n } catch {\n return now.toLocaleTimeString();\n }\n }, [nowMs, timezone]);\n\n return

Server time: {formattedTime}

;\n}\n\nexport default function ModeGateOverlay() {\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const role = useSessionSelector((state) => state.session?.role || null);\n const reason = useSessionSelector((state) => state.session?.adminReason?.text || '');\n const timezone = useSessionSelector((state) => state.session?.timezone || 'UTC');\n const interInstanceEnabled = useSessionSelector((state) => isFeatureEnabled(state, 'interInstance'));\n const restricted = RESTRICTED_MODES.has(mode);\n const privileged = mode === 'lockdown' ? LOCKDOWN_ROLES.has(role) : PRIVILEGED_ROLES.has(role);\n\n if (!restricted || privileged) {\n return null;\n }\n\n const details = getModeDetails(mode);\n\n return (\n
\n
\n {/*\n The access and external-instance cards live in a flexible center\n region. The ad remains a separate final row, so it stays centered at\n the bottom of the overlay rather than becoming a third column or\n shifting the access controls away from the visual center.\n */}\n
\n
\n
\n
\n

{details.title}

\n

{details.description}

\n
\n
\n

Reason for locking:

\n

\n {reason ? reason : 'No reason set.'}\n

\n \n
\n
\n \n
\n \n You can still use the chat while the server is locked:\n {/* set max height of this box */}\n
\n \n
\n
\n {interInstanceEnabled ? (\n /*\n Give the mode-gate copy of the shared browser a stable width\n and allow it to shrink below that width. Scrollable queue\n descendants must not expand this flex item to their intrinsic\n content width when the body gains a vertical scrollbar.\n */\n \n ) : null}\n
\n
\n {/*\n DriverAdCard self-gates on configured HTML. When disabled it returns\n null and consumes no footer space; when enabled this responsive width\n keeps the card centered without tying the overlay to one provider's\n creative dimensions.\n */}\n \n
\n
\n );\n}\n","export default \"__VITE_ASSET__6zyNJ7uJ__\"","// Turn Alert Listener\n// Purpose: Defines the Turn Alert Listener module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useRef } from 'react';\nimport turnSound from '../../assets/turn_alert.mp3';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { AUDIO_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\n\nfunction useAudio(src, volume = 1) {\n const audioRef = useRef(null);\n useEffect(() => {\n audioRef.current = new Audio(src);\n audioRef.current.volume = volume;\n audioRef.current.load();\n }, [src, volume]);\n const play = () => {\n if (!audioRef.current) return;\n audioRef.current.volume = volume;\n audioRef.current.currentTime = 0;\n audioRef.current.play().catch(() => {});\n };\n return play;\n}\n\nexport default function TurnAlertListener() {\n const socketId = useSessionSelector((state) => state.session?.socketId || null);\n const assignments = useSessionSelector((state) => state.session?.turnQueues || {});\n const roster = useSessionSelector((state) => state.session?.roster || []);\n const { pushAlert } = useSessionActions();\n const { value: audioSettings } = useSettingsNamespace('audio', AUDIO_SETTINGS_DEFAULTS);\n const masterVolume = Number.isFinite(audioSettings?.masterVolume) ? audioSettings.masterVolume : AUDIO_SETTINGS_DEFAULTS.masterVolume;\n const alertVolume = Number.isFinite(audioSettings?.alertVolume) ? audioSettings.alertVolume : AUDIO_SETTINGS_DEFAULTS.alertVolume;\n const effectiveAlertVolume = Math.max(0, Math.min(1, masterVolume * alertVolume));\n const playSound = useAudio(turnSound, effectiveAlertVolume);\n const seenRoversRef = useRef(new Set());\n\n useEffect(() => {\n if (!socketId) return;\n const newlyMine = [];\n Object.entries(assignments).forEach(([roverId, info]) => {\n if (!info || !info.current || info.current !== socketId) return;\n if (!seenRoversRef.current.has(roverId)) {\n newlyMine.push(roverId);\n seenRoversRef.current.add(roverId);\n }\n });\n Object.keys(assignments).forEach((roverId) => {\n if (!assignments[roverId] || assignments[roverId].current !== socketId) {\n seenRoversRef.current.delete(roverId);\n }\n });\n if (newlyMine.length === 0) return;\n newlyMine.forEach((roverId) => {\n const roverName = roster.find((r) => String(r.id) === String(roverId))?.name || roverId;\n pushAlert({\n title: 'Your turn!',\n message: `You now control ${roverName}.`,\n color: '#ff5722',\n });\n });\n playSound();\n }, [assignments, playSound, pushAlert, roster, socketId]);\n\n return null;\n}\n","/**\n * Controller visual rendering for Gamepad API consumers.\n */\n\nconst DEFAULT_ASSET_BASE_PATH = '/assets/img/gamepads/';\nconst SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nconst VALID_COLOR_SCHEMES = new Set(['Black', 'White']);\n\nfunction createDPadButtonVisuals(shapes) {\n return shapes.map((shape, index) => ({\n index: index + 12,\n ...shape,\n }));\n}\n\nconst CONTROLLER_VISUAL_CONFIGS = {\n xbox: {\n viewBox: '1050 450 2050 1350',\n imagePaths: {\n Black: 'xbox/Controller Images/Solid/Solid Black 4k.svg',\n White: 'xbox/Controller Images/Solid/Solid White SVG.svg',\n },\n buttons: [\n { index: 0, tag: 'circle', attributes: { cx: 2491, cy: 925, r: 70 } },\n { index: 1, tag: 'circle', attributes: { cx: 2606, cy: 811, r: 70 } },\n { index: 2, tag: 'circle', attributes: { cx: 2376, cy: 810, r: 70 } },\n { index: 3, tag: 'circle', attributes: { cx: 2491, cy: 695, r: 70 } },\n { index: 4, tag: 'path', attributes: { d: 'M1443,623.26s43.32-137.59,277-140.76c0,0,17.41,2.5,22.55,6.65,0,0,30.3,30.18,49.07,33.29C1791.65,522.44,1582.23,499.75,1443,623.26Z' } },\n { index: 5, tag: 'path', attributes: { d: 'M2653.21,623.26s-43.32-137.59-277-140.76c0,0-17.4,2.5-22.55,6.65,0,0-30.29,30.18-49.07,33.29C2304.6,522.44,2514,499.75,2653.21,623.26Z' } },\n { index: 8, tag: 'circle', attributes: { cx: 1922, cy: 808, r: 52 } },\n { index: 9, tag: 'circle', attributes: { cx: 2173, cy: 808, r: 52 } },\n { index: 10, tag: 'circle', attributes: { cx: 1602, cy: 816, r: 105 } },\n { index: 11, tag: 'circle', attributes: { cx: 2276, cy: 1073, r: 105 } },\n ...createDPadButtonVisuals([\n { tag: 'rect', attributes: { x: 1771, y: 964, width: 92, height: 82, rx: 13 } },\n { tag: 'rect', attributes: { x: 1771, y: 1139, width: 92, height: 82, rx: 13 } },\n { tag: 'rect', attributes: { x: 1692, y: 1046, width: 79, height: 93, rx: 13 } },\n { tag: 'rect', attributes: { x: 1863, y: 1046, width: 82, height: 93, rx: 13 } },\n ]),\n { index: 16, tag: 'circle', attributes: { cx: 2049, cy: 637, r: 65 } },\n ],\n sticks: [\n { buttonIndex: 10, axes: [0, 1], x: 1602, y: 816, range: 80 },\n { buttonIndex: 11, axes: [2, 3], x: 2276, y: 1073, range: 80 },\n ],\n triggers: [6, 7],\n },\n playstation: {\n viewBox: '950 400 2200 1350',\n imagePaths: {\n Black: 'playstation/Controller Images/Solid/Solid Black SVG.svg',\n White: 'playstation/Controller Images/Solid/Solid White SVG.svg',\n },\n buttons: [\n { index: 0, tag: 'circle', attributes: { cx: 2668, cy: 966, r: 72 } },\n { index: 1, tag: 'circle', attributes: { cx: 2815, cy: 819, r: 72 } },\n { index: 2, tag: 'circle', attributes: { cx: 2521, cy: 819, r: 72 } },\n { index: 3, tag: 'circle', attributes: { cx: 2668, cy: 672, r: 72 } },\n { index: 4, tag: 'path', attributes: { d: 'M1306.92,530.22v-24s64.45-44.31,142-52.75,109.72,5,109.72,5a57.45,57.45,0,0,1,4.74,28.49S1402.82,497.78,1306.92,530.22Z' } },\n { index: 5, tag: 'path', attributes: { d: 'M2787.64,530.22v-24s-64.45-44.31-142-52.75-109.71,5-109.71,5a57.52,57.52,0,0,0-4.75,28.49S2691.74,497.78,2787.64,530.22Z' } },\n { index: 8, tag: 'rect', attributes: { x: 1545, y: 530, width: 80, height: 145, rx: 35, transform: 'rotate(-8 1585 602)' } },\n { index: 9, tag: 'rect', attributes: { x: 2470, y: 530, width: 80, height: 145, rx: 35, transform: 'rotate(8 2510 602)' } },\n { index: 10, tag: 'circle', attributes: { cx: 1724, cy: 1094, r: 115 } },\n { index: 11, tag: 'circle', attributes: { cx: 2370, cy: 1093, r: 115 } },\n ...createDPadButtonVisuals([\n { tag: 'path', attributes: { d: 'M1449.18,658.32s-11.48-1.24-24-1.24-24,1.24-24,1.24-26.51,1.17-28.49,23.66l1.59,48.59a24.8,24.8,0,0,0,5.44,14.73l35,38.58a6.74,6.74,0,0,0,4.16,2.45,40.6,40.6,0,0,0,6.35.53,41.32,41.32,0,0,0,7.07-.67,4.91,4.91,0,0,0,3-1.79l34.52-38a28.88,28.88,0,0,0,6.33-17.17l1.55-47.22C1475.15,659.49,1449.18,658.32,1449.18,658.32Z' } },\n { tag: 'path', attributes: { d: 'M1401.18,976.94s11.47,1.25,24,1.25,24-1.25,24-1.25,26.5-1.17,28.48-23.65l-1.59-48.6a24.79,24.79,0,0,0-5.43-14.73l-35-38.58a6.68,6.68,0,0,0-4.16-2.44,39.28,39.28,0,0,0-6.34-.53,41.49,41.49,0,0,0-7.08.66,5,5,0,0,0-3,1.79l-34.51,38a28.85,28.85,0,0,0-6.34,17.17l-1.55,47.23C1375.2,975.77,1401.18,976.94,1401.18,976.94Z' } },\n { tag: 'path', attributes: { d: 'M1265.87,793.63s-1.25,11.48-1.25,24,1.25,24,1.25,24,1.17,26.51,23.65,28.49l48.6-1.6a24.73,24.73,0,0,0,14.73-5.43l38.58-35a6.68,6.68,0,0,0,2.44-4.16,39.42,39.42,0,0,0,.53-6.35,41.46,41.46,0,0,0-.66-7.07,5.06,5.06,0,0,0-1.79-3l-38-34.51a28.87,28.87,0,0,0-17.18-6.33l-47.22-1.55C1267,767.65,1265.87,793.63,1265.87,793.63Z' } },\n { tag: 'path', attributes: { d: 'M1584.48,841.63s1.25-11.47,1.25-24-1.25-24-1.25-24-1.17-26.5-23.65-28.48l-48.6,1.59a24.79,24.79,0,0,0-14.72,5.43l-38.59,35a6.77,6.77,0,0,0-2.44,4.16,39.28,39.28,0,0,0-.53,6.34,41.21,41.21,0,0,0,.67,7.07,5,5,0,0,0,1.78,3l38,34.51a28.94,28.94,0,0,0,17.18,6.34l47.22,1.55C1583.31,867.61,1584.48,841.63,1584.48,841.63Z' } },\n ]),\n { index: 16, tag: 'circle', attributes: { cx: 2048, cy: 1094, r: 70 } },\n { index: 17, tag: 'path', attributes: { d: 'M2446.36,528.91l-.06-.3c.6-17-2.64-40.77-23.6-49.54-7.28-3.05-28.57-5.62-57.54-7.79-96.28-9.84-316.91-10.41-316.91-10.41h-.45s-220.63.57-316.91,10.41c-29,2.17-50.27,4.74-57.54,7.79-21,8.77-24.2,32.57-23.6,49.54,0,.1,0,.2-.07.3l.1.48a105.85,105.85,0,0,0,2.21,17.72l52.22,255.56q1.63,5.87,3.63,11.19A112,112,0,0,0,1718,834.93a106.93,106.93,0,0,0,26,29.1,110.63,110.63,0,0,0,34.7,18.12,119.88,119.88,0,0,0,15.93,4c2.53.46,5.11.87,7.78,1.21h491.27c2.66-.34,5.25-.75,7.78-1.21a119.88,119.88,0,0,0,15.93-4,110.63,110.63,0,0,0,34.7-18.12,106.74,106.74,0,0,0,26-29.1,111.54,111.54,0,0,0,10.17-21.07c1.32-3.55,2.54-7.28,3.63-11.19l52.22-255.56a105.85,105.85,0,0,0,2.21-17.72Z' } },\n ],\n sticks: [\n { buttonIndex: 10, axes: [0, 1], x: 1724, y: 1094, range: 85 },\n { buttonIndex: 11, axes: [2, 3], x: 2370, y: 1093, range: 85 },\n ],\n triggers: [6, 7],\n },\n switch: {\n viewBox: '1050 450 2050 1350',\n imagePaths: {\n Black: 'switch/Controller Images/Pro Controller/Solid/Pro Controller Solid Black SVG.svg',\n White: 'switch/Controller Images/Pro Controller/Solid/Pro Controller Solid White SVG.svg',\n },\n buttons: [\n { index: 0, tag: 'circle', attributes: { cx: 2501, cy: 956, r: 70 } },\n { index: 1, tag: 'circle', attributes: { cx: 2637, cy: 841, r: 70 } },\n { index: 2, tag: 'circle', attributes: { cx: 2371, cy: 841, r: 70 } },\n { index: 3, tag: 'circle', attributes: { cx: 2501, cy: 725, r: 70 } },\n { index: 4, tag: 'path', attributes: { d: 'M1404.59,610.8c43.07-43.91,147.53-67.61,260.35-80.32l5.36-.59.62-.07c39.26-4.29,79.4-7.26,118.24-9.31C1759,511,1719,487.24,1719,487.24l-20-3.16c-210.46-1.59-285.89,86-285.89,86l-28.81,52.62A132.91,132.91,0,0,0,1404.59,610.8Z' } },\n { index: 5, tag: 'path', attributes: { d: 'M2424.51,529.82l.63.07,5.36.59c112.82,12.71,217.28,36.41,260.35,80.32a135.13,135.13,0,0,0,22.22,12.74l-29.3-53.49s-75.43-87.56-285.89-86l-20,3.16s-40.23,23.87-70.39,33.34C2345.93,522.63,2385.65,525.57,2424.51,529.82Z' } },\n { index: 8, tag: 'circle', attributes: { cx: 1837, cy: 711, r: 50 } },\n { index: 9, tag: 'circle', attributes: { cx: 2260, cy: 711, r: 50 } },\n { index: 10, tag: 'circle', attributes: { cx: 1578, cy: 841, r: 105 } },\n { index: 11, tag: 'circle', attributes: { cx: 2275, cy: 1072, r: 105 } },\n ...createDPadButtonVisuals([\n { tag: 'rect', attributes: { x: 1741, y: 950, width: 87, height: 83, rx: 17 } },\n { tag: 'rect', attributes: { x: 1741, y: 1120, width: 87, height: 83, rx: 17 } },\n { tag: 'rect', attributes: { x: 1658, y: 1033, width: 83, height: 87, rx: 17 } },\n { tag: 'rect', attributes: { x: 1828, y: 1033, width: 83, height: 87, rx: 17 } },\n ]),\n { index: 16, tag: 'circle', attributes: { cx: 2172, cy: 841, r: 55 } },\n { index: 17, tag: 'rect', attributes: { x: 1876, y: 791, width: 105, height: 105, rx: 18 } },\n ],\n sticks: [\n { buttonIndex: 10, axes: [0, 1], x: 1578, y: 841, range: 80 },\n { buttonIndex: 11, axes: [2, 3], x: 2275, y: 1072, range: 80 },\n ],\n triggers: [6, 7],\n },\n};\n\nfunction normalizeBasePath(basePath) {\n return basePath.endsWith('/') ? basePath : `${basePath}/`;\n}\n\nfunction normalizeColorScheme(colorScheme) {\n if (VALID_COLOR_SCHEMES.has(colorScheme)) {\n return colorScheme;\n }\n\n console.warn(`Invalid colorScheme: ${colorScheme}. Using 'White' instead.`);\n return 'White';\n}\n\nfunction encodeAssetPath(relativePath) {\n return relativePath\n .split('/')\n .map(pathPart => encodeURIComponent(pathPart))\n .join('/');\n}\n\nfunction cloneVisualConfig(config) {\n if (!config) {\n return null;\n }\n\n return {\n viewBox: config.viewBox,\n imagePaths: { ...config.imagePaths },\n buttons: config.buttons.map(button => ({\n ...button,\n attributes: { ...button.attributes },\n })),\n sticks: config.sticks.map(stick => ({\n ...stick,\n axes: [...stick.axes],\n })),\n triggers: [...config.triggers],\n };\n}\n\n/**\n * Get a copy of the visual definition for a controller type.\n * @param {string} controllerType - Controller type reported by GamepadHelper\n * @returns {Object|null} Controller visual definition, or null when unavailable\n */\nfunction getControllerVisualConfig(controllerType) {\n return cloneVisualConfig(CONTROLLER_VISUAL_CONFIGS[controllerType]);\n}\n\n/**\n * Get the image path for a full controller visual.\n * @param {string} controllerType - Controller type reported by GamepadHelper\n * @param {string} [basePath='/assets/img/gamepads/'] - Base path containing controller assets\n * @param {string} [colorScheme='White'] - Image color scheme ('Black' or 'White')\n * @returns {string|null} Encoded controller image path, or null when unavailable\n */\nfunction getControllerImagePath(\n controllerType,\n basePath = DEFAULT_ASSET_BASE_PATH,\n colorScheme = 'White',\n) {\n const config = CONTROLLER_VISUAL_CONFIGS[controllerType];\n if (!config) {\n return null;\n }\n\n const resolvedColorScheme = normalizeColorScheme(colorScheme);\n return normalizeBasePath(basePath) + encodeAssetPath(config.imagePaths[resolvedColorScheme]);\n}\n\nfunction clamp(value, minimum, maximum) {\n return Math.max(minimum, Math.min(maximum, Number(value) || 0));\n}\n\n/**\n * Render and update a controller visual in a caller-provided DOM container.\n */\nclass GamepadVisualizer {\n /**\n * @param {GamepadHelper} helper - GamepadHelper instance used for mappings and paths\n * @param {Element} container - DOM element that will contain the visual\n * @param {Object} [options] - Renderer options\n * @param {string} [options.assetBasePath='/assets/img/gamepads/'] - Base asset path\n * @param {string} [options.colorScheme='White'] - Controller and button image color\n * @param {string} [options.unavailableText] - Fallback text for unsupported visuals\n */\n constructor(helper, container, options = {}) {\n if (!container || typeof container.replaceChildren !== 'function') {\n throw new TypeError('GamepadVisualizer requires a DOM container element');\n }\n\n this.helper = helper;\n this.container = container;\n this.assetBasePath = normalizeBasePath(options.assetBasePath || DEFAULT_ASSET_BASE_PATH);\n this.colorScheme = normalizeColorScheme(options.colorScheme || 'White');\n this.unavailableText = options.unavailableText || 'A visual is not available for this controller.';\n this.buttonElements = new Map();\n this.stickElements = [];\n this.triggerElements = new Map();\n this.gamepad = null;\n this.gamepadId = null;\n this.controllerType = null;\n }\n\n createSvgElement(tag, attributes = {}) {\n const element = this.container.ownerDocument.createElementNS(SVG_NAMESPACE, tag);\n Object.entries(attributes).forEach(([name, value]) => {\n element.setAttribute(name, value);\n });\n return element;\n }\n\n showUnavailable() {\n const message = this.container.ownerDocument.createElement('span');\n message.className = 'gamepad-visual-unavailable';\n message.textContent = this.unavailableText;\n this.container.replaceChildren(message);\n }\n\n createTriggerVisual(controllerType, buttonIndex) {\n const document = this.container.ownerDocument;\n const buttonName = this.helper.getButtonName(controllerType, buttonIndex);\n const trigger = document.createElement('div');\n trigger.className = 'gamepad-trigger-visual';\n trigger.setAttribute('role', 'progressbar');\n trigger.setAttribute('aria-label', `${buttonName} trigger pressure`);\n trigger.setAttribute('aria-valuemin', '0');\n trigger.setAttribute('aria-valuemax', '1');\n trigger.setAttribute('aria-valuenow', '0');\n\n const fill = document.createElement('span');\n fill.className = 'gamepad-trigger-fill';\n trigger.appendChild(fill);\n\n const image = document.createElement('img');\n image.className = 'gamepad-trigger-image';\n image.src = this.helper.getButtonImagePath(\n controllerType,\n buttonIndex,\n this.assetBasePath,\n this.colorScheme,\n );\n image.alt = buttonName;\n trigger.appendChild(image);\n\n const fallback = document.createElement('span');\n fallback.className = 'gamepad-trigger-name';\n fallback.textContent = buttonName;\n trigger.appendChild(fallback);\n\n image.addEventListener('error', () => {\n image.classList.add('gamepad-trigger-image-unavailable');\n fallback.classList.add('visible');\n }, { once: true });\n\n const value = document.createElement('span');\n value.className = 'gamepad-trigger-value';\n value.textContent = '0.00';\n trigger.appendChild(value);\n\n this.triggerElements.set(buttonIndex, { element: trigger, value });\n return trigger;\n }\n\n /**\n * Mount a visual for a gamepad and apply its current input state.\n * @param {Gamepad|null} gamepad - Gamepad to render\n * @returns {GamepadVisualizer} This visualizer\n */\n mount(gamepad) {\n this.buttonElements = new Map();\n this.stickElements = [];\n this.triggerElements = new Map();\n this.gamepad = gamepad || null;\n this.gamepadId = gamepad?.id || null;\n this.controllerType = gamepad ? this.helper.detectControllerType(gamepad.id) : null;\n this.container.replaceChildren();\n\n const config = getControllerVisualConfig(this.controllerType);\n if (!gamepad || !config) {\n this.showUnavailable();\n return this;\n }\n\n const gamepadInfo = this.helper.getGamepadInfo(gamepad.id);\n this.container.appendChild(this.createTriggerVisual(this.controllerType, config.triggers[0]));\n\n const visual = this.createSvgElement('svg', {\n class: 'gamepad-visual-svg',\n viewBox: config.viewBox,\n role: 'img',\n 'aria-label': `${gamepadInfo.name} input visual`,\n });\n const title = this.createSvgElement('title');\n title.textContent = `${gamepadInfo.name} input visual`;\n visual.appendChild(title);\n\n const controllerImage = this.createSvgElement('image', {\n href: getControllerImagePath(this.controllerType, this.assetBasePath, this.colorScheme),\n width: 4096,\n height: 2160,\n preserveAspectRatio: 'xMidYMid meet',\n });\n controllerImage.addEventListener('error', () => this.showUnavailable(), { once: true });\n visual.appendChild(controllerImage);\n\n config.buttons.forEach(button => {\n const control = this.createSvgElement(button.tag, button.attributes);\n control.classList.add('gamepad-visual-control');\n control.dataset.buttonIndex = button.index;\n visual.appendChild(control);\n this.buttonElements.set(button.index, control);\n });\n\n config.sticks.forEach(stick => {\n const indicator = this.createSvgElement('circle', {\n class: 'gamepad-stick-indicator',\n cx: stick.x,\n cy: stick.y,\n r: 28,\n });\n visual.appendChild(indicator);\n this.stickElements.push({\n ...stick,\n buttonElement: this.buttonElements.get(stick.buttonIndex),\n indicator,\n });\n });\n\n this.container.appendChild(visual);\n this.container.appendChild(this.createTriggerVisual(this.controllerType, config.triggers[1]));\n return this.update(gamepad);\n }\n\n /**\n * Update the mounted visual with the latest Gamepad API state.\n * @param {Gamepad} [gamepad] - Latest gamepad state; defaults to the mounted gamepad\n * @returns {GamepadVisualizer} This visualizer\n */\n update(gamepad = this.gamepad) {\n if (!gamepad) {\n return this.mount(null);\n }\n\n const controllerType = this.helper.detectControllerType(gamepad.id);\n if (gamepad.id !== this.gamepadId || controllerType !== this.controllerType) {\n return this.mount(gamepad);\n }\n\n this.gamepad = gamepad;\n gamepad.buttons.forEach((button, index) => {\n const control = this.buttonElements.get(index);\n if (!control) {\n return;\n }\n\n const value = clamp(button.value, 0, 1);\n const isActive = Boolean(button.pressed) || value > 0.1;\n const opacity = Math.max(0.35, value * 0.9);\n control.classList.toggle('active', isActive);\n control.style.fillOpacity = isActive ? opacity.toFixed(2) : '0';\n });\n\n this.triggerElements.forEach((trigger, buttonIndex) => {\n const button = gamepad.buttons[buttonIndex];\n const value = clamp(button?.value, 0, 1);\n const isActive = Boolean(button?.pressed) || value > 0.1;\n trigger.element.classList.toggle('active', isActive);\n trigger.element.style.setProperty('--gamepad-trigger-value', `${(value * 100).toFixed(0)}%`);\n trigger.element.setAttribute('aria-valuenow', value.toFixed(2));\n trigger.value.textContent = value.toFixed(2);\n });\n\n this.stickElements.forEach(stick => {\n const horizontalValue = clamp(gamepad.axes[stick.axes[0]], -1, 1);\n const verticalValue = clamp(gamepad.axes[stick.axes[1]], -1, 1);\n const transform = `translate(${(horizontalValue * stick.range).toFixed(1)} ${(verticalValue * stick.range).toFixed(1)})`;\n stick.buttonElement?.setAttribute('transform', transform);\n stick.indicator.setAttribute('transform', transform);\n });\n\n return this;\n }\n\n /**\n * Change image colors and remount the current gamepad.\n * @param {string} colorScheme - Image color scheme ('Black' or 'White')\n * @returns {GamepadVisualizer} This visualizer\n */\n setColorScheme(colorScheme) {\n this.colorScheme = normalizeColorScheme(colorScheme);\n return this.mount(this.gamepad);\n }\n\n /**\n * Remove the rendered visual and release references to the mounted gamepad.\n * @returns {GamepadVisualizer} This visualizer\n */\n destroy() {\n this.container.replaceChildren();\n this.buttonElements.clear();\n this.stickElements = [];\n this.triggerElements.clear();\n this.gamepad = null;\n this.gamepadId = null;\n this.controllerType = null;\n return this;\n }\n}\n\nmodule.exports = {\n GamepadVisualizer,\n getControllerImagePath,\n getControllerVisualConfig,\n};\n","/**\n * Gamepad Helper Module\n * This module provides a set of utilities for working with gamepads in web applications.\n */\n\nconst {\n GamepadVisualizer,\n getControllerImagePath,\n getControllerVisualConfig,\n} = require('./gamepad-visualizer');\n\nconst FIREFOX_SWITCH_GAMEPAD_FIXED_VERSION = 155;\nconst FIREFOX_SWITCH_GAMEPAD_ISSUE_URL = 'https://bugzilla.mozilla.org/show_bug.cgi?id=1704419';\n\n/**\n * Controller identity metadata used by browser ID lookups.\n * @typedef {Object} GamepadIdentityMapping\n * @property {string} name - Human-readable controller name\n * @property {string[]} gamepad_api_ids - Known complete Gamepad API IDs\n * @property {string[]} [vendor_product_ids] - Additional normalized `vendor:product` IDs\n * @property {string} type - Controller type\n */\nclass GamepadHelper {\n constructor() {\n /**\n * Controller Types\n * @type {Object}\n * @property {string} XBOX - Xbox family of controllers\n * @property {string} PLAYSTATION - PlayStation family of controllers\n * @property {string} SWITCH - Nintendo Switch controllers\n * @property {string} STANDARD - Generic or standard controllers\n */\n this.CONTROLLER_TYPES = {\n XBOX: 'xbox',\n PLAYSTATION: 'playstation',\n SWITCH: 'switch',\n STANDARD: 'standard',\n };\n\n /**\n * Exact Gamepad Mappings\n * This object maps specific gamepad API IDs to controller types and names.\n * @type {Object.}\n */\n this.exactGamepadMappings = {\n 0: {\n name: \"Generic Gamepad\",\n gamepad_api_ids: [\n \"USB Gamepad (STANDARD GAMEPAD Vendor: 0079 Product: 0011)\",\n \"Logitech Cordless RumblePad 2 (STANDARD GAMEPAD Vendor: 046d Product: c219)\",\n \"Unknown Gamepad (Vendor: 2563 Product: 0575)\",\n \"PC/PS3/Android (Vendor: 2563 Product: 0575)\",\n \"Core (Plus) Wired Controller (Vendor: 20d6 Product: a711)\",\n \"Wireless Controller Extended Gamepad\",\n ],\n vendor_product_ids: [\"1209:0001\"],\n type: this.CONTROLLER_TYPES.STANDARD,\n },\n 1: {\n name: \"Sony PlayStation 3\",\n gamepad_api_ids: [\n \"54c-268-PLAYSTATION(R)3 Controller\",\n \"PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vendor: 054c Product: 0268)\",\n \"PLAYSTATION(R)3 Controller (Vendor: 054c Product: 0268)\",\n \"PS3 GamePad (Vendor: 054c Product: 0268)\",\n \"PS3/PC Wired GamePad (Vendor: 2563 Product: 0523)\",\n ],\n type: this.CONTROLLER_TYPES.PLAYSTATION\n },\n 2: {\n name: \"Sony DualShock (PS4)\",\n gamepad_api_ids: [\n \"054c-05c4-Wireless Controller\",\n \"Wireless controller (STANDARD GAMEPAD Vendor: 054c Product: 05c4)\",\n \"054c-09cc-Unknown Gamepad\",\n \"Unknown Gamepad (STANDARD GAMEPAD Vendor: 054c Product: 09cc)\",\n \"DS4 Wired Controller (Vendor: 7545 Product: 0104)\",\n ],\n type: this.CONTROLLER_TYPES.PLAYSTATION\n },\n 3: {\n name: \"Sony DualSense (PS5)\",\n gamepad_api_ids: [\n \"054c-0ce6-Wireless Controller\",\n \"Wireless Controller (Vendor: 054c Product: 0ce6)\",\n \"Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 0ce6)\",\n ],\n type: this.CONTROLLER_TYPES.PLAYSTATION\n },\n 4: {\n name: \"Xbox\",\n gamepad_api_ids: [\n \"xinput\",\n \"Xbox Wireless Controller Extended Gamepad\",\n \"Xbox Wireless Controller\",\n ],\n type: this.CONTROLLER_TYPES.XBOX\n },\n 5: {\n name: \"Xbox 360\",\n gamepad_api_ids: [\n \"Xbox 360 Controller (XInput STANDARD GAMEPAD)\",\n ],\n vendor_product_ids: [\"045e:028e\"],\n type: this.CONTROLLER_TYPES.XBOX\n },\n 6: {\n name: \"Xbox One/Series\",\n gamepad_api_ids: [\n \"HID-compliant game controller (STANDARD GAMEPAD Vendor: 045e Product: 0b13)\",\n ],\n vendor_product_ids: [\"045e:02ea\", \"045e:0b12\", \"045e:0b13\", \"045e:0b20\"],\n type: this.CONTROLLER_TYPES.XBOX\n },\n 7: {\n name: \"Nintendo Switch Pro Controller\",\n gamepad_api_ids: [\n \"Pro Controller (STANDARD GAMEPAD Vendor: 057e Product: 2009)\",\n ],\n type: this.CONTROLLER_TYPES.SWITCH\n },\n 8: {\n name: \"Stadia Controller\",\n gamepad_api_ids: [\n \"Stadia Controller rev. A (STANDARD GAMEPAD Vendor: 18d1 Product: 9400)\",\n ],\n type: this.CONTROLLER_TYPES.STANDARD,\n },\n 9: {\n name: \"SNES Gamepad\",\n gamepad_api_ids: [\n \"usb gamepad (Vendor: 0810 Product: e501)\",\n ],\n type: this.CONTROLLER_TYPES.STANDARD,\n }\n };\n\n /**\n * Exact ID Lookup\n * This object maps gamepad API IDs to their respective controller mappings.\n * @type {Object.}\n */\n this.exactIdLookup = {};\n\n /**\n * Vendor/product lookup used when browser-specific product names differ.\n * @type {Object.}\n */\n this.vendorProductLookup = {};\n Object.values(this.exactGamepadMappings).forEach(mapping => {\n mapping.gamepad_api_ids.forEach(id => {\n this.exactIdLookup[id] = mapping;\n\n const vendorProductId = this.extractVendorProductId(id);\n if (vendorProductId) {\n this.vendorProductLookup[vendorProductId] = mapping;\n }\n });\n\n mapping.vendor_product_ids?.forEach(vendorProductId => {\n this.vendorProductLookup[vendorProductId] = mapping;\n });\n });\n\n /**\n * Controller Mappings\n * Maps controller types to their respective button and axis mappings.\n * @type {Object., axisMap: Object.}>}\n */\n this.controllerMappings = {\n // Xbox controllers\n [this.CONTROLLER_TYPES.XBOX]: {\n buttonMap: {\n 0: 'A',\n 1: 'B',\n 2: 'X',\n 3: 'Y',\n 4: 'LB',\n 5: 'RB',\n 6: 'LT',\n 7: 'RT',\n 8: 'Back',\n 9: 'Start',\n 10: 'LS',\n 11: 'RS',\n 12: 'DUp',\n 13: 'DDown',\n 14: 'DLeft',\n 15: 'DRight',\n 16: 'Home',\n 17: 'Share',\n },\n axisMap: {\n 0: 'Left Stick X',\n 1: 'Left Stick Y',\n 2: 'Right Stick X',\n 3: 'Right Stick Y',\n }\n },\n\n // PlayStation controllers\n [this.CONTROLLER_TYPES.PLAYSTATION]: {\n buttonMap: {\n 0: '×',\n 1: '○',\n 2: '□',\n 3: '△',\n 4: 'L1',\n 5: 'R1',\n 6: 'L2',\n 7: 'R2',\n 8: 'Share',\n 9: 'Options',\n 10: 'L3',\n 11: 'R3',\n 12: 'DUp',\n 13: 'DDown',\n 14: 'DLeft',\n 15: 'DRight',\n 16: 'PS',\n 17: 'TouchPad',\n },\n axisMap: {\n 0: 'Left Stick X',\n 1: 'Left Stick Y',\n 2: 'Right Stick X',\n 3: 'Right Stick Y',\n }\n },\n\n // Nintendo Switch controllers\n [this.CONTROLLER_TYPES.SWITCH]: {\n buttonMap: {\n 0: 'B',\n 1: 'A',\n 2: 'Y',\n 3: 'X',\n 4: 'L',\n 5: 'R',\n 6: 'ZL',\n 7: 'ZR',\n 8: 'Minus',\n 9: 'Plus',\n 10: 'LS',\n 11: 'RS',\n 12: 'DUp',\n 13: 'DDown',\n 14: 'DLeft',\n 15: 'DRight',\n 16: 'Home',\n 17: 'Capture',\n },\n axisMap: {\n 0: 'Left Stick X',\n 1: 'Left Stick Y',\n 2: 'Right Stick X',\n 3: 'Right Stick Y',\n }\n },\n\n // Default mapping for unknown controllers\n [this.CONTROLLER_TYPES.STANDARD]: {\n buttonMap: {}, // Will use index numbers by default\n axisMap: {\n 0: 'Axis 0',\n 1: 'Axis 1',\n 2: 'Axis 2',\n 3: 'Axis 3',\n }\n }\n };\n }\n\n /**\n * Get the image path for a specific button on a controller\n * @param {string} controllerType - The type of controller (XBOX, PLAYSTATION, SWITCH)\n * @param {number} buttonIndex - The index of the button\n * @param {string} [basePath='/assets/img/gamepads/'] - The base path for the images\n * @param {string} [buttonColor='White'] - The color of the button ('Black' or 'White')\n * @param {string} [buttonType='Outline'] - The type of button ('Outline', 'Solid', 'Full Solid')\n * @returns {string|null} The path to the button image or null if not found\n */\n getButtonImagePath(\n controllerType,\n buttonIndex,\n basePath = '/assets/img/gamepads/',\n buttonColor = 'White',\n buttonType = 'Outline',\n ) {\n // input validation\n if (!['Black', 'White'].includes(buttonColor)) {\n console.warn(`Invalid buttonColor: ${buttonColor}. Using 'White' instead.`);\n buttonColor = 'White';\n }\n\n if (!['Outline', 'Solid', 'Full Solid'].includes(buttonType)) {\n console.warn(`Invalid buttonType: ${buttonType}. Using 'Outline' instead.`);\n buttonType = 'Outline';\n }\n\n // Controller-specific paths and button mappings\n const imageMappings = {\n [this.CONTROLLER_TYPES.XBOX]: {\n folder: `xbox/Buttons ${buttonType}/${buttonColor}/SVG/`,\n buttons: {\n 0: 'A.svg',\n 1: 'B.svg',\n 2: 'X.svg',\n 3: 'Y.svg',\n 4: 'Left Bumper.svg',\n 5: 'Right Bumper.svg',\n 6: 'Left Trigger.svg',\n 7: 'Right Trigger.svg',\n 8: 'View.svg',\n 9: 'Menu.svg',\n 10: 'Left Stick.svg',\n 11: 'Right Stick.svg',\n 12: 'D-Pad Up.svg',\n 13: 'D-Pad Down.svg',\n 14: 'D-Pad Left.svg',\n 15: 'D-Pad Right.svg',\n 16: 'Home.svg',\n 17: 'Share.svg',\n }\n },\n [this.CONTROLLER_TYPES.PLAYSTATION]: {\n folder: `playstation/Buttons ${buttonType}/${buttonColor}/SVG/`,\n buttons: {\n 0: 'Cross.svg',\n 1: 'Circle.svg',\n 2: 'Square.svg',\n 3: 'Triangle.svg',\n 4: 'L1.svg',\n 5: 'R1.svg',\n 6: 'L2.svg',\n 7: 'R2.svg',\n 8: 'Create.svg',\n 9: 'Options.svg',\n 10: 'Left Stick.svg',\n 11: 'Right Stick.svg',\n 12: 'D-Pad Up.svg',\n 13: 'D-Pad Down.svg',\n 14: 'D-Pad Left.svg',\n 15: 'D-Pad Right.svg',\n 16: 'Home.svg',\n 17: 'Touch Pad Press.svg',\n }\n },\n [this.CONTROLLER_TYPES.SWITCH]: {\n folder: `switch/Buttons ${buttonType}/${buttonColor}/SVG/`,\n buttons: {\n 0: 'B.svg',\n 1: 'A.svg',\n 2: 'Y.svg',\n 3: 'X.svg',\n 4: 'L.svg',\n 5: 'R.svg',\n 6: 'ZL.svg',\n 7: 'ZR.svg',\n 8: 'Minus.svg',\n 9: 'Plus.svg',\n 10: 'Left Stick.svg',\n 11: 'Right Stick.svg',\n 12: 'Pro D-Pad Up.svg',\n 13: 'Pro D-Pad Down.svg',\n 14: 'Pro D-Pad Left.svg',\n 15: 'Pro D-Pad Right.svg',\n 16: 'Home.svg',\n 17: 'Capture.svg',\n }\n }\n };\n\n // Check if we have an image mapping for this controller and button\n const imageMapping = imageMappings[controllerType];\n if (imageMapping?.buttons[buttonIndex]) {\n return basePath + imageMapping.folder + imageMapping.buttons[buttonIndex];\n }\n\n // Return null if no image is available\n return null;\n }\n\n /**\n * Get the image path for a full controller visual.\n * @param {string} controllerType - The type of controller (XBOX, PLAYSTATION, SWITCH)\n * @param {string} [basePath='/assets/img/gamepads/'] - The base path for the images\n * @param {string} [colorScheme='White'] - The image color ('Black' or 'White')\n * @returns {string|null} Encoded controller image path, or null when unavailable\n */\n getControllerImagePath(\n controllerType,\n basePath = '/assets/img/gamepads/',\n colorScheme = 'White',\n ) {\n return getControllerImagePath(controllerType, basePath, colorScheme);\n }\n\n /**\n * Get a copy of the visual definition for a controller type.\n * @param {string} controllerType - The type of controller (XBOX, PLAYSTATION, SWITCH)\n * @returns {Object|null} Controller visual definition, or null when unavailable\n */\n getControllerVisualConfig(controllerType) {\n return getControllerVisualConfig(controllerType);\n }\n\n /**\n * Create a reusable visualizer in a caller-provided DOM container.\n * @param {Element} container - DOM element that will contain the visual\n * @param {Object} [options] - Visualizer options\n * @returns {GamepadVisualizer} Controller visualizer\n */\n createVisualizer(container, options = {}) {\n return new GamepadVisualizer(this, container, options);\n }\n\n /**\n * Check if the Gamepad API is supported in the current browser\n * @returns {boolean} True if supported, false otherwise\n */\n isSupported() {\n return !!navigator.getGamepads;\n }\n\n /**\n * Extract a normalized vendor/product identifier from a browser Gamepad API ID.\n * @param {string|null} gamepadId - The ID of the gamepad as given by the Gamepad API\n * @returns {string|null} A lower-case, zero-padded `vendor:product` identifier\n */\n extractVendorProductId(gamepadId) {\n if (!gamepadId) {\n return null;\n }\n\n const chromiumMatch = /Vendor:\\s*([\\da-f]{1,4})\\s+Product:\\s*([\\da-f]{1,4})/i.exec(gamepadId);\n const firefoxMatch = /^([\\da-f]{1,4})-([\\da-f]{1,4})-/i.exec(gamepadId);\n const match = chromiumMatch || firefoxMatch;\n\n if (!match) {\n return null;\n }\n\n const vendorId = match[1].padStart(4, '0').toLowerCase();\n const productId = match[2].padStart(4, '0').toLowerCase();\n return `${vendorId}:${productId}`;\n }\n\n /**\n * Get gamepad information based on the gamepad ID\n * @param {string|null} gamepadId - The ID of the gamepad as given by the Gamepad API\n * @returns {{type: string, name: string}} Controller type and name information\n */\n getGamepadInfo(gamepadId) {\n if (!gamepadId) {\n return {\n type: this.CONTROLLER_TYPES.STANDARD,\n name: 'Generic Controller'\n };\n }\n\n // Check for exact match first\n const exactMatch = this.exactIdLookup[gamepadId];\n if (exactMatch) {\n return {\n type: exactMatch.type,\n name: exactMatch.name\n };\n }\n\n const vendorProductId = this.extractVendorProductId(gamepadId);\n const vendorProductMatch = vendorProductId ? this.vendorProductLookup[vendorProductId] : null;\n if (vendorProductMatch) {\n return {\n type: vendorProductMatch.type,\n name: vendorProductMatch.name\n };\n }\n\n return {\n type: this.CONTROLLER_TYPES.STANDARD,\n name: 'Generic Controller'\n };\n }\n\n /**\n * Detect the controller type based on the gamepad ID\n * @param {string|null} gamepadId - The ID of the gamepad as given by the Gamepad API\n * @returns {string} The type of controller (XBOX, PLAYSTATION, SWITCH, STANDARD)\n */\n detectControllerType(gamepadId) {\n return this.getGamepadInfo(gamepadId).type;\n }\n\n /**\n * Extract the major Firefox version from a user-agent string.\n * @param {string|null} userAgent - Browser user-agent string\n * @returns {number|null} Firefox major version, or null for other browsers\n */\n getFirefoxMajorVersion(userAgent) {\n if (typeof userAgent !== 'string') {\n return null;\n }\n\n const match = /\\bFirefox\\/(\\d+)/.exec(userAgent);\n return match ? Number.parseInt(match[1], 10) : null;\n }\n\n /**\n * Get known browser/controller compatibility issues for a gamepad.\n * @param {Gamepad|null} gamepad - Gamepad to inspect\n * @param {Object} [options] - Detection options\n * @param {string} [options.userAgent=navigator.userAgent] - Browser user-agent string\n * @returns {Object[]} Structured compatibility issues\n */\n getCompatibilityIssues(gamepad, options = {}) {\n if (!gamepad) {\n return [];\n }\n\n const userAgent = options.userAgent ?? globalThis.navigator?.userAgent ?? '';\n const firefoxVersion = this.getFirefoxMajorVersion(userAgent);\n const controllerInfo = this.getGamepadInfo(gamepad.id);\n if (\n firefoxVersion === null\n || firefoxVersion >= FIREFOX_SWITCH_GAMEPAD_FIXED_VERSION\n || controllerInfo.type !== this.CONTROLLER_TYPES.SWITCH\n ) {\n return [];\n }\n\n return [{\n code: 'firefox-switch-gamepad-mapping',\n severity: 'warning',\n browser: 'firefox',\n browserVersion: firefoxVersion,\n controllerType: controllerInfo.type,\n fixedVersion: FIREFOX_SWITCH_GAMEPAD_FIXED_VERSION,\n issueUrl: FIREFOX_SWITCH_GAMEPAD_ISSUE_URL,\n message: `Firefox versions before ${FIREFOX_SWITCH_GAMEPAD_FIXED_VERSION} can report incorrect buttons and axes for Nintendo Switch controllers.`,\n }];\n }\n\n /**\n * Get button name for given controller type and button index\n * @param {string} controllerType - The type of controller (XBOX, PLAYSTATION, SWITCH, STANDARD)\n * @param {number} buttonIndex - The index of the button\n * @returns {string} The name of the button (e.g., 'A', 'B', 'X', etc.)\n */\n getButtonName(controllerType, buttonIndex) {\n const mapping = this.controllerMappings[controllerType] || this.controllerMappings[this.CONTROLLER_TYPES.STANDARD];\n return mapping.buttonMap[buttonIndex] || `B${buttonIndex}`;\n }\n\n /**\n * Get axis name for given controller type and axis index\n * @param {string} controllerType - The type of controller (XBOX, PLAYSTATION, SWITCH, STANDARD)\n * @param {number} axisIndex - The index of the axis\n * @returns {string} The name of the axis (e.g., 'Left Stick X', 'Right Stick Y', etc.)\n */\n getAxisName(controllerType, axisIndex) {\n const mapping = this.controllerMappings[controllerType] || this.controllerMappings[this.CONTROLLER_TYPES.STANDARD];\n return mapping.axisMap?.[axisIndex] || `Axis ${axisIndex}`;\n }\n\n /**\n * Check if vibration is supported on the gamepad\n * @param {Gamepad|null} gamepad - The gamepad object from the Gamepad API\n * @returns {boolean} True if vibration is supported, false otherwise\n */\n isVibrationSupported(gamepad) {\n return !!gamepad?.vibrationActuator;\n }\n\n /**\n * Get vibration capabilities of the gamepad\n * @param {Gamepad|null} gamepad - The gamepad object from the Gamepad API\n * @returns {{supported: boolean, type: string|null}} Vibration capabilities information\n */\n getVibrationCapabilities(gamepad) {\n if (!gamepad?.vibrationActuator) {\n return { supported: false, type: null };\n }\n\n return {\n supported: true,\n type: gamepad.vibrationActuator.type || 'unknown'\n };\n }\n\n /**\n * Vibrate the gamepad\n * @param {Gamepad|null} gamepad - The gamepad object from the Gamepad API\n * @param {Object} [options={}] - Options for vibration\n * @param {number} [options.weakMagnitude=0.5] - Weak rumble magnitude (0-1)\n * @param {number} [options.strongMagnitude=0.5] - Strong rumble magnitude (0-1)\n * @param {number} [options.duration=1000] - Duration in milliseconds\n * @param {number} [options.startDelay=0] - Start delay in milliseconds\n * @returns {Promise} Promise that resolves when vibration completes\n */\n vibrate(gamepad, options = {}) {\n const { weakMagnitude = 0.5, strongMagnitude = 0.5, duration = 1000, startDelay = 0 } = options;\n\n if (!gamepad?.vibrationActuator) {\n return Promise.reject(new Error('Vibration not supported on this gamepad'));\n }\n\n const actuator = gamepad.vibrationActuator;\n const actuatorType = actuator.type || 'unknown';\n\n // Different handling based on actuator type\n switch (actuatorType) {\n case 'dual-rumble':\n return actuator.playEffect(\"dual-rumble\", {\n startDelay: startDelay,\n duration: duration,\n weakMagnitude: weakMagnitude,\n strongMagnitude: strongMagnitude\n });\n\n case 'vibration':\n // Some devices just have a simple vibration effect\n {\n const magnitude = Math.max(weakMagnitude, strongMagnitude);\n return actuator.playEffect(\"vibration\", {\n startDelay: startDelay,\n duration: duration,\n magnitude: magnitude\n });\n }\n\n default:\n // Try the default effect type for unknown actuators\n try {\n return actuator.playEffect(actuator.type, {\n startDelay: startDelay,\n duration: duration,\n weakMagnitude: weakMagnitude,\n strongMagnitude: strongMagnitude,\n magnitude: Math.max(weakMagnitude, strongMagnitude)\n });\n } catch (e) {\n console.warn(`Attempted to use unknown actuator type: ${actuatorType}\\nError: ${e}`);\n // Fallback to dual-rumble as it's the most common\n return actuator.playEffect(\"dual-rumble\", {\n startDelay: startDelay,\n duration: duration,\n weakMagnitude: weakMagnitude,\n strongMagnitude: strongMagnitude\n });\n }\n }\n }\n\n /**\n * Stop vibration on the gamepad\n * @param {Gamepad|null} gamepad - The gamepad object from the Gamepad API\n * @returns {Promise} Promise that resolves when vibration stops\n */\n stopVibration(gamepad) {\n if (gamepad?.vibrationActuator) {\n return this.vibrate(gamepad, { weakMagnitude: 0, strongMagnitude: 0 });\n }\n\n return Promise.reject(new Error('Vibration not supported on this browser or gamepad'));\n }\n\n /**\n * Get all connected gamepads\n * @returns {Gamepad[]} Array of connected gamepad objects\n */\n getConnectedGamepads() {\n if (!this.isSupported()) return [];\n\n const gamepads = navigator.getGamepads();\n return Array.from(gamepads).filter(gamepad => gamepad !== null);\n }\n}\n\n// Expose to the global scope\nif (globalThis.window) {\n globalThis.GamepadHelper = GamepadHelper;\n}\n\nGamepadHelper.GamepadVisualizer = GamepadVisualizer;\n\n// Export the GamepadHelper class\nmodule.exports = GamepadHelper;\n","// Controller Prompt Labels\n// Purpose: Converts persisted controller bindings into compact prompts for the connected hardware.\n// Scope: Delegates hardware identification and standard button naming to gamepad-helper while\n// keeping rover action aliases and compact presentation local to the controller input layer.\nimport GamepadHelper from '@lizardbyte/gamepad-helper/src/js/gamepad-helper.js';\n\nconst gamepadHelper = new GamepadHelper();\n\nconst ACTION_ALIASES = {\n driveForward: { bindingId: 'drive', direction: 'up' },\n driveBackward: { bindingId: 'drive', direction: 'down' },\n driveLeft: { bindingId: 'drive', direction: 'left' },\n driveRight: { bindingId: 'drive', direction: 'right' },\n cameraUp: { bindingId: 'cameraTilt', direction: 'up' },\n cameraDown: { bindingId: 'cameraTilt', direction: 'down' },\n auxMainForward: { bindingId: 'mainBrush', direction: 'forward' },\n auxMainReverse: { bindingId: 'mainBrush', direction: 'reverse' },\n auxSideForward: { bindingId: 'sideBrush', direction: 'forward' },\n auxSideReverse: { bindingId: 'sideBrush', direction: 'reverse' },\n auxVacuumFast: { bindingId: 'vacuum' },\n auxVacuumSlow: { bindingId: 'vacuum' },\n auxAllForward: { bindingId: 'allAux' },\n};\n\nconst DIRECTION_GLYPHS = {\n up: '↑',\n down: '↓',\n left: '←',\n right: '→',\n forward: '+',\n reverse: '−',\n};\n\nconst TANK_DIRECTION_GLYPHS = {\n driveForward: ['up', 'up'],\n driveBackward: ['down', 'down'],\n driveLeft: ['down', 'up'],\n driveRight: ['up', 'down'],\n};\n\nconst COMPACT_BUTTON_NAMES = {\n DUp: 'D↑',\n DDown: 'D↓',\n DLeft: 'D←',\n DRight: 'D→',\n TouchPad: 'Touchpad',\n};\n\nfunction controllerType(controller, promptStyle) {\n /* Manual prompt selection is a direct library controller type, not a model-name imitation.\n Automatic mode gives the complete browser ID to gamepad-helper unchanged; in particular,\n its vendor/product lookup directly recognizes Linux's 054c-0ce6 DualSense identifier. */\n if (promptStyle && promptStyle !== 'auto') return promptStyle;\n return gamepadHelper.detectControllerType(controller?.id ?? '');\n}\n\nexport function describeController(controller) {\n const info = gamepadHelper.getGamepadInfo(controller?.id ?? '');\n return {\n model: info.type,\n brand: info.type === gamepadHelper.CONTROLLER_TYPES.PLAYSTATION ? 'Sony' : null,\n description: info.name,\n };\n}\n\nfunction compactButtonName(source, type) {\n const name = gamepadHelper.getButtonName(type, source.index);\n return COMPACT_BUTTON_NAMES[name] ?? name;\n}\n\nfunction compactAxisName(source) {\n /* Standard browser mappings place sticks in adjacent pairs. Showing the stick instead of its\n raw component keeps prompts short; the action and optional arrow already convey the axis. */\n if (source.index === 0 || source.index === 1) return 'LS';\n if (source.index === 2 || source.index === 3) return 'RS';\n return `A${source.index}`;\n}\n\nfunction compactAxisPairName(source) {\n if (source.x === 0 && source.y === 1) return 'LS';\n if (source.x === 2 && source.y === 3) return 'RS';\n return `A${source.x}/${source.y}`;\n}\n\nfunction compactSourceName(source, type) {\n if (!source) return '—';\n if (source.kind === 'chord') {\n return (source.inputs ?? []).map((input) => compactSourceName(input, type)).join('+');\n }\n if (source.kind === 'axisPair') return compactAxisPairName(source);\n if (source.kind === 'button' || source.kind === 'buttonAxis') {\n return compactButtonName(source, type);\n }\n if (source.kind === 'axis' || source.kind === 'axisButton') {\n return compactAxisName(source);\n }\n return '—';\n}\n\nexport function bindingForControllerAction(profile, actionId) {\n const direct = profile?.bindings?.[actionId];\n if (direct?.sources?.length) return { binding: direct, direction: null };\n if (profile?.calibration?.driveMode === 'tank' && actionId === 'cameraUp') {\n return { binding: profile?.bindings?.tankCameraUp ?? null, direction: null };\n }\n if (profile?.calibration?.driveMode === 'tank' && actionId === 'cameraDown') {\n return { binding: profile?.bindings?.tankCameraDown ?? null, direction: null };\n }\n const alias = ACTION_ALIASES[actionId];\n if (!alias) return { binding: direct ?? null, direction: null };\n return {\n binding: profile?.bindings?.[alias.bindingId] ?? null,\n direction: alias.direction ?? null,\n };\n}\n\nexport function formatControllerBinding(profile, actionId, controller) {\n if (profile?.calibration?.driveMode === 'tank' && TANK_DIRECTION_GLYPHS[actionId]) {\n const leftSource = profile?.bindings?.tankLeft?.sources?.[0];\n const rightSource = profile?.bindings?.tankRight?.sources?.[0];\n if (!leftSource || !rightSource) return '—';\n const type = controllerType(controller, profile?.promptStyle);\n const [leftDirection, rightDirection] = TANK_DIRECTION_GLYPHS[actionId];\n /* A tank movement is inherently a two-input gesture. Showing both compact stick directions\n makes help labels accurate without spelling out controller model names or raw axis numbers. */\n return `${compactSourceName(leftSource, type)} ${DIRECTION_GLYPHS[leftDirection]} + ${compactSourceName(rightSource, type)} ${DIRECTION_GLYPHS[rightDirection]}`;\n }\n const { binding, direction } = bindingForControllerAction(profile, actionId);\n const source = binding?.sources?.[0];\n if (!source) return '—';\n const type = controllerType(controller, profile?.promptStyle);\n const label = compactSourceName(source, type);\n const directionLabel = direction ? DIRECTION_GLYPHS[direction] : null;\n return directionLabel ? `${label} ${directionLabel}` : label;\n}\n","// Adaptive Control Hint Label Hook\n// Purpose: Resolves a logical action to the keyboard or controller label appropriate for the\n// operator's most recently used input device.\n// Scope: Reads control/settings state only; it never captures input or dispatches rover commands.\nimport { useControlSelector } from '../../controls/index.js';\nimport { formatKeyLabel } from '../../controls/keymapUtils.js';\nimport { useControllerRuntime } from '../../controls/inputs/controllerRuntime.js';\nimport { formatControllerBinding } from '../../controls/inputs/controllerLabels.js';\nimport { resolveGamepadProfile } from '../../controls/inputs/gamepadBindings.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { GAMEPAD_PROFILE_DEFAULT, GAMEPAD_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\n\nexport function useControlHintLabel(actionId) {\n const keyValue = useControlSelector((control) => control.state.keymap?.[actionId]?.[0]);\n const runtime = useControllerRuntime();\n const { value: gamepadSettings } = useSettingsNamespace('gamepad', GAMEPAD_SETTINGS_DEFAULTS);\n\n if (runtime.inputMethod !== 'controller' || !runtime.controller) {\n return formatKeyLabel(keyValue);\n }\n\n /* Profiles remain keyed by reusable hardware signature, while runtime controller selection is\n instance-specific. This lets two identical connected pads share a mapping without losing the\n browser slot used to decide which one currently owns control. */\n const storedProfile =\n gamepadSettings?.profiles?.[runtime.controller.signature] ??\n gamepadSettings?.defaults?.profile ??\n GAMEPAD_PROFILE_DEFAULT;\n const profile = resolveGamepadProfile(storedProfile, GAMEPAD_PROFILE_DEFAULT);\n return formatControllerBinding(profile, actionId, runtime.controller);\n}\n","// Adaptive Control Hint\n// Purpose: Renders the binding for a logical action using the user's most recently used input type.\n// Scope: Keeps the render component separate from its hook so React fast refresh can safely\n// replace this module without treating a non-component export as component state.\nimport { useControlHintLabel } from './useControlHintLabel.js';\n\nexport default function ControlHint({ actionId }) {\n return <>{useControlHintLabel(actionId)};\n}\n","// Help Content Definitions\n// Purpose: Stores static/dynamic help text content displayed by help UI components. Scope: Central content source for onboarding instructions and control references.\nexport const HELP_LAYOUTS = ['desktop', 'mobile-portrait', 'mobile-landscape'];\n\n// Block-based help content; each layout defines a hero plus main/aside blocks.\n// Text supports inline key pills via segments: strings or { action: 'driveMacro' }.\nexport const HELP_CONTENT = {\n desktop: {\n main: [\n {\n type: 'list',\n title: 'Chat and nicknames',\n items: [\n 'Chat and nickname controls are in the Chat/Rovers tab.',\n { segments: ['Open the HUD chat composer with ', { action: 'chatFocus' }, '. Press ', { action: 'chatFocus'}, ' again to send.'] },\n ]\n },\n {\n type: 'list',\n title: 'Driving the rover',\n items: [\n { segments: ['Click \"Your rover is docked\", or press ', { action: 'driveMacro' }, ', to undock.'] },\n 'Drive with the movement keybindings.',\n 'Rover controls dim while another person has the turn.',\n ],\n },\n {\n type: 'list',\n title: 'Video HUD',\n items: [\n 'Top left shows the rover name and turns.',\n 'Top right shows battery and rover status.',\n 'Bottom left contains horn, headlight, and laser controls.',\n 'Bottom right contains camera tilt and chat.',\n 'Use the arrows to open and close pods and their expansions.',\n ],\n },\n {\n type: 'list',\n title: 'Page layout',\n items: [\n 'Room, Activities, and VIP are in the left sidebar.',\n 'Chat/Rovers, Help, and Settings are in the right sidebar.',\n ],\n },\n {\n type: 'list',\n title: 'Docking the rover',\n items: [\n { segments: ['Click \"Dock rover\", or press ', { action: 'dockMacro' }, '.'] },\n 'Click \"Rover is docking itself\" to resume driving.',\n ],\n },\n ],\n aside: [\n {\n type: 'keyboard',\n title: 'Keyboard controls',\n footnote: 'Per-browser; adjust bindings and speeds in Settings → Keybindings.',\n groups: [\n {\n id: 'movement',\n title: 'Movement',\n items: [\n { action: 'driveForward', label: 'Forward' },\n { action: 'driveBackward', label: 'Backward' },\n { action: 'driveLeft', label: 'Turn left' },\n { action: 'driveRight', label: 'Turn right' },\n { action: 'boostModifier', label: 'Boost speed' },\n { action: 'slowModifier', label: 'Precision speed' },\n ],\n },\n {\n id: 'macros',\n title: 'Rover modes & chat',\n items: [\n { action: 'driveMacro', label: 'Undock / resume driving' },\n { action: 'dockMacro', label: 'Dock rover' },\n { action: 'chatFocus', label: 'Chat focus' },\n ],\n },\n {\n id: 'camera',\n title: 'Camera',\n items: [\n { action: 'cameraUp', label: 'Tilt up' },\n { action: 'cameraDown', label: 'Tilt down' },\n { action: 'headlightToggle', label: 'Toggle headlight' },\n { action: 'laserToggle', label: 'Toggle laser' },\n ],\n },\n {\n id: 'motors',\n title: 'Rover Aux Motors',\n items: [\n { action: 'auxMainForward', label: 'Main brush forward' },\n { action: 'auxMainReverse', label: 'Main brush reverse' },\n { action: 'auxSideForward', label: 'Side brush forward' },\n { action: 'auxSideReverse', label: 'Side brush reverse' },\n { action: 'auxVacuumFast', label: 'Vacuum max' },\n { action: 'auxVacuumSlow', label: 'Vacuum low' },\n { action: 'auxAllForward', label: 'All motors forward' },\n ],\n },\n {\n id: 'audio',\n title: 'Audio / Song',\n items: [\n { action: 'songNoteUp', label: 'Song note up' },\n { action: 'songNoteDown', label: 'Song note down' },\n ],\n },\n {\n id: 'room-controls',\n title: 'Room Lights',\n items: [\n { action: 'homeAssistantOn', label: 'Next room light on' },\n { action: 'homeAssistantOff', label: 'Next room light off (reverse)' },\n ],\n },\n ],\n },\n {\n type: 'gamepad',\n title: 'Gamepad / joystick',\n items: [\n 'Gamepad controls are fully configurable to handle inconsistent browser mappings.',\n 'Use Settings → Controller to bind inputs, calibrate deadzones, and view diagnostics.',\n 'If inputs behave oddly, the diagnostics panel will show raw axis/button values.'\n ],\n },\n ],\n },\n 'mobile-portrait': {\n main: [\n {\n type: 'list',\n title: 'Chat and nicknames',\n items: [\n 'Chat and nickname controls are in the Chat tab.',\n 'Tap the chat box to send a message.',\n ]\n },\n {\n type: 'list',\n title: 'Driving the rover',\n items: [\n 'Tap \"Your rover is docked\" to undock.',\n 'Hold and drag on the drive pad.',\n 'Choose Precision, Normal, or Turbo above the drive pad.',\n 'Use the other column for rover controls.',\n 'Rover controls dim while another person has the turn.',\n ],\n },\n {\n type: 'list',\n title: 'Docking the rover',\n items: [\n 'Tap \"Dock and charge\" when finished.',\n ],\n },\n {\n type: 'list',\n title: 'More controls',\n items: [\n 'Chat, Activities, VIP, Room Lights, Help, and Settings are below the rover controls.',\n ],\n },\n ],\n },\n 'mobile-landscape': {\n main: [\n {\n type: 'list',\n title: 'Chat and nicknames',\n items: [\n 'Chat and nickname controls are in the Chat tab.',\n 'Tap the chat box to send a message.',\n ]\n },\n {\n type: 'list',\n title: 'Driving the rover',\n items: [\n 'Tap \"Your rover is docked\" to undock.',\n 'Hold and drag on the drive pad.',\n 'Choose Precision, Normal, or Turbo above the drive pad.',\n 'Use the other column for rover controls.',\n 'Rover controls dim while another person has the turn.',\n ],\n },\n {\n type: 'list',\n title: 'Docking the rover',\n items: [\n 'Tap \"Dock and charge\" when finished.',\n ],\n },\n {\n type: 'list',\n title: 'More controls',\n items: [\n 'Chat, Activities, VIP, Room Lights, Help, and Settings are below the rover controls.',\n ],\n },\n ],\n // aside: [\n // {\n // type: 'keyboard',\n // title: 'Keyboard (if attached)',\n // footnote: 'Per-browser; adjust in Settings → Controls.',\n // groups: [\n // {\n // id: 'movement',\n // title: 'Movement',\n // items: [\n // { action: 'driveForward', label: 'Forward' },\n // { action: 'driveBackward', label: 'Backward' },\n // { action: 'driveLeft', label: 'Turn left' },\n // { action: 'driveRight', label: 'Turn right' },\n // { action: 'boostModifier', label: 'Boost' },\n // { action: 'slowModifier', label: 'Precision' },\n // ],\n // },\n // {\n // id: 'camera',\n // title: 'Camera',\n // items: [\n // { action: 'cameraUp', label: 'Tilt up' },\n // { action: 'cameraDown', label: 'Tilt down' },\n // ],\n // },\n // {\n // id: 'macros',\n // title: 'Macros & chat',\n // items: [\n // { action: 'driveMacro', label: 'Drive macro' },\n // { action: 'dockMacro', label: 'Dock macro' },\n // { action: 'headlightToggle', label: 'Toggle headlight' },\n // { action: 'laserToggle', label: 'Toggle laser' },\n // { action: 'chatFocus', label: 'Chat focus' },\n // ],\n // },\n // ],\n // },\n // {\n // type: 'gamepad',\n // title: 'Gamepad / joystick',\n // items: [\n // 'Left stick drives; right stick/D-pad: camera when mapped.',\n // 'Buttons can trigger macros or aux motors; adjust deadzones if drifting.',\n // ],\n // },\n // ],\n },\n};\n\nexport function getHelpContent(layout) {\n return HELP_CONTENT[layout] || HELP_CONTENT.desktop;\n}\n","// Help Content View\n// Purpose: Defines the Help Content View module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo } from 'react';\nimport ControlHint from '../ControlHint/index.jsx';\nimport { useControllerRuntime } from '../../controls/inputs/controllerRuntime.js';\nimport { getHelpContent } from '../../help/content.js';\n\nfunction KeyPill({ actionId }) {\n return (\n \n \n \n );\n}\n\nfunction renderSegments(segments, keymap) {\n return segments.map((segment, idx) => {\n if (typeof segment === 'string') {\n return {segment};\n }\n if (segment?.action) {\n return ;\n }\n if (segment?.text) {\n return {segment.text};\n }\n return null;\n });\n}\n\nfunction renderLine(line, keymap) {\n if (typeof line === 'string') return line;\n if (Array.isArray(line?.segments)) return renderSegments(line.segments, keymap);\n if (line && typeof line === 'object') {\n // Fallback: render any stray object as text if possible\n if (typeof line.text === 'string') return line.text;\n if (Array.isArray(line)) return renderSegments(line, keymap);\n }\n return String(line ?? '');\n}\n\nfunction Hero({ hero, keymap }) {\n if (!hero) return null;\n return (\n
\n
\n
\n

{hero.title}

\n {hero.subtitle &&

{hero.subtitle}

}\n
\n {hero.chips && (\n
\n {hero.chips.map((chip) => (\n \n {chip}\n \n ))}\n
\n )}\n
\n {hero.bullets && (\n
    \n {hero.bullets.map((line, idx) => {\n const key = Array.isArray(line?.segments) ? `hero-${idx}` : `hero-${idx}`;\n return (\n
  • \n {renderLine(line, keymap)}\n
  • \n );\n })}\n
\n )}\n
\n );\n}\n\nfunction ListBlock({ block, keymap }) {\n return (\n
\n

{block.title}

\n
    \n {block.items.map((item, idx) => {\n const key = `item-${idx}`;\n return (\n
  • \n {renderLine(item, keymap)}\n
  • \n );\n })}\n
\n
\n );\n}\n\nfunction CalloutBlock({ block }) {\n const toneClass = block.tone === 'info' ? 'border-cyan-500/40' : 'border-slate-700';\n return (\n
\n

{block.title}

\n {block.body && (\n
    \n {block.body.map((line, idx) => (\n
  • \n {renderLine(line, {})}\n
  • \n ))}\n
\n )}\n
\n );\n}\n\nfunction KeyboardGroup({ group, keymap }) {\n return (\n
\n

{group.title}

\n
\n {group.items.map((item) => (\n
\n {/* A binding label may wrap in a slim sidebar, while the key remains\n a compact complete token instead of forcing horizontal overflow. */}\n {item.label}\n \n
\n ))}\n
\n
\n );\n}\n\nfunction KeyboardBlock({ block, keymap }) {\n const runtime = useControllerRuntime();\n if (!block) return null;\n const usingController = runtime.inputMethod === 'controller';\n return (\n
\n {/* Heading and footnote share a row when possible and wrap independently\n when the Help card is mounted in a narrow desktop column. */}\n
\n {usingController ? 'Controller controls' : block.title}\n \n {usingController\n ? 'Per-controller; adjust bindings in Settings → Controller.'\n : block.footnote}\n \n
\n {/* Two keyboard groups fit comfortably once the Help surface reaches 32rem.\n Using the real content threshold restores the established old-page layout\n without forcing two crushed columns inside the narrow new-drive sidebar. */}\n
\n {block.groups?.map((group) => (\n \n ))}\n
\n
\n );\n}\n\nfunction GamepadBlock({ block }) {\n if (!block) return null;\n return (\n
\n

{block.title}

\n
    \n {block.items?.map((line, idx) => (\n
  • \n {renderLine(line, {})}\n
  • \n ))}\n
\n
\n );\n}\n\nfunction BlockRenderer({ block, keymap }) {\n if (!block) return null;\n switch (block.type) {\n case 'list':\n return ;\n case 'callout':\n return ;\n case 'keyboard':\n return ;\n case 'gamepad':\n return ;\n default:\n return null;\n }\n}\n\nexport function HelpContentView({ layout, keymap }) {\n const content = useMemo(() => getHelpContent(layout), [layout]);\n const bindings = keymap || {};\n const mainBlocks = content.main || [];\n const asideBlocks = content.aside || [];\n\n return (\n
\n \n {/* The previous fixed 360px minimum was wider than the new-drive sidebar\n and forced the entire Help card to overflow. This intrinsic minimum\n uses one full-width column when 22.5rem cannot physically fit, while\n preserving the multi-column presentation in genuinely wide panels. */}\n
\n
\n {mainBlocks.map((block, idx) => (\n \n ))}\n
\n
\n {asideBlocks.map((block, idx) => (\n \n ))}\n
\n
\n
\n );\n}\n\nexport default HelpContentView;\n","// Help Overlay\n// Purpose: Defines the Help Overlay module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useControlSelector } from '../../controls/index.js';\nimport HelpContentView from '../HelpContentView/index.jsx';\n\nexport default function HelpOverlay({ visible, layout, onClose, showOnLoad, onToggleShowOnLoad }) {\n const keymap = useControlSelector((control) => control.state.keymap);\n\n if (!visible) return null;\n\n const handleCheckbox = (event) => {\n const keepShowing = !event.target.checked;\n onToggleShowOnLoad?.(keepShowing);\n };\n\n return (\n
\n
\n
\n Help & controls\n
\n \n \n Close\n \n
\n
\n
\n \n
\n
\n
\n );\n}\n","// Key Pill\n// Purpose: Defines the Key Pill module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport default function KeyPill({ label }) {\n if (!label) return null;\n return {label};\n}\n","import ControlHint from '../ControlHint/index.jsx';\nimport NicknameForm from '../NicknameForm/index.jsx';\nimport SocialButton from '../SocialButton/index.jsx';\nimport KeyPill from '../vip/VipAudioUploadCard/KeyPill.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { getSocialById } from '../../lib/socials.js';\n\nfunction ControlRow({ label, actionId }) {\n return (\n
\n {label}\n } />\n
\n );\n}\n\nfunction DesktopQuickstart() {\n return (\n
\n

1. Click \"Your rover is docked\" to undock.

\n
\n

2. Drive with these keybindings:

\n
\n \n \n \n \n \n \n
\n
\n

3. Use the video HUD for rover controls and information.

\n

4. Click \"Dock rover\" when finished.

\n
\n );\n}\n\nfunction MobileQuickstart() {\n return (\n
\n

1. Tap \"Your rover is docked\" to undock.

\n

2. Hold and drag on the drive pad.

\n

3. Choose Precision, Normal, or Turbo above the drive pad.

\n

4. Use the other column for rover controls.

\n

5. Tap \"Dock and charge\" when finished.

\n
\n );\n}\n\nfunction DiscordQuickstartCard() {\n const discord = useSessionSelector((state) => getSocialById(state, 'discord'));\n\n /*\n The section has explanatory text around the actual button, so SocialButton's\n own null return is not enough here. Keep the whole Discord prompt self-\n contained so layouts do not need a separate social feature check.\n */\n if (!discord?.url) return null;\n\n return (\n
\n

Join our Discord server!

\n

We have an active and welcoming community :3

\n \n
\n );\n}\n\nexport default function QuickstartOverlay({\n visible,\n layout,\n showOnLoad,\n onToggleShowOnLoad,\n onClose,\n}) {\n const isDesktop = layout === 'desktop';\n\n if (!visible) return null;\n\n const handleCheckbox = (event) => {\n const keepShowing = !event.target.checked;\n onToggleShowOnLoad?.(keepShowing);\n };\n\n return (\n
\n
\n
\n Welcome! To get started:\n {/* */}\n
\n
\n
\n {isDesktop ? : }\n
\n {/* {!isDesktop?
: null} */}\n
\n

Next...

\n
\n

Set your nickname

\n

Nicknames are assigned randomly by default, you can change yours here.

\n \n
\n \n
\n
\n
\n \n
\n {/* */}\n \n
\n
\n
\n
\n );\n}\n","export default \"aroma\\nbagel\\nbatter\\nbeans\\nbeer\\nbiscuit\\nbread\\nbroth\\nburger\\nburrito\\nbutter\\ncake\\ncandy\\ncaramel\\ncaviar\\ncheese\\nchili\\nchimichanga\\nchocolate\\ncider\\ncobbler\\ncocoa\\ncoffee\\ncookie\\ncream\\ncroissant\\ncrumble\\ncuisine\\ncurd\\ndessert\\ndish\\ndrink\\neggs\\nempanada\\nenchilada\\nentree\\nfilet\\nfish\\nflour\\nfoie gras\\nfood\\nglaze\\ngrill\\nhamburger\\nice\\njuice\\nketchup\\nkitchen\\nlard\\nliquor\\nmargarine\\nmarinade\\nmayo\\nmayonnaise\\nmeat\\nmilk\\nmousse\\nmuffin\\nmushroom\\nnoodle\\nnut\\noil\\nolive\\nomelette\\npan\\npasta\\npaste\\npastry\\npie\\npizza\\nplate\\npot\\npoutine\\npudding\\nqueso\\nraclette\\nrecipe\\nrice\\nsalad\\nsalsa\\nsandwich\\nsauce\\nseasoning\\nskillet\\nsoda\\nsopapillas\\nsoup\\nsoy\\nspice\\nsteak\\nstew\\nsyrup\\ntaco\\ntaquito\\ntartar\\ntaste\\ntea\\ntoast\\ntostada\\nvinegar\\nwaffle\\nwater\\nwheat\\nwine\\nwok\\nyeast\\nyogurt\\nshrimp\\nfling\"","// Hook: useDefaultNickname\n// Purpose: Computes and applies fallback nickname behavior for unauthenticated/new sessions. Scope: Wraps nickname initialization policy and side effects.\nimport { useEffect, useRef } from 'react';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { useSessionActions } from '../context/SessionContext.jsx';\nimport wordListText from '../assets/wordlist.txt?raw';\n\nfunction capitalize(word) {\n if (!word) return '';\n return word.charAt(0).toUpperCase() + word.slice(1);\n}\n\nfunction pickRandomWord() {\n const words = String(wordListText || '')\n .split(/\\r?\\n/)\n .map((word) => word.trim())\n .filter(Boolean);\n if (!words.length) return '';\n const selected = words[Math.floor(Math.random() * words.length)] || '';\n return selected.trim();\n}\n\nexport default function useDefaultNickname() {\n const { setNickname } = useSessionActions();\n const { value, status, save } = useSettingsNamespace('profile', { nickname: '' });\n const attemptedRef = useRef(false);\n\n useEffect(() => {\n if (status !== 'ready') return;\n if (attemptedRef.current) return;\n\n const existing = (value.nickname || '').trim();\n if (existing) return;\n\n attemptedRef.current = true;\n const generated = capitalize(pickRandomWord()).slice(0, 32);\n if (!generated) return;\n\n const applyNickname = async () => {\n try {\n await setNickname(generated);\n } catch (err) {\n // Ignore server errors; still persist locally to avoid re-rolling.\n } finally {\n save({ nickname: generated });\n }\n };\n\n applyNickname();\n }, [save, setNickname, status, value.nickname]);\n}\n","// Hook: useUserIdentitySync\n// Purpose: Keeps local identity state synchronized with server session/auth updates. Scope: Handles identity hydration, change propagation, and persistence touch points.\nimport { useCallback, useEffect } from 'react';\nimport { useSessionActions, useSessionSelector } from '../context/SessionContext.jsx';\nimport { useSocket } from '../context/SocketContext.jsx';\nimport { getBrowserFingerprintId } from '../lib/browserFingerprint.js';\nimport { useSettingsNamespace } from '../settings/index.js';\n\nexport default function useUserIdentitySync({ identitySurface = 'passive' } = {}) {\n const socket = useSocket();\n const connected = useSessionSelector((state) => state.connected);\n const serverCookieUserId = useSessionSelector((state) => state.session?.identity?.cookieUserId || '');\n const { identifySession } = useSessionActions();\n const { value: identity, status: identityStatus, save: saveIdentity } = useSettingsNamespace('identity', {\n cookieUserId: '',\n });\n const { value: profile, status: profileStatus } = useSettingsNamespace('profile', { nickname: '' });\n const { value: overseerPreference, status: overseerPreferenceStatus } = useSettingsNamespace(\n 'overseerPreference',\n { enabled: false },\n );\n const { value: audioAdjustments, status: audioAdjustmentsStatus } = useSettingsNamespace('audioAdjustments', {\n hornPercent: 0,\n ttsPercent: 0,\n forwardPercent: 0,\n });\n\n const ready =\n identityStatus === 'ready'\n && profileStatus === 'ready'\n && overseerPreferenceStatus === 'ready'\n && audioAdjustmentsStatus === 'ready';\n const cookieUserId = (identity?.cookieUserId || '').trim();\n const nickname = (profile?.nickname || '').trim();\n const overseerEnabled = Boolean(overseerPreference?.enabled);\n const normalizedIdentitySurface = identitySurface === 'driver' ? 'driver' : 'passive';\n\n const sendIdentify = useCallback(async () => {\n if (!ready || !connected || !socket?.id) return;\n try {\n /*\n Handshake auth establishes identity before connection handlers run.\n This event remains the live-update path for settings that change while\n the current transport stays connected, so existing callers and server\n behavior do not need a second update contract.\n */\n const resp = await identifySession({\n cookieUserId,\n fingerprintId: await getBrowserFingerprintId(),\n nickname,\n audioAdjustments,\n overseerEnabled,\n identitySurface: normalizedIdentitySurface,\n });\n const nextKey = (resp?.cookieUserId || '').trim();\n if (nextKey && nextKey !== cookieUserId) {\n saveIdentity((current) => ({ ...(current || {}), cookieUserId: nextKey }));\n }\n } catch {\n /*\n A failed live update must not replace Socket.IO's connection lifecycle\n with custom retry state. The next reconnect reads the latest persisted\n settings through handshake auth and re-establishes the complete identity.\n */\n }\n }, [\n audioAdjustments,\n connected,\n cookieUserId,\n identifySession,\n normalizedIdentitySurface,\n nickname,\n overseerEnabled,\n ready,\n saveIdentity,\n socket,\n ]);\n\n useEffect(() => {\n /*\n This runs once when the route's settings become ready and again only when\n an identity value changes. Reconnects receive the same data from the auth\n callback, so there is intentionally no timer, visibility retry, or online\n retry here.\n */\n if (!ready || !connected || !socket?.id) return;\n sendIdentify();\n }, [ready, connected, socket?.id, cookieUserId, nickname, audioAdjustments, overseerEnabled, normalizedIdentitySurface, sendIdentify]);\n\n useEffect(() => {\n /*\n A first-time browser has no portable key to send in its handshake, so the\n canonical identity service creates one. Session sync is authoritative for\n that generated value; persisting it here makes every later handshake carry\n the same user key without depending on a session:identify acknowledgement.\n */\n const nextKey = String(serverCookieUserId || '').trim();\n if (!nextKey || nextKey === cookieUserId) return;\n saveIdentity((current) => ({ ...(current || {}), cookieUserId: nextKey }));\n }, [cookieUserId, saveIdentity, serverCookieUserId]);\n}\n","// Hook: useIncomingInterInstanceTransfer\n// Purpose: Applies settings transferred through an inter-instance URL before the normal identity heartbeat runs.\n// Scope: Owns only inbound URL parameters; requesting the target rover is handled after socket/session state is ready.\nimport { useEffect, useRef } from 'react';\nimport { useSettings } from '../settings/index.js';\nimport { base64UrlDecodeJson } from '../lib/interInstanceTransfer.js';\nimport { useSessionActions, useSessionSelector } from '../context/SessionContext.jsx';\n\nexport default function useIncomingInterInstanceTransfer() {\n const settings = useSettings();\n const { requestControl } = useSessionActions();\n const connected = useSessionSelector((state) => state.connected);\n const appliedRef = useRef(false);\n const requestedRef = useRef(false);\n const roverIdRef = useRef('');\n\n useEffect(() => {\n if (appliedRef.current || typeof window === 'undefined') return;\n const url = new URL(window.location.href);\n const transfer = url.searchParams.get('settingsTransfer');\n roverIdRef.current = String(url.searchParams.get('rover') || '').trim();\n if (!transfer) {\n appliedRef.current = true;\n return;\n }\n try {\n /*\n The source page only adds settingsTransfer when its saved Page setting\n allows it. A present transfer param is therefore an explicit instruction\n to replace the local settings cookie without asking again here.\n */\n const nextSettings = base64UrlDecodeJson(transfer);\n settings.saveAll(nextSettings && typeof nextSettings === 'object' ? nextSettings : {});\n url.searchParams.delete('settingsTransfer');\n window.history.replaceState({}, '', `${url.pathname}${url.search}${url.hash}`);\n } catch (error) {\n // A bad transfer payload should not block the page or the rover request.\n console.warn('Failed to apply transferred inter-instance settings', error);\n } finally {\n appliedRef.current = true;\n }\n }, [settings]);\n\n useEffect(() => {\n if (!appliedRef.current || requestedRef.current || !connected) return;\n const roverId = roverIdRef.current;\n if (!roverId) return;\n requestedRef.current = true;\n /*\n The identity heartbeat reacts to the settings overwrite through the shared\n settings context. Waiting for a connected socket here keeps this hook from\n racing the initial Socket.IO connection while still using the existing\n request-control path.\n */\n requestControl(roverId).catch((error) => {\n requestedRef.current = false;\n console.warn('Failed to request transferred inter-instance rover', error);\n });\n }, [connected, requestControl]);\n}\n","// Reward Run Overlay\n// Purpose: Defines the Reward Run Overlay module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useRef, useState } from 'react';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { AUDIO_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\n\nconst SHOW_MS = 3200;\n\nfunction normalizePayload(payload = {}) {\n const rewardName = typeof payload.rewardName === 'string' && payload.rewardName.trim()\n ? payload.rewardName.trim()\n : 'Unknown Event';\n const goal = Number.isFinite(Number(payload.goal)) ? Math.max(1, Math.floor(Number(payload.goal))) : 0;\n const count = Number.isFinite(Number(payload.count)) ? Math.max(0, Math.floor(Number(payload.count))) : goal;\n return {\n rewardName,\n goal,\n count,\n ts: Date.now(),\n };\n}\n\nexport default function RewardRunOverlay() {\n const socket = useSocket();\n const { value: audioSettings } = useSettingsNamespace('audio', AUDIO_SETTINGS_DEFAULTS);\n const masterVolume = Number.isFinite(audioSettings?.masterVolume)\n ? audioSettings.masterVolume\n : AUDIO_SETTINGS_DEFAULTS.masterVolume;\n const alertVolume = Number.isFinite(audioSettings?.alertVolume)\n ? audioSettings.alertVolume\n : AUDIO_SETTINGS_DEFAULTS.alertVolume;\n const effectiveAlertVolume = Math.max(0, Math.min(1, masterVolume * alertVolume));\n const [overlay, setOverlay] = useState(null);\n const audioRef = useRef(null);\n\n useEffect(() => {\n audioRef.current = new Audio('/tada.mp3');\n audioRef.current.volume = effectiveAlertVolume;\n audioRef.current.load();\n }, [effectiveAlertVolume]);\n\n useEffect(() => {\n let timer = null;\n function playSound() {\n const audio = audioRef.current;\n if (!audio) return;\n audio.volume = effectiveAlertVolume;\n audio.currentTime = 0;\n audio.play().catch(() => {});\n }\n function onRewardRun(payload = {}) {\n const next = normalizePayload(payload);\n setOverlay(next);\n playSound();\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n setOverlay(null);\n }, SHOW_MS);\n }\n function onLocalRewardRun(event) {\n onRewardRun(event?.detail || {});\n }\n socket.on('buttonBox:rewardRun', onRewardRun);\n window.addEventListener('buttonBox:rewardRunLocalTest', onLocalRewardRun);\n return () => {\n if (timer) clearTimeout(timer);\n socket.off('buttonBox:rewardRun', onRewardRun);\n window.removeEventListener('buttonBox:rewardRunLocalTest', onLocalRewardRun);\n };\n }, [effectiveAlertVolume, socket]);\n\n if (!overlay) return null;\n\n return (\n
\n
\n
\n
\n \"\"\n
\n

\n Running event: {overlay.rewardName}!\n

\n

\n {overlay.count}/{overlay.goal}\n

\n
\n \"\"\n
\n
\n
\n
\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { useSocket } from '../../context/SocketContext.jsx';\n\nconst CONNECTED_FADE_DELAY_MS = 4000;\n\nfunction cls(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nexport default function SocketConnectionPill() {\n const socket = useSocket();\n const [connected, setConnected] = useState(Boolean(socket?.connected));\n const [lastReason, setLastReason] = useState('');\n const [visible, setVisible] = useState(true);\n const [faded, setFaded] = useState(false);\n const fadeTimerRef = useRef(null);\n\n useEffect(() => {\n const clearFadeTimer = () => {\n if (fadeTimerRef.current) {\n clearTimeout(fadeTimerRef.current);\n fadeTimerRef.current = null;\n }\n };\n\n const show = () => {\n clearFadeTimer();\n setVisible(true);\n setFaded(false);\n };\n\n const scheduleFade = () => {\n clearFadeTimer();\n fadeTimerRef.current = setTimeout(() => {\n setFaded(true);\n }, CONNECTED_FADE_DELAY_MS);\n };\n\n const onConnect = () => {\n setConnected(true);\n setLastReason('');\n show();\n scheduleFade();\n };\n\n const onDisconnect = (reason) => {\n setConnected(false);\n setLastReason(typeof reason === 'string' ? reason : 'disconnected');\n show();\n };\n\n const onConnectError = (err) => {\n setConnected(false);\n setLastReason(err?.message || 'connect error');\n show();\n };\n\n const onReconnectAttempt = () => {\n setConnected(false);\n show();\n };\n\n socket.on('connect', onConnect);\n socket.on('disconnect', onDisconnect);\n socket.on('connect_error', onConnectError);\n socket.io.on('reconnect_attempt', onReconnectAttempt);\n\n if (socket.connected) {\n scheduleFade();\n }\n\n return () => {\n clearFadeTimer();\n socket.off('connect', onConnect);\n socket.off('disconnect', onDisconnect);\n socket.off('connect_error', onConnectError);\n socket.io.off('reconnect_attempt', onReconnectAttempt);\n };\n }, [socket]);\n\n const offline = typeof navigator !== 'undefined' ? navigator.onLine === false : false;\n const statusLabel = connected\n ? 'Connected to socket.io'\n : offline\n ? 'Offline'\n : 'Reconnecting...';\n const detail = connected ? '' : lastReason;\n\n const toneClass = connected\n ? 'bg-emerald-700 text-emerald-100'\n : offline\n ? 'bg-red-800 text-red-100'\n : 'bg-amber-800 text-amber-100';\n\n return (\n \n
\n {statusLabel}\n {detail ? ({detail}) : null}\n
\n
\n );\n}\n","// Duplicate Identity Overlay\n// Purpose: Blocks an older non-verified driver tab after the server detects the same identity in another driver tab.\n// Scope: Presents a driver-page-only message while leaving enforcement owned by the server.\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\n\nexport default function DuplicateIdentityOverlay() {\n const duplicateIdentityBlock = useSessionSelector((state) => state.duplicateIdentityBlock);\n\n if (!duplicateIdentityBlock) {\n return null;\n }\n\n const message =\n typeof duplicateIdentityBlock?.message === 'string' && duplicateIdentityBlock.message.trim()\n ? duplicateIdentityBlock.message.trim()\n : 'This driver session is already active in another tab.';\n\n return (\n
\n
\n
\n

Another driver tab is already open

\n

{message}

\n
\n {/*
\n

\n Continue from the newest tab or close this one.\n

\n

\n Verified users are allowed to keep multiple tabs open.\n

\n
*/}\n
\n
\n );\n}\n","// Page Theme Catalog\n// Purpose: Defines persisted theme identities and their presentation order.\n// Scope: Shared by the settings picker and every route that resolves a saved page theme.\n\n// Use the quiet, artwork-free theme whenever a browser has not saved a preference yet. Keeping\n// this fallback as a catalog key means every page and the settings preview resolve the same default.\nexport const DEFAULT_PAGE_THEME_KEY = 'black';\n\nexport const PAGE_THEME_OPTIONS = [\n // Stable keys are stored in the browser settings cookie. Keeping presentation labels separate\n // lets the UI wording improve later without invalidating anybody's saved preference.\n { key: 'progress-pride', label: 'Progress pride', className: 'page-theme-progress-pride' },\n // Keep the high-contrast caution-stripe option near the start of the catalog so it remains easy\n // to reach while browsing sequentially as well as directly through the dropdown.\n { key: 'hazard-stripes', label: 'Hazard stripes', className: 'page-theme-hazard-stripes' },\n { key: 'pride-mix', label: 'Pride mix', className: 'page-theme-pride-mix' },\n { key: 'rainbow', label: 'Rainbow', className: 'page-theme-rainbow' },\n { key: 'transgender', label: 'Transgender', className: 'page-theme-transgender' },\n { key: 'bisexual', label: 'Bisexual', className: 'page-theme-bisexual' },\n { key: 'lesbian', label: 'Lesbian', className: 'page-theme-lesbian' },\n { key: 'nonbinary', label: 'Nonbinary', className: 'page-theme-nonbinary' },\n { key: 'pansexual', label: 'Pansexual', className: 'page-theme-pansexual' },\n { key: 'asexual', label: 'Asexual', className: 'page-theme-asexual' },\n { key: 'aurora', label: 'Aurora', className: 'page-theme-aurora' },\n { key: 'synthwave-grid', label: 'Synthwave grid', className: 'page-theme-synthwave-grid' },\n { key: 'neon-checker', label: 'Neon checker', className: 'page-theme-neon-checker' },\n { key: 'ocean-current', label: 'Ocean current', className: 'page-theme-ocean-current' },\n { key: 'ember-lattice', label: 'Ember lattice', className: 'page-theme-ember-lattice' },\n { key: 'starfield', label: 'Starfield', className: 'page-theme-starfield' },\n { key: 'vaporwave-sunset', label: 'Vaporwave sunset', className: 'page-theme-vaporwave-sunset' },\n { key: 'electric-circuit', label: 'Electric circuit', className: 'page-theme-electric-circuit' },\n { key: 'lava-flow', label: 'Lava flow', className: 'page-theme-lava-flow' },\n { key: 'deep-space-nebula', label: 'Deep-space nebula', className: 'page-theme-deep-space-nebula' },\n { key: 'holographic-waves', label: 'Holographic waves', className: 'page-theme-holographic-waves' },\n { key: 'mint-mosaic', label: 'Mint mosaic', className: 'page-theme-mint-mosaic' },\n { key: 'candy-swirl', label: 'Candy swirl', className: 'page-theme-candy-swirl' },\n { key: 'black', label: 'Black', className: 'page-theme-black' },\n];\n\nexport function normalizePageThemeKey(value) {\n // Cookie contents can outlive catalog changes or be edited by hand. Always resolve them to a\n // known entry so the page, preview, and dropdown cannot disagree about the active selection.\n return PAGE_THEME_OPTIONS.some((theme) => theme.key === value)\n ? value\n : DEFAULT_PAGE_THEME_KEY;\n}\n\nexport function getPageTheme(value) {\n const normalizedKey = normalizePageThemeKey(value);\n return PAGE_THEME_OPTIONS.find((theme) => theme.key === normalizedKey) || PAGE_THEME_OPTIONS[0];\n}\n\nexport function getPageThemeClass(value) {\n // The shared base class owns page-level behavior such as fixed positioning. The modifier only\n // supplies artwork, which also lets the settings demonstration reuse the exact same theme.\n return `page-theme ${getPageTheme(value).className}`;\n}\n","// Theme-Aware Layout Constants\n// Purpose: Keeps the narrow gap geometry used to reveal page themes consistent across layouts.\n// Scope: Layout-only values; selecting a theme never changes panel dimensions or input placement.\n\nexport const themeGapClass = 'gap-0.5';\nexport const themeStackClass = 'space-y-1';\n","// Active Page Theme Hook\n// Purpose: Resolves personal theme settings together with temporary server-owned theme overrides.\n// Scope: Keeps page shells unaware of individual modes while preserving the pure catalog helpers.\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport { getPageThemeClass } from './catalog.js';\n\nexport default function usePageThemeClass(backgroundTheme) {\n const greenMode = useSessionSelector((state) => Boolean(state.session?.greenMode));\n\n /*\n Green mode is a temporary server-wide theme, so it wins at resolution time\n without modifying the user's persisted theme selection. Every page consumes\n this hook and therefore receives future server theme overrides consistently.\n */\n if (greenMode) return 'page-theme page-theme-green-mode';\n return getPageThemeClass(backgroundTheme);\n}\n","// Responsive Layout Mode Hook\n// Purpose: Gives control-capable routes the same desktop, mobile-landscape,\n// and mobile-portrait breakpoint policy.\n// Scope: Classifies viewport geometry only; each route still owns its actual\n// component arrangement so PTZ and rover controls can remain purpose-built.\nimport { useEffect, useState } from 'react';\n\nfunction readLayoutMode() {\n if (typeof window === 'undefined') return 'desktop';\n if (window.innerWidth >= 1024) return 'desktop';\n return window.innerWidth > window.innerHeight ? 'mobile-landscape' : 'mobile-portrait';\n}\n\nexport default function useLayoutMode() {\n const [mode, setMode] = useState(readLayoutMode);\n\n useEffect(() => {\n function updateMode() {\n /*\n Orientation changes are exposed as viewport resizes on the browsers\n supported by this UI. Reading both dimensions here keeps the route\n responsive without maintaining a second orientation event lifecycle.\n */\n setMode(readLayoutMode());\n }\n\n updateMode();\n window.addEventListener('resize', updateMode);\n return () => window.removeEventListener('resize', updateMode);\n }, []);\n\n return mode;\n}\n","// Driver Layout Context\n// Purpose: Exposes the existing global Help-overlay action to deeply placed tab content.\n// Scope: Avoids threading a layout callback through otherwise concrete composition files.\nimport { createContext, useContext } from 'react';\n\nconst DriverLayoutContext = createContext(null);\n\nexport function DriverLayoutProvider({ layout, openHelp, children }) {\n /*\n Layout mode is classified once at the driver-route boundary. Concrete\n layouts and tabs read it here instead of each installing a resize listener\n or receiving chains of layout/configuration props.\n */\n return {children};\n}\n\n/*\n This hook intentionally lives beside its tiny route-local provider so the\n driver layout contract remains discoverable in one file. It is not a React\n component export, so the Fast Refresh rule needs this narrow exception.\n*/\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useOpenDriverHelp() {\n const context = useContext(DriverLayoutContext);\n if (!context) {\n throw new Error('useOpenDriverHelp must be used within DriverLayoutProvider.');\n }\n return context.openHelp;\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useDriverLayout() {\n const context = useContext(DriverLayoutContext);\n if (!context) {\n throw new Error('useDriverLayout must be used within DriverLayoutProvider.');\n }\n return context.layout;\n}\n","// WHEP Player Helper\n// Purpose: Implements browser playback utilities for WHEP/WebRTC media streams. Scope: Manages stream attach/detach, lifecycle cleanup, and error handling hooks.\n/* global Buffer */\n\nconst RTC_CONFIG = {\n iceServers: [\n { urls: 'stun:stun.l.google.com:19302' },\n { urls: 'turn:your.turn.server:3478', username: 'user', credential: 'pass' },\n ],\n bundlePolicy: 'max-bundle',\n rtcpMuxPolicy: 'require',\n};\n\nfunction encodeBase64(value) {\n if (typeof btoa === 'function') {\n return btoa(value);\n }\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(value).toString('base64');\n }\n throw new Error('No base64 encoder available');\n}\n\nfunction buildAuthHeader(token) {\n if (!token) return {};\n const credential = `${token}:${token}`;\n const encoded = encodeBase64(credential);\n return { Authorization: `Basic ${encoded}` };\n}\n\nexport class WhepPlayer {\n constructor({ url, token, video, onStatus, audioOnly = false, receiveAudio = true, startMuted = null }) {\n this.url = url;\n this.token = token;\n this.video = video;\n this.audioOnly = audioOnly;\n this.receiveAudio = receiveAudio;\n /*\n Browser autoplay usually requires normal video streams to start muted,\n while audio-only streams need to start audible. Keep that historical\n default, but allow a caller that is already behind a user gesture, such as\n the PTZ fullscreen controller, to request audible inline audio.\n */\n this.startMuted = startMuted === null ? !audioOnly : Boolean(startMuted);\n this.pc = null;\n this.abortController = null;\n this.onStatus = onStatus;\n }\n\n notify(status, detail) {\n if (typeof this.onStatus === 'function') {\n this.onStatus(status, detail);\n }\n }\n\n configureVideoElement() {\n if (!this.video) return;\n this.video.playsInline = true;\n this.video.autoplay = true;\n this.video.muted = this.startMuted;\n if (typeof this.video.disableRemotePlayback !== 'undefined') {\n this.video.disableRemotePlayback = true;\n }\n if ('latencyHint' in HTMLMediaElement.prototype) {\n this.video.latencyHint = 'interactive';\n }\n }\n\n async start() {\n if (!this.url || !this.video) {\n throw new Error('Media target missing');\n }\n this.stop();\n this.notify('connecting');\n this.configureVideoElement();\n this.abortController = new AbortController();\n const pc = new RTCPeerConnection(RTC_CONFIG);\n this.pc = pc;\n const stream = new MediaStream();\n pc.ontrack = (event) => {\n event.streams[0]?.getTracks().forEach((mediaTrack) => stream.addTrack(mediaTrack));\n this.video.srcObject = stream;\n if (event.track?.kind === 'video' && 'playoutDelayHint' in event.receiver) {\n event.receiver.playoutDelayHint = 0;\n }\n };\n if (this.audioOnly) {\n pc.addTransceiver('audio', { direction: 'recvonly' });\n } else {\n pc.addTransceiver('video', { direction: 'recvonly' });\n if (this.receiveAudio) {\n pc.addTransceiver('audio', { direction: 'recvonly' });\n }\n }\n\n pc.onconnectionstatechange = () => {\n this.notify(pc.connectionState);\n };\n pc.oniceconnectionstatechange = () => {\n const state = pc.iceConnectionState;\n if (state === 'failed' || state === 'disconnected') {\n this.notify(state);\n }\n };\n\n try {\n const offer = await pc.createOffer({\n offerToReceiveAudio: this.audioOnly ? true : this.receiveAudio,\n offerToReceiveVideo: !this.audioOnly,\n });\n await pc.setLocalDescription(offer);\n\n const response = await fetch(this.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/sdp',\n ...buildAuthHeader(this.token),\n },\n body: offer.sdp,\n signal: this.abortController.signal,\n });\n if (!response.ok) {\n /*\n MediaMTX includes the useful rejection reason in the response body\n for many 4xx WHEP failures, such as unsupported codecs or malformed\n SDP. Surface that body so camera/video debugging does not stop at a\n generic HTTP status code.\n */\n const body = await response.text().catch(() => '');\n const detail = body ? `: ${body.slice(0, 180)}` : '';\n throw new Error(`WHEP request failed: ${response.status}${detail}`);\n }\n const answerSdp = await response.text();\n await pc.setRemoteDescription({ type: 'answer', sdp: answerSdp });\n pc.getReceivers().forEach((receiver) => {\n if ('playoutDelayHint' in receiver) {\n receiver.playoutDelayHint = 0;\n }\n });\n await this.video.play().catch(() => {});\n this.notify('playing');\n } catch (err) {\n this.notify('error', err.message);\n this.stop();\n throw err;\n }\n }\n\n stop() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null;\n }\n if (this.pc) {\n this.pc.getSenders().forEach((sender) => sender.track?.stop());\n this.pc.getReceivers().forEach((receiver) => receiver.track?.stop());\n this.pc.close();\n this.pc = null;\n }\n if (this.video) {\n this.video.srcObject = null;\n }\n this.notify('stopped');\n }\n}\n","// Hook: useVideoRequests\n// Purpose: Coordinates client-side video stream request intents and authorization timing. Scope: Provides reusable request helpers for rover and room video consumers.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\n\nfunction normalizeEntry(entry) {\n if (!entry) return null;\n if (typeof entry === 'string') {\n const id = String(entry).trim();\n if (!id) return null;\n return { type: 'rover', id, key: id };\n }\n if (typeof entry === 'object') {\n if (entry.type && entry.id) {\n const id = String(entry.id);\n let key = entry.key;\n if (!key) {\n key = entry.type === 'room' ? `room:${id}` : id;\n }\n return {\n type: entry.type,\n id,\n key,\n };\n }\n if (entry.roverId) {\n const id = String(entry.roverId);\n return { type: 'rover', id, key: entry.key || id };\n }\n if (entry.roomCameraId) {\n const id = String(entry.roomCameraId);\n return { type: 'room', id, key: entry.key || `room:${id}` };\n }\n }\n return null;\n}\n\nfunction dedupeEntries(entries = []) {\n const seen = new Set();\n const unique = [];\n entries.forEach((entry) => {\n if (!entry?.key || seen.has(entry.key)) {\n return;\n }\n seen.add(entry.key);\n unique.push(entry);\n });\n return unique.sort((a, b) => a.key.localeCompare(b.key));\n}\n\nexport function useVideoRequests(sourceList = [], options = {}) {\n const socket = useSocket();\n const { enabled = true, version = null } = options;\n const [sources, setSources] = useState({});\n const normalizedEntries = useMemo(() => {\n if (!Array.isArray(sourceList)) {\n return [];\n }\n return dedupeEntries(sourceList.map(normalizeEntry).filter(Boolean));\n }, [sourceList]);\n const normalizedKey = useMemo(() => {\n const base = normalizedEntries.map((entry) => `${entry.type}:${entry.id}:${entry.key}`).join('|');\n return version ? `${base}|v:${version}` : base;\n }, [normalizedEntries, version]);\n const entriesRef = useRef([]);\n const [connectionNonce, setConnectionNonce] = useState(0);\n\n useEffect(() => {\n if (!socket) return undefined;\n const handleConnect = () => setConnectionNonce((prev) => prev + 1);\n socket.on('connect', handleConnect);\n return () => {\n socket.off('connect', handleConnect);\n };\n }, [socket]);\n\n useEffect(() => {\n entriesRef.current = normalizedEntries;\n }, [normalizedEntries]);\n\n useEffect(() => {\n if (!normalizedKey || !enabled) {\n setSources({});\n return undefined;\n }\n const entries = entriesRef.current;\n let cancelled = false;\n\n function requestEntry(entry) {\n const payload =\n entry.type === 'room'\n ? { roomCameraId: entry.id }\n : entry.type === 'ptz'\n ? { type: 'ptz', id: entry.id }\n : { roverId: entry.id };\n socket.emit('video:request', payload, (resp = {}) => {\n if (cancelled) return;\n setSources((prev) => ({ ...prev, [entry.key]: resp }));\n });\n }\n\n entries.forEach((entry) => {\n requestEntry(entry);\n });\n\n return () => {\n cancelled = true;\n };\n }, [socket, normalizedKey, enabled, connectionNonce]);\n\n const filtered = useMemo(() => {\n if (!normalizedKey || !enabled) return {};\n const next = {};\n normalizedEntries.forEach((entry) => {\n if (sources[entry.key]) {\n next[entry.key] = sources[entry.key];\n }\n });\n return next;\n }, [normalizedKey, sources, normalizedEntries]);\n\n return filtered;\n}\n","// Hook: useRoverSnapshots\n// Purpose: Subscribes to rover snapshot streams and stores latest per-rover image states. Scope: Manages socket request/subscription lifecycle and data normalization.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\n\nexport function useRoverSnapshots(sourceList = [], options = {}) {\n const socket = useSocket();\n const { enabled = true, version = null } = options;\n const [feeds, setFeeds] = useState({});\n const objectUrls = useRef(new Map());\n const ids = useMemo(\n () => sourceList.map((e) => (typeof e === 'string' ? e : e.id)).filter(Boolean),\n [sourceList],\n );\n const idsKey = useMemo(() => {\n const base = ids.join('|');\n return version ? `${base}|v:${version}` : base;\n }, [ids, version]);\n const idsRef = useRef([]);\n const [connectionNonce, setConnectionNonce] = useState(0);\n const statsRef = useRef(new Map());\n const debugSnapshots =\n typeof window !== 'undefined' && new URLSearchParams(window.location.search).has('debugSnapshots');\n\n useEffect(() => {\n if (!socket) return undefined;\n const handleConnect = () => setConnectionNonce((prev) => prev + 1);\n socket.on('connect', handleConnect);\n return () => socket.off('connect', handleConnect);\n }, [socket]);\n\n useEffect(() => {\n idsRef.current = ids;\n }, [idsKey, ids]);\n\n useEffect(() => {\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n setFeeds({});\n }, [idsKey]);\n\n useEffect(() => {\n if (!enabled) {\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n setFeeds({});\n return undefined;\n }\n if (!idsRef.current.length || !socket) {\n return undefined;\n }\n let cancelled = false;\n const currentIds = idsRef.current;\n\n const handleFrame = (meta = {}, buffer) => {\n if (cancelled || !meta.id || !buffer) return;\n const sizeBytes = buffer.byteLength ?? buffer.length ?? 0;\n const now = Date.now();\n const prevStats = statsRef.current.get(meta.id) || {\n count: 0,\n totalBytes: 0,\n lastLogAt: 0,\n };\n const nextStats = {\n count: prevStats.count + 1,\n totalBytes: prevStats.totalBytes + sizeBytes,\n lastLogAt: prevStats.lastLogAt,\n };\n if (debugSnapshots && (!nextStats.lastLogAt || now - nextStats.lastLogAt >= 10000)) {\n const avgBytes = nextStats.count ? nextStats.totalBytes / nextStats.count : 0;\n console.log(\n '[roverSnapshot]',\n meta.id,\n `frame=${sizeBytes}B`,\n `avg=${Math.round(avgBytes)}B`,\n `count=${nextStats.count}`,\n );\n nextStats.lastLogAt = now;\n }\n statsRef.current.set(meta.id, nextStats);\n const blob = new Blob([buffer], { type: 'image/jpeg' });\n const url = URL.createObjectURL(blob);\n const prevUrl = objectUrls.current.get(meta.id);\n if (prevUrl) {\n URL.revokeObjectURL(prevUrl);\n }\n objectUrls.current.set(meta.id, url);\n setFeeds((prev) => ({\n ...prev,\n [meta.id]: {\n status: 'playing',\n ts: meta.ts || Date.now(),\n error: null,\n objectUrl: url,\n },\n }));\n };\n\n const handleStatus = (meta = {}) => {\n if (cancelled || !meta.id) return;\n setFeeds((prev) => ({\n ...prev,\n [meta.id]: {\n ...(prev[meta.id] || {}),\n status: meta.error ? 'error' : prev[meta.id]?.status || 'connecting',\n error: meta.error || null,\n ts: meta.ts || prev[meta.id]?.ts || null,\n objectUrl: prev[meta.id]?.objectUrl || null,\n },\n }));\n };\n\n socket.on('roverSnapshot:frame', handleFrame);\n socket.on('roverSnapshot:status', handleStatus);\n\n socket.emit('roverSnapshot:subscribe', { ids: currentIds }, (resp = {}) => {\n if (resp.error) return;\n });\n\n return () => {\n cancelled = true;\n socket.emit('roverSnapshot:unsubscribe', { ids: currentIds });\n socket.off('roverSnapshot:frame', handleFrame);\n socket.off('roverSnapshot:status', handleStatus);\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n };\n }, [socket, idsKey, enabled, connectionNonce, debugSnapshots]);\n\n return feeds;\n}\n","// constants\n// Purpose: Defines the constants module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport const RESTART_DELAY_MS = 2000;\nexport const UNMUTE_RETRY_MS = 3000;\nexport const AUDIO_RETRY_MS = 3000;\nexport const BRUSH_CURRENT_THRESHOLD_MA = 40;\nexport const DUCK_RELEASE_FADE_MS = 1000;\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { WhepPlayer } from '../../lib/whepPlayer.js';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\nimport {\n mainBrushAudioTelemetryEqual,\n selectMainBrushAudioTelemetry,\n} from '../../context/telemetryViews.js';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useVideoRequests } from '../../hooks/useVideoRequests.js';\nimport { useRoverSnapshots } from '../../hooks/useRoverSnapshots.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { AUDIO_SETTINGS_DEFAULTS, VIDEO_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport {\n RESTART_DELAY_MS,\n UNMUTE_RETRY_MS,\n AUDIO_RETRY_MS,\n BRUSH_CURRENT_THRESHOLD_MA,\n DUCK_RELEASE_FADE_MS,\n} from './constants.js';\n\nconst VIDEO_FILTER_STYLES = {\n // The empty filter keeps the browser's native video presentation untouched when the user\n // wants normal color or when a rover's camera color is already useful.\n none: '',\n // Grayscale is the most reliable way to remove the pink cast from a no-IR-filter camera\n // because it depends on luminance instead of trying to guess the original scene colors.\n grayscale: 'grayscale(1) contrast(1.08)',\n // Greenscale is intentionally implemented as a CSS tint over grayscale rather than canvas\n // processing. That keeps latency low, works for both
\n );\n}\n","// Corner Pod Toggle\n// Purpose: Reserves each exact video corner for a pod's always-reachable collapse control.\nimport { FaArrowUp } from 'react-icons/fa';\n\nconst CORNERS = {\n 'top-left': {\n button: 'left-0 top-0 [clip-path:polygon(0_0,100%_0,0_100%)]',\n icon: 'left-1 top-1',\n collapseRotation: '-rotate-45',\n expandRotation: 'rotate-[135deg]',\n },\n 'top-right': {\n button: 'right-0 top-0 [clip-path:polygon(0_0,100%_0,100%_100%)]',\n icon: 'right-1 top-1',\n collapseRotation: 'rotate-45',\n expandRotation: '-rotate-[135deg]',\n },\n 'bottom-left': {\n button: 'bottom-0 left-0 [clip-path:polygon(0_0,0_100%,100%_100%)]',\n icon: 'bottom-1 left-1',\n collapseRotation: '-rotate-[135deg]',\n expandRotation: 'rotate-45',\n },\n 'bottom-right': {\n button: 'bottom-0 right-0 [clip-path:polygon(100%_0,0_100%,100%_100%)]',\n icon: 'bottom-1 right-1',\n collapseRotation: 'rotate-[135deg]',\n expandRotation: '-rotate-45',\n },\n};\n\nexport default function CornerPodToggle({ corner, expanded, label, onClick }) {\n const placement = CORNERS[corner] || CORNERS['top-left'];\n return (\n \n {/* One arrow icon is rotated toward the physical corner for collapse and directly away\n from it for expansion. The triangular hit target itself never moves or disappears. */}\n \n \n );\n}\n","// Expansion Toggle\n// Purpose: Provides a slim edge strip that remains part of an expansion in both visibility states.\nimport { FaChevronDown, FaChevronLeft, FaChevronRight, FaChevronUp } from 'react-icons/fa';\n\nconst ICONS = { down: FaChevronDown, left: FaChevronLeft, right: FaChevronRight, up: FaChevronUp };\n\nexport default function ExpansionToggle({ direction, label, onClick, className = '' }) {\n const Icon = ICONS[direction] || FaChevronLeft;\n return (\n \n {/* ExpansionPanel owns all positioning so this button has exactly one visual\n form. Only the chevron direction changes between open and closed states. */}\n \n \n );\n}\n","// HUD Expansion Panel\n// Purpose: Gives every independent HUD expansion one fixed toggle anchor and identical open/closed behavior.\nimport ExpansionToggle from './ExpansionToggle.jsx';\n\nexport default function ExpansionPanel({\n open,\n onOpenChange,\n anchorClassName = '',\n panelClassName = '',\n panelAlign = 'left',\n panelVerticalAlign = 'top',\n openDirection,\n closeDirection,\n openLabel,\n closeLabel,\n children,\n}) {\n const panelAlignmentClass = panelAlign === 'right' ? 'right-0' : 'left-0';\n const panelVerticalAlignmentClass = panelVerticalAlign === 'bottom' ? 'bottom-0' : 'top-0';\n\n return (\n
\n {/* The content is positioned behind the fixed 32-by-12 anchor. Opening or\n closing changes only whether this panel exists; it never relocates or\n restyles the toggle that the user just clicked. */}\n {open ? (\n
\n {children}\n
\n ) : null}\n onOpenChange(!open)}\n className=\"absolute left-0 top-0\"\n />\n
\n );\n}\n","// Corner Pod Visibility\n// Purpose: Persists each independent pod or expansion without coupling unrelated corner controls.\nimport { useCallback } from 'react';\nimport { useSettingsNamespace } from '../../../../settings/index.js';\n\nexport default function usePodVisibility(key, defaultOpen = true) {\n const { value, save } = useSettingsNamespace('newdrivePods', {});\n const open = value?.[key] == null ? defaultOpen : value[key] !== false;\n const setOpen = useCallback(\n (nextOpen) => save((current) => ({ ...(current || {}), [key]: Boolean(nextOpen) })),\n [key, save],\n );\n return [open, setOpen];\n}\n","// Top-left Corner Pod\n// Purpose: Shows the user's current-turn or queue-wait countdown and the rover identity expansion.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useControlSelector } from '../../../../controls/index.js';\nimport { useSessionSelector } from '../../../../context/SessionContext.jsx';\nimport { useSharedClock } from '../../../../hooks/useSharedClock.js';\nimport RoverLabel from '../../../RoverLabel/index.jsx';\nimport CornerPodToggle from './CornerPodToggle.jsx';\nimport ExpansionPanel from './ExpansionPanel.jsx';\nimport usePodVisibility from './usePodVisibility.js';\n\nexport default function TopLeftPod({ roverId }) {\n const [timerOpen, setTimerOpen] = usePodVisibility('turnTimer', true);\n const [nameOpen, setNameOpen] = usePodVisibility('roverName', true);\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const socketId = useSessionSelector((state) => state.session?.socketId || null);\n const turnInfo = useSessionSelector((state) => state.session?.turnQueues?.[roverId] || null);\n const activeDriverId = useSessionSelector((state) => state.session?.activeDrivers?.[roverId] || null);\n const lastControlIntentAt = useControlSelector((control) => control.state.lastControlIntentAt);\n const deadline = turnInfo?.deadline || null;\n const idleDeadline = turnInfo?.idleDeadline || null;\n const queue = turnInfo?.queue || [];\n // Direct ownership is published independently from the detailed queue and is\n // therefore the reliable initial-load/reconnect source for the current turn.\n const currentDriverId = activeDriverId || turnInfo?.current || null;\n const currentIndex = currentDriverId ? queue.indexOf(currentDriverId) : -1;\n const userIndex = socketId ? queue.indexOf(socketId) : -1;\n const turnActive = mode === 'turns' && queue.length > 1 && currentIndex >= 0 && userIndex >= 0;\n const hasTurnDeadline = Boolean(turnActive && deadline);\n const now = useSharedClock(1000, hasTurnDeadline);\n const currentTurnSeconds = hasTurnDeadline ? Math.max(0, Math.ceil((deadline - now) / 1000)) : null;\n const idleSkipSeconds = idleDeadline ? Math.max(0, Math.ceil((idleDeadline - now) / 1000)) : null;\n const turnsAhead = turnActive ? (userIndex - currentIndex + queue.length) % queue.length : null;\n const seconds = currentTurnSeconds == null || turnsAhead == null\n ? null\n : currentTurnSeconds + Math.max(0, turnsAhead - 1) * 60;\n const isCurrentTurn = turnsAhead === 0;\n const isWaitingForTurn = turnActive && !isCurrentTurn;\n const [showTurnCue, setShowTurnCue] = useState(false);\n const [turnCueStartedAt, setTurnCueStartedAt] = useState(null);\n const previousCurrentRef = useRef(null);\n\n useEffect(() => {\n const wasCurrent = previousCurrentRef.current;\n previousCurrentRef.current = isCurrentTurn;\n let timer = 0;\n\n if (turnActive && isCurrentTurn && wasCurrent !== true) {\n const startedAt = Date.now();\n /*\n A direct-load current turn and a live ownership handoff both need the same cue. Defer\n the visual state update by one task to remain compatible with the repo's React Compiler\n rules while preserving the actual handoff timestamp for the minimum display period.\n */\n timer = setTimeout(() => {\n setTurnCueStartedAt(startedAt);\n setShowTurnCue(true);\n }, 0);\n } else if ((!turnActive || !isCurrentTurn) && showTurnCue) {\n timer = setTimeout(() => {\n setShowTurnCue(false);\n setTurnCueStartedAt(null);\n }, 0);\n }\n\n return () => {\n if (timer) clearTimeout(timer);\n };\n }, [isCurrentTurn, showTurnCue, turnActive]);\n\n useEffect(() => {\n if (!showTurnCue || !turnCueStartedAt || lastControlIntentAt <= turnCueStartedAt) return undefined;\n /*\n The first real control intent proves the user has noticed and started driving. Keep the\n cue for at least two seconds anyway, then return to the compact timer. With no input the\n cue remains large so the live server idle-skip deadline cannot be overlooked.\n */\n const remainingMinimumMs = Math.max(0, 2000 - (Date.now() - turnCueStartedAt));\n const timer = setTimeout(() => setShowTurnCue(false), remainingMinimumMs);\n return () => clearTimeout(timer);\n }, [lastControlIntentAt, showTurnCue, turnCueStartedAt]);\n const gaugePercent = useMemo(() => {\n if (seconds == null) return 0;\n /*\n The server's rover turns are sixty seconds long. Waiting users need one complete\n turn added for each driver between the current driver and themselves. A complete\n queue rotation is a stable scale across handoffs, so the ring drains continuously\n instead of jumping back to full when the current driver changes.\n */\n const rotationSeconds = Math.max(60, queue.length * 60);\n return Math.max(0, Math.min(1, seconds / rotationSeconds));\n }, [queue.length, seconds]);\n const visibleGaugePercent = showTurnCue && idleSkipSeconds != null\n // The server's initial inactivity grace is seven seconds. Mirroring that known lifecycle\n // makes the enlarged ring itself reinforce the prominent skip countdown in the center.\n ? Math.max(0, Math.min(1, idleSkipSeconds / 7))\n : gaugePercent;\n const showTimer = Boolean(turnActive && timerOpen);\n const showLargeTimer = isWaitingForTurn || showTurnCue;\n const timerLabel = seconds == null\n // Ownership should remain visible while the detailed deadline is in flight.\n ? isCurrentTurn ? 'Your turn' : 'Waiting'\n : seconds >= 60\n ? `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}`\n : `${seconds}s`;\n\n return (\n
\n {showTimer ? (\n \n {/* The SVG fills the shell. Its circle geometry supplies the same slim visible inset\n used by the other pods instead of stacking SVG padding on top of shell padding. */}\n \n \n \n \n \n {/* The handoff text replaces the retired desktop full-screen TurnsOverlay.\n Typography grows with the pod, while the corner toggle deliberately remains\n fixed-size so it never becomes a giant obstruction over the video. */}\n {showLargeTimer ? (\n <>\n \n {showTurnCue ? 'It’s your turn!' : 'Someone else is driving'}\n \n \n {showTurnCue && idleSkipSeconds != null ? `${idleSkipSeconds}s` : timerLabel}\n \n \n {showTurnCue\n ? idleSkipSeconds != null\n ? 'Start driving or your turn will be skipped'\n : 'You’re driving'\n : 'until your turn'}\n \n \n ) : (\n <>\n {timerLabel}\n {seconds != null ? left : null}\n \n )}\n \n setTimerOpen(false)} />\n
\n ) : turnActive ? (\n setTimerOpen(true)} />\n ) : null}\n\n {/* The rover name is an independent edge expansion. Its visibility control lives in\n the expansion itself, and its position naturally moves into the corner whenever\n the conditional timer pod is absent or manually collapsed. */}\n \n \n \n \n );\n}\n","// Top-right Corner Pod\n// Purpose: Combines the battery/current gauge with a compact attached advanced-power expansion.\nimport { createElement, useMemo } from 'react';\nimport { FaArrowDown, FaArrowUp, FaBatteryHalf, FaBolt, FaExclamationTriangle, FaMemory, FaMicrochip, FaThermometerHalf, FaWifi } from 'react-icons/fa';\nimport { useSessionSelector } from '../../../../context/SessionContext.jsx';\nimport { useVisualTelemetrySelector } from '../../../../context/TelemetryContext.jsx';\nimport { hostStatsEqual, selectHostStats, selectSpectatorTelemetry, spectatorTelemetryEqual } from '../../../../context/telemetryViews.js';\nimport CornerPodToggle from './CornerPodToggle.jsx';\nimport ExpansionPanel from './ExpansionPanel.jsx';\nimport usePodVisibility from './usePodVisibility.js';\n\nfunction finite(value) {\n const number = Number(value);\n return Number.isFinite(number) ? number : null;\n}\n\nfunction clampPercent(value) {\n const number = finite(value);\n return number == null ? 0 : Math.max(0, Math.min(100, number));\n}\n\nfunction formatMemoryUsage(totalKb, availableKb, usedPercent) {\n const total = finite(totalKb);\n const available = finite(availableKb);\n const percent = finite(usedPercent);\n if (total == null || available == null || percent == null) return percent == null ? '--' : `${Math.round(percent)}%`;\n\n const used = Math.max(0, total - available);\n const useGigabytes = total >= 1024 * 1024;\n const divisor = useGigabytes ? 1024 * 1024 : 1024;\n const decimals = useGigabytes ? 1 : 0;\n const unit = useGigabytes ? 'GB' : 'MB';\n return `${Math.round(percent)}% · ${(used / divisor).toFixed(decimals)}/${(total / divisor).toFixed(decimals)} ${unit}`;\n}\n\nfunction MetricRow({ icon, label, value, percent, iconClass, fillClass }) {\n return (\n
\n
\n {createElement(icon, { className: `shrink-0 text-[0.65rem] ${iconClass}`, 'aria-hidden': true })}\n {label}\n {value}\n
\n
\n
\n
\n
\n );\n}\n\nfunction WifiTile({ signal, ssid }) {\n const bars = signal == null ? 0 : signal >= -55 ? 4 : signal >= -65 ? 3 : signal >= -75 ? 2 : 1;\n const tone = signal == null ? 'bg-slate-600' : signal < -80 ? 'bg-red-400' : signal < -70 ? 'bg-amber-400' : 'bg-emerald-400';\n return (\n
\n
\n \n Wi-Fi signal\n {signal == null ? '--' : `${Math.round(signal)} dBm`}\n
\n
Wi-Fi: {ssid || '--'}
\n
\n {[1, 2, 3, 4].map((bar) => (\n \n ))}\n
\n
\n );\n}\n\nfunction SpeedTile({ icon, label, value, colorClass }) {\n return (\n
\n {createElement(icon, { className: colorClass, 'aria-hidden': true })}\n {label}\n {value}\n
\n );\n}\n\nexport default function TopRightPod({ roverId }) {\n const [batteryOpen, setBatteryOpen] = usePodVisibility('battery', true);\n const [powerOpen, setPowerOpen] = usePodVisibility('advancedPower', false);\n const batteryState = useSessionSelector((state) => {\n const rover = (state.session?.roster || []).find((entry) => String(entry.id) === String(roverId));\n return rover?.batteryState || null;\n });\n // These values drive gauges and informational bars only; no control decision\n // depends on their render cadence. The visual subscription remains immediate\n // on desktop while honoring MobileLayoutFrame's shared telemetry throttle on\n // phones, preventing analog current/voltage noise from repainting this pod at\n // the rover sensor-stream rate.\n const electrical = useVisualTelemetrySelector(roverId, selectSpectatorTelemetry, spectatorTelemetryEqual);\n const host = useVisualTelemetrySelector(powerOpen ? roverId : null, selectHostStats, hostStatsEqual);\n const percent = Math.max(0, Math.min(100, finite(batteryState?.percentDisplay) ?? 0));\n const current = finite(electrical?.currentMa) ?? 0;\n const currentPercent = Math.max(0, Math.min(1, Math.abs(current) / 2500));\n const urgentBattery = Boolean(batteryState?.urgentActive);\n const lowBattery = Boolean(batteryState?.warnActive || urgentBattery);\n // Warning and urgent are separate server-owned thresholds. Amber gives the first threshold\n // a clear but calm identity; red is reserved for the genuinely time-sensitive state.\n const batteryTone = urgentBattery ? '#ef4444' : lowBattery ? '#f59e0b' : '#22c55e';\n const currentTone = current < 0 ? '#f59e0b' : '#22c55e';\n const circumference = 2 * Math.PI * 42;\n const currentCircumference = 2 * Math.PI * 32;\n const batteryDash = useMemo(() => `${(percent / 100) * circumference} ${circumference}`, [circumference, percent]);\n const wifi = host?.wifi || {};\n const signal = finite(wifi.signalDbm);\n const voltage = finite(electrical?.voltageMv);\n const batteryCharge = finite(electrical?.batteryChargeMah);\n const batteryCapacity = finite(electrical?.batteryCapacityMah);\n const cpuTemp = finite(host?.cpuTempC);\n const cpuUsed = finite(host?.cpuUsedPct);\n const memoryUsed = finite(host?.memoryUsedPct);\n const memoryUsage = formatMemoryUsage(host?.memoryTotalKb, host?.memoryAvailableKb, memoryUsed);\n const voltagePercent = voltage == null ? 0 : ((voltage - 12000) / 5000) * 100;\n const batteryMahPercent = batteryCharge != null && batteryCapacity > 0 ? (batteryCharge / batteryCapacity) * 100 : 0;\n const cpuTempPercent = cpuTemp == null ? 0 : ((cpuTemp - 30) / 55) * 100;\n const cpuTempTone = cpuTemp >= 80 ? 'bg-red-400' : cpuTemp >= 70 ? 'bg-amber-400' : 'bg-emerald-400';\n const cpuTone = cpuUsed >= 90 ? 'bg-red-400' : cpuUsed >= 70 ? 'bg-amber-400' : 'bg-sky-400';\n const memoryTone = memoryUsed >= 90 ? 'bg-red-400' : memoryUsed >= 75 ? 'bg-amber-400' : 'bg-violet-400';\n const download = finite(wifi.downloadMbps);\n const upload = finite(wifi.uploadMbps);\n const docked = Boolean(electrical?.homeBase);\n const warningMessage = urgentBattery ? 'BATTERY CRITICAL, DOCK NOW' : 'Battery low, please dock soon.';\n\n return (\n <>\n
\n {batteryOpen ? (\n
\n {/* Let the gauge geometry define the visible inset so this pod does not carry an\n extra layer of shell padding that the camera pod does not have. */}\n \n \n \n \n \n \n {/* Keeping the icon and value in one centered stack makes the gauge's\n meaning obvious without changing either circular telemetry ring. */}\n \n {lowBattery ? (\n \n ) : (\n \n )}\n {percent}%\n \n setBatteryOpen(false)} />\n
\n ) : (\n setBatteryOpen(true)} />\n )}\n\n {/* Advanced power is an independently persisted right-edge expansion. Its own arrow is\n retained when closed, and the whole panel moves into the corner if the pod closes. */}\n \n
\n \n 0 ? '+' : ''}${Math.round(current)} mA`} percent={currentPercent * 100} iconClass={current < 0 ? 'text-amber-300' : 'text-emerald-300'} fillClass={current < 0 ? 'bg-amber-400' : 'bg-emerald-400'} />\n \n = 80 ? 'text-red-300' : cpuTemp >= 70 ? 'text-amber-300' : 'text-emerald-300'} fillClass={cpuTempTone} />\n = 90 ? 'text-red-300' : cpuUsed >= 70 ? 'text-amber-300' : 'text-sky-300'} fillClass={cpuTone} />\n = 90 ? 'text-red-300' : memoryUsed >= 75 ? 'text-amber-300' : 'text-violet-300'} fillClass={memoryTone} />\n \n \n \n
\n \n
\n\n {/* Battery danger is a stage-level warning, so it belongs near the user's focus instead\n of beside the corner gauge. It deliberately has only two stable messages and no\n animation; severity comes from its size and solid color rather than visual noise. */}\n {lowBattery && !docked ? (\n \n \n {warningMessage}\n
\n ) : null}\n \n );\n}\n","// Rover Control Availability\n// Purpose: Mirrors the server turnService.canDrive rule for immediate, consistent UI disabling.\nimport { useSessionSelector } from '../context/SessionContext.jsx';\n\nexport function selectCanControlRover(state, roverId) {\n const session = state.session;\n if (!roverId || session?.role === 'spectator') return false;\n if (session?.mode !== 'turns') return true;\n\n const turnInfo = session?.turnQueues?.[roverId] || null;\n const queue = Array.isArray(turnInfo?.queue) ? turnInfo.queue : [];\n\n /* The server permits control when a turns queue is absent or contains at most\n one driver. Only a genuinely shared queue requires the active socket id.\n Keeping this exact ordering prevents initial session loading from disabling\n an otherwise uncontested rover. The server remains the final authority. */\n if (queue.length <= 1) return true;\n /* activeDrivers is the server's direct ownership map and can arrive before\n the richer queue snapshot during an initial load or reconnect. The queue\n field remains a compatibility fallback for intermediate payloads. */\n const activeDriverId = session?.activeDrivers?.[roverId] || turnInfo?.current || null;\n return Boolean(session?.socketId && activeDriverId === session.socketId);\n}\n\nexport default function useCanControlRover(roverId) {\n return useSessionSelector((state) => selectCanControlRover(state, roverId));\n}\n","// Horn Settings Expansion\n// Purpose: Keeps the persisted horn sound controls available independently of the peripheral pod.\nimport { useCallback } from 'react';\nimport { HORN_MAX_FREQUENCY } from '../../../../controls/constants.js';\nimport { useSettingsNamespace } from '../../../../settings/index.js';\nimport { HORN_SETTINGS_DEFAULTS } from '../../../../settings/namespaces.js';\nimport ExpansionPanel from './ExpansionPanel.jsx';\n\nfunction clampFrequency(value) {\n const numeric = Number(value);\n if (!Number.isFinite(numeric) || numeric <= 0) return 0;\n return Math.min(HORN_MAX_FREQUENCY, Math.round(numeric));\n}\n\nexport default function HornSettingsExpansion({ open, onOpenChange }) {\n const { value, save } = useSettingsNamespace('horn', HORN_SETTINGS_DEFAULTS);\n const waveform = value?.waveform === 'sine' ? 'sine' : 'saw';\n const frequencies = [...(Array.isArray(value?.freqs) ? value.freqs : HORN_SETTINGS_DEFAULTS.freqs), 0, 0, 0, 0]\n .slice(0, 4)\n .map(clampFrequency);\n\n const updateFrequency = useCallback((index, nextValue) => {\n save((current) => {\n // Build from the persisted values on every edit so rapid changes cannot overwrite a\n // neighboring frequency input with a stale render-time copy.\n const next = [...(Array.isArray(current?.freqs) ? current.freqs : HORN_SETTINGS_DEFAULTS.freqs), 0, 0, 0, 0]\n .slice(0, 4)\n .map(clampFrequency);\n next[index] = clampFrequency(nextValue);\n return { ...(current || {}), freqs: next };\n });\n }, [save]);\n\n return (\n /* Horn settings belongs to the left video wall, not to the peripheral pod.\n Keeping this anchor fixed above the pod's maximum footprint means the\n expansion never follows or overlaps the pod as that separate UI closes.\n Its arrows mirror advanced info on the opposite wall: open points into\n the screen and close points back toward the wall. */\n \n
\n Horn settings\n
\n \n
\n {frequencies.map((frequency, index) => (\n \n ))}\n
\n \n );\n}\n","// Bottom-left Corner Pod\n// Purpose: Presents only the assigned rover's available physical light, laser, and horn controls.\nimport { useRef } from 'react';\nimport { FaBullhorn, FaCrosshairs, FaLightbulb } from 'react-icons/fa';\nimport { useControlActions, useControlSelector } from '../../../../controls/index.js';\nimport ControlHint from '../../../ControlHint/index.jsx';\nimport { useSessionSelector } from '../../../../context/SessionContext.jsx';\nimport useCanControlRover from '../../../../hooks/useCanControlRover.js';\nimport KeyPill from '../../../vip/VipAudioUploadCard/KeyPill.jsx';\nimport HornSettingsExpansion from './HornSettingsExpansion.jsx';\nimport CornerPodToggle from './CornerPodToggle.jsx';\nimport usePodVisibility from './usePodVisibility.js';\n\nfunction RoundControl({ label, icon, keyLabel, active, tone, disabled = false, onClick, onPointerDown, onPointerUp, large = false, className = '' }) {\n const ControlIcon = icon;\n const toneClass = tone === 'horn'\n ? active ? 'border-fuchsia-300/70 bg-fuchsia-700 text-fuchsia-50' : 'border-cyan-300/70 bg-cyan-900 text-cyan-50'\n : active ? 'border-emerald-300/70 bg-emerald-800 text-emerald-50' : 'border-amber-300/70 bg-amber-900 text-amber-50';\n return (\n \n \n \n \n );\n}\n\nexport default function BottomLeftPod({ roverId }) {\n const [open, setOpen] = usePodVisibility('peripherals', true);\n const [hornSettingsOpen, setHornSettingsOpen] = usePodVisibility('hornSettings', false);\n const roomLightsLockedOn = useSessionSelector(\n (state) => Boolean(state.session?.homeAssistant?.lightPolicy?.lockedOn),\n );\n const headlight = useControlSelector((control) => control.pipeline?.headlight);\n const laser = useControlSelector((control) => control.pipeline?.laser);\n const hornDevice = useControlSelector((control) => control.pipeline?.horn);\n const headlightOn = useControlSelector((control) => Boolean(control.pipeline?.headlightState?.headlightOn));\n const laserOn = useControlSelector((control) => Boolean(control.pipeline?.laserState?.laserOn));\n const hornActive = useControlSelector((control) => Boolean(control.state.horn?.active));\n const { setHeadlight, setLaser, startHorn, stopHorn } = useControlActions();\n const canControl = useCanControlRover(roverId);\n const hornPointerRef = useRef(null);\n const available = Boolean(headlight || laser || hornDevice);\n\n if (!available) return null;\n const startHornPointer = (event) => {\n if (!canControl) return;\n if (hornPointerRef.current != null) return;\n event.preventDefault();\n hornPointerRef.current = event.pointerId;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n startHorn();\n };\n const stopHornPointer = (event) => {\n if (hornPointerRef.current !== event.pointerId) return;\n hornPointerRef.current = null;\n stopHorn();\n };\n\n return (\n <>\n {open ? (\n
\n {/*\n The horn's center is the origin of an invisible 76px-radius arc. Headlight and laser\n sit at -75 and -15 degrees on either side of that arc's diagonal midpoint. Their\n sixty-degree separation leaves a visible gap between the small circles while keeping\n both controls equally distant from the horn. These explicit positions are the\n rendered result of that geometry, not unrelated visual nudges.\n */}\n {/* Physical rover actions become visibly and behaviorally unavailable\n while another queued driver owns the turn. Pod/settings controls\n remain interactive because they do not mutate rover hardware. */}\n {hornDevice ? } active={hornActive} tone=\"horn\" disabled={!canControl} large onPointerDown={startHornPointer} onPointerUp={stopHornPointer} className=\"absolute bottom-1 left-1\" /> : null}\n {headlight ? } active={headlightOn} disabled={!canControl} onClick={() => setHeadlight(!headlightOn)} className=\"absolute left-[1.979rem] top-[0.662rem]\" /> : null}\n {/* The room-light lock deliberately blocks laser activation because\n the laser is only intended for use while the room is dark. This\n mirrors the old desktop control's visible disabled state; turn\n ownership remains the other independent control restriction. */}\n {laser ? } active={laserOn} disabled={!canControl || roomLightsLockedOn} onClick={() => setLaser(!laserOn)} className=\"absolute left-[5.338rem] top-[4.021rem]\" /> : null}\n setOpen(false)} />\n
\n ) : (\n setOpen(true)} />\n )}\n {hornDevice ? : null}\n \n );\n}\n","// Hud Chat Input\n// Purpose: Defines the Hud Chat Input module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { memo, useMemo, useRef, useState } from 'react';\nimport './styles.css';\nimport '../../MobileControls/mobileControls.css';\nimport { useChatActions } from '../../../context/ChatContext.jsx';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../../settings/index.js';\nimport useChatMessageHistoryNavigation from '../../../hooks/useChatMessageHistoryNavigation.js';\n\nfunction detectSafari() {\n if (typeof navigator === 'undefined') return false;\n const userAgent = navigator.userAgent || '';\n const vendor = navigator.vendor || '';\n\n /*\n Safari is the browser that needs the 16px focused-input workaround. Chrome\n and Firefox on iOS also use WebKit internally, but they identify themselves\n in the user agent, so leave their HUD chat sizing alone unless they report\n as Safari proper.\n */\n return /safari/i.test(userAgent) &&\n /apple/i.test(vendor) &&\n !/crios|fxios|edgios|opr|chrome|android/i.test(userAgent);\n}\n\nfunction HudChatInput({ compact = false, variant = 'legacy', open = true, onOpenChange = null }) {\n const role = useSessionSelector((state) => state.session?.role || null);\n const socketId = useSessionSelector((state) => state.session?.socketId || null);\n const currentRoverId = useSessionSelector((state) => state.session?.assignment?.roverId || null);\n const users = useSessionSelector((state) => state.session?.users || []);\n const roverRoster = useSessionSelector((state) => state.session?.roster || []);\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n const { sendMessage, onInputFocus, onInputBlur, blurChat, registerInputRef, setTypingActive } = useChatActions();\n const { value: ttsSettings } = useSettingsNamespace('tts', {\n // HUD chat shares the normal browser TTS defaults, but it has no visible\n // controls of its own. Keeping the fallback here on Google speech prevents\n // the compact HUD path from silently reverting to flite for fresh users.\n engine: 'chromegtts',\n voice: 'tpf',\n pitch: 50,\n googlePitch: 1,\n googleSpeed: 1,\n });\n const [draft, setDraft] = useState('');\n const [sending, setSending] = useState(false);\n const formRef = useRef(null);\n const { navigateHistory, resetHistoryNavigation } = useChatMessageHistoryNavigation();\n const canChat = role !== 'spectator';\n const hideHudChat = role === 'spectator';\n const chatTargetId = useMemo(() => {\n /*\n HUD chat does not render the full composer controls, but it still sends\n TTS payloads when the active target supports speech. PTZ appears only in\n the session user target, not the physical rover roster, so use the same\n self-target resolution as the full chat panel.\n */\n const self = users.find((entry) => entry?.socketId === socketId);\n if (!self?.roverId && ptz?.id && (ptz?.isOperator || ptz?.queuedPosition)) return ptz.id;\n return self?.roverId || currentRoverId || null;\n }, [currentRoverId, ptz?.id, ptz?.isOperator, ptz?.queuedPosition, socketId, users]);\n const rover = useMemo(\n () => roverRoster.find((entry) => String(entry.id) === String(chatTargetId)) || null,\n [chatTargetId, roverRoster],\n );\n const ptzTtsSupported = Boolean(\n ptz?.id &&\n String(chatTargetId) === String(ptz.id) &&\n ptz?.audio?.enabled &&\n (ptz?.isOperator || ptz?.queuedPosition),\n );\n const ttsSupported = Boolean(rover?.audio?.ttsEnabled || ptzTtsSupported);\n const ttsPayload = useMemo(() => {\n if (!ttsSupported) return null;\n const engine =\n ttsSettings?.engine === 'espeak' ? 'espeak' : ttsSettings?.engine === 'flite' ? 'flite' : 'chromegtts';\n if (engine === 'espeak') {\n let pitch = Number.isFinite(ttsSettings?.pitch) ? Math.round(ttsSettings.pitch) : undefined;\n if (typeof pitch === 'number') {\n pitch = Math.max(0, Math.min(99, pitch));\n }\n return { speak: true, engine, pitch };\n }\n const voice = typeof ttsSettings?.voice === 'string' ? ttsSettings.voice : undefined;\n if (engine === 'chromegtts') {\n const pitch = Number.isFinite(ttsSettings?.googlePitch) ? ttsSettings.googlePitch : 1;\n const speed = Number.isFinite(ttsSettings?.googleSpeed) ? ttsSettings.googleSpeed : 1;\n return { speak: true, engine, voice, pitch, speed };\n }\n return { speak: true, engine, voice };\n }, [\n ttsSettings?.engine,\n ttsSettings?.googlePitch,\n ttsSettings?.googleSpeed,\n ttsSettings?.pitch,\n ttsSettings?.voice,\n ttsSupported,\n ]);\n const newDrivePresentation = variant === 'newdrive';\n const containerClass = newDrivePresentation\n ? `absolute left-1/2 top-1/2 z-[70] flex w-[min(36rem,82%)] -translate-x-1/2 -translate-y-1/2 items-stretch gap-1 rounded-md border border-neutral-700 bg-neutral-900 p-1 transition-opacity duration-100 ${open ? 'pointer-events-auto opacity-100' : 'pointer-events-none opacity-0'}`\n : compact\n ? 'pointer-events-auto absolute bottom-0.5 right-0.5 flex w-[9rem] max-w-[70vw] items-center gap-0.5 rounded bg-black/70 px-0.4 py-0.2'\n : 'pointer-events-auto absolute bottom-1 right-1 flex w-[12rem] max-w-[70vw] items-center gap-0.5 rounded bg-black/70 px-0.5 py-0.25';\n const isSafari = useMemo(() => detectSafari(), []);\n /*\n Safari zooms focused inputs below 16px. Keep that workaround Safari-only so\n other mobile browsers keep the deliberately tiny HUD typography.\n */\n const inputTextClass = newDrivePresentation\n ? 'text-base'\n : isSafari\n ? 'mobile-text-entry'\n : compact\n ? 'text-[0.55rem]'\n : 'text-[0.7rem]';\n // The current HUD composer is a physically larger instance of the normal\n // chat-panel entry field, not a separately styled translucent overlay.\n const inputClass = newDrivePresentation\n ? `field-input h-12 min-w-0 flex-1 px-2 ${inputTextClass} text-slate-100 placeholder:text-slate-400 focus:outline-none`\n : `min-w-0 flex-1 bg-transparent ${inputTextClass} text-slate-100 placeholder:text-slate-400 focus:outline-none`;\n // The submit button is still a touch target even though the adjacent input must\n // remain editable, so it gets press suppression without inheriting input text\n // selection behavior.\n const buttonClass = newDrivePresentation\n ? 'button-dark min-h-12 shrink-0 px-4 text-base font-semibold disabled:opacity-50'\n : compact\n ? 'mobile-touch-control rounded bg-cyan-500/80 px-0.35 py-0.2 text-[0.55rem] font-semibold text-black disabled:opacity-50'\n : 'mobile-touch-control rounded bg-cyan-500/80 px-0.5 py-0.25 text-[0.7rem] font-semibold text-black disabled:opacity-50';\n\n async function handleSend(event) {\n event.preventDefault();\n if (!canChat) return;\n const clean = draft.trim();\n if (!clean) return;\n setSending(true);\n try {\n await sendMessage(clean, ttsPayload);\n setDraft('');\n resetHistoryNavigation();\n blurChat();\n setTypingActive(false);\n // The new-drive composer is intentionally transient. Sending returns the\n // HUD to its small corner icon while legacy HUD inputs remain unchanged.\n if (newDrivePresentation) onOpenChange?.(false);\n } catch (err) {\n alert(err.message);\n } finally {\n setSending(false);\n }\n }\n\n if (hideHudChat) return null;\n\n return (\n
\n {\n const next = event.target.value;\n // Keep HUD navigation independent from the panel's cursor even\n // though both inputs read the same persisted message collection.\n resetHistoryNavigation();\n setDraft(next);\n setTypingActive(Boolean(next.trim()));\n }}\n onFocus={(event) => {\n onInputFocus(event);\n setTypingActive(Boolean(draft.trim()));\n // The chat key focuses the always-mounted HUD input through ChatContext.\n // Opening from this focus event avoids a second keyboard listener and\n // preserves HUD-over-sidebar focus priority.\n if (newDrivePresentation) onOpenChange?.(true);\n }}\n onBlur={(event) => {\n onInputBlur(event);\n setTypingActive(false);\n if (newDrivePresentation) {\n // Defer the containment check until focus has reached a submit or\n // close button; moving within the composer must not dismiss it.\n window.requestAnimationFrame(() => {\n if (!formRef.current?.contains(document.activeElement)) {\n onOpenChange?.(false);\n }\n });\n }\n }}\n onKeyDown={(event) => {\n if (newDrivePresentation && event.key === 'Escape') {\n event.preventDefault();\n onOpenChange?.(false);\n blurChat();\n setTypingActive(false);\n return;\n }\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n const recalledDraft = navigateHistory(event.key === 'ArrowUp' ? 'previous' : 'next', draft);\n if (recalledDraft !== null) {\n event.preventDefault();\n setDraft(recalledDraft);\n setTypingActive(Boolean(recalledDraft.trim()));\n }\n return;\n }\n if (event.key === 'Enter' && !draft.trim()) {\n event.preventDefault();\n blurChat();\n setTypingActive(false);\n }\n }}\n ref={(el) => registerInputRef(el, { target: 'hud' })}\n tabIndex={newDrivePresentation && !open ? -1 : undefined}\n placeholder={canChat ? (newDrivePresentation ? 'Type a message…' : 'Chat (tts)') : 'Spectator'}\n disabled={!canChat}\n />\n \n {newDrivePresentation ? (\n {\n onOpenChange?.(false);\n blurChat();\n setTypingActive(false);\n }}\n className=\"flex min-h-12 w-10 shrink-0 items-center justify-center rounded border border-neutral-600 bg-neutral-800 text-xl leading-none text-slate-200 hover:bg-neutral-700 hover:text-white\"\n >\n ×\n \n ) : null}\n \n );\n}\n\nexport default memo(HudChatInput);\n","// New-drive Chat Expansion\n// Purpose: Keeps chat collapsed to a corner icon while reusing the established HUD composer behavior.\nimport { useCallback, useState } from 'react';\nimport { FaComment } from 'react-icons/fa';\nimport { useChatActions } from '../../../../context/ChatContext.jsx';\nimport { useSessionSelector } from '../../../../context/SessionContext.jsx';\nimport ControlHint from '../../../ControlHint/index.jsx';\nimport HudChatInput from '../../HudChatInput/index.jsx';\nimport KeyPill from '../../../vip/VipAudioUploadCard/KeyPill.jsx';\n\nexport default function ChatExpansion({ podOpen }) {\n const role = useSessionSelector((state) => state.session?.role || null);\n const { blurChat, focusChat } = useChatActions();\n const [open, setOpen] = useState(false);\n\n const setChatOpen = useCallback((nextOpen) => {\n const next = Boolean(nextOpen);\n setOpen(next);\n if (!next) blurChat();\n }, [blurChat]);\n\n const toggleChat = useCallback(() => {\n if (open) {\n setChatOpen(false);\n return;\n }\n\n setOpen(true);\n /* HudChatInput remains mounted while visually collapsed, so the existing\n ChatContext HUD ref is ready immediately. Waiting one animation frame lets\n the opening presentation commit before the browser paints the focus ring. */\n window.requestAnimationFrame(focusChat);\n }, [focusChat, open, setChatOpen]);\n\n // Spectators use the sidebar transcript but cannot send through the legacy HUD\n // composer, so hiding this expansion avoids presenting an inert control.\n if (role === 'spectator') return null;\n\n return (\n <>\n \n \n {/* The pill reflects the live keymap so remapping chat focus updates this\n compact HUD hint without duplicating or hardcoding the default key. */}\n } />\n \n\n \n \n );\n}\n","// Bottom-right Corner Pod\n// Purpose: Provides a compact circular camera-tilt control using the existing servo command path.\nimport { useCallback } from 'react';\nimport { FaVideo } from 'react-icons/fa';\nimport { useControlActions, useControlSelector } from '../../../../controls/index.js';\nimport ControlHint from '../../../ControlHint/index.jsx';\nimport useCanControlRover from '../../../../hooks/useCanControlRover.js';\nimport { useDriverLayout } from '../../../../layouts/driver/DriverLayoutContext.jsx';\nimport KeyPill from '../../../vip/VipAudioUploadCard/KeyPill.jsx';\nimport ChatExpansion from './ChatExpansion.jsx';\nimport CornerPodToggle from './CornerPodToggle.jsx';\nimport usePodVisibility from './usePodVisibility.js';\n\nconst ARC_CENTER = 72;\nconst ARC_RADIUS = 60;\nconst ARC_START_DEGREES = 105;\nconst ARC_SWEEP_DEGREES = 240;\n\nfunction pointOnArc(fraction) {\n // The unused third is centered on the physical bottom-right screen corner. Starting at\n // 105 degrees and sweeping clockwise to 345 degrees leaves that exact corner-facing gap.\n const degrees = ARC_START_DEGREES + fraction * ARC_SWEEP_DEGREES;\n const radians = (degrees * Math.PI) / 180;\n return {\n x: ARC_CENTER + Math.cos(radians) * ARC_RADIUS,\n y: ARC_CENTER + Math.sin(radians) * ARC_RADIUS,\n };\n}\n\nexport default function BottomRightPod({ roverId }) {\n const layout = useDriverLayout();\n const [open, setOpen] = usePodVisibility('camera', true);\n const camera = useControlSelector((control) => control.state.camera);\n const dockAssistActive = useControlSelector((control) => Boolean(control.state.manualDockAssist?.active));\n const { setServoAngle } = useControlActions();\n const canControl = useCanControlRover(roverId);\n const config = camera?.config;\n const enabled = Boolean(roverId && camera?.enabled && config);\n const min = Number(config?.minAngle);\n const max = Number(config?.maxAngle);\n const value = Number.isFinite(camera?.angle) ? camera.angle : Number(config?.homeAngle) || 0;\n const fraction = max > min ? Math.max(0, Math.min(1, (value - min) / (max - min))) : 0.5;\n const knob = pointOnArc(fraction);\n // Keep this derived state in one place because it also tells the independent chat\n // expansion whether it must offset itself above a visible camera-control pod.\n const showCameraControls = layout === 'desktop';\n const cameraPodOpen = showCameraControls && enabled && open;\n\n const updateFromPointer = useCallback((event) => {\n if (!canControl || !enabled || dockAssistActive || !(max > min)) return;\n const bounds = event.currentTarget.getBoundingClientRect();\n const x = ((event.clientX - bounds.left) / bounds.width) * 144;\n const y = ((event.clientY - bounds.top) / bounds.height) * 144;\n const pointerDegrees = ((Math.atan2(y - ARC_CENTER, x - ARC_CENTER) * 180) / Math.PI + 360) % 360;\n let arcDegrees = (pointerDegrees - ARC_START_DEGREES + 360) % 360;\n if (arcDegrees > ARC_SWEEP_DEGREES) {\n /*\n Pointer input inside the open corner-facing third is outside the slider. Snap it to\n whichever visible endpoint is closer so the gap remains visually and behaviorally open.\n */\n const distanceFromEnd = arcDegrees - ARC_SWEEP_DEGREES;\n const distanceFromStart = 360 - arcDegrees;\n arcDegrees = distanceFromStart < distanceFromEnd ? 0 : ARC_SWEEP_DEGREES;\n }\n const nextFraction = arcDegrees / ARC_SWEEP_DEGREES;\n setServoAngle(min + nextFraction * (max - min));\n }, [canControl, dockAssistActive, enabled, max, min, setServoAngle]);\n\n return (\n <>\n {cameraPodOpen ? (\n
\n {/* The pod shell and its visibility toggle stay usable while waiting, but\n every camera mutation is blocked and visibly muted until control returns. */}\n { if (event.buttons) updateFromPointer(event); }}>\n \n \n \n \n \n {/* These positions continue around the same circle just beyond the two slider endpoints.\n Together they occupy the open third facing the corner without enlarging the pod. */}\n
} />
\n
} />
\n setOpen(false)} />\n
\n ) : showCameraControls && enabled ? (\n setOpen(true)} />\n ) : null}\n {/* Chat is an independent expansion. It remains usable even when this rover\n has no camera-servo configuration or the camera pod is collapsed. */}\n \n \n );\n}\n","\"use client\";\nvar b={success:{pattern:[{duration:30,intensity:.5},{delay:60,duration:40,intensity:1}]},warning:{pattern:[{duration:40,intensity:.8},{delay:100,duration:40,intensity:.6}]},error:{pattern:[{duration:40,intensity:.9},{delay:40,duration:40,intensity:.9},{delay:40,duration:40,intensity:.9}]},light:{pattern:[{duration:15,intensity:.4}]},medium:{pattern:[{duration:25,intensity:.7}]},heavy:{pattern:[{duration:35,intensity:1}]},soft:{pattern:[{duration:40,intensity:.5}]},rigid:{pattern:[{duration:10,intensity:1}]},selection:{pattern:[{duration:8,intensity:.3}]},nudge:{pattern:[{duration:80,intensity:.8},{delay:80,duration:50,intensity:.3}]},buzz:{pattern:[{duration:1e3,intensity:1}]}};var g=16,x=184,m=1e3,p=20;function C(o){if(typeof o==\"number\")return{vibrations:[{duration:o}]};if(typeof o==\"string\"){let i=b[o];return i?{vibrations:i.pattern.map(t=>({...t}))}:(console.warn(`[web-haptics] Unknown preset: \"${o}\"`),null)}if(Array.isArray(o)){if(o.length===0)return{vibrations:[]};if(typeof o[0]==\"number\"){let i=o,t=[];for(let e=0;e0?i[e-1]:0;t.push({...n>0&&{delay:n},duration:i[e]})}return{vibrations:t}}return{vibrations:o.map(i=>({...i}))}}return{vibrations:o.pattern.map(i=>({...i}))}}function w(o,i){if(i>=1)return[o];if(i<=0)return[];let t=Math.max(1,Math.round(p*i)),e=p-t,n=[],s=o;for(;s>=p;)n.push(t),n.push(e),s-=p;if(s>0){let a=Math.max(1,Math.round(s*i));n.push(a);let r=s-a;r>0&&n.push(r)}return n}function M(o,i){let t=[];for(let e=0;e0&&(t.length>0&&t.length%2===0?t[t.length-1]+=a:(t.length===0&&t.push(0),t.push(a)));let r=w(n.duration,s);if(r.length===0){t.length>0&&t.length%2===0?t[t.length-1]+=n.duration:n.duration>0&&(t.push(0),t.push(n.duration));continue}for(let d of r)t.push(d)}return t}var I=0,v=class o{hapticLabel=null;domInitialized=!1;instanceId;debug;showSwitch;rafId=null;patternResolve=null;audioCtx=null;audioFilter=null;audioGain=null;audioBuffer=null;constructor(i){this.instanceId=++I,this.debug=i?.debug??!1,this.showSwitch=i?.showSwitch??!1}static isSupported=typeof navigator<\"u\"&&typeof navigator.vibrate==\"function\";async trigger(i=[{duration:25,intensity:.7}],t){let e=C(i);if(!e)return;let{vibrations:n}=e;if(n.length===0)return;let s=Math.max(0,Math.min(1,t?.intensity??.5));for(let a of n)if(a.duration>m&&(a.duration=m),!Number.isFinite(a.duration)||a.duration<0||a.delay!==void 0&&(!Number.isFinite(a.delay)||a.delay<0)){console.warn(\"[web-haptics] Invalid vibration values. Durations and delays must be finite non-negative numbers.\");return}if(o.isSupported&&navigator.vibrate(M(n,s)),!o.isSupported||this.debug){if(this.ensureDOM(),!this.hapticLabel)return;this.debug&&await this.ensureAudio(),this.stopPattern();let r=(n[0]?.delay??0)===0;if(r&&(this.hapticLabel.click(),this.debug&&this.audioCtx)){let d=Math.max(0,Math.min(1,n[0].intensity??s));this.playClick(d)}await this.runPattern(n,s,r)}}cancel(){this.stopPattern(),o.isSupported&&navigator.vibrate(0)}destroy(){this.stopPattern(),this.hapticLabel&&(this.hapticLabel.remove(),this.hapticLabel=null,this.domInitialized=!1),this.audioCtx&&(this.audioCtx.close(),this.audioCtx=null,this.audioFilter=null,this.audioGain=null,this.audioBuffer=null)}setDebug(i){this.debug=i,!i&&this.audioCtx&&(this.audioCtx.close(),this.audioCtx=null,this.audioFilter=null,this.audioGain=null,this.audioBuffer=null)}setShowSwitch(i){if(this.showSwitch=i,this.hapticLabel){let t=this.hapticLabel.querySelector(\"input\");this.hapticLabel.style.display=i?\"\":\"none\",t&&(t.style.display=i?\"\":\"none\")}}stopPattern(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.patternResolve?.(),this.patternResolve=null}runPattern(i,t,e){return new Promise(n=>{this.patternResolve=n;let s=[],a=0;for(let u of i){let c=Math.max(0,Math.min(1,u.intensity??t)),l=u.delay??0;l>0&&(a+=l,s.push({end:a,isOn:!1,intensity:0})),a+=u.duration,s.push({end:a,isOn:!0,intensity:c})}let r=a,d=0,h=-1,y=u=>{d===0&&(d=u);let c=u-d;if(c>=r){this.rafId=null,this.patternResolve=null,n();return}let l=s[0];for(let f of s)if(c=f&&(this.hapticLabel?.click(),this.debug&&this.audioCtx&&this.playClick(l.intensity),h=u)}this.rafId=requestAnimationFrame(y)};this.rafId=requestAnimationFrame(y)})}playClick(i){if(!this.audioCtx||!this.audioFilter||!this.audioGain||!this.audioBuffer)return;let t=this.audioBuffer.getChannelData(0);for(let a=0;as.disconnect(),s.start()}async ensureAudio(){if(!this.audioCtx&&typeof AudioContext<\"u\"){this.audioCtx=new AudioContext,this.audioFilter=this.audioCtx.createBiquadFilter(),this.audioFilter.type=\"bandpass\",this.audioFilter.frequency.value=4e3,this.audioFilter.Q.value=8,this.audioGain=this.audioCtx.createGain(),this.audioFilter.connect(this.audioGain),this.audioGain.connect(this.audioCtx.destination);let i=.004;this.audioBuffer=this.audioCtx.createBuffer(1,this.audioCtx.sampleRate*i,this.audioCtx.sampleRate);let t=this.audioBuffer.getChannelData(0);for(let e=0;e\"u\")return;let i=`web-haptics-${this.instanceId}`,t=document.createElement(\"label\");t.setAttribute(\"for\",i),t.textContent=\"Haptic feedback\",t.style.position=\"fixed\",t.style.bottom=\"10px\",t.style.left=\"10px\",t.style.padding=\"5px 10px\",t.style.backgroundColor=\"rgba(0, 0, 0, 0.7)\",t.style.color=\"white\",t.style.fontFamily=\"sans-serif\",t.style.fontSize=\"14px\",t.style.borderRadius=\"4px\",t.style.zIndex=\"9999\",t.style.userSelect=\"none\",this.hapticLabel=t;let e=document.createElement(\"input\");e.type=\"checkbox\",e.setAttribute(\"switch\",\"\"),e.id=i,e.style.all=\"initial\",e.style.appearance=\"auto\",this.showSwitch||(t.style.display=\"none\",e.style.display=\"none\"),t.appendChild(e),document.body.appendChild(t),this.domInitialized=!0}};export{b as a,v as b};\n","// Touch Haptics\n// Purpose: Adds lightweight physical confirmation to the WebUI's mobile control surfaces.\n// Scope: Maps semantic control actions to the shared web-haptics compatibility layer.\nimport { WebHaptics } from 'web-haptics';\n\n/*\n Use explicit patterns instead of the library's very short selection preset.\n Apart from being easier to feel on Android, the descending durations give\n Safari's switch-based fallback room to express a button as several ticks, a\n drive boundary as fewer ticks, and a camera step as one light tick.\n*/\nexport const TOUCH_HAPTIC_PATTERNS = Object.freeze({\n button: [{ duration: 50, intensity: 1 }],\n drive: [{ duration: 30, intensity: 1 }],\n camera: [{ duration: 15, intensity: 1 }],\n});\n\n/*\n Keep one vanilla instance for the application lifetime. The controls do not\n need framework-specific hooks, and a singleton lets the library cancel or\n replace an in-progress pattern consistently when the driver moves quickly.\n Browser-specific vibration and Safari fallback behavior deliberately belongs\n to web-haptics so future dependency upgrades improve every control together.\n*/\nconst touchHaptics = new WebHaptics();\n\nexport function triggerTouchHaptic(kind = 'button') {\n /*\n Controls request feedback by meaning rather than forwarding DOM events.\n This keeps disabled/no-op decisions beside the command that owns them and\n leaves browser capability handling entirely inside web-haptics.\n */\n const pattern = TOUCH_HAPTIC_PATTERNS[kind] || TOUCH_HAPTIC_PATTERNS.button;\n\n /*\n The promise describes completion of any scheduled pattern; control input\n must never wait for physical feedback, so intentionally leave it detached\n from the rover command path.\n */\n void touchHaptics.trigger(pattern);\n return true;\n}\n","// Accessory Control Field\n// Purpose: Maps one firmware-advertised generic control to a compact rover-control surface.\n// Scope: Owns browser-local input semantics; transport and device-specific behavior stay outside this file.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nfunction integerBound(value, fallback) {\n return Number.isInteger(value) ? value : fallback;\n}\n\nfunction clampInteger(value, minimum, maximum) {\n const numeric = Number(value);\n if (!Number.isFinite(numeric)) return minimum;\n return Math.min(maximum, Math.max(minimum, Math.round(numeric)));\n}\n\nfunction trimUnicode(value, maximumLength) {\n // Array.from counts Unicode code points instead of UTF-16 code units. That\n // mirrors Go's rune-count validation for emoji and other non-BMP characters.\n return Array.from(String(value ?? '')).slice(0, maximumLength).join('');\n}\n\nconst CARD_CLASS = 'mobile-touch-control rounded-xl border-2 px-2 py-1 text-slate-50';\n// Sliders already contain a label row and a separate track. Giving that\n// two-row control the same vertical padding as a one-row button made it much\n// taller than its neighbors without improving its touch target.\nconst SLIDER_CARD_CLASS = 'mobile-touch-control rounded-xl border-2 px-1.5 py-0.5 text-slate-50';\nconst DISABLED_CLASS = 'disabled:cursor-not-allowed disabled:opacity-40';\n\nfunction SliderControl({ peripheralId, control, disabled, send, value: storedValue }) {\n const minimum = integerBound(control.min, 0);\n const maximum = integerBound(control.max, minimum);\n const value = Number.isInteger(storedValue)\n ? clampInteger(storedValue, minimum, maximum)\n : minimum;\n const trackRef = useRef(null);\n const pointerIdRef = useRef(null);\n const lastHapticValueRef = useRef(value);\n\n const valuePercent = useMemo(() => {\n if (maximum === minimum) return 50;\n return ((value - minimum) / (maximum - minimum)) * 100;\n }, [maximum, minimum, value]);\n\n const sendValue = useCallback((nextValue) => {\n const next = clampInteger(nextValue, minimum, maximum);\n const hapticStep = Math.max(1, Math.round((maximum - minimum) / 20));\n if (Math.abs(next - lastHapticValueRef.current) >= hapticStep) {\n triggerTouchHaptic('camera');\n lastHapticValueRef.current = next;\n }\n send(peripheralId, control.id, next);\n }, [control.id, maximum, minimum, peripheralId, send]);\n\n const valueFromPointer = useCallback((event) => {\n const track = trackRef.current;\n if (!track) return value;\n const bounds = track.getBoundingClientRect();\n const rawPercent = (event.clientX - bounds.left) / Math.max(1, bounds.width);\n return minimum + Math.max(0, Math.min(1, rawPercent)) * (maximum - minimum);\n }, [maximum, minimum, value]);\n\n const updateFromPointer = useCallback((event) => {\n sendValue(valueFromPointer(event));\n }, [sendValue, valueFromPointer]);\n\n const handlePointerDown = useCallback((event) => {\n if (disabled || pointerIdRef.current !== null) return;\n // This follows VerticalCameraTilt's custom pointer-capture path so a range\n // drag remains reliable while another finger is operating the drive pad.\n event.preventDefault();\n pointerIdRef.current = event.pointerId;\n lastHapticValueRef.current = value;\n trackRef.current?.setPointerCapture?.(event.pointerId);\n updateFromPointer(event);\n }, [disabled, updateFromPointer, value]);\n\n const handlePointerMove = useCallback((event) => {\n if (pointerIdRef.current !== event.pointerId) return;\n event.preventDefault();\n updateFromPointer(event);\n }, [updateFromPointer]);\n\n const handlePointerEnd = useCallback((event) => {\n if (pointerIdRef.current !== event.pointerId) return;\n event.preventDefault();\n pointerIdRef.current = null;\n trackRef.current?.releasePointerCapture?.(event.pointerId);\n }, []);\n\n const handleKeyDown = (event) => {\n if (disabled) return;\n let next = null;\n if (event.key === 'ArrowLeft' || event.key === 'ArrowDown') next = value - 1;\n if (event.key === 'ArrowRight' || event.key === 'ArrowUp') next = value + 1;\n if (event.key === 'Home') next = minimum;\n if (event.key === 'End') next = maximum;\n if (next == null) return;\n event.preventDefault();\n sendValue(next);\n };\n\n return (\n
\n
\n {control.name}\n {value}\n
\n {\n if (pointerIdRef.current === event.pointerId) pointerIdRef.current = null;\n }}\n onKeyDown={handleKeyDown}\n onContextMenu={(event) => event.preventDefault()}\n style={{ touchAction: 'none' }}\n className=\"mobile-touch-control mobile-drag-control relative mt-0.5 h-6 w-full rounded-full border border-emerald-100/80 bg-emerald-950 shadow-inner focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-emerald-200\"\n >\n {/* An inset track gives the thumb room to remain entirely inside the\n card at both endpoints without browser-specific range styling. */}\n
\n \n
\n \n
\n \n );\n}\n\nfunction ToggleControl({ peripheralId, control, disabled, send, value }) {\n const enabled = value === true;\n\n const toggle = () => {\n if (disabled) return;\n send(peripheralId, control.id, !enabled);\n triggerTouchHaptic('button');\n };\n\n return (\n \n {control.name}\n {enabled ? 'On' : 'Off'}\n \n );\n}\n\nfunction MomentaryControl({ peripheralId, control, disabled, send, value }) {\n const pressed = value === true;\n const pressedRef = useRef(false);\n const pointerIdRef = useRef(null);\n\n const release = useCallback(() => {\n if (!pressedRef.current) return;\n pressedRef.current = false;\n pointerIdRef.current = null;\n // Always pair a successful press with false, including cancellation,\n // permission loss, and replacement of the Accessories view.\n send(peripheralId, control.id, false);\n }, [control.id, peripheralId, send]);\n\n const press = useCallback(() => {\n if (disabled || pressedRef.current) return;\n pressedRef.current = true;\n send(peripheralId, control.id, true);\n }, [control.id, disabled, peripheralId, send]);\n\n useEffect(() => release, [release]);\n useEffect(() => {\n if (disabled) release();\n }, [disabled, release]);\n\n return (\n {\n if (disabled || pointerIdRef.current != null) return;\n event.preventDefault();\n pointerIdRef.current = event.pointerId;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n press();\n }}\n onPointerUp={(event) => {\n if (pointerIdRef.current !== event.pointerId) return;\n release();\n triggerTouchHaptic('button');\n }}\n onPointerCancel={release}\n onLostPointerCapture={release}\n onKeyDown={(event) => {\n if ((event.key === ' ' || event.key === 'Enter') && !event.repeat) {\n event.preventDefault();\n press();\n }\n }}\n onKeyUp={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n release();\n triggerTouchHaptic('button');\n }\n }}\n onContextMenu={(event) => event.preventDefault()}\n className={`${CARD_CLASS} ${DISABLED_CLASS} flex min-h-12 w-full items-center justify-center text-center font-semibold ${pressed ? 'border-fuchsia-200 bg-fuchsia-600 text-white' : 'border-fuchsia-300/70 bg-fuchsia-900 text-fuchsia-50'}`}\n >\n {control.name}\n \n );\n}\n\nfunction NumberControl({ peripheralId, control, disabled, send, value: storedValue }) {\n const minimum = integerBound(control.min, 0);\n const maximum = integerBound(control.max, minimum);\n const initialValue = Number.isInteger(storedValue)\n ? clampInteger(storedValue, minimum, maximum)\n : minimum;\n const [value, setValue] = useState(String(initialValue));\n const lastSentRef = useRef(initialValue);\n\n const commit = () => {\n const next = clampInteger(value, minimum, maximum);\n setValue(String(next));\n if (disabled || next === lastSentRef.current) return;\n lastSentRef.current = next;\n send(peripheralId, control.id, next);\n triggerTouchHaptic('button');\n };\n\n return (\n \n );\n}\n\nfunction TextControl({ peripheralId, control, disabled, send, value: storedValue }) {\n const maximumLength = Math.max(1, integerBound(control.maxLength, 1));\n const initialValue = typeof storedValue === 'string'\n ? trimUnicode(storedValue, maximumLength)\n : '';\n const [value, setValue] = useState(initialValue);\n const lastSentRef = useRef(initialValue);\n\n const commit = () => {\n const next = trimUnicode(value, maximumLength);\n setValue(next);\n if (disabled || next === lastSentRef.current) return;\n lastSentRef.current = next;\n send(peripheralId, control.id, next);\n triggerTouchHaptic('button');\n };\n\n return (\n \n );\n}\n\nexport default function AccessoryControlField(props) {\n switch (props.control?.type) {\n case 'slider':\n return ;\n case 'button':\n return props.control.mode === 'momentary'\n ? \n : ;\n case 'number':\n return ;\n case 'text':\n return ;\n default:\n // roverd validates the four-type contract before publishing metadata.\n // Returning nothing remains a defensive boundary for stale servers.\n return null;\n }\n}\n","// Rover Accessories Selector\n// Purpose: Provides the ordered generic-control inventory advertised by one rover.\n// Scope: Selects public roster metadata only; placement and visibility remain parent-UI decisions.\nimport { useMemo } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\n\nexport default function useRoverAccessories(roverId) {\n const rosterEntry = useSessionSelector((state) => {\n if (!roverId) return null;\n const roster = Array.isArray(state.session?.roster) ? state.session.roster : [];\n return roster.find((entry) => String(entry.id) === String(roverId)) || null;\n });\n const advertisedPeripherals = rosterEntry?.peripherals;\n\n const peripherals = useMemo(() => {\n if (!Array.isArray(advertisedPeripherals)) return [];\n // A peripheral with no generic controls may still provide a standardized\n // camera, headlight, or laser backend. Those roles use their established\n // HUD controls and must not create an empty Accessories surface.\n return advertisedPeripherals.filter(\n (peripheral) => Array.isArray(peripheral?.controls) && peripheral.controls.length > 0,\n );\n }, [advertisedPeripherals]);\n\n return {\n peripherals,\n hasAccessories: peripherals.length > 0,\n };\n}\n","// Rover Accessory Controls\n// Purpose: Renders every generic control advertised by a selected rover as one ordered control surface.\n// Scope: Reusable content only; mobile and desktop parents own placement, expansion, and visibility.\nimport { useCallback } from 'react';\nimport { useControlActions, useControlSelector } from '../../controls/index.js';\nimport useCanControlRover from '../../hooks/useCanControlRover.js';\nimport AccessoryControlField from './AccessoryControlField.jsx';\nimport useRoverAccessories from './useRoverAccessories.js';\n\nconst EMPTY_ACCESSORY_VALUES = Object.freeze({});\n\nexport default function RoverAccessoryControls({\n roverId,\n headerAction = null,\n plainCenteredHeadings = false,\n className = '',\n}) {\n const { peripherals } = useRoverAccessories(roverId);\n const canControl = useCanControlRover(roverId);\n const { setPeripheralControl } = useControlActions();\n const values = useControlSelector(\n (control) => control.state.peripheralValues?.[String(roverId)] || EMPTY_ACCESSORY_VALUES,\n );\n const send = useCallback(\n (peripheralId, controlId, value) => setPeripheralControl(peripheralId, controlId, value),\n [setPeripheralControl],\n );\n\n if (peripherals.length === 0) return null;\n\n return (\n \n {peripherals.map((peripheral, peripheralIndex) => {\n return (\n
\n {/* The firmware's array order is authoritative. Mapping directly over\n it keeps physical authoring order intact across every UI host.\n Every peripheral keeps its heading even when it is the only\n device, because its firmware-provided name identifies which\n physical accessory owns the controls below it. */}\n \n {/* Desktop already supplies one continuous HUD background, so\n its title needs neither a second tone nor left alignment.\n Mobile keeps the ordinary heading because it also carries\n the Back action on the opposite side. */}\n

\n {peripheral.name}\n

\n {peripheralIndex === 0 ? headerAction : null}\n \n
\n {peripheral.controls.map((control) => (\n \n ))}\n
\n
\n );\n })}\n \n );\n}\n","// Accessories Vertical Toggle\n// Purpose: Gives mobile and desktop the same edge-mounted control for changing accessory visibility.\n// Scope: Owns only visual treatment and activation; each parent decides its position and destination.\nimport { FaPuzzlePiece } from 'react-icons/fa';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nexport default function AccessoriesToggle({\n label,\n ariaLabel,\n onClick,\n compact = false,\n hud = false,\n className = '',\n}) {\n // The Back action is still shorter than the vertical launcher, but it needs\n // a normal touch target and a readable word instead of the previous tiny\n // abbreviated control. The full launcher continues to fill the height its\n // desktop or mobile parent assigns to it.\n const sizeClass = compact ? 'h-8 w-14' : 'h-full w-8';\n const toneClass = hud\n // On desktop the tab sits inside the shared popout shell. Rounding only\n // its exposed right edge preserves its left-wall attachment without\n // introducing a separate accessory-specific panel treatment.\n ? 'rounded-r-xl border-0 bg-black/60 text-white shadow-none'\n : 'rounded-xl border-2 border-cyan-300/70 bg-cyan-900 text-cyan-50 shadow-md';\n\n return (\n {\n triggerTouchHaptic('button');\n onClick();\n }}\n className={`mobile-touch-control flex shrink-0 items-center justify-center text-sm font-semibold ${sizeClass} ${toneClass} ${className}`.trim()}\n >\n {/* Full launchers use vertical writing in the narrow wall space. The\n compact Back action stays horizontal so it fits in the heading. */}\n \n {!compact ? : null}\n {label}\n \n \n );\n}\n","// Desktop Accessories Expansion\n// Purpose: Places generic rover controls on a collapsible surface centered along the video's left wall.\n// Scope: Owns desktop positioning and persisted visibility while reusing the layout-independent control renderer.\nimport RoverAccessoryControls from '../../../RoverAccessoryControls/index.jsx';\nimport AccessoriesToggle from '../../../RoverAccessoryControls/AccessoriesToggle.jsx';\nimport useRoverAccessories from '../../../RoverAccessoryControls/useRoverAccessories.js';\nimport usePodVisibility from './usePodVisibility.js';\n\nexport default function AccessoriesExpansion({ roverId }) {\n const { hasAccessories } = useRoverAccessories(roverId);\n const [open, setOpen] = usePodVisibility('accessories', false);\n\n // Do not leave an invisible anchor or reserved HUD area on rovers whose\n // peripherals provide only standardized controls or no controls at all.\n if (!hasAccessories) return null;\n\n return (\n
\n {/* The tab remains attached to the video's left wall. When open, this\n single shell grows around both the unchanged tab position and the\n controls to its right, so the controls are not rendered as a second\n disconnected panel. Its height follows content until the shared\n renderer reaches the scrolling boundary. */}\n
\n setOpen(!open)}\n hud\n className=\"!h-28\"\n />\n {open ? (\n \n ) : null}\n
\n
\n );\n}\n","// New Drive Corner Pods\n// Purpose: Composes the four independently owned corner controls around the shared video stage.\nimport TopLeftPod from './TopLeftPod.jsx';\nimport TopRightPod from './TopRightPod.jsx';\nimport BottomLeftPod from './BottomLeftPod.jsx';\nimport BottomRightPod from './BottomRightPod.jsx';\nimport AccessoriesExpansion from './AccessoriesExpansion.jsx';\nimport { useDriverLayout } from '../../../../layouts/driver/DriverLayoutContext.jsx';\n\nexport default function CornerPods({ roverId }) {\n const layout = useDriverLayout();\n const showPhysicalControlPods = layout === 'desktop';\n\n return (\n <>\n \n \n {/* The mobile layouts already provide large touch controls around the video.\n Omitting this pod avoids presenting duplicate horn, light, and laser actions. */}\n {showPhysicalControlPods ? : null}\n {/* Generic accessory controls stay on the same left side at every\n breakpoint, but mobile owns their placement inside AuxColumn. */}\n {showPhysicalControlPods ? : null}\n {/* BottomRightPod also owns the independent chat expansion, so it remains mounted\n on mobile and determines its own camera-control visibility from layout context. */}\n \n \n );\n}\n","// New Generation Docking HUD\n// Purpose: Provides a single low-friction transition between docked, driving, and manual docking.\n// Scope: Owns presentation and the existing manual-assist lifecycle for the current driver HUD;\n// the archived desktop layout retains its previous DriveDockAction behavior.\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { FaChargingStation } from 'react-icons/fa';\nimport { useControlActions } from '../../../../controls/index.js';\nimport ControlHint from '../../../ControlHint/index.jsx';\nimport { useTelemetrySelector } from '../../../../context/TelemetryContext.jsx';\nimport { dockTelemetryEqual, selectDockTelemetry } from '../../../../context/telemetryViews.js';\nimport { useManualDockAssist } from '../../../../features/manualDockAssist/useManualDockAssist.js';\nimport { useSettingsNamespace } from '../../../../settings/index.js';\nimport useCanControlRover from '../../../../hooks/useCanControlRover.js';\nimport { useDriverLayout } from '../../../../layouts/driver/DriverLayoutContext.jsx';\nimport { useSessionSelector } from '../../../../context/SessionContext.jsx';\nimport KeyPill from '../../../vip/VipAudioUploadCard/KeyPill.jsx';\nimport ExpansionPanel from '../CornerPods/ExpansionPanel.jsx';\nimport usePodVisibility from '../CornerPods/usePodVisibility.js';\n\nfunction DockedAction({ driveKeyLabel, pending, controlsDisabled, error, onUndock }) {\n const [hidden, setHidden] = useState(false);\n const waitingForTurn = controlsDisabled && !pending;\n\n /* The dismissal belongs to this mounted docked episode. DockingHud unmounts\n this component when the rover leaves the base, and its roverId key remounts\n it for a different assignment, so no persistence or reset effect is needed. */\n if (hidden && !pending) return null;\n\n const mainToneClass = waitingForTurn\n ? 'cursor-not-allowed bg-slate-950/95 ring-slate-400/70'\n : 'bg-emerald-950/90 ring-emerald-300/80 hover:bg-emerald-900/95 focus-visible:ring-emerald-200 disabled:cursor-wait disabled:opacity-75';\n const hideToneClass = waitingForTurn\n ? 'bg-slate-950/95 ring-slate-400/70 hover:bg-slate-900'\n : 'bg-emerald-950/90 ring-emerald-300/80 hover:bg-emerald-900/95 focus-visible:ring-emerald-200';\n\n return (\n <>\n {/* The docked shield is owned by the dismissible action so hiding the\n prompt also reveals the video and ordinary HUD instead of leaving an\n unexplained dark, input-blocking layer behind. */}\n
\n
\n
\n \n {pending ? 'Undocking…' : 'Your rover is docked'}\n {pending ? (\n null\n ) : waitingForTurn ? (\n /* A disabled action must explain the ownership constraint instead of\n continuing to advertise a click and keybind that cannot succeed. */\n \n Wait for your turn to undock.\n \n ) : (\n \n Click here\n {driveKeyLabel ? (\n <>\n {' '}or press \n \n ) : null}\n {' '}to undock and drive the rover\n \n )}\n {error ? {error} : null}\n \n {!pending ? (\n setHidden(true)}\n className={`pointer-events-auto absolute left-1/2 top-full -translate-x-1/2 rounded-b-lg px-6 py-1.5 text-sm font-bold text-white shadow-xl ring-2 transition focus-visible:outline-none focus-visible:ring-4 ${hideToneClass}`}\n >\n Hide\n \n ) : null}\n
\n
\n \n );\n}\n\nfunction AutoDockingAction({ driveKeyLabel, pending, controlsDisabled, error, onResumeDriving }) {\n const waitingForTurn = controlsDisabled && !pending;\n\n return (\n
\n \n \n {pending ? 'Starting driving…' : 'Rover is docking itself'}\n \n {pending ? null : waitingForTurn ? (\n /* Automatic docking is still important context when another user owns\n the turn, but the recovery action must not imply that it is available. */\n \n Wait for your turn to resume driving.\n \n ) : (\n \n Click here\n {driveKeyLabel ? (\n <>\n {' '}or press \n \n ) : null}\n {' '}to stop automatic docking and resume driving\n \n )}\n {error ? {error} : null}\n \n
\n );\n}\n\nfunction DockAssistAction({ active, pending, controlsDisabled, error, dockKeyLabel, onDock, onCancel, cornerOffsetClass, open, onOpenChange, batterySeverity }) {\n const batteryUrgent = batterySeverity === 'urgent';\n const batteryLow = batterySeverity === 'low';\n // When the battery pod is collapsed its triangular reopen control owns the\n // outermost forty pixels. Docking uses the next top-edge slot in both open\n // and collapsed states so the two independent controls never overlap.\n const dockPositionClass = cornerOffsetClass === 'right-0' ? 'right-10' : cornerOffsetClass;\n if (active) {\n return (\n
\n {/* Once assist is active, the camera image is the user's task context. Centering this\n one-line instruction connects it to that view instead of leaving guidance beside the\n corner button that already completed its action. */}\n
\n Dock assist is active, drive forward onto the dock.\n \n Cancel\n \n {error ? {error} : null}\n
\n
\n );\n }\n\n return (\n \n
\n \n \n {pending ? 'Starting…' : batteryUrgent ? 'Dock now' : batteryLow ? 'Dock soon' : 'Dock rover'}\n {dockKeyLabel && !pending ? : null}\n \n
\n {error ?
{error}
: null}\n \n );\n}\n\nfunction UndockTransitionGhost({ onFinish }) {\n const ghostRef = useRef(null);\n\n useEffect(() => {\n const element = ghostRef.current;\n const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n if (!element || reducedMotion || typeof element.animate !== 'function') {\n onFinish();\n return undefined;\n }\n\n /*\n This intentionally animates a disposable visual copy instead of trying to morph the\n centered action into the differently structured corner control. Moving left/top while\n scaling and fading is inexpensive, communicates where Dock moved, and needs no viewport\n measurements or persistent layout state.\n */\n const animation = element.animate(\n [\n {\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%) scale(1)',\n opacity: 1,\n },\n {\n left: 'calc(100% - 10rem)',\n top: '0',\n transform: 'translate(0, 0) scale(0.2)',\n opacity: 0,\n },\n ],\n {\n duration: 850,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n fill: 'forwards',\n },\n );\n animation.onfinish = onFinish;\n\n return () => {\n animation.onfinish = null;\n animation.cancel();\n };\n }, [onFinish]);\n\n return (\n \n Rover docked\n Dock control moved here\n
\n );\n}\n\nexport default function DockingHud({ roverId }) {\n const layout = useDriverLayout();\n const actions = useControlActions();\n const dockTelemetry = useTelemetrySelector(roverId, selectDockTelemetry, dockTelemetryEqual);\n // This replaces ManualDockAssistOverlay as the current HUD's one lifecycle owner. It preserves the\n // success sounds, camera positioning, speed cap, and automatic exit after charging begins.\n const dockAssist = useManualDockAssist({ manageLifecycle: true });\n const canControl = useCanControlRover(roverId);\n const batteryState = useSessionSelector((state) => {\n const rover = (state.session?.roster || []).find((entry) => String(entry.id) === String(roverId));\n return rover?.batteryState || null;\n });\n // DockingHud already owns the canonical desktop docking action, so battery urgency only\n // changes that action's emphasis and wording instead of introducing a competing button.\n const batterySeverity = batteryState?.urgentActive ? 'urgent' : batteryState?.warnActive ? 'low' : null;\n const { value: podSettings } = useSettingsNamespace('newdrivePods', {});\n const [dockExpansionOpen, setDockExpansionOpen] = usePodVisibility('dockAssist', true);\n // The action name is presentation state as well as busy state. Keeping the\n // reason prevents a passive, already-undocked rover from ever saying \"Undocking\".\n const [pendingAction, setPendingAction] = useState(null);\n const [error, setError] = useState('');\n const [showUndockTransition, setShowUndockTransition] = useState(false);\n\n const docked = Boolean(dockTelemetry?.homeBase);\n const oiMode = String(dockTelemetry?.oiModeLabel || '').toLowerCase();\n // The established UI contract treats exactly passive + undocked as the Roomba's\n // autonomous docking attempt. Unknown telemetry must not fabricate that state.\n const autoDocking = !docked && !dockAssist.active && oiMode === 'passive';\n const pending = pendingAction !== null;\n /* Mobile already presents its own touch-oriented driving controls. The docked\n action therefore keeps its plain-language instruction without advertising a\n keyboard shortcut that is irrelevant on that layout. */\n const driveKeyLabel = layout === 'desktop' ? : '';\n const dockKeyLabel = layout === 'desktop' ? : '';\n const batteryPodOpen = podSettings?.battery !== false;\n // The camera arc is the shared circular-pod reference size. Keep the dock expansion flush\n // against the battery shell after enlarging that gauge to the same 8.5-rem footprint.\n const cornerOffsetClass = batteryPodOpen ? 'right-[8.5rem]' : 'right-0';\n const previousDockedRef = useRef(docked);\n const finishUndockTransition = useCallback(() => setShowUndockTransition(false), []);\n\n useEffect(() => {\n const wasDocked = previousDockedRef.current;\n // Only a real live transition plays the cue. An already-undocked rover must not animate\n // merely because the user opened or refreshed the page.\n if (wasDocked && !docked) {\n setShowUndockTransition(true);\n } else if (docked) {\n setShowUndockTransition(false);\n }\n previousDockedRef.current = docked;\n }, [docked]);\n\n const startDriving = async (action) => {\n if (!roverId || pending || !canControl) return;\n setPendingAction(action);\n setError('');\n try {\n // The established drive sequence is the canonical undock path: it restores the camera,\n // enters full Open Interface mode, and performs the short physical back-away from the dock.\n dockAssist.exitAssist();\n actions.setMode('drive');\n await actions.runMacro('drive-sequence');\n } catch (caughtError) {\n setError(caughtError?.message || 'Unable to start driving. Please try again.');\n } finally {\n setPendingAction(null);\n }\n };\n\n const startUndocking = () => {\n startDriving('undocking');\n };\n const resumeDriving = () => {\n startDriving('resuming');\n };\n\n const startDocking = () => {\n if (!roverId || pending || !canControl) return;\n setError('');\n try {\n // Enter on the first click. The explanation appears as the resulting active state instead\n // of forcing the user through a modal and a second confirmation action.\n dockAssist.enterAssist();\n } catch (caughtError) {\n setError(caughtError?.message || 'Unable to start dock assist. Please try again.');\n }\n };\n\n return (\n <>\n {/* Automatic docking keeps its own lighter blocking shield. The ordinary\n docked shield lives inside DockedAction because the new Hide control\n must dismiss the prompt and its dimming as one coherent surface. */}\n \n\n {docked || pendingAction === 'undocking' ? (\n \n ) : autoDocking || pendingAction === 'resuming' ? (\n \n ) : (\n <>\n {dockAssist.active ? (\n /* Dock assist needs the unobscured camera image. A thin cyan frame communicates the\n temporary mode without adding another instruction surface over the video. */\n
\n ) : null}\n {/* Desktop keeps the compact corner entry point. Mobile starts assist from\n its dedicated control column, but once active it still mounts this component\n so the centered camera instruction and cancel action remain available. */}\n {layout === 'desktop' || dockAssist.active ? (\n \n ) : null}\n {showUndockTransition ? : null}\n \n )}\n \n );\n}\n","// New Generation Wheel Drop Indicators\n// Purpose: Mirrors the top-down map's red wheel overlay at the left and right video edges.\n// Scope: Displays the two physical wheel-drop booleans without generic HUD chrome or control behavior.\nimport {\n shallowObjectEqual,\n useVisualTelemetrySelector,\n} from '../../../../context/TelemetryContext.jsx';\nimport './styles.css';\n\nconst EMPTY_WHEEL_DROPS = Object.freeze({ left: false, right: false });\n\nfunction selectWheelDrops(frame) {\n const contact = frame?.sensors?.bumpsAndWheelDrops;\n if (!contact) return EMPTY_WHEEL_DROPS;\n return {\n left: Boolean(contact.wheelDropLeft),\n right: Boolean(contact.wheelDropRight),\n };\n}\n\nfunction WheelDropOverlay({ side }) {\n return (\n \n {/* Mirrored rotation follows the left/right text orientation used by TopDownMap's wheel glyphs. */}\n WHEEL OFF GROUND\n
\n );\n}\n\nexport default function WheelDropIndicators({ roverId }) {\n const drops = useVisualTelemetrySelector(roverId, selectWheelDrops, shallowObjectEqual);\n\n return (\n <>\n {drops.left ? : null}\n {drops.right ? : null}\n \n );\n}\n","// Bottom Sensor HUD Geometry\n// Purpose: Defines one physical front-rover curve shared by bumpers, IR sensors, and cliffs.\n// Scope: Contains static display geometry only; telemetry components decide which shapes are visible.\n\nexport const SENSOR_HUD_VIEW_BOX = '0 0 1000 140';\nexport const LEFT_BUMPER_PATH = 'M 8 128 Q 248 60 488 60';\nexport const RIGHT_BUMPER_PATH = 'M 512 60 Q 752 60 992 128';\n\n/* Horizontal center tangents keep the mirrored halves circular instead of forming a pointed crown. */\nconst LEFT_CURVE = Object.freeze({ x0: 8, x1: 488, y0: 128, controlY: 60, y1: 60 });\nconst RIGHT_CURVE = Object.freeze({ x0: 512, x1: 992, y0: 60, controlY: 60, y1: 128 });\n\nfunction curveForX(x) {\n return x < 500 ? LEFT_CURVE : RIGHT_CURVE;\n}\n\nexport function bumperCurvePoint(x) {\n const curve = curveForX(x);\n const t = Math.max(0, Math.min(1, (x - curve.x0) / (curve.x1 - curve.x0)));\n const oneMinusT = 1 - t;\n const y =\n oneMinusT * oneMinusT * curve.y0 +\n 2 * oneMinusT * t * curve.controlY +\n t * t * curve.y1;\n const dyDt =\n 2 * oneMinusT * (curve.controlY - curve.y0) +\n 2 * t * (curve.y1 - curve.controlY);\n const slope = dyDt / (curve.x1 - curve.x0);\n return { x, y, slope };\n}\n\nfunction segmentPath(startX, endX, verticalOffset) {\n const start = bumperCurvePoint(startX);\n const end = bumperCurvePoint(endX);\n const middle = bumperCurvePoint((startX + endX) / 2);\n /* Solve the quadratic control height so the segment passes through the shared curve midpoint. */\n const controlY = 2 * (middle.y + verticalOffset) - (start.y + end.y) / 2 - verticalOffset;\n return `M ${startX} ${start.y + verticalOffset} Q ${(startX + endX) / 2} ${controlY} ${endX} ${end.y + verticalOffset}`;\n}\n\nconst IR_SENSOR_X = [75, 225, 400, 600, 775, 925];\nconst IR_SENSOR_WIDTHS = [78, 70, 64, 64, 70, 78];\nconst IR_OFFSET_ABOVE_BUMPER = 10;\n\nexport const IR_SENSOR_GEOMETRY = IR_SENSOR_X.map((x, index) => {\n const point = bumperCurvePoint(x);\n /* The upward normal makes outer sensors fan sideways and center sensors project upward. */\n const normalLength = Math.hypot(point.slope, 1);\n return Object.freeze({\n key: ['left', 'front-left', 'center-left', 'center-right', 'front-right', 'right'][index],\n tipX: x,\n tipY: point.y - IR_OFFSET_ABOVE_BUMPER,\n directionX: point.slope / normalLength,\n directionY: -1 / normalLength,\n width: IR_SENSOR_WIDTHS[index],\n });\n});\n\nconst CLIFF_OFFSET_BELOW_BUMPER = 21;\nconst CLIFF_RANGES = [\n ['left', 185, 315],\n ['frontLeft', 345, 485],\n ['frontRight', 515, 655],\n ['right', 685, 815],\n];\n\nexport const CLIFF_ARCS = CLIFF_RANGES.map(([key, startX, endX]) => Object.freeze({\n key,\n path: segmentPath(startX, endX, CLIFF_OFFSET_BELOW_BUMPER),\n}));\n","// New Generation Bumper Indicators\n// Purpose: Projects the rover's two physical bumper halves across the bottom of the video.\n// Scope: Visualizes server telemetry only; it does not infer collisions or change control behavior.\nimport { useId } from 'react';\nimport {\n shallowObjectEqual,\n useVisualTelemetrySelector,\n} from '../../../../context/TelemetryContext.jsx';\nimport { LEFT_BUMPER_PATH, RIGHT_BUMPER_PATH } from '../BottomSensorHud/geometry.js';\nimport './styles.css';\n\nconst EMPTY_BUMPERS = Object.freeze({ bumpLeft: false, bumpRight: false });\n\nfunction selectBumpers(frame) {\n const contact = frame?.sensors?.bumpsAndWheelDrops;\n if (!contact) return EMPTY_BUMPERS;\n return {\n bumpLeft: Boolean(contact.bumpLeft),\n bumpRight: Boolean(contact.bumpRight),\n };\n}\n\nfunction ActiveBumperArc({ pathId, path, label }) {\n return (\n \n {/*\n The broad rounded stroke uses the same visual idea as TopDownMap's\n ArcSegment, while this wider quadratic path is shaped for the camera\n viewport instead of the circular top-down rover geometry.\n */}\n \n \n \n {label}\n \n \n \n );\n}\n\nexport default function BumperIndicators({ roverId }) {\n const telemetry = useVisualTelemetrySelector(roverId, selectBumpers, shallowObjectEqual);\n const instanceId = useId().replaceAll(':', '');\n if (!telemetry.bumpLeft && !telemetry.bumpRight) return null;\n\n return (\n \n {telemetry.bumpLeft ? (\n \n ) : null}\n {telemetry.bumpRight ? (\n \n ) : null}\n \n );\n}\n","// New Generation IR Proximity HUD\n// Purpose: Projects the six light-bump sensors as cones above their physical bumper positions.\n// Scope: Mirrors the top-down map's signal geometry without retaining history or smoothing telemetry.\nimport { memo } from 'react';\nimport { useVisualTelemetrySelector } from '../../../../context/TelemetryContext.jsx';\nimport {\n lightBumpTelemetryEqual,\n selectLightBumpTelemetry,\n} from '../../../../context/telemetryViews.js';\nimport { IR_SENSOR_GEOMETRY } from '../BottomSensorHud/geometry.js';\nimport './styles.css';\n\nconst IR_NOISE_THRESHOLD = 40;\nconst IR_FULL_STRENGTH = 1200;\nconst FAR_CONE_LENGTH = 105;\nconst NEAR_CONE_LENGTH = 12;\nconst STRIPE_COUNT = 7;\nconst FADE_IN_RANGE = 0.1;\nconst MAX_CONE_OPACITY = 1;\nconst RED_POINT = 0.75;\n\nfunction clamp01(value) {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction buildStripePath(sensor, length) {\n const perpendicularX = -sensor.directionY;\n const perpendicularY = sensor.directionX;\n\n /*\n Keep all seven stripes in one multi-subpath so the browser still manages\n only one SVG path per sensor. This function runs only for the memoized\n sensor whose raw value changed, preserving the exact tuned width and length\n geometry without reconciling 42 separate elements.\n */\n return Array.from({ length: STRIPE_COUNT }, (_, index) => {\n const fraction = (index + 1) / STRIPE_COUNT;\n const stripeDistance = length * fraction;\n const centerX = sensor.tipX + sensor.directionX * stripeDistance;\n const centerY = sensor.tipY + sensor.directionY * stripeDistance;\n const halfWidth = (sensor.width * fraction) / 2;\n const leftX = centerX + perpendicularX * halfWidth;\n const leftY = centerY + perpendicularY * halfWidth;\n const rightX = centerX - perpendicularX * halfWidth;\n const rightY = centerY - perpendicularY * halfWidth;\n const curveDepth = Math.max(1.5, length * 0.045 * fraction);\n const controlX = centerX + sensor.directionX * curveDepth;\n const controlY = centerY + sensor.directionY * curveDepth;\n return `M ${leftX} ${leftY} Q ${controlX} ${controlY} ${rightX} ${rightY}`;\n }).join(' ');\n}\n\nfunction buildPresentation(value) {\n const numericValue = Number(value) || 0;\n const active = numericValue > IR_NOISE_THRESHOLD;\n const normalized = clamp01(\n (numericValue - IR_NOISE_THRESHOLD) / (IR_FULL_STRENGTH - IR_NOISE_THRESHOLD),\n );\n /*\n Match the top-down map's display curve. This is an instantaneous spatial\n mapping, not temporal smoothing: the current raw value alone determines the\n cone length for this frame.\n */\n const eased = Math.pow(normalized, 0.35);\n const length = FAR_CONE_LENGTH - (FAR_CONE_LENGTH - NEAR_CONE_LENGTH) * eased;\n const colorStrength = clamp01(normalized / RED_POINT);\n\n return {\n length,\n /* Color reaches red independently of distance, making its warning point directly tunable. */\n color: `hsl(${120 * (1 - colorStrength)} 90% 50%)`,\n /*\n Opacity is driven by the raw sensor range, not merely by a CSS transition.\n The first fifth of the usable range fades the cone from invisible to its\n normal opacity before distance and color become the dominant cues.\n */\n opacity: active ? clamp01(normalized / FADE_IN_RANGE) * MAX_CONE_OPACITY : 0,\n };\n}\n\nconst IrSensorCone = memo(function IrSensorCone({ sensor, value }) {\n const presentation = buildPresentation(value);\n const stripePath = buildStripePath(sensor, presentation.length);\n\n return (\n \n );\n});\n\nexport default function IrProximityHud({ roverId }) {\n const values = useVisualTelemetrySelector(\n roverId,\n selectLightBumpTelemetry,\n lightBumpTelemetryEqual,\n );\n\n return (\n \n {IR_SENSOR_GEOMETRY.map((sensor, index) => (\n \n ))}\n \n );\n}\n","// New Generation Cliff Indicators\n// Purpose: Projects the four underside cliff sensors just below the front bumper curve.\n// Scope: Uses the rover's cliff booleans directly without interpreting raw cliff signal values.\nimport { useId } from 'react';\nimport {\n shallowObjectEqual,\n useVisualTelemetrySelector,\n} from '../../../../context/TelemetryContext.jsx';\nimport { CLIFF_ARCS } from '../BottomSensorHud/geometry.js';\nimport './styles.css';\n\nconst EMPTY_CLIFFS = Object.freeze({\n left: false,\n frontLeft: false,\n frontRight: false,\n right: false,\n});\n\nfunction selectCliffs(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_CLIFFS;\n return {\n left: Boolean(sensors.cliffLeft),\n frontLeft: Boolean(sensors.cliffFrontLeft),\n frontRight: Boolean(sensors.cliffFrontRight),\n right: Boolean(sensors.cliffRight),\n };\n}\n\nfunction ActiveCliffArc({ pathId, path }) {\n return (\n \n \n \n \n CLIFF\n \n \n \n );\n}\n\nexport default function CliffIndicators({ roverId }) {\n const cliffs = useVisualTelemetrySelector(roverId, selectCliffs, shallowObjectEqual);\n const instanceId = useId().replaceAll(':', '');\n if (!Object.values(cliffs).some(Boolean)) return null;\n\n return (\n \n {CLIFF_ARCS.map((sensor) => (\n cliffs[sensor.key] ? (\n \n ) : null\n ))}\n \n );\n}\n","// New Generation Bottom Sensor HUD\n// Purpose: Gives all bottom sensor visuals one SVG coordinate space and one physical curve.\n// Scope: Owns shared placement only; child components retain independent telemetry subscriptions.\nimport BumperIndicators from '../BumperIndicators/index.jsx';\nimport IrProximityHud from '../IrProximityHud/index.jsx';\nimport CliffIndicators from '../CliffIndicators/index.jsx';\nimport { SENSOR_HUD_VIEW_BOX } from './geometry.js';\nimport './styles.css';\n\nexport default function BottomSensorHud({ roverId }) {\n return (\n \n \n \n \n \n );\n}\n","import { useMemo } from 'react';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport { useSharedClock } from './useSharedClock.js';\n\nexport function useDriverVideoModePolicy(roverId) {\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const turnQueues = useSessionSelector((state) => state.session?.turnQueues ?? {});\n const socketId = useSessionSelector((state) => state.session?.socketId || null);\n const activeDrivers = useSessionSelector((state) => state.session?.activeDrivers ?? {});\n const nonTurnSnapshotsActive = useSessionSelector(\n (state) => Boolean(state.session?.bandwidthSavings?.nonTurnVideo?.snapshotsActive),\n );\n const isTurnsMode = mode === 'turns';\n /*\n This policy only switches preview/full video around a multi-second turn\n boundary. A shared one-second clock is responsive enough for that UI policy\n and avoids running a separate 250ms timer beside the TurnsOverlay countdown.\n */\n const now = useSharedClock(1000, isTurnsMode);\n\n const turnInfo = roverId ? turnQueues?.[roverId] || null : null;\n const activeDriverId = roverId ? activeDrivers?.[roverId] || null : null;\n const isActiveDriver = Boolean(socketId && activeDriverId === socketId);\n const nextDriverId = useMemo(() => {\n const queue = turnInfo?.queue || [];\n if (!queue.length || !turnInfo?.current || queue.length <= 1) return null;\n const idx = queue.findIndex((id) => id === turnInfo.current);\n if (idx === -1) return queue[0] || null;\n return queue[(idx + 1) % queue.length] || null;\n }, [turnInfo]);\n const isNextDriver = Boolean(socketId && nextDriverId === socketId);\n const deadline = turnInfo?.deadline || null;\n const msUntilTurn = deadline ? deadline - now : null;\n /*\n The server evaluates the global controllable-user threshold because that\n same decision is enforced in socket video tokens and MediaMTX auth. This\n hook only mirrors the active result so the browser does not request live\n video when snapshots are already the authoritative non-turn outcome.\n */\n const shouldUsePreviewByLoad = nonTurnSnapshotsActive && isTurnsMode;\n const isPreSwitchWindow =\n isTurnsMode && isNextDriver && msUntilTurn != null && msUntilTurn <= 5000 && msUntilTurn > 0;\n const showNotTurnNotice = isTurnsMode && !isActiveDriver;\n const forceSnapshotByTurnPolicy = showNotTurnNotice && !isPreSwitchWindow && shouldUsePreviewByLoad;\n\n return forceSnapshotByTurnPolicy ? 'snapshot' : null;\n}\n","// Empty Driver Video Notice\n// Purpose: Explains either an ordinary unassigned state or the recent reason a rover assignment was removed.\n// Scope: Owns only the centered notice content; each video layout remains responsible for its own stage dimensions and framing.\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSharedClock } from '../../hooks/useSharedClock.js';\n\nconst REMOVAL_NOTICE_VISIBLE_MS = 2 * 60 * 1000;\n\nexport default function EmptyDriverVideoNotice() {\n const removalNotice = useSessionSelector((state) => state.roverRemovalNotice || null);\n const now = useSharedClock(1000, Boolean(removalNotice?.receivedAt));\n const noticeAgeMs = removalNotice?.receivedAt ? now - removalNotice.receivedAt : Infinity;\n\n /*\n A forced removal needs to explain itself where the video was, because the\n following session sync can only report that no rover is assigned. Keeping\n the message for a bounded period preserves that context without allowing an\n old moderation or safety notice to describe an unrelated later wait.\n */\n const showRemovalNotice = Boolean(\n removalNotice?.message && noticeAgeMs <= REMOVAL_NOTICE_VISIBLE_MS,\n );\n const title = showRemovalNotice\n ? removalNotice.title || 'Removed from rover'\n : 'No rover assigned';\n const message = showRemovalNotice\n ? removalNotice.message\n : 'You are not currently assigned to a rover.';\n\n return (\n
\n \n
\n {title}\n
\n
\n {message}\n
\n
\n \n );\n}\n","// New Drive Video\n// Purpose: Mirrors DriverVideo's ownership by composing media and rover HUD overlays in one stage.\n// Scope: Owns the current driver video surface; page columns remain layout concerns.\nimport RoverMediaPlayer from '../RoverMediaPlayer/index.jsx';\nimport OvercurrentOverlay from '../HudOverlays/OvercurrentOverlay/index.jsx';\nimport RoverDescriptionOverlay from '../HudOverlays/RoverDescriptionOverlay/index.jsx';\nimport CornerPods from '../HudOverlays/newgen/CornerPods/index.jsx';\nimport DockingHud from '../HudOverlays/newgen/DockingHud/index.jsx';\nimport WheelDropIndicators from '../HudOverlays/newgen/WheelDropIndicators/index.jsx';\nimport BottomSensorHud from '../HudOverlays/newgen/BottomSensorHud/index.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useControlSelector } from '../../controls/index.js';\nimport { useDriverVideoModePolicy } from '../../hooks/useDriverVideoModePolicy.js';\nimport { useDriverLayout } from '../../layouts/driver/DriverLayoutContext.jsx';\nimport EmptyDriverVideoNotice from '../DriverVideo/EmptyDriverVideoNotice.jsx';\n\n// Mobile keeps the same HUD composition and coordinate system as desktop, but its\n// physically smaller video stage needs the complete interface reduced as one unit.\n// Keeping this as one scale value prevents individual pods and sensor layers from\n// drifting apart as their responsive behavior evolves.\nconst MOBILE_HUD_SCALE = 0.68;\n\nexport default function NewDriveVideo() {\n const layout = useDriverLayout();\n const mobileHud = layout !== 'desktop';\n const roverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const videoMode = useDriverVideoModePolicy(roverId);\n const lastControlIntentAt = useControlSelector((control) => control.state.lastControlIntentAt);\n\n if (!roverId) {\n return (\n \n {/* Keep the unassigned state inside the same solid video-shaped stage\n so removing a rover does not expose the page background or leave a\n visually empty hole where the live picture had been. */}\n \n \n );\n }\n\n return (\n \n {/* Media and overlays must share this exact 4:3 containing block. When narrow columns\n reduce the video width, the stage height shrinks with it and no HUD element can remain\n positioned in the letterboxed space above or below the actual picture. */}\n
\n \n\n \n {/* Mobile already owns its physical rover controls outside the video. Keep the\n informational HUD and chat, but do not duplicate those controls in corner pods. */}\n \n \n \n \n\n {/* Overcurrent remains a stage-wide safety condition. Battery warnings are intentionally\n owned by the top-right battery pod so they stay connected to their source and can\n account for whether the rover is driving, docking, or already charging. */}\n \n \n
\n \n \n );\n}\n","// Social Buttons Grid\n// Purpose: Defines the Social Buttons Grid module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport SocialButton from '../SocialButton/index.jsx';\n\nexport default function SocialButtonsGrid({ className = '' }) {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'socials'));\n const socials = useSessionSelector((state) => state.session?.socials ?? []).slice(0, 4);\n\n /*\n The Links panel owns its feature visibility. Even if the server config has\n link entries, `socials.enabled: false` makes the server advertise the\n feature as disabled, and this component disappears completely.\n */\n if (!enabled || !socials.length) return null;\n\n return (\n
\n {socials.map((entry) => (\n \n ))}\n
\n );\n}\n","// Raw User Pile Panel\n// Purpose: Defines the Raw User Pile Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport NicknameForm from '../NicknameForm/index.jsx';\nimport SocialButtonsGrid from '../SocialButtonsGrid/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\n\nfunction roleColors(role) {\n switch (role) {\n case 'admin':\n case 'lockdown':\n return 'text-amber-300';\n case 'spectator':\n return 'text-slate-400';\n default:\n return 'text-sky-300';\n }\n}\n\nfunction formatLabel(user, selfId) {\n if (!user) return '';\n const base = user.nickname || user.socketId?.slice(0, 6) || 'unknown';\n if (user.socketId && user.socketId === selfId) {\n return `${base} (you)`;\n }\n return base;\n}\n\nexport default function RawUserPilePanel({\n hideNicknameForm = false,\n hideHeader = false,\n className = '',\n fillHeight = false,\n compact = false,\n}) {\n const users = useSessionSelector((state) => state.session?.users ?? []);\n const selfId = useSessionSelector((state) => state.session?.socketId || null);\n\n const sorted = useMemo(\n () =>\n [...users].sort((a, b) => {\n if (a.socketId === selfId) return -1;\n if (b.socketId === selfId) return 1;\n return (a.nickname || '').localeCompare(b.nickname || '');\n }),\n [selfId, users],\n );\n\n const baseListClass = fillHeight\n ? 'flex-1 min-h-0 overflow-y-auto'\n : compact\n ? 'h-28 overflow-y-auto'\n : 'h-48 overflow-y-auto';\n\n return (\n \n {!hideNicknameForm && (\n
\n {/* Keep identity and social controls stacked until this card itself is\n wide enough; the viewport says nothing about a sidebar's width. */}\n
\n
\n
\n \n
\n
\n \n
\n
\n )}\n\n
\n \n {sorted.length === 0 ? (\n

Waiting for users…

\n ) : (\n sorted.map((user) => (\n \n {formatLabel(user, selfId)}\n \n ))\n )}\n
\n \n \n );\n}\n","// Replay Ready Popup\n// Purpose: Presents the latest delivered replay video, whether Discord-hosted or served by the rover server.\n// Scope: Owns the ephemeral modal shell, immediate video loading, and click-outside close behavior.\nimport { useCallback, useEffect, useRef } from 'react';\nimport CardFrame from '../CardFrame/index.jsx';\n\nconst CLOSE_AFTER_VIDEO_END_MS = 5000;\nconst CLOSE_IF_VIDEO_NEVER_PLAYS_MS = 10000;\n\nfunction normalizeUrl(value) {\n const text = String(value || '').trim();\n return text || null;\n}\n\nfunction formatBytes(value) {\n const size = Number(value);\n if (!Number.isFinite(size) || size <= 0) return '';\n if (size < 1024 * 1024) return `${Math.round(size / 1024)} KB`;\n return `${(size / 1024 / 1024).toFixed(1)} MB`;\n}\n\nexport default function ReplayReadyPopup({ replay, onClose, variant = 'modal' }) {\n const fallbackCloseTimerRef = useRef(null);\n const endedCloseTimerRef = useRef(null);\n const onCloseRef = useRef(onClose);\n const videoUrl = normalizeUrl(replay?.url);\n\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n const clearCloseTimers = useCallback(() => {\n if (fallbackCloseTimerRef.current) {\n clearTimeout(fallbackCloseTimerRef.current);\n fallbackCloseTimerRef.current = null;\n }\n if (endedCloseTimerRef.current) {\n clearTimeout(endedCloseTimerRef.current);\n endedCloseTimerRef.current = null;\n }\n }, []);\n\n const closePopup = useCallback(() => {\n // Timers are always cleared before closing so a stale timeout from a previous\n // replay cannot close the next replay popup after React reuses this component.\n clearCloseTimers();\n onCloseRef.current?.();\n }, [clearCloseTimers]);\n\n useEffect(() => {\n clearCloseTimers();\n if (!videoUrl) return undefined;\n\n // A Discord media URL can fail because the attachment URL expired, the browser\n // cannot load the remote media, or autoplay never reaches actual playback. This\n // fallback keeps both popup variants from getting stuck forever in those cases.\n fallbackCloseTimerRef.current = setTimeout(closePopup, CLOSE_IF_VIDEO_NEVER_PLAYS_MS);\n return clearCloseTimers;\n }, [clearCloseTimers, closePopup, videoUrl]);\n\n const handleVideoPlaying = useCallback(() => {\n if (!fallbackCloseTimerRef.current) return;\n // Once playback really starts, the video has proven useful. From this point on,\n // the popup should stay open until the viewer finishes the replay or closes it.\n clearTimeout(fallbackCloseTimerRef.current);\n fallbackCloseTimerRef.current = null;\n }, []);\n\n const handleVideoEnded = useCallback(() => {\n if (endedCloseTimerRef.current) {\n clearTimeout(endedCloseTimerRef.current);\n }\n // Leaving the finished replay visible briefly gives people time to notice the\n // final frame and use the Discord/open-video links before the popup cleans itself up.\n endedCloseTimerRef.current = setTimeout(closePopup, CLOSE_AFTER_VIDEO_END_MS);\n }, [closePopup]);\n\n const videoLifecycleProps = {\n onPlaying: handleVideoPlaying,\n onEnded: handleVideoEnded,\n };\n\n if (!videoUrl) return null;\n\n const isPanel = variant === 'panel';\n const isFloatingPanel = variant === 'floating-panel';\n const isModal = !isPanel && !isFloatingPanel;\n const title = String(replay?.title || 'Replay').trim() || 'Replay';\n const messageUrl = normalizeUrl(replay?.messageUrl);\n const meta = formatBytes(replay?.size) || null;\n const actions = (\n
\n \n Open video\n \n {messageUrl ? (\n \n Discord\n \n ) : null}\n \n
\n );\n\n if (isFloatingPanel) {\n return (\n \n
\n \n
\n \n );\n }\n\n const card = (\n \n
\n \n
\n \n );\n\n if (isPanel) {\n return
{card}
;\n }\n\n return (\n
\n {\n // The backdrop closes the popup, but clicks inside the fullscreen card\n // must leave video controls and header actions usable.\n event.stopPropagation();\n }}\n role=\"presentation\"\n >\n {card}\n
\n \n );\n}\n","// Replay Sources Panel\n// Purpose: Defines the Replay Sources Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport { useSharedClock } from '../../hooks/useSharedClock.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport CardFrame from '../CardFrame/index.jsx';\nimport RoverLabel from '../RoverLabel/index.jsx';\nimport ReplayReadyPopup from './ReplayReadyPopup.jsx';\n\nfunction normalizeSources(list = []) {\n return list\n .map((entry) => {\n if (!entry?.type || !entry?.id) return null;\n return {\n type: entry.type,\n id: String(entry.id),\n label: entry.label || String(entry.id),\n color: entry.color || null,\n key: `${entry.type}:${entry.id}`,\n };\n })\n .filter(Boolean);\n}\n\nfunction selectedKeysEqual(left, right) {\n if (Object.is(left, right)) return true;\n if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) return false;\n\n for (let idx = 0; idx < left.length; idx += 1) {\n if (left[idx] !== right[idx]) return false;\n }\n\n return true;\n}\n\nexport default function ReplaySourcesPanel({\n panelId = 'replay-sources',\n fillHeight = false,\n defaultSelectedKey = null,\n}) {\n const replaySources = useSessionSelector((state) => state.session?.replaySources ?? []);\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const assignmentRoverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const roster = useSessionSelector((state) => state.session?.roster ?? []);\n const replayState = useSessionSelector((state) => state.session?.replay || null);\n const replayStatus = useSessionSelector((state) => state.replayStatus);\n const socket = useSocket();\n const { triggerReplay } = useSessionActions();\n const sources = useMemo(() => normalizeSources(replaySources || []), [replaySources]);\n const { value: settings, save: saveSettings } = useSettingsNamespace('replaySources', {});\n const [selected, setSelected] = useState([]);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(null);\n const [title, setTitle] = useState('');\n const [titleDirty, setTitleDirty] = useState(false);\n const [includeSidebar, setIncludeSidebar] = useState(true);\n const [panelReplay, setPanelReplay] = useState(null);\n // Settings keys include the panel id because the same replay source control is\n // mounted in desktop, portrait, and landscape layouts with independent saved UI\n // preferences. Pulling the values into named constants also gives hook\n // dependencies primitive values instead of hard-to-analyze computed expressions.\n const includeSidebarSettingKey = `${panelId}:includeSidebar`;\n const titleSettingKey = `${panelId}:title`;\n const savedIncludeSidebar = settings?.[includeSidebarSettingKey];\n const savedTitle = settings?.[titleSettingKey];\n const showPanelReplay = Boolean(panelReplay?.url);\n\n useEffect(() => {\n const handleReplayReady = (replay = {}) => {\n if (!replay?.url) return;\n /*\n A replay popup is an event owned by the lifetime of this mounted panel,\n not retained application history. Listening to the live socket event\n means a ready replay opens immediately, while switching tabs away and\n back cannot replay an event that happened before the new mount.\n */\n setPanelReplay(replay);\n };\n\n socket.on('replay:ready', handleReplayReady);\n return () => socket.off('replay:ready', handleReplayReady);\n }, [socket]);\n\n const availableDefaultKey = useMemo(() => {\n // PTZ layouts provide their camera key explicitly so entering the dedicated\n // camera page does not inherit the user's assigned rover. Waiting until the\n // source is actually advertised also handles the initial session load: an\n // unavailable key is never left selected, but it becomes the default as\n // soon as the server publishes that replay source.\n if (defaultSelectedKey && sources.some((source) => source.key === defaultSelectedKey)) {\n return defaultSelectedKey;\n }\n const roverKey = assignmentRoverId ? `rover:${assignmentRoverId}` : null;\n if (roverKey && sources.some((source) => source.key === roverKey)) {\n return roverKey;\n }\n return null;\n }, [assignmentRoverId, defaultSelectedKey, sources]);\n const defaults = useMemo(() => (availableDefaultKey ? [availableDefaultKey] : []), [availableDefaultKey]);\n\n const defaultTitle = useMemo(() => {\n const roverId = assignmentRoverId || null;\n const roverName =\n roverId && Array.isArray(roster)\n ? roster.find((entry) => String(entry?.id) === String(roverId))?.name || roverId\n : '';\n return roverName ? `Replay: ${roverName}` : 'Replay';\n }, [assignmentRoverId, roster]);\n\n useEffect(() => {\n // Assignment changes replace the default selection, but identical defaults\n // should not create a fresh array because that would force all source\n // checkboxes to commit with the same checked values.\n setSelected((prev) => (selectedKeysEqual(prev, defaults) ? prev : defaults));\n }, [defaults]);\n\n useEffect(() => {\n if (typeof savedIncludeSidebar === 'boolean') {\n setIncludeSidebar(savedIncludeSidebar);\n return;\n }\n setIncludeSidebar(true);\n }, [savedIncludeSidebar]);\n\n useEffect(() => {\n if (typeof savedTitle === 'string') {\n setTitle(savedTitle);\n setTitleDirty(true);\n return;\n }\n setTitleDirty(false);\n }, [savedTitle]);\n\n useEffect(() => {\n if (!titleDirty) {\n setTitle(defaultTitle);\n }\n }, [defaultTitle, titleDirty]);\n\n useEffect(() => {\n const allowed = new Set(sources.map((source) => source.key));\n setSelected((prev) => {\n const next = prev.filter((key) => allowed.has(key));\n\n // Pruning is only meaningful when a selected source disappeared. Returning\n // the existing array for the common no-op path stops this effect from\n // scheduling a render after every parent/session render.\n return selectedKeysEqual(prev, next) ? prev : next;\n });\n }, [sources]);\n\n const grouped = useMemo(() => {\n return {\n rovers: sources.filter((source) => source.type === 'rover'),\n // PTZ is presented with room cameras because there is only one fixed room\n // PTZ camera and it should not create a separate source category.\n rooms: sources.filter((source) => source.type === 'room' || source.type === 'ptz'),\n };\n }, [sources]);\n\n const hasReplayCooldown = Boolean(replayState?.lastTriggeredAt && replayState?.cooldownMs);\n const replayCooldownEndsAt = hasReplayCooldown\n ? replayState.lastTriggeredAt + replayState.cooldownMs\n : 0;\n const cooldownNow = useSharedClock(1000, hasReplayCooldown);\n const remainingMs = useMemo(() => {\n if (!hasReplayCooldown) return 0;\n /*\n The button only shows whole seconds, so a shared one-second clock gives the\n same useful information without each mounted replay panel owning a 250ms\n interval. The exact server cooldown still decides whether the action is\n accepted; this value is only the local disabled-state/display estimate.\n */\n const next = replayCooldownEndsAt - cooldownNow;\n return Math.max(0, next);\n }, [cooldownNow, hasReplayCooldown, replayCooldownEndsAt]);\n\n const replayDisabled = busy || mode === 'lockdown' || remainingMs > 0 || !selected.length;\n const selectedSet = useMemo(() => {\n // Checkbox rendering asks the same membership question for every source.\n // A Set avoids repeated linear scans and, more importantly, gives memoized\n // child lists a stable value while the selected keys have not changed.\n return new Set(selected);\n }, [selected]);\n const replayStatusText = useMemo(() => {\n if (!replayStatus?.status) return null;\n const titleText = replayStatus.title ? `: ${replayStatus.title}` : '';\n switch (replayStatus.status) {\n case 'accepted':\n return `Replay accepted${titleText}`;\n case 'building':\n return `Replay building${titleText}`;\n case 'uploading':\n return `Replay uploading${titleText}`;\n case 'ready':\n return `Replay ready${titleText}`;\n case 'failed':\n return replayStatus.message || `Replay failed${titleText}`;\n default:\n return replayStatus.message || `Replay ${replayStatus.status}${titleText}`;\n }\n }, [replayStatus]);\n const toggleKey = useCallback((key) => {\n setSelected((prev) => {\n return prev.includes(key) ? prev.filter((value) => value !== key) : [...prev, key];\n });\n }, []);\n\n const handleReplay = useCallback(async () => {\n if (replayDisabled) return;\n setBusy(true);\n setError(null);\n try {\n const payload = selected.map((key) => {\n const [type, id] = key.split(':');\n return { type, id };\n });\n const resolvedTitle = String(title || '').trim() || defaultTitle;\n await triggerReplay({ sources: payload, title: resolvedTitle, includeSidebar });\n /*\n Do not set panel-local success state after acknowledgement. The server\n broadcasts the authoritative accepted/building/uploading/ready stages,\n and every replay panel renders that one shared status progression.\n */\n } catch (err) {\n setError(err.message);\n } finally {\n setBusy(false);\n }\n }, [defaultTitle, includeSidebar, replayDisabled, selected, title, triggerReplay]);\n\n const listWrapClass = fillHeight ? 'flex-1 min-h-0 overflow-y-auto' : '';\n\n return (\n
\n {showPanelReplay ? (\n
\n setPanelReplay(null)}\n />\n
\n ) : null}\n \n {/* Both source lists are intentionally compact enough to share the\n current desktop sidebar. They only collapse when the card becomes\n narrower than the supported new-drive desktop column. */}\n
\n \n \n
\n
\n {error ?
{error}
: null}\n {replayStatusText ? (\n
\n {replayStatusText}\n
\n ) : null}\n
\n \n {/* The label has fixed-width content, while the input owns the remaining row space.\n This keeps the title control compact without making the input compete with\n other controls or wrapping unpredictably on narrow panel layouts. */}\n {\n const next = event.target.value;\n setTitle(next);\n setTitleDirty(true);\n saveSettings((current) => ({ ...(current || {}), [titleSettingKey]: next }));\n }}\n onKeyDown={(event) => {\n // Enter is the keyboard equivalent of clicking Replay. Ignore\n // composition events so confirming an IME candidate cannot\n // accidentally submit a replay before the title is complete.\n // handleReplay remains the single authority for cooldown,\n // lockdown, busy, and empty-source checks.\n if (event.key !== 'Enter' || event.nativeEvent?.isComposing) return;\n event.preventDefault();\n handleReplay();\n }}\n placeholder={defaultTitle}\n maxLength={120}\n />\n
\n
\n \n {/* The sidebar toggle is stable-width, so the replay button can expand into the\n rest of the row and preserve the compact two-row control layout. */}\n \n {remainingMs > 0 ? `Replay (${Math.ceil(remainingMs / 1000)}s)` : busy ? 'Replay…' : 'Replay'}\n \n
\n
\n
\n
\n );\n}\n\nconst GroupList = React.memo(function GroupList({ title, items, selectedSet, onToggle }) {\n if (!items.length) return null;\n return (\n
\n
{title}
\n
\n {items.map((item) => (\n \n ))}\n
\n
\n );\n});\n","// Home Assistant Controls\n// Purpose: Defines the Home Assistant Controls module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo } from 'react';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport ControlHint from '../ControlHint/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\n\nconst COLOR_SWATCHES = Object.freeze([\n { id: 'white', label: 'White', hex: '#ffffff', action: 'white' },\n { id: 'red', label: 'Red', hex: '#ff0000' },\n { id: 'green', label: 'Green', hex: '#00ff00' },\n { id: 'cyan', label: 'Cyan', hex: '#00c7be' },\n { id: 'blue', label: 'Blue', hex: '#0000ff' },\n { id: 'purple', label: 'Purple', hex: '#bf5af2' },\n]);\n\nfunction StatusBadge({ label, tone = 'muted' }) {\n const styles =\n tone === 'success'\n ? 'bg-emerald-900 text-emerald-100'\n : tone === 'warn'\n ? 'bg-amber-900 text-amber-100'\n : 'bg-slate-800 text-slate-200';\n return (\n \n {label}\n \n );\n}\n\nfunction cx(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nfunction buildTileStyle(entity, { unavailable, isOn, supportsColor }) {\n if (unavailable) return undefined;\n if (!isOn) return undefined;\n const colorHex = supportsColor ? entity.colorHex : null;\n if (!colorHex) return undefined;\n\n // The server owns Home Assistant color-format conversion and exposes a CSS\n // hex string. React only uses it as a display value here, which keeps browser\n // rendering decoupled from HA-specific rgb/hs attribute shapes.\n return {\n backgroundColor: colorHex,\n borderColor: 'rgba(255,255,255,0.38)',\n };\n}\n\nfunction LampSwatch({ entity, swatch, disabled, onSetColor, onSetWhite }) {\n const handleClick = (event) => {\n // Swatches live inside a tile that toggles the lamp when clicked. Stop the\n // event here so choosing a color is a single, unambiguous action instead of\n // setting color and then also toggling the lamp off.\n event.stopPropagation();\n if (disabled) return;\n\n // White gets its own server action because Home Assistant white/temperature\n // mode is not the same as sending pure RGB white on many smart bulbs.\n if (swatch.action === 'white') {\n onSetWhite(entity.id).catch(() => {});\n return;\n }\n onSetColor(entity.id, swatch.hex).catch(() => {});\n };\n\n return (\n {\n // Keyboard activation on a swatch should follow the same isolation rule\n // as pointer clicks: the swatch owns color selection, the tile owns\n // lamp toggling.\n event.stopPropagation();\n }}\n disabled={disabled}\n title={`${swatch.label} ${entity.name || entity.id}`}\n aria-label={`Set ${entity.name || entity.id} to ${swatch.label}`}\n className={cx(\n // The tile background already shows the Home Assistant-reported color,\n // so swatches are plain presets rather than a selected-state indicator.\n 'h-5 w-6 shrink-0 rounded-sm border border-white/80 transition-transform disabled:cursor-not-allowed disabled:opacity-40',\n !disabled && 'hover:scale-110 hover:border-white',\n )}\n style={{ backgroundColor: swatch.hex }}\n />\n );\n}\n\nfunction LampTile({ entity, connected, controlsLocked, onToggle, onSetColor, onSetWhite }) {\n const unavailable = entity.state === 'unavailable' || !entity.available;\n const isOn = entity.state === 'on';\n const supportsColor = entity.type === 'light' && entity.supportsColor;\n const statusTone = unavailable ? 'warn' : isOn ? 'success' : 'muted';\n const statusLabel = unavailable ? 'Unavailable' : isOn ? 'On' : 'Off';\n const disableToggle = controlsLocked || !connected || unavailable;\n const disableColor = disableToggle || !supportsColor;\n const tileStyle = buildTileStyle(entity, { unavailable, isOn, supportsColor });\n const tileTone = unavailable\n ? 'border-slate-800 bg-slate-950 text-slate-500'\n : controlsLocked\n ? 'border-amber-700/60 bg-amber-950/70 text-amber-100'\n : isOn\n ? 'border-emerald-700/70 bg-emerald-900 text-white'\n : 'border-neutral-700 bg-neutral-950 text-slate-300';\n\n const handleTileToggle = () => {\n if (disableToggle) return;\n onToggle(entity.id);\n };\n\n const handleTileKeyDown = (event) => {\n // The outer element is intentionally the interactive tile because HTML\n // cannot validly nest the color swatch buttons inside another button. Giving\n // the tile button-like keyboard behavior keeps the larger click target\n // accessible while preserving real buttons for swatches.\n if (disableToggle) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n handleTileToggle();\n };\n\n return (\n \n
\n \n {entity.name || entity.id}\n \n \n \n {!connected ? Offline : null}\n \n
\n {supportsColor ? (\n
\n {COLOR_SWATCHES.map((swatch) => (\n \n ))}\n
\n ) : null}\n \n );\n}\n\nexport default function HomeAssistantControls() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'homeAssistant'));\n\n /*\n Feature existence is owned here, not by each layout that happens to mount\n room lights. Disabled integrations render nothing; enabled integrations\n can still show offline/configuration states inside the panel.\n */\n if (!enabled) return null;\n\n return ;\n}\n\nfunction HomeAssistantControlsContent() {\n const ha = useSessionSelector((state) => state.session?.homeAssistant || null);\n const { homeAssistantToggle, homeAssistantSetLightColor, homeAssistantSetLightWhite } =\n useSessionActions();\n const role = useSessionSelector((state) => state.session?.role || null);\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const entities = useMemo(() => ha?.entities || [], [ha?.entities]);\n const lightPolicy = ha?.lightPolicy || null;\n const adminCanControlLockedLights = role === 'lockdown' || (role === 'admin' && mode !== 'lockdown');\n const lightPolicyLocked = Boolean(lightPolicy?.locked || lightPolicy?.lockedOn);\n const controlsLocked = lightPolicyLocked && !adminCanControlLockedLights;\n const lockState = lightPolicy?.lockState || (lightPolicy?.lockedOn ? 'on' : null);\n const onKeyLabel = ;\n const offKeyLabel = ;\n\n if (!ha?.enabled) {\n return (\n \n

Not configured on the server.

\n
\n );\n }\n\n if (entities.length === 0) {\n return (\n \n

No lights or switches configured.

\n
\n );\n }\n\n const connected = Boolean(ha?.connected);\n\n const actions = (\n <>\n
\n \n On\n {onKeyLabel ? : null}\n \n \n Off\n {offKeyLabel ? : null}\n \n
\n {lightPolicyLocked ? : null}\n \n \n );\n\n return (\n \n {lightPolicyLocked ? (\n

\n {adminCanControlLockedLights\n ? lockState === 'off'\n ? 'Lights are locked off. Admin room lights remain available.'\n : 'Lights are locked on. Admin room lights remain available.'\n : lockState === 'off'\n ? 'Lights are locked off. Room lights are disabled.'\n : 'Lights are locked on. Room lights are disabled.'}\n

\n ) : null}\n {/* Each lamp declares only the smallest width at which its title, status,\n and swatches remain useful. Auto-fit then derives the column and row\n count directly from the card width without layout-specific breakpoints. */}\n
\n {entities.map((entity) => (\n \n ))}\n
\n
\n );\n}\n\nfunction KeyPill({ label }) {\n if (!label) return null;\n return {label};\n}\n","// Hook: useRoomCameraSnapshots\n// Purpose: Subscribes to room camera snapshot updates and tracks latest image payloads. Scope: Normalizes snapshot event handling for room camera display components.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\n\nexport function useRoomCameraSnapshots(sourceList = [], options = {}) {\n const socket = useSocket();\n const { enabled = true, version = null } = options;\n const [feeds, setFeeds] = useState({});\n const objectUrls = useRef(new Map());\n const ids = useMemo(() => sourceList.map((e) => (typeof e === 'string' ? e : e.id)), [sourceList]);\n const idsKey = useMemo(() => {\n const base = ids.join('|');\n return version ? `${base}|v:${version}` : base;\n }, [ids, version]);\n const idsRef = useRef([]);\n const [connectionNonce, setConnectionNonce] = useState(0);\n const statsRef = useRef(new Map());\n const debugSnapshots =\n typeof window !== 'undefined' && new URLSearchParams(window.location.search).has('debugSnapshots');\n\n useEffect(() => {\n if (!socket) return undefined;\n const handleConnect = () => setConnectionNonce((prev) => prev + 1);\n socket.on('connect', handleConnect);\n return () => socket.off('connect', handleConnect);\n }, [socket]);\n\n useEffect(() => {\n idsRef.current = ids;\n }, [idsKey, ids]);\n\n useEffect(() => {\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n setFeeds({});\n }, [idsKey]);\n\n useEffect(() => {\n if (!enabled) {\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n setFeeds({});\n return undefined;\n }\n if (!idsRef.current.length || !socket) {\n return undefined;\n }\n let cancelled = false;\n const currentIds = idsRef.current;\n\n const handleFrame = (meta = {}, buffer) => {\n if (cancelled || !meta.id || !buffer) return;\n const sizeBytes = buffer.byteLength ?? buffer.length ?? 0;\n const now = Date.now();\n const prevStats = statsRef.current.get(meta.id) || {\n count: 0,\n totalBytes: 0,\n lastLogAt: 0,\n };\n const nextStats = {\n count: prevStats.count + 1,\n totalBytes: prevStats.totalBytes + sizeBytes,\n lastLogAt: prevStats.lastLogAt,\n };\n if (debugSnapshots && (!nextStats.lastLogAt || now - nextStats.lastLogAt >= 10000)) {\n const avgBytes = nextStats.count ? nextStats.totalBytes / nextStats.count : 0;\n console.log(\n '[roomCamera]',\n meta.id,\n `frame=${sizeBytes}B`,\n `avg=${Math.round(avgBytes)}B`,\n `count=${nextStats.count}`,\n );\n nextStats.lastLogAt = now;\n }\n statsRef.current.set(meta.id, nextStats);\n const blob = new Blob([buffer], { type: 'image/jpeg' });\n const url = URL.createObjectURL(blob);\n const prevUrl = objectUrls.current.get(meta.id);\n if (prevUrl) {\n URL.revokeObjectURL(prevUrl);\n }\n objectUrls.current.set(meta.id, url);\n setFeeds((prev) => ({\n ...prev,\n [meta.id]: {\n status: 'playing',\n ts: meta.ts || Date.now(),\n error: null,\n objectUrl: url,\n },\n }));\n };\n\n const handleStatus = (meta = {}) => {\n if (cancelled || !meta.id) return;\n setFeeds((prev) => ({\n ...prev,\n [meta.id]: {\n ...(prev[meta.id] || {}),\n status: meta.error ? 'error' : prev[meta.id]?.status || 'connecting',\n error: meta.error || null,\n ts: meta.ts || prev[meta.id]?.ts || null,\n objectUrl: prev[meta.id]?.objectUrl || null,\n },\n }));\n };\n\n socket.on('roomCamera:frame', handleFrame);\n socket.on('roomCamera:status', handleStatus);\n\n socket.emit('roomCamera:subscribe', { ids: currentIds }, (resp = {}) => {\n if (resp.error) return;\n });\n\n return () => {\n cancelled = true;\n socket.emit('roomCamera:unsubscribe', { ids: currentIds });\n socket.off('roomCamera:frame', handleFrame);\n socket.off('roomCamera:status', handleStatus);\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n };\n }, [socket, idsKey, enabled, connectionNonce, debugSnapshots]);\n\n return feeds;\n}\n","// Hook: usePtzCameraSnapshots\n// Purpose: Subscribes to PTZ snapshot streams using the same map-shaped contract as rover snapshots.\n// Scope: Keeps PTZ snapshot lifecycle boring: callers pass source ids and receive feeds keyed by id.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\n\nexport const PTZ_CAMERA_ID = 'ptz-camera';\n\nexport function usePtzCameraSnapshots(sourceList = [], options = {}) {\n const socket = useSocket();\n const { enabled = true, version = null } = options;\n const [feeds, setFeeds] = useState({});\n const objectUrls = useRef(new Map());\n const ids = useMemo(\n () => sourceList.map((entry) => (typeof entry === 'string' ? entry : entry?.id)).filter(Boolean),\n [sourceList],\n );\n const idsKey = useMemo(() => {\n const base = ids.join('|');\n return version ? `${base}|v:${version}` : base;\n }, [ids, version]);\n const idsRef = useRef([]);\n const [connectionNonce, setConnectionNonce] = useState(0);\n const statsRef = useRef(new Map());\n const debugSnapshots =\n typeof window !== 'undefined' && new URLSearchParams(window.location.search).has('debugSnapshots');\n\n useEffect(() => {\n if (!socket) return undefined;\n const handleConnect = () => setConnectionNonce((prev) => prev + 1);\n socket.on('connect', handleConnect);\n return () => socket.off('connect', handleConnect);\n }, [socket]);\n\n useEffect(() => {\n idsRef.current = ids;\n }, [idsKey, ids]);\n\n useEffect(() => {\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n setFeeds({});\n }, [idsKey]);\n\n useEffect(() => {\n if (!enabled) {\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n setFeeds({});\n return undefined;\n }\n if (!idsRef.current.length || !socket) return undefined;\n let cancelled = false;\n const currentIds = idsRef.current;\n\n const handleFrame = (meta = {}, buffer) => {\n if (cancelled || !meta.id || !buffer) return;\n const sizeBytes = buffer.byteLength ?? buffer.length ?? 0;\n const now = Date.now();\n const prevStats = statsRef.current.get(meta.id) || {\n count: 0,\n totalBytes: 0,\n lastLogAt: 0,\n };\n const nextStats = {\n count: prevStats.count + 1,\n totalBytes: prevStats.totalBytes + sizeBytes,\n lastLogAt: prevStats.lastLogAt,\n };\n if (debugSnapshots && (!nextStats.lastLogAt || now - nextStats.lastLogAt >= 10000)) {\n const avgBytes = nextStats.count ? nextStats.totalBytes / nextStats.count : 0;\n console.log(\n '[ptzSnapshot]',\n meta.id,\n `frame=${sizeBytes}B`,\n `avg=${Math.round(avgBytes)}B`,\n `count=${nextStats.count}`,\n );\n nextStats.lastLogAt = now;\n }\n statsRef.current.set(meta.id, nextStats);\n const url = URL.createObjectURL(new Blob([buffer], { type: 'image/jpeg' }));\n const prevUrl = objectUrls.current.get(meta.id);\n if (prevUrl) URL.revokeObjectURL(prevUrl);\n objectUrls.current.set(meta.id, url);\n setFeeds((prev) => ({\n ...prev,\n [meta.id]: {\n status: 'playing',\n ts: meta.ts || Date.now(),\n error: null,\n objectUrl: url,\n },\n }));\n };\n\n const handleStatus = (meta = {}) => {\n if (cancelled || !meta.id) return;\n setFeeds((prev) => ({\n ...prev,\n [meta.id]: {\n ...(prev[meta.id] || {}),\n status: meta.error ? 'error' : prev[meta.id]?.status || 'connecting',\n error: meta.error || null,\n ts: meta.ts || prev[meta.id]?.ts || null,\n objectUrl: prev[meta.id]?.objectUrl || null,\n },\n }));\n };\n\n socket.on('ptzCamera:snapshotFrame', handleFrame);\n socket.on('ptzCamera:snapshotStatus', handleStatus);\n socket.emit('ptzCamera:snapshotSubscribe', { ids: currentIds }, () => {});\n\n return () => {\n cancelled = true;\n socket.emit('ptzCamera:snapshotUnsubscribe', { ids: currentIds });\n socket.off('ptzCamera:snapshotFrame', handleFrame);\n socket.off('ptzCamera:snapshotStatus', handleStatus);\n objectUrls.current.forEach((url) => URL.revokeObjectURL(url));\n objectUrls.current.clear();\n };\n }, [socket, idsKey, enabled, connectionNonce, debugSnapshots]);\n\n return feeds;\n}\n\nexport function usePtzCameraSnapshot(options = {}) {\n /*\n This wrapper keeps older callers working while new PTZ UI uses the same\n keyed feed shape as useRoverSnapshots(). It should stay tiny so the real\n subscription behavior only has one implementation to maintain.\n */\n const feeds = usePtzCameraSnapshots([PTZ_CAMERA_ID], options);\n return feeds[PTZ_CAMERA_ID] || null;\n}\n","// Room Camera Feed\n// Purpose: Defines the Room Camera Feed module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useState } from 'react';\n\nexport default function RoomCameraFeed({ feed, label }) {\n const [blink, setBlink] = useState(false);\n\n useEffect(() => {\n if (!feed) return;\n if (!feed.ts && !feed.objectUrl) return;\n setBlink((prev) => !prev);\n }, [feed?.ts, feed?.objectUrl]);\n\n const statusText = useMemo(() => {\n if (!feed) return 'Connecting…';\n if (feed.error) return `Error: ${feed.error}`;\n return feed.status || 'Connecting…';\n }, [feed]);\n\n return (\n
\n {feed?.objectUrl ? (\n {label}\n ) : (\n
Waiting for frame…
\n )}\n
\n {label}\n
\n
\n \n {statusText}\n
\n
\n );\n}\n","// Room Camera Panel\n// Purpose: Defines the Room Camera Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { useRoomCameraSnapshots } from '../../hooks/useRoomCameraSnapshots.js';\nimport { PTZ_CAMERA_ID, usePtzCameraSnapshots } from '../../hooks/usePtzCameraSnapshot.js';\nimport RoomCameraFeed from '../RoomCameraFeed/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\n\nfunction EmptyState() {\n return (\n \n

No room cameras configured.

\n

Add entries to server config to populate this list.

\n
\n );\n}\n\nconst ORIENTATIONS = ['horizontal', 'vertical'];\nconst CAMERA_VISIBILITY_ROOT_MARGIN = '0px';\n\nfunction normalizeOrientation(value, fallback) {\n if (ORIENTATIONS.includes(value)) {\n return value;\n }\n return fallback;\n}\n\nfunction useCameraPanelSubscriptionGate() {\n const panelRef = useRef(null);\n const [isPanelVisible, setIsPanelVisible] = useState(false);\n\n useEffect(() => {\n /*\n Browser visibility can only be measured after React has mounted a real DOM\n node. Starting closed avoids a short subscribe/unsubscribe burst for room\n camera panels that mount below the fold.\n */\n const panel = panelRef.current;\n if (!panel || typeof window === 'undefined' || typeof document === 'undefined') {\n return undefined;\n }\n\n let intersectsViewport = true;\n\n const publishVisibility = () => {\n /*\n Server upload bandwidth is only saved when the socket subscription is\n actually disabled. Combining viewport intersection with page visibility\n means a scrolled-away panel and a hidden browser tab both stop receiving\n room-camera frame uploads from socketGateway.js.\n */\n setIsPanelVisible(intersectsViewport && document.visibilityState !== 'hidden');\n };\n\n const handlePageVisibilityChange = () => {\n /*\n IntersectionObserver is about layout visibility, while the Page\n Visibility API is about whether the tab itself can be seen. The latter\n matters here because a background tab can still keep a mounted panel and\n socket alive unless we explicitly close the subscription gate.\n */\n publishVisibility();\n };\n\n document.addEventListener('visibilitychange', handlePageVisibilityChange);\n\n if (typeof IntersectionObserver !== 'function') {\n /*\n Without IntersectionObserver we cannot cheaply know whether the panel is\n clipped by a scroll container. Fall back to page visibility so browsers\n without the observer still behave correctly, just without scroll-based\n bandwidth savings.\n */\n publishVisibility();\n return () => {\n document.removeEventListener('visibilitychange', handlePageVisibilityChange);\n };\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n /*\n A zero root margin keeps the bandwidth gate strict: the browser only\n subscribes once the panel intersects the viewport. If the first frame\n feels too delayed in real use, this constant can be widened later.\n */\n intersectsViewport = Boolean(entry?.isIntersecting);\n publishVisibility();\n },\n { root: null, rootMargin: CAMERA_VISIBILITY_ROOT_MARGIN, threshold: 0 },\n );\n\n observer.observe(panel);\n\n return () => {\n observer.disconnect();\n document.removeEventListener('visibilitychange', handlePageVisibilityChange);\n };\n }, []);\n\n return { panelRef, isPanelVisible };\n}\n\nexport default function RoomCameraPanel(props) {\n const enabled = useSessionSelector((state) =>\n isFeatureEnabled(state, 'roomCameras') || isFeatureEnabled(state, 'ptzCamera'),\n );\n\n /*\n Camera-panel visibility belongs with the panel. PTZ is included here because\n the user-facing request is \"show it as a room camera\"; the rendering path\n still uses the same RoomCameraFeed tile as ordinary room cameras.\n */\n if (!enabled) return null;\n\n return ;\n}\n\nfunction RoomCameraPanelContent({\n defaultOrientation = 'horizontal',\n orientation: forcedOrientation,\n hideLayoutToggle = false,\n hideHeader = false,\n panelId = null,\n}) {\n const roomCamerasEnabled = useSessionSelector((state) => isFeatureEnabled(state, 'roomCameras'));\n const ptzEnabled = useSessionSelector((state) => isFeatureEnabled(state, 'ptzCamera'));\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n const cameras = useSessionSelector((state) => state.session?.roomCameras || []);\n const cameraSources = useMemo(() => {\n const base = roomCamerasEnabled ? cameras : [];\n if (!ptzEnabled || !ptz) return base;\n /*\n PTZ snapshots use a different socket namespace from room cameras, but the\n display model is intentionally the same: an id, a label, and a feed object.\n Marking the type lets the subscription layer stay separate while the tile\n renderer remains shared.\n */\n return [\n ...base,\n {\n id: PTZ_CAMERA_ID,\n name: ptz.name || 'PTZ Camera',\n type: 'ptz',\n },\n ];\n }, [cameras, ptz, ptzEnabled, roomCamerasEnabled]);\n const cameraIds = useMemo(\n () => cameraSources.filter((camera) => camera.type !== 'ptz').map((camera) => camera.id),\n [cameraSources],\n );\n const { panelRef, isPanelVisible } = useCameraPanelSubscriptionGate();\n const feedMap = useRoomCameraSnapshots(cameraIds, { enabled: isPanelVisible });\n const ptzFeeds = usePtzCameraSnapshots([PTZ_CAMERA_ID], { enabled: isPanelVisible && ptzEnabled });\n const { value: orientationSettings, save: saveOrientationSettings } = useSettingsNamespace('roomCameraPanels', {});\n const [orientation, setOrientation] = useState(() =>\n normalizeOrientation(\n panelId ? orientationSettings?.[panelId] : defaultOrientation,\n 'horizontal',\n ),\n );\n const storedOrientation = panelId ? orientationSettings?.[panelId] : null;\n const effectiveOrientation = forcedOrientation\n ? normalizeOrientation(forcedOrientation, 'horizontal')\n : normalizeOrientation(\n /*\n Settings are external state, so derive from them during render instead\n of mirroring them into local state from an effect. Local state remains\n useful as the immediate value after clicking the layout toggle, while\n stored settings win once the settings provider has loaded or saved.\n */\n storedOrientation || orientation,\n 'horizontal',\n );\n const containerClass =\n effectiveOrientation === 'vertical' ? 'flex flex-col gap-0.5' : 'grid gap-0.5 md:grid-cols-2';\n const showLayoutToggle = !hideLayoutToggle && !forcedOrientation && cameraSources.length > 0;\n const applyOrientation = (next) => {\n setOrientation(next);\n if (panelId) {\n saveOrientationSettings((current) => ({ ...(current || {}), [panelId]: next }));\n }\n };\n\n if (cameraSources.length === 0) {\n return (\n
\n \n
\n );\n }\n\n const actions = showLayoutToggle ? (\n
\n Layout\n
\n {ORIENTATIONS.map((option) => (\n applyOrientation(option)}\n >\n {option === 'vertical' ? 'Vertical' : 'Grid'}\n \n ))}\n
\n
\n ) : null;\n\n return (\n
\n \n
\n {cameraSources.map((camera) => {\n const feed = camera.type === 'ptz' ? ptzFeeds[camera.id] || null : feedMap[camera.id] || null;\n return (\n
\n {/*
\n

{camera.name || camera.id}

\n {camera.description &&

{camera.description}

}\n
*/}\n \n
\n );\n })}\n
\n \n
\n );\n}\n","// Global Objective Banner\n// Purpose: Defines the Global Objective Banner module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\n\nconst MOBILE_DISMISS_MS = 10000;\nconst MAX_FONT_PX = 28;\nconst MIN_FONT_PX = 14;\n\nfunction hexToRgb(hex) {\n const raw = String(hex || '').trim();\n const normalized = raw.startsWith('#') ? raw.slice(1) : raw;\n if (!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$/.test(normalized)) return null;\n const expanded =\n normalized.length === 3\n ? normalized\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : normalized;\n return {\n r: Number.parseInt(expanded.slice(0, 2), 16),\n g: Number.parseInt(expanded.slice(2, 4), 16),\n b: Number.parseInt(expanded.slice(4, 6), 16),\n };\n}\n\nfunction rgba(rgb, alpha) {\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n}\n\nexport default function GlobalObjectiveBanner({ layout = 'desktop', className = '', dismissable = true }) {\n const goalText = useSessionSelector((state) => {\n const text = state.session?.globalObjective?.text;\n return text ? String(text).trim() : '';\n });\n const ownRoverColor = useSessionSelector((state) => {\n const roverId = String(state.session?.assignment?.roverId || '').trim();\n if (!roverId) return null;\n const roster = Array.isArray(state.session?.roster) ? state.session.roster : [];\n const rover = roster.find((entry) => String(entry?.id) === roverId);\n return rover?.color || null;\n });\n const isMobile = layout === 'mobile-portrait' || layout === 'mobile-landscape' || layout === 'mobile';\n const [visible, setVisible] = useState(false);\n const [fontSize, setFontSize] = useState(MAX_FONT_PX);\n const [remainingMs, setRemainingMs] = useState(0);\n const containerRef = useRef(null);\n const textRef = useRef(null);\n const textContainerRef = useRef(null);\n\n useEffect(() => {\n if (!goalText) {\n setVisible(false);\n return undefined;\n }\n setVisible(true);\n if (!isMobile || !dismissable) return undefined;\n const startedAt = Date.now();\n setRemainingMs(MOBILE_DISMISS_MS);\n const timer = setTimeout(() => setVisible(false), MOBILE_DISMISS_MS);\n const tick = setInterval(() => {\n const elapsed = Date.now() - startedAt;\n setRemainingMs(Math.max(0, MOBILE_DISMISS_MS - elapsed));\n }, 250);\n return () => {\n clearTimeout(timer);\n clearInterval(tick);\n };\n }, [goalText, isMobile]);\n\n useEffect(() => {\n if (!goalText) return undefined;\n setFontSize(MAX_FONT_PX);\n let rafId = 0;\n const adjustFont = () => {\n const textContainer = textContainerRef.current;\n const text = textRef.current;\n if (!textContainer || !text) return;\n const available = textContainer.clientWidth;\n if (!available) return;\n /* A narrow desktop sidebar benefits from a stable readable size and\n natural wrapping. Mobile deliberately keeps its existing timed,\n single-line behavior, while wider desktop banners still use fitting. */\n if (!isMobile && available < 384) {\n setFontSize(16);\n return;\n }\n const needed = text.scrollWidth;\n if (!needed) return;\n const scale = Math.min(1, available / needed);\n const nextSize = Math.max(MIN_FONT_PX, Math.floor(MAX_FONT_PX * scale));\n setFontSize(nextSize);\n };\n rafId = window.requestAnimationFrame(adjustFont);\n const observer = new ResizeObserver(() => {\n window.cancelAnimationFrame(rafId);\n rafId = window.requestAnimationFrame(adjustFont);\n });\n if (containerRef.current) observer.observe(containerRef.current);\n return () => {\n window.cancelAnimationFrame(rafId);\n observer.disconnect();\n };\n }, [goalText, isMobile]);\n\n const containerClass = useMemo(\n () =>\n [\n 'panel-section flex w-full items-center justify-center border border-neutral-500/60 shadow-[0_1px_0_rgba(255,255,255,0.05)_inset,0_10px_24px_rgba(0,0,0,0.28)]',\n !isMobile ? '@container' : '',\n isMobile ? 'rounded-none' : 'rounded',\n 'px-1 py-1 text-center font-semibold tracking-tight',\n className,\n ]\n .filter(Boolean)\n .join(' '),\n [className, isMobile],\n );\n const accentRgb = hexToRgb(ownRoverColor);\n const frameStyle = accentRgb\n ? {\n borderColor: rgba(accentRgb, 0.35),\n backgroundImage: `linear-gradient(90deg, rgba(23,23,23,0.96) 0%, rgba(38,38,38,0.94) 58%, ${rgba(accentRgb, 0.18)} 100%)`,\n }\n : undefined;\n\n if (!goalText || !visible) return null;\n\n const remainingSeconds = isMobile ? Math.ceil(remainingMs / 1000) : null;\n\n const dismissProps = dismissable\n ? { onClick: () => setVisible(false), role: 'button', tabIndex: 0 }\n : {};\n\n return (\n \n \n \n Global\n Objective\n \n \n \n {goalText}\n \n \n {isMobile ? (\n \n {remainingSeconds}s\n \n ) : null}\n \n \n );\n}\n","import { useState } from 'react';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport CardFrame from '../CardFrame/index.jsx';\n\nfunction formatUpdatedAt(value) {\n const timestamp = Number(value);\n if (!Number.isFinite(timestamp) || timestamp <= 0) return null;\n const date = new Date(timestamp);\n if (Number.isNaN(date.getTime())) return null;\n return date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit', second: '2-digit' });\n}\n\nfunction OverseerMemoryPopup({ memory, onClose }) {\n const summary = typeof memory?.summary === 'string' && memory.summary.trim() ? memory.summary : 'Memory unavailable.';\n const updatedAt = formatUpdatedAt(memory?.updatedAt);\n\n return (\n \n
event.stopPropagation()}>\n \n Close\n \n }\n bodyClassName=\"p-0.5 text-xs\"\n >\n {/* The memory is rendered as the server's existing plain-text summary so\n this popup stays consistent with the overseer/admin debug display. */}\n
{summary}
\n \n
\n \n );\n}\n\nfunction OverseerPreferencePanelBody() {\n const { identifySession } = useSessionActions();\n const vote = useSessionSelector((state) => state.session?.overseerVote || null);\n const overseerMemory = useSessionSelector((state) => state.overseerMemory || null);\n const { value: profile } = useSettingsNamespace('profile', { nickname: '' });\n const { value: identity } = useSettingsNamespace('identity', { cookieUserId: '' });\n const { value, save } = useSettingsNamespace('overseerPreference', { enabled: false });\n const [memoryOpen, setMemoryOpen] = useState(false);\n const enabled = Boolean(value?.enabled);\n const running = Boolean(vote?.running);\n\n const onToggle = async (event) => {\n const next = Boolean(event?.target?.checked);\n await save((current) => ({ ...(current || {}), enabled: next }));\n await identifySession({\n cookieUserId: String(identity?.cookieUserId || '').trim(),\n nickname: String(profile?.nickname || '').trim(),\n overseerEnabled: next,\n });\n };\n\n const actions = (\n setMemoryOpen(true)}\n className=\"button-dark px-1 py-0.25 text-[0.75rem]\"\n title=\"View overseer memory\"\n >\n Memory\n \n );\n\n return (\n <>\n \n \n \n Your vote: {enabled ? 'Yes' : 'No'}\n \n Enable a local LLM in chat\n\n
\n Yes!: {Number(vote?.yesCount || 0)}, No...: {Number(vote?.noCount || 0)}\n
\n
\n \n {running ? 'Running!' : 'Stopped by vote.'}\n \n
\n
\n {memoryOpen ? setMemoryOpen(false)} /> : null}\n \n );\n}\n\nexport default function OverseerPreferencePanel() {\n const visible = useSessionSelector((state) => {\n const vote = state.session?.overseerVote;\n\n // The server owns whether voting has any effect. The panel appears only\n // when the autonomous vote-gated scheduler is active; direct-address mode\n // is intentionally hidden because users invoke it by starting a chat\n // message with the configured overseer name instead of voting it on.\n return Boolean(vote?.votingEnabled);\n });\n\n if (!visible) {\n return null;\n }\n\n return ;\n}\n","// Floating Drive Pad\n// Purpose: Provides a one-thumb mobile drive surface that emits keyboard-style fixed drive intents.\n// Scope: Owns pointer tracking, fixed overlay positioning, and active 3x3 drive-zone feedback.\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { FaArrowsAlt } from 'react-icons/fa';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nconst PAD_MARGIN = 12;\nconst CELL_COUNT = 3;\nconst DEFAULT_PAD_SIZE = 180;\n\nconst DRIVE_CELLS = [\n { id: 'forward-left', label: 'fwd left', col: 0, row: 0, actions: ['driveForward', 'driveLeft'] },\n { id: 'forward', label: 'fwd', col: 1, row: 0, actions: ['driveForward'] },\n { id: 'forward-right', label: 'fwd right', col: 2, row: 0, actions: ['driveForward', 'driveRight'] },\n { id: 'left', label: 'left', col: 0, row: 1, actions: ['driveLeft'] },\n { id: 'stop', label: 'stop', col: 1, row: 1, actions: [] },\n { id: 'right', label: 'right', col: 2, row: 1, actions: ['driveRight'] },\n { id: 'back-left', label: 'back left', col: 0, row: 2, actions: ['driveBackward', 'driveLeft'] },\n { id: 'back', label: 'back', col: 1, row: 2, actions: ['driveBackward'] },\n { id: 'back-right', label: 'back right', col: 2, row: 2, actions: ['driveBackward', 'driveRight'] },\n];\n\nconst DRIVE_CELL_BY_POSITION = DRIVE_CELLS.reduce((lookup, cell) => {\n lookup[`${cell.row}:${cell.col}`] = cell;\n return lookup;\n}, {});\n\nconst STOP_CELL = DRIVE_CELLS.find((cell) => cell.id === 'stop');\n\nfunction clamp(value, min, max) {\n if (!Number.isFinite(value)) return min;\n return Math.max(min, Math.min(max, value));\n}\n\nfunction getViewportSize() {\n if (typeof window === 'undefined') return { width: DEFAULT_PAD_SIZE, height: DEFAULT_PAD_SIZE };\n return {\n width: window.innerWidth || DEFAULT_PAD_SIZE,\n height: window.innerHeight || DEFAULT_PAD_SIZE,\n };\n}\n\nfunction getPadSize(container) {\n if (!container) return DEFAULT_PAD_SIZE;\n const rect = container.getBoundingClientRect();\n const viewport = getViewportSize();\n const availableWidth = Math.max(96, Math.min(rect.width, viewport.width - PAD_MARGIN * 2));\n\n // The floating grid should match the visible drive card width instead of being a\n // fixed global overlay size. That keeps the active pad visually connected to the\n // card and prevents it from feeling oversized in portrait split-column layouts.\n return Math.round(availableWidth);\n}\n\nfunction clampPadCenter(clientX, clientY, padSize) {\n const viewport = getViewportSize();\n const halfPad = padSize / 2;\n const minX = Math.min(viewport.width - halfPad, halfPad + PAD_MARGIN);\n const maxX = Math.max(halfPad + PAD_MARGIN, viewport.width - halfPad - PAD_MARGIN);\n const minY = Math.min(viewport.height - halfPad, halfPad + PAD_MARGIN);\n const maxY = Math.max(halfPad + PAD_MARGIN, viewport.height - halfPad - PAD_MARGIN);\n\n // The floating pad is fixed to the viewport instead of the card so overflow-hidden\n // containers cannot clip it. Clamping keeps the visible 3x3 target usable even when\n // the driver starts near the edge of a landscape phone screen.\n return {\n x: clamp(clientX, minX, maxX),\n y: clamp(clientY, minY, maxY),\n };\n}\n\nfunction cellFromPointer(activePad, clientX, clientY) {\n const padSize = activePad?.size || DEFAULT_PAD_SIZE;\n const halfPad = padSize / 2;\n const cellSize = padSize / CELL_COUNT;\n const localX = clamp(clientX - activePad.center.x + halfPad, 0, padSize - 1);\n const localY = clamp(clientY - activePad.center.y + halfPad, 0, padSize - 1);\n const col = clamp(Math.floor(localX / cellSize), 0, CELL_COUNT - 1);\n const row = clamp(Math.floor(localY / cellSize), 0, CELL_COUNT - 1);\n return DRIVE_CELL_BY_POSITION[`${row}:${col}`] || STOP_CELL;\n}\n\nfunction FloatingPadOverlay({ center, size, activeCellId }) {\n if (typeof document === 'undefined') return null;\n const halfPad = size / 2;\n\n return createPortal(\n
\n \n {DRIVE_CELLS.map((cell) => {\n const active = cell.id === activeCellId;\n const isStop = cell.id === 'stop';\n const baseClass =\n 'flex items-center justify-center border border-slate-700/80 px-1 text-center text-xs font-semibold leading-tight';\n const activeClass = active\n ? isStop\n ? 'bg-rose-500 text-white'\n : 'bg-cyan-300 text-slate-950'\n : isStop\n ? 'bg-slate-900 text-slate-300'\n : 'bg-slate-800/80 text-slate-200';\n return (\n
\n {cell.label}\n
\n );\n })}\n
\n ,\n document.body,\n );\n}\n\nexport default function FloatingJoystick({\n activeInputLabel = 'stop',\n compact = false,\n disabled,\n onCellChange,\n onStop,\n}) {\n const containerRef = useRef(null);\n const pointerIdRef = useRef(null);\n const activePadRef = useRef(null);\n const activeCellIdRef = useRef(null);\n const [activePad, setActivePad] = useState(null);\n\n const stopTracking = useCallback(() => {\n pointerIdRef.current = null;\n activeCellIdRef.current = null;\n setActivePad(null);\n onStop?.();\n }, [onStop]);\n\n const updateActiveCell = useCallback(\n (event) => {\n const currentPad = activePadRef.current;\n if (!currentPad) return;\n const cell = cellFromPointer(currentPad, event.clientX, event.clientY);\n if (activeCellIdRef.current !== cell.id) {\n activeCellIdRef.current = cell.id;\n // Pulse only when the thumb crosses a real 3x3 cell boundary so\n // continuous pointermove traffic cannot buzz constantly. The shared\n // pointerup listener provides a Safari-compatible gesture-end pulse.\n triggerTouchHaptic('drive');\n onCellChange?.(cell);\n }\n setActivePad({\n ...currentPad,\n activeCellId: cell.id,\n });\n },\n [onCellChange],\n );\n\n const handlePointerDown = useCallback(\n (event) => {\n if (disabled) return;\n if (pointerIdRef.current !== null) return;\n event.preventDefault();\n const container = containerRef.current;\n if (!container) return;\n\n pointerIdRef.current = event.pointerId;\n const size = getPadSize(container);\n const center = clampPadCenter(event.clientX, event.clientY, size);\n activePadRef.current = { center, size, activeCellId: STOP_CELL.id };\n container.setPointerCapture?.(event.pointerId);\n\n // Starting in the center mirrors the old floating joystick behavior: putting\n // a thumb down establishes the control origin, and movement after that chooses\n // a direction. This prevents accidental drive commands from a simple touch.\n activeCellIdRef.current = STOP_CELL.id;\n setActivePad(activePadRef.current);\n onCellChange?.(STOP_CELL);\n },\n [disabled, onCellChange],\n );\n\n const handlePointerMove = useCallback(\n (event) => {\n if (disabled || pointerIdRef.current !== event.pointerId) return;\n event.preventDefault();\n updateActiveCell(event);\n },\n [disabled, updateActiveCell],\n );\n\n const handlePointerEnd = useCallback(\n (event) => {\n if (pointerIdRef.current !== event.pointerId) return;\n event.preventDefault();\n const pointerId = event.pointerId;\n stopTracking();\n containerRef.current?.releasePointerCapture?.(pointerId);\n },\n [stopTracking],\n );\n\n useEffect(() => {\n if (!disabled) return undefined;\n\n // Defer visual cleanup so this component stays compatible with the repo's strict\n // React hook lint rules while still guaranteeing that losing rover access stops\n // any active mobile drive gesture.\n const timer = setTimeout(stopTracking, 0);\n return () => clearTimeout(timer);\n }, [disabled, stopTracking]);\n\n return (\n <>\n {\n if (pointerIdRef.current === event.pointerId) stopTracking();\n }}\n onContextMenu={(event) => event.preventDefault()}\n >\n {!compact ? (\n
\n {/* The readout lives inside the pointer target instead of above it, so the\n visual indicator does not consume any non-drivable space on small phones. */}\n \n {activeInputLabel}\n \n
\n ) : null}\n {!compact ? (\n
\n \n \n drive pad\n \n hold and drag\n
\n ) : (\n
\n )}\n
\n {activePad ? (\n \n ) : null}\n \n );\n}\n","// constants\n// Purpose: Defines the constants module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport const SOURCE = 'mobile-drive-pad';\n\n// The mobile pad repeats the current fixed keyboard-style command while the thumb is\n// held down. The repeat keeps delayed rover/network paths fed with the same intent\n// without turning touch jitter into analog speed changes.\nexport const DRIVE_PAD_REPEAT_MS = 100;\nexport const DRIVE_PAD_SPEED_MODES = [\n { id: 'precision', label: 'precision', modifierAction: 'slowModifier' },\n { id: 'normal', label: 'normal', modifierAction: null },\n { id: 'turbo', label: 'turbo', modifierAction: 'boostModifier' },\n];\nexport const AUX_ZERO = { main: 0, side: 0, vacuum: 0 };\nexport const AUX_ALL_FORWARD = { main: 127, side: 127, vacuum: 127 };\nexport const AUX_ALL_BACKWARD = { main: -127, side: -127, vacuum: -127 };\n","// Control Pad Panel\n// Purpose: Provides the mobile movement control pad and speed mode selector.\n// Scope: Converts touch pad cells into keyboard-style drive vectors; movement column owns drive/dock placement.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport './mobileControls.css';\nimport { useControlActions, useControlSelector } from '../../controls/index.js';\nimport { normalizeKeymapEntries } from '../../controls/keymapUtils.js';\nimport {\n computeKeyboardDriveVector,\n getKeyboardDriveSpeedOptions,\n resolveKeyboardSpeeds,\n} from '../../controls/inputs/driveIntent.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { INPUT_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\nimport FloatingJoystick from './FloatingJoystick.jsx';\nimport {\n DRIVE_PAD_REPEAT_MS,\n DRIVE_PAD_SPEED_MODES,\n SOURCE,\n} from './constants.js';\n\nfunction firstTokenForAction(keymap, actionId) {\n const bindingSet = keymap?.[actionId];\n if (!bindingSet || bindingSet.size === 0) return null;\n return bindingSet.values().next().value ?? null;\n}\n\nfunction getSpeedModeConfig(speedMode) {\n return DRIVE_PAD_SPEED_MODES.find((mode) => mode.id === speedMode) || DRIVE_PAD_SPEED_MODES[1];\n}\n\nexport default function ControlPadPanel({ compact = false, disabled = false }) {\n const rawKeymap = useControlSelector((control) => control.state.keymap);\n const { setCameraPrecisionMode, setDriveVector, registerInputState } = useControlActions();\n const { value: inputSettings } = useSettingsNamespace('inputs', INPUT_SETTINGS_DEFAULTS);\n const [speedMode, setSpeedMode] = useState('normal');\n const [activeInputLabel, setActiveInputLabel] = useState('stop');\n const speedModeRef = useRef('normal');\n const activeCellRef = useRef(null);\n const repeatTimerRef = useRef(null);\n const keymap = useMemo(() => normalizeKeymapEntries(rawKeymap), [rawKeymap]);\n const keyboardSpeeds = useMemo(() => resolveKeyboardSpeeds(inputSettings), [inputSettings]);\n\n const clearRepeatTimer = useCallback(() => {\n if (!repeatTimerRef.current) return;\n clearInterval(repeatTimerRef.current);\n repeatTimerRef.current = null;\n }, []);\n\n const buildVirtualKeyTokens = useCallback(\n (cell, modeId = speedModeRef.current) => {\n const tokens = new Set();\n const speedModeConfig = getSpeedModeConfig(modeId);\n const actionIds = [\n ...(Array.isArray(cell?.actions) ? cell.actions : []),\n speedModeConfig.modifierAction,\n ].filter(Boolean);\n\n actionIds.forEach((actionId) => {\n const token = firstTokenForAction(keymap, actionId);\n if (token) tokens.add(token);\n });\n\n return tokens;\n },\n [keymap],\n );\n\n const sendDriveCell = useCallback(\n (cell, lastEvent = 'move', modeId = speedModeRef.current) => {\n if (disabled) return;\n const tokens = buildVirtualKeyTokens(cell, modeId);\n const vector = computeKeyboardDriveVector(tokens, keymap);\n const speedOptions = getKeyboardDriveSpeedOptions(tokens, keymap, keyboardSpeeds);\n const precisionActive = modeId === 'precision';\n\n // Mobile deliberately routes through the keyboard vector/speed helpers. The\n // thumb pad only chooses which virtual keys are down, so changes to keyboard\n // drive behavior automatically stay matched here.\n /*\n The selected mobile speed mode is persistent, unlike the keyboard's held\n Shift modifier. Publishing camera precision here makes the servo tilt\n controls follow the mobile movement mode even before the driver starts\n dragging on the pad.\n */\n setCameraPrecisionMode(precisionActive);\n setDriveVector(vector, { source: SOURCE, speedOptions });\n registerInputState(SOURCE, {\n keys: Array.from(tokens),\n vector,\n activeCell: cell?.id ?? 'stop',\n speedMode: modeId,\n lastEvent,\n });\n },\n [\n buildVirtualKeyTokens,\n disabled,\n keyboardSpeeds,\n keymap,\n registerInputState,\n setCameraPrecisionMode,\n setDriveVector,\n ],\n );\n\n const stopDrivePad = useCallback(\n (lastEvent = 'stop') => {\n clearRepeatTimer();\n activeCellRef.current = null;\n setActiveInputLabel('stop');\n sendDriveCell({ id: 'stop', actions: [] }, lastEvent, speedModeRef.current);\n },\n [clearRepeatTimer, sendDriveCell],\n );\n\n const startRepeatTimer = useCallback(() => {\n if (repeatTimerRef.current) return;\n repeatTimerRef.current = setInterval(() => {\n if (!activeCellRef.current) return;\n sendDriveCell(activeCellRef.current, 'repeat');\n }, DRIVE_PAD_REPEAT_MS);\n }, [sendDriveCell]);\n\n const handleCellChange = useCallback(\n (cell) => {\n if (disabled) return;\n activeCellRef.current = cell;\n setActiveInputLabel(cell?.label || 'stop');\n sendDriveCell(cell, 'move');\n startRepeatTimer();\n },\n [disabled, sendDriveCell, startRepeatTimer],\n );\n\n const handleSpeedModeChange = useCallback(\n (nextMode) => {\n if (nextMode === speedModeRef.current) return;\n setSpeedMode(nextMode);\n speedModeRef.current = nextMode;\n // Confirm the accepted mode transition here so tapping an already-active\n // mode cannot produce feedback for a state change that did not happen.\n triggerTouchHaptic('button');\n setCameraPrecisionMode(nextMode === 'precision');\n if (activeCellRef.current) {\n sendDriveCell(activeCellRef.current, 'speed', nextMode);\n }\n },\n [sendDriveCell, setCameraPrecisionMode],\n );\n\n useEffect(() => {\n return () => {\n clearRepeatTimer();\n /*\n Mobile controls can unmount during an orientation/layout change while a\n pointer is still captured by the disappearing element. Publish a neutral\n vector directly during cleanup so neither rover drive nor PTZ pan/tilt\n can retain the last cell merely because pointerup had nowhere to land.\n */\n activeCellRef.current = null;\n setDriveVector({ x: 0, y: 0, boost: false }, { source: SOURCE });\n registerInputState(SOURCE, {\n keys: [],\n vector: { x: 0, y: 0, boost: false },\n activeCell: 'stop',\n speedMode: speedModeRef.current,\n lastEvent: 'unmount',\n });\n // Clear the shared flag too, so a stale mobile precision choice cannot\n // leave desktop/keyboard camera tilt in fine-step mode.\n setCameraPrecisionMode(false);\n };\n }, [clearRepeatTimer, registerInputState, setCameraPrecisionMode, setDriveVector]);\n\n useEffect(() => {\n if (!disabled) return;\n stopDrivePad('disabled');\n setCameraPrecisionMode(false);\n }, [disabled, setCameraPrecisionMode, stopDrivePad]);\n\n return (\n \n
\n {DRIVE_PAD_SPEED_MODES.map((mode) => {\n const active = speedMode === mode.id;\n const speedValue =\n mode.id === 'precision'\n ? keyboardSpeeds.precisionSpeed\n : mode.id === 'turbo'\n ? keyboardSpeeds.turboSpeed\n : keyboardSpeeds.baseSpeed;\n return (\n handleSpeedModeChange(mode.id)}\n disabled={disabled}\n >\n {mode.label}\n {!compact ? {speedValue} : null}\n \n );\n })}\n
\n
\n stopDrivePad('stop')}\n />\n
\n \n );\n}\n","// GPIO Toggle Control\n// Purpose: Renders a direct press target for rover GPIO-backed toggles such as the headlight and laser.\n// Scope: Owns optimistic button state and touch/click de-duplication while callers provide device labels and actions.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport '../MobileControls/mobileControls.css';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\n\nexport default function GPIOToggleControl({\n label,\n icon: Icon,\n on,\n disabled,\n onToggle,\n keyLabel,\n className = '',\n heightClass = '',\n}) {\n const [optimistic, setOptimistic] = useState(\n isBoolean(on) ? on : null,\n );\n const suppressClickRef = useRef(false);\n const suppressClickTimerRef = useRef(null);\n\n useEffect(() => {\n if (isBoolean(on)) {\n // Server-confirmed state can arrive after an optimistic click. Defer the\n // reconciliation one tick so this effect stays a synchronization point\n // instead of triggering React's synchronous set-state-in-effect lint rule.\n const timer = window.setTimeout(() => setOptimistic(on), 0);\n return () => window.clearTimeout(timer);\n }\n return undefined;\n }, [on]);\n\n useEffect(\n () => () => {\n if (suppressClickTimerRef.current) {\n clearTimeout(suppressClickTimerRef.current);\n }\n },\n [],\n );\n\n const hasState = isBoolean(optimistic);\n const displayOn = hasState ? optimistic : false;\n const statusLabel = hasState ? (displayOn ? 'On' : 'Off') : '—';\n const statusClasses = displayOn\n ? 'bg-emerald-500 text-emerald-950'\n : 'bg-slate-700 text-slate-200';\n\n const handleToggle = () => {\n if (disabled) return;\n const next = hasState ? !displayOn : true;\n setOptimistic(next);\n // The optimistic state transition is the control's accepted action, so its\n // feedback belongs here rather than on an unrelated global pointer event.\n triggerTouchHaptic('button');\n onToggle?.(next);\n };\n\n const handlePointerDown = (event) => {\n if (disabled) return;\n if (event.pointerType === 'mouse') return;\n\n /*\n Mobile browsers, especially Safari, do not always dispatch a reliable\n synthetic click for a second finger while another finger is held on the\n drive pad. Toggle on the real touch pointerdown instead, then suppress the\n follow-up click so one tap cannot flip the GPIO-backed device twice.\n */\n event.preventDefault();\n suppressClickRef.current = true;\n if (suppressClickTimerRef.current) {\n clearTimeout(suppressClickTimerRef.current);\n }\n /*\n The next click normally clears this flag, but Safari may suppress the click\n completely after preventDefault(). The timer prevents a stale touch flag\n from swallowing a later keyboard or desktop click.\n */\n suppressClickTimerRef.current = window.setTimeout(() => {\n suppressClickRef.current = false;\n suppressClickTimerRef.current = null;\n }, 800);\n handleToggle();\n };\n\n const handleClick = (event) => {\n if (suppressClickRef.current) {\n event.preventDefault();\n suppressClickRef.current = false;\n if (suppressClickTimerRef.current) {\n clearTimeout(suppressClickTimerRef.current);\n suppressClickTimerRef.current = null;\n }\n return;\n }\n handleToggle();\n };\n\n const buttonClasses = useMemo(() => {\n // This control is used as a direct mobile press target, so selection and\n // Safari callout suppression live on the button itself rather than only on\n // the surrounding mobile column.\n const base =\n 'mobile-touch-control group flex w-full flex-col items-center justify-center gap-0.35 rounded-xl border-2 px-1 py-0.75 text-center select-none no-touch-select';\n const active = 'border-emerald-300/70 bg-emerald-800 text-emerald-50 hover:bg-emerald-700';\n const inactive = 'border-amber-300/70 bg-amber-900 text-amber-50 hover:bg-amber-800';\n return [base, displayOn ? active : inactive, 'disabled:opacity-50', heightClass, className]\n .filter(Boolean)\n .join(' ');\n }, [className, displayOn, heightClass]);\n\n return (\n event.preventDefault()}\n disabled={disabled}\n aria-pressed={displayOn}\n className={buttonClasses}\n >\n \n {/* Callers opt into an icon so shared desktop GPIO controls retain their\n established density while narrow mobile controls gain faster recognition. */}\n {Icon ? : null}\n {label}\n {keyLabel ? (\n \n {keyLabel}\n \n ) : null}\n \n \n {statusLabel}\n \n \n );\n}\n","// PTZ Live Video\n// Purpose: Plays the single PTZ camera WHEP stream with the same fresh-session retry loop used by rover video.\n// Scope: Owns browser-side WHEP playback/retry only; server authorization and snapshot fallback policy stay outside.\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useVideoRequests } from '../../hooks/useVideoRequests.js';\nimport { WhepPlayer } from '../../lib/whepPlayer.js';\nimport { RESTART_DELAY_MS } from '../RoverMediaPlayer/constants.js';\n\nexport const PTZ_CAMERA_ID = 'ptz-camera';\n\nconst PTZ_AUDIO_RETRY_MS = 1000;\nconst TERMINAL_WHEP_STATES = new Set(['error', 'failed', 'disconnected', 'closed']);\nconst AUTHORIZATION_ERROR_RE = /not authorized/i;\n\nfunction isAuthorizationError(error) {\n return AUTHORIZATION_ERROR_RE.test(String(error || ''));\n}\n\nexport default function PtzLiveVideo({\n enabled = true,\n startMuted = true,\n className = 'relative h-full w-full bg-black',\n videoClassName = 'h-full w-full object-contain',\n statusClassName = 'pointer-events-none absolute left-1 top-1 z-20 font-medium text-slate-100 text-[0.65rem]',\n fallback = null,\n}) {\n const videoRef = useRef(null);\n const retryTimerRef = useRef(null);\n const playTimerRef = useRef(null);\n const enabledRef = useRef(enabled);\n const fallbackRef = useRef(false);\n const playerGenerationRef = useRef(0);\n const [status, setStatus] = useState('idle');\n const [detail, setDetail] = useState(null);\n const [restartToken, setRestartToken] = useState(0);\n const sources = useVideoRequests(\n [{ type: 'ptz', id: PTZ_CAMERA_ID, key: PTZ_CAMERA_ID }],\n { enabled, version: restartToken },\n );\n const source = sources[PTZ_CAMERA_ID] || null;\n const shouldUseFallback = Boolean(source?.error && isAuthorizationError(source.error));\n\n useEffect(() => {\n enabledRef.current = enabled;\n }, [enabled]);\n\n useEffect(() => {\n fallbackRef.current = shouldUseFallback;\n }, [shouldUseFallback]);\n\n useEffect(() => {\n if (enabled && !shouldUseFallback) return undefined;\n /*\n A retry that was scheduled before the server denied live access should not\n keep firing in snapshot mode. Clear it when live playback is no longer the\n active display policy.\n */\n if (retryTimerRef.current) {\n clearTimeout(retryTimerRef.current);\n retryTimerRef.current = null;\n }\n return undefined;\n }, [enabled, shouldUseFallback]);\n\n const scheduleRestart = useCallback(() => {\n if (!enabledRef.current || fallbackRef.current) return;\n /*\n WHEP sessions are one-shot browser/server negotiations. When the camera\n reboots, the old PeerConnection and token can look alive enough to keep a\n black element on screen, but they are not useful anymore. Bumping this\n token forces useVideoRequests to ask the server for a new MediaMTX auth\n session before creating the next WhepPlayer.\n */\n clearTimeout(retryTimerRef.current);\n retryTimerRef.current = setTimeout(() => {\n retryTimerRef.current = null;\n setRestartToken(Date.now());\n }, RESTART_DELAY_MS);\n }, []);\n\n useEffect(() => {\n if (!enabled || shouldUseFallback || !source?.url || !videoRef.current) return undefined;\n let active = true;\n const generation = playerGenerationRef.current + 1;\n playerGenerationRef.current = generation;\n const player = new WhepPlayer({\n url: source.url,\n token: source.token,\n video: videoRef.current,\n startMuted,\n onStatus: (nextStatus, info) => {\n /*\n Old PeerConnection callbacks can arrive after React has already\n cleaned up this effect for a newer token. Only the currently-owned\n generation is allowed to update status or schedule another restart.\n */\n if (!active || playerGenerationRef.current !== generation) return;\n const normalized = String(nextStatus || '').toLowerCase();\n setStatus(nextStatus || 'unknown');\n setDetail(info || null);\n if (TERMINAL_WHEP_STATES.has(normalized)) {\n scheduleRestart();\n }\n },\n });\n\n player.start().catch((err) => {\n if (!active || playerGenerationRef.current !== generation) return;\n setStatus('error');\n setDetail(err.message || 'WHEP start failed');\n scheduleRestart();\n });\n\n return () => {\n /*\n Mark inactive before stop() because WhepPlayer reports \"stopped\" during\n normal cleanup. Cleanup-driven stops should not immediately schedule the\n next retry; only the replacement effect should own the new connection.\n */\n active = false;\n player.stop();\n };\n }, [enabled, scheduleRestart, shouldUseFallback, source?.token, source?.url, startMuted]);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!enabled || shouldUseFallback || !source?.url || !video) return undefined;\n const generation = playerGenerationRef.current;\n\n const handleEnded = () => {\n if (playerGenerationRef.current !== generation) return;\n setStatus('stopped');\n setDetail('ended');\n scheduleRestart();\n };\n const handleError = () => {\n if (playerGenerationRef.current !== generation) return;\n setStatus('error');\n setDetail(video.error?.message || 'video element error');\n scheduleRestart();\n };\n\n video.addEventListener('ended', handleEnded);\n video.addEventListener('error', handleError);\n return () => {\n video.removeEventListener('ended', handleEnded);\n video.removeEventListener('error', handleError);\n };\n }, [enabled, scheduleRestart, shouldUseFallback, source?.url]);\n\n useEffect(() => {\n const video = videoRef.current;\n if (!enabled || shouldUseFallback || startMuted || !source?.url || !video) {\n if (playTimerRef.current) clearInterval(playTimerRef.current);\n playTimerRef.current = null;\n return undefined;\n }\n\n /*\n PTZ carries inline Opus audio. When the operator opened the camera from a\n user gesture, keep retrying audible playback so browser autoplay timing\n does not leave the element permanently muted after a reconnect.\n */\n const attemptPlay = () => {\n const target = videoRef.current;\n if (!target) return;\n target.muted = false;\n if (!target.paused && !target.ended) return;\n target.play().catch(() => {});\n };\n\n attemptPlay();\n playTimerRef.current = setInterval(attemptPlay, PTZ_AUDIO_RETRY_MS);\n return () => {\n if (playTimerRef.current) clearInterval(playTimerRef.current);\n playTimerRef.current = null;\n };\n }, [enabled, shouldUseFallback, source?.url, startMuted, status]);\n\n useEffect(() => () => {\n if (retryTimerRef.current) clearTimeout(retryTimerRef.current);\n if (playTimerRef.current) clearInterval(playTimerRef.current);\n }, []);\n\n if (shouldUseFallback && typeof fallback === 'function') {\n return fallback({ source, status, detail });\n }\n\n const displayStatus = source?.error || detail || status;\n\n return (\n
\n {source?.url ? (\n
\n );\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { useControlSelector } from '../../../controls/index.js';\nimport { useSharedClock } from '../../../hooks/useSharedClock.js';\nimport SocialButton from '../../SocialButton/index.jsx';\n\nfunction TurnsOverlay({\n roverId = null,\n mobileHud = false,\n turnModel = null,\n}) {\n const assignedRoverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const effectiveRoverId = turnModel?.targetId ?? roverId ?? assignedRoverId;\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const roster = useSessionSelector((state) => state.session?.roster ?? []);\n const users = useSessionSelector((state) => state.session?.users ?? []);\n const turnQueues = useSessionSelector((state) => state.session?.turnQueues ?? {});\n const socketId = useSessionSelector((state) => state.session?.socketId || null);\n const activeDrivers = useSessionSelector((state) => state.session?.activeDrivers ?? {});\n const lastControlIntentAt = useControlSelector((control) => control.state.lastControlIntentAt);\n const [showTurnCue, setShowTurnCue] = useState(false);\n const [turnCueStartAt, setTurnCueStartAt] = useState(null);\n const [noticeFlashActive, setNoticeFlashActive] = useState(false);\n const [notTurnFlashAt, setNotTurnFlashAt] = useState(0);\n const lastTurnRef = useRef({ initialized: false, roverId: null, activeDriverId: null });\n const lastIntentRef = useRef(lastControlIntentAt || 0);\n const timerTextClass = mobileHud ? 'text-[0.5rem]' : 'text-[0.7rem]';\n const timerPadClass = mobileHud ? 'px-0.5 py-0.25' : 'px-1 py-0.5';\n const titleClass = mobileHud ? 'text-3xl' : 'text-5xl';\n const subClass = mobileHud ? 'text-xs' : 'text-sm';\n const cueTimerClass = mobileHud ? 'text-[0.55rem]' : 'text-[0.75rem]';\n const cuePadClass = mobileHud ? 'px-4 py-3' : 'px-6 py-4';\n const turnInfo = turnModel ? null : effectiveRoverId ? turnQueues?.[effectiveRoverId] : null;\n const activeDriverId = turnModel\n ? turnModel.activeId || null\n : effectiveRoverId\n ? activeDrivers?.[effectiveRoverId] || null\n : null;\n const isActiveDriver = turnModel\n ? Boolean(turnModel.isActive)\n : Boolean(socketId && activeDriverId === socketId);\n const isTurnsMode = turnModel ? Boolean(turnModel.enabled) : mode === 'turns';\n const now = useSharedClock(1000, isTurnsMode);\n const nextDriverId = useMemo(() => {\n if (turnModel) return turnModel.nextId || null;\n const queue = turnInfo?.queue || [];\n if (!queue.length || !turnInfo?.current || queue.length <= 1) return null;\n const idx = queue.findIndex((id) => id === turnInfo.current);\n if (idx === -1) return queue[0] || null;\n return queue[(idx + 1) % queue.length] || null;\n }, [turnInfo, turnModel]);\n const isNextDriver = turnModel\n ? Boolean(turnModel.isNext)\n : Boolean(socketId && nextDriverId === socketId);\n const deadline = turnModel ? turnModel.deadline || null : turnInfo?.deadline || null;\n const idleDeadline = turnModel ? turnModel.idleDeadline || null : turnInfo?.idleDeadline || null;\n const msUntilTurn = deadline ? deadline - now : null;\n const msUntilIdleSkip = idleDeadline ? idleDeadline - now : null;\n const totalRovers = roster.length;\n const totalDrivers = useMemo(() => {\n const unique = new Set();\n users.forEach((entry) => {\n const role = String(entry?.role || '');\n if (role === 'spectator') return;\n const turnRoverId = String(entry?.roverId || '').trim();\n const turnSocketId = String(entry?.socketId || '').trim();\n if (!turnRoverId || !turnSocketId) return;\n unique.add(turnSocketId);\n });\n return unique.size;\n }, [users]);\n const shouldUsePreviewByLoad = turnModel\n ? Boolean(turnModel.showPreviewReason)\n : isTurnsMode && totalDrivers > totalRovers;\n const isPreSwitchWindow =\n isTurnsMode && isNextDriver && msUntilTurn != null && msUntilTurn <= 5000 && msUntilTurn > 0;\n const showNotTurnNotice = turnModel\n ? Boolean(turnModel.showNotTurnNotice ?? (isTurnsMode && !isActiveDriver))\n : isTurnsMode && !isActiveDriver;\n const showPreviewReason = showNotTurnNotice && !isPreSwitchWindow && shouldUsePreviewByLoad;\n const turnSeconds =\n msUntilTurn != null && Number.isFinite(msUntilTurn) ? Math.max(0, Math.ceil(msUntilTurn / 1000)) : null;\n const idleSkipSeconds =\n msUntilIdleSkip != null && Number.isFinite(msUntilIdleSkip)\n ? Math.max(0, Math.ceil(msUntilIdleSkip / 1000))\n : null;\n const turnTimerText = useMemo(() => {\n if (!isTurnsMode || !isActiveDriver) return null;\n return turnSeconds != null ? `${turnSeconds}s left` : 'Your turn';\n }, [isTurnsMode, isActiveDriver, turnSeconds]);\n const idleTimerText = useMemo(() => {\n /*\n Idle grace is independent from the full turn deadline. Rendering it in\n the persistent corner status means initial page loads and reconnects get\n the same warning as users who happened to see the large handoff cue.\n */\n if (!isTurnsMode || !isActiveDriver || idleSkipSeconds == null) return null;\n return `Idle skip in ${idleSkipSeconds}s`;\n }, [idleSkipSeconds, isActiveDriver, isTurnsMode]);\n const notTurnCountdownText = useMemo(() => {\n if (!showNotTurnNotice || !isNextDriver || turnSeconds == null) return null;\n return `${turnSeconds} seconds until your turn.`;\n }, [showNotTurnNotice, isNextDriver, turnSeconds]);\n const showCountdown = isActiveDriver && typeof idleSkipSeconds === 'number';\n const turnTimerFlashActive = noticeFlashActive;\n\n useEffect(() => {\n /*\n Rover turns and PTZ turns now arrive through the same render path. Use the\n normalized isTurnsMode flag here instead of checking the server's rover\n mode directly, otherwise PTZ can render the notice but never trigger the\n \"your turn\" cue when camera ownership changes.\n */\n if (!isTurnsMode) {\n lastTurnRef.current = { initialized: false, roverId: null, activeDriverId: null };\n /*\n React Compiler's lint rules disallow immediate state writes from effect\n bodies. Defer the visual reset one macrotask; the ref reset above stays\n synchronous so later turn comparisons do not see stale ownership.\n */\n const resetTimer = setTimeout(() => {\n setShowTurnCue(false);\n setTurnCueStartAt(null);\n }, 0);\n return () => clearTimeout(resetTimer);\n }\n const lastTurn = lastTurnRef.current;\n const nextActiveDriverId = activeDriverId || null;\n if (!socketId || !effectiveRoverId) {\n lastTurnRef.current = { initialized: false, roverId: null, activeDriverId: null };\n /*\n No socket/target means there is no turn identity to compare. Reset the\n comparison ref immediately, then defer the visual state reset for the\n same React Compiler reason documented in the mode-disabled branch.\n */\n const resetTimer = setTimeout(() => {\n setShowTurnCue(false);\n setTurnCueStartAt(null);\n }, 0);\n return () => clearTimeout(resetTimer);\n }\n if (!lastTurn.initialized || lastTurn.roverId !== effectiveRoverId) {\n lastTurnRef.current = { initialized: true, roverId: effectiveRoverId, activeDriverId: nextActiveDriverId };\n return;\n }\n const becameActive =\n Boolean(lastTurn.activeDriverId) &&\n lastTurn.activeDriverId !== socketId &&\n nextActiveDriverId === socketId;\n let cueTimer = 0;\n if (becameActive) {\n const cueStartAt = Date.now();\n /*\n The active-turn cue is still caused by this ownership transition, but\n React Compiler wants visual state writes scheduled from an async edge.\n Capture the timestamp now so the cue dismissal logic compares against\n the actual transition time, not the later timer callback time.\n */\n cueTimer = setTimeout(() => {\n setShowTurnCue(true);\n setTurnCueStartAt(cueStartAt);\n }, 0);\n } else if (nextActiveDriverId !== socketId && showTurnCue) {\n cueTimer = setTimeout(() => {\n setShowTurnCue(false);\n setTurnCueStartAt(null);\n }, 0);\n }\n lastTurnRef.current = { initialized: true, roverId: effectiveRoverId, activeDriverId: nextActiveDriverId };\n return () => {\n if (cueTimer) clearTimeout(cueTimer);\n };\n }, [activeDriverId, effectiveRoverId, isTurnsMode, socketId, showTurnCue]);\n\n useEffect(() => {\n if (!showTurnCue || !turnCueStartAt) return;\n if (lastControlIntentAt > turnCueStartAt) {\n /*\n Hide the large \"your turn\" cue after the first control intent, but\n schedule the state write outside the effect body so this shared overlay\n remains compatible with the repo's React Compiler lint settings.\n */\n const timer = setTimeout(() => setShowTurnCue(false), 0);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [lastControlIntentAt, showTurnCue, turnCueStartAt]);\n\n useEffect(() => {\n const lastIntent = Number(lastIntentRef.current) || 0;\n const nextIntent = Number(lastControlIntentAt) || 0;\n if (nextIntent > lastIntent && showNotTurnNotice) {\n const flashAt = Date.now();\n /*\n The \"not your turn\" flash is a direct response to a recorded control\n intent. Deferring only the state write preserves the timestamp while\n satisfying the same effect-state lint rule as the turn cue reset.\n */\n const timer = setTimeout(() => setNotTurnFlashAt(flashAt), 0);\n lastIntentRef.current = nextIntent;\n return () => clearTimeout(timer);\n }\n lastIntentRef.current = nextIntent;\n return undefined;\n }, [lastControlIntentAt, showNotTurnNotice]);\n\n useEffect(() => {\n if (!showNotTurnNotice || !notTurnFlashAt) return undefined;\n /*\n The flash has two timed edges: activate on the next task, then clear after\n the visible pulse duration. Owning both timers here keeps cleanup local\n when the user becomes operator or leaves the PTZ/rover turn surface.\n */\n const startTimer = setTimeout(() => setNoticeFlashActive(true), 0);\n const endTimer = setTimeout(() => setNoticeFlashActive(false), 650);\n return () => {\n clearTimeout(startTimer);\n clearTimeout(endTimer);\n };\n }, [showNotTurnNotice, notTurnFlashAt]);\n\n return (\n <>\n {showTurnCue ? (\n
\n \n
IT IS YOUR TURN!
\n
Start driving!
\n {showCountdown ? (\n
\n Idle skip in {idleSkipSeconds}s\n
\n ) : null}\n
\n \n ) : null}\n\n {turnTimerText ? (\n \n {turnTimerText}\n {idleTimerText ? (\n {idleTimerText}\n ) : null}\n \n ) : null}\n\n {showNotTurnNotice ? (\n
\n \n \n Not your turn to drive!\n
\n {notTurnCountdownText ? (\n
\n {notTurnCountdownText}\n
\n ) : null}\n {showPreviewReason ? (\n
\n Video switched to preview mode to save bandwidth.\n
\n ) : null}\n \n \n \n ) : null}\n \n );\n}\n\nexport default React.memo(TurnsOverlay);\n","// PTZ Camera UI\n// Purpose: Integrates the single PTZ camera into the main rover UI flow as a\n// queueable controllable target instead of a VIP-panel card.\n// Scope: Owns the driver-page PTZ entry card and the dedicated PTZ route\n// composition; PTZ command authority, queue ownership, and stream authorization\n// remain server-owned.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport CardFrame from '../CardFrame/index.jsx';\nimport ChatPanel from '../ChatPanel/index.jsx';\nimport ControlPadPanel from '../MobileControls/ControlPadPanel.jsx';\nimport GPIOToggleControl from '../GPIOToggleControl/index.jsx';\nimport HomeAssistantControls from '../HomeAssistantControls/index.jsx';\nimport PtzLiveVideo, { PTZ_CAMERA_ID } from '../PtzLiveVideo/index.jsx';\nimport ReplaySourcesPanel from '../ReplaySourcesPanel/index.jsx';\nimport QueueTargetRow, { QueueUserChips } from '../QueueTargetRow/index.jsx';\nimport TurnsOverlay from '../HudOverlays/TurnsOverlay/index.jsx';\nimport KeyPill from '../vip/VipAudioUploadCard/KeyPill.jsx';\nimport { useControlActions } from '../../controls/index.js';\nimport ControlHint from '../ControlHint/index.jsx';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { usePtzCameraSnapshots } from '../../hooks/usePtzCameraSnapshot.js';\nimport { useSharedClock } from '../../hooks/useSharedClock.js';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { DEFAULT_PAGE_THEME_KEY, usePageThemeClass } from '../../themes/index.js';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nconst PTZ_DEFAULT_COLOR = '#38bdf8';\n\nfunction formatRemaining(deadline, now) {\n const remaining = Math.max(0, Math.ceil((Number(deadline || 0) - now) / 1000));\n if (!remaining) return '--';\n const minutes = Math.floor(remaining / 60);\n const seconds = remaining % 60;\n return `${minutes}:${String(seconds).padStart(2, '0')}`;\n}\n\nfunction isSpotlightOn(light = {}) {\n if (typeof light?.on === 'boolean') return light.on;\n const raw = light?.state;\n if (typeof raw === 'string') {\n const normalized = raw.trim().toLowerCase();\n return !['', '0', 'off', 'false'].includes(normalized);\n }\n return Boolean(Number(raw));\n}\n\nfunction normalizeIrMode(mode) {\n const normalized = String(mode || '').trim().toLowerCase();\n if (normalized === 'on') return 'On';\n if (normalized === 'off') return 'Off';\n return 'Auto';\n}\n\nfunction nextIrMode(currentMode) {\n const current = normalizeIrMode(currentMode);\n if (current === 'Auto') return 'On';\n if (current === 'On') return 'Off';\n return 'Auto';\n}\n\nfunction normalizePtzQueue(ptz = null) {\n /*\n The PTZ service exposes the current operator separately from the waiting\n queue, while the rover queue row expects one ordered queue plus a current id.\n Normalizing once keeps every PTZ surface consistent with the shared queue\n renderer without making that renderer understand PTZ service internals.\n */\n const currentId = ptz?.operatorSocketId || null;\n const waiting = Array.isArray(ptz?.queue)\n ? ptz.queue.map((entry) => entry?.socketId || entry).filter(Boolean)\n : [];\n const queue = currentId ? [currentId, ...waiting.filter((id) => id !== currentId)] : waiting;\n const nextId = currentId ? waiting[0] || null : queue[0] || null;\n return { queue, currentId, nextId };\n}\n\nfunction usePtzQueueLookup(ptz = null) {\n const users = useSessionSelector((state) => state.session?.users ?? []);\n return useCallback(\n (socketId) => {\n const fromUsers = users.find((entry) => entry.socketId === socketId);\n if (fromUsers) return fromUsers;\n if (ptz?.operatorSocketId === socketId) {\n return { socketId, nickname: ptz?.operatorLabel || null, role: null };\n }\n const fromQueue = Array.isArray(ptz?.queue)\n ? ptz.queue.find((entry) => (entry?.socketId || entry) === socketId)\n : null;\n return {\n socketId,\n nickname: fromQueue?.label || null,\n role: null,\n };\n },\n [ptz, users],\n );\n}\n\nfunction PtzSnapshotPreview({ feed, label = 'PTZ Camera', className = 'h-full w-full' }) {\n return (\n
\n {feed?.objectUrl ? (\n {label}\n ) : (\n
Waiting for snapshot...
\n )}\n {/*\n Snapshot mode should look like the regular rover video player: the\n camera name belongs to the surrounding card/menu, while the media pane\n only exposes stream health in the small top-left diagnostic overlay.\n */}\n
\n
\n Status: {feed?.error ? `Error: ${feed.error}` : feed?.status || 'connecting'}\n
\n
\n
\n );\n}\n\nfunction PtzQueueSummary({ ptz, title = 'PTZ queue' }) {\n const selfId = useSessionSelector((state) => state.session?.socketId || null);\n const lookupUser = usePtzQueueLookup(ptz);\n const { queue, currentId, nextId } = normalizePtzQueue(ptz);\n\n return (\n \n \n \n );\n}\n\nfunction PtzLightingControls({ ptz, disabled = false }) {\n const { ptzSpotlight, ptzIr } = useSessionActions();\n const [busy, setBusy] = useState('');\n const spotlightOn = isSpotlightOn(ptz?.light);\n const irMode = normalizeIrMode(ptz?.ir?.state);\n\n const toggleSpotlight = async (nextOn) => {\n if (disabled) return;\n setBusy('spotlight');\n try {\n await ptzSpotlight({ state: nextOn ? 1 : 0 });\n } finally {\n setBusy('');\n }\n };\n\n const cycleIr = async () => {\n if (disabled) return;\n triggerTouchHaptic('button');\n setBusy('ir');\n try {\n await ptzIr({ state: nextIrMode(irMode) });\n } finally {\n setBusy('');\n }\n };\n\n return (\n
\n \n \n Infrared\n {irMode}\n \n
\n );\n}\n\nfunction PtzMobileZoomButtons({ disabled = false }) {\n const { setCameraAxisIntent } = useControlActions();\n\n const stopZoom = useCallback(() => {\n /*\n Zero only releases the zoom axis. The PTZ adapter combines it with any\n pan/tilt direction still held on the movement pad, so lifting one finger\n cannot erase the other finger's intent.\n */\n setCameraAxisIntent(0);\n }, [setCameraAxisIntent]);\n\n const startZoom = useCallback(\n (direction) => (event) => {\n /*\n Publish held state once. The adapter owns the single motion heartbeat,\n so this button no longer creates a second interval whose queued callback\n could run after pointerup and restart zoom.\n */\n event.preventDefault();\n if (disabled) return;\n triggerTouchHaptic('button');\n event.currentTarget.setPointerCapture?.(event.pointerId);\n setCameraAxisIntent(direction);\n },\n [disabled, setCameraAxisIntent],\n );\n const stopFromPointer = useCallback(\n (event) => {\n event?.preventDefault?.();\n if (disabled) return;\n stopZoom();\n },\n [disabled, stopZoom],\n );\n\n useEffect(\n () => () => {\n /*\n A touch surface can unmount during orientation changes or fullscreen\n close while a pointer is still down. Explicitly clear zoom here because\n an unmounted DOM node cannot deliver its pointerup/pointercancel event.\n */\n setCameraAxisIntent(0);\n },\n [setCameraAxisIntent],\n );\n\n return (\n
\n event.preventDefault()}\n >\n Zoom out\n \n event.preventDefault()}\n >\n Zoom in\n \n
\n );\n}\n\nfunction PtzMobileControlsPanel({ ptz, disabled = false }) {\n return (\n
\n \n
\n {/*\n Reuse the rover control pad so touch intent still enters the normal\n control system. The PTZ adapter translates that same drive vector into\n pan/tilt commands only while this user is the PTZ operator.\n */}\n \n
\n \n
\n );\n}\n\nfunction PtzControlReference() {\n const rows = [\n ['Tilt up', 'driveForward'],\n ['Tilt down', 'driveBackward'],\n ['Pan left', 'driveLeft'],\n ['Pan right', 'driveRight'],\n ['Zoom in', 'cameraUp'],\n ['Zoom out', 'cameraDown'],\n ['Spotlight', 'headlightToggle'],\n ['Infrared mode', 'laserToggle'],\n ];\n\n return (\n \n {rows.map(([label, actionId]) => (\n
\n {label}\n } />\n
\n ))}\n
\n );\n}\n\nfunction PtzPresetPanel({ ptz }) {\n const role = useSessionSelector((state) => state.session?.role || null);\n const {\n ptzListPresets,\n ptzGotoPreset,\n ptzCreatePreset,\n ptzRemovePreset,\n } = useSessionActions();\n const [name, setName] = useState('');\n const [busy, setBusy] = useState('');\n const presets = Array.isArray(ptz?.presets) ? ptz.presets : [];\n const isPresetAdmin = role === 'admin' || role === 'lockdown';\n const canCreatePreset = Boolean(ptz?.canUse);\n const canMoveToPreset = Boolean(ptz?.isOperator);\n\n const refreshPresets = async () => {\n if (busy) return;\n setBusy('refresh');\n try {\n /*\n Presets live on the camera, not in browser state. A manual refresh gives\n admins a simple recovery path if another admin or the camera's native\n app changes preset storage while this UI is already open.\n */\n await ptzListPresets();\n } catch (err) {\n alert(err.message || 'Failed to refresh PTZ presets.');\n } finally {\n setBusy('');\n }\n };\n\n const goToPreset = async (preset) => {\n if (!canMoveToPreset || busy || !preset?.token) return;\n setBusy(`goto:${preset.token}`);\n try {\n /*\n Moving to a preset is a physical camera move, so the server still checks\n that this browser owns the active PTZ turn before accepting the command.\n */\n await ptzGotoPreset({ token: preset.token });\n } catch (err) {\n alert(err.message || 'Failed to move to PTZ preset.');\n } finally {\n setBusy('');\n }\n };\n\n const createPreset = async (event) => {\n event.preventDefault();\n const trimmed = name.trim();\n if (!canCreatePreset || busy || !trimmed) return;\n setBusy('create');\n try {\n /*\n ONVIF setPreset stores the camera's current physical position. The UI\n only sends the user's label; the server supplies the active profile\n token so browser code does not need camera profile internals, and the\n server still enforces the PTZ feature gate for raw socket callers.\n */\n await ptzCreatePreset({ name: trimmed });\n setName('');\n } catch (err) {\n alert(err.message || 'Failed to create PTZ preset.');\n } finally {\n setBusy('');\n }\n };\n\n const removePreset = async (preset) => {\n if (!isPresetAdmin || busy || !preset?.token) return;\n const confirmed = window.confirm(`Remove preset \"${preset.name}\"?`);\n if (!confirmed) return;\n setBusy(`remove:${preset.token}`);\n try {\n /*\n The token is the camera's durable preset identifier. Names are only UI\n labels and may not be unique, so deletion always targets the token.\n */\n await ptzRemovePreset({ token: preset.token });\n } catch (err) {\n alert(err.message || 'Failed to remove PTZ preset.');\n } finally {\n setBusy('');\n }\n };\n\n return (\n \n Refresh\n \n )}\n bodyClassName=\"flex min-h-0 flex-col gap-1 p-1 text-xs\"\n >\n {ptz?.presetsError ? (\n
\n {ptz.presetsError}\n
\n ) : null}\n
\n {/*\n Presets should behave like a compact pile of actions, not a table.\n flex-wrap lets each preset keep its natural button width and only\n starts a new visual line when the current line runs out of room.\n */}\n {presets.length ? presets.map((preset) => {\n const gotoBusy = busy === `goto:${preset.token}`;\n const removeBusy = busy === `remove:${preset.token}`;\n return (\n
\n goToPreset(preset)}\n title={canMoveToPreset ? `Move to ${preset.name}` : 'Your PTZ turn must be active'}\n >\n {gotoBusy ? 'Moving...' : preset.name}\n \n {isPresetAdmin ? (\n removePreset(preset)}\n >\n {removeBusy ? 'Removing...' : 'Remove'}\n \n ) : null}\n
\n );\n }) : (\n
\n No presets saved.\n
\n )}\n
\n {canCreatePreset ? (\n
\n setName(event.target.value)}\n placeholder=\"Preset name\"\n />\n \n \n ) : null}\n \n );\n}\n\nfunction buildPtzTurnModel(ptz, selfId) {\n const { queue, currentId, nextId } = normalizePtzQueue(ptz);\n const isActive = Boolean(ptz?.isOperator);\n const isQueued = Boolean(ptz?.queuedPosition);\n return {\n enabled: Boolean(ptz && (isActive || isQueued || currentId)),\n targetId: ptz?.id || PTZ_CAMERA_ID,\n activeId: currentId,\n nextId,\n isActive,\n isNext: Boolean(selfId && nextId === selfId),\n deadline: ptz?.deadline || null,\n idleDeadline: null,\n showNotTurnNotice: Boolean(!isActive && (isQueued || currentId || queue.length)),\n showPreviewReason: false,\n };\n}\n\nfunction PtzMediaPane({ ptz, open, framed = true }) {\n const isOperator = Boolean(ptz?.isOperator);\n const isParticipant = Boolean(isOperator || ptz?.queuedPosition);\n const nonTurnSnapshotsActive = useSessionSelector(\n (state) => Boolean(state.session?.bandwidthSavings?.nonTurnVideo?.snapshotsActive),\n );\n const selfId = useSessionSelector((state) => state.session?.socketId || null);\n /*\n PTZ has its own turn queue, so non-operators are the camera equivalent of a\n non-active rover driver. The server enforces the same policy in\n canRequestLiveVideo(); this branch only chooses the expected browser render\n path and never unlocks movement controls.\n */\n /*\n A direct /ptz load renders before its automatic queue claim is acknowledged.\n Do not mount the live player during that short pre-claim window: its first\n token request would correctly be rejected, and PtzLiveVideo intentionally\n treats authorization rejection as a terminal snapshot fallback. Once the\n session confirms queue/operator membership, mounting the player creates a\n fresh authorized request without changing shared retry or server policy.\n */\n const shouldUseLiveVideo = isParticipant && (isOperator || !nonTurnSnapshotsActive);\n const snapshotFeeds = usePtzCameraSnapshots([PTZ_CAMERA_ID], { enabled: open && !shouldUseLiveVideo });\n const snapshot = snapshotFeeds[PTZ_CAMERA_ID] || null;\n const turnModel = useMemo(() => buildPtzTurnModel(ptz, selfId), [ptz, selfId]);\n const media = (\n <>\n {shouldUseLiveVideo ? (\n \n ) : (\n \n )}\n \n \n );\n\n if (!framed) {\n return
{media}
;\n }\n\n return (\n
\n
\n {media}\n
\n
\n );\n}\n\nfunction PtzDesktopFullscreen({ ptz, releasePending }) {\n return (\n
\n
\n
\n \n
\n {/* Keep the sidebar itself transparent. Its child cards still own their dark surfaces,\n while the shared PTZ page theme can show through the same compact gaps as the driver\n layout instead of being covered by one solid sidebar rectangle. */}\n \n
\n
\n \n \n
\n {releasePending ? (\n
\n Closing...\n
\n ) : null}\n
\n );\n}\n\nfunction PtzMobileLandscape({ ptz, onClose, releasePending = false }) {\n return (\n
\n {/*\n Landscape intentionally retains one control column beside the video.\n This is the established PTZ interaction and avoids forcing rover-style\n left/right columns onto a camera that has a smaller control inventory.\n */}\n
\n {/*\n The video keeps one viewport of height, but the grid row is allowed to\n grow when the control column is taller. That makes the sidebar's tail\n extend below the video instead of forcing it into a nested scroller.\n */}\n
\n
\n \n Close\n \n \n
\n {/*\n The right control column is naturally taller than the viewport.\n Placing room lights after the fixed-height video uses that left-\n column space while the whole landscape page continues scrolling as\n one surface.\n */}\n \n
\n {/*\n Do not put overflow scrolling on this column. The surrounding PTZ\n landscape content is the single page scroller, so a swipe over either\n the video area or these controls advances the same document flow.\n */}\n \n
\n
\n \n \n
\n
\n );\n}\n\nfunction PtzMobilePortrait({ ptz, onClose, releasePending = false }) {\n return (\n
\n
\n \n Close\n \n \n
\n {/*\n Portrait gives the video its full available width and places controls\n below it. Reusing the landscape sidebar width here was the source of the\n cramped portrait presentation, while the controls themselves remain the\n same shared PTZ controls used in landscape.\n */}\n
\n \n
\n
\n {/*\n Replay and presets are compact secondary actions, so portrait places\n them in one equal-width row before the full-width queue and chat. The\n explicit two-column grid keeps this arrangement local to portrait and\n leaves the desktop and one-column landscape compositions unchanged.\n */}\n
\n \n \n
\n \n \n {/* Portrait keeps room lights immediately after chat as requested. */}\n \n
\n
\n );\n}\n\nexport function PtzControllerPage({ layout = 'desktop' }) {\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n const featureEnabled = useSessionSelector((state) => isFeatureEnabled(state, 'ptzCamera'));\n const isVerified = useSessionSelector((state) => Boolean(state.session?.isVerified));\n const role = useSessionSelector((state) => state.session?.role || null);\n const socketId = useSessionSelector((state) => state.session?.socketId || null);\n const { ptzClaim, ptzRelease, pushAlert } = useSessionActions();\n const { stopAllMotion } = useControlActions();\n const navigate = useNavigate();\n const [releasePending, setReleasePending] = useState(false);\n const autoClaimSocketRef = useRef(null);\n const routeExitReleaseTimerRef = useRef(null);\n const participantRef = useRef(false);\n const closingThroughButtonRef = useRef(false);\n const { value: pageSettings } = useSettingsNamespace('page', {\n backgroundTheme: DEFAULT_PAGE_THEME_KEY,\n });\n const isMobile = layout !== 'desktop';\n const canUse = Boolean(ptz?.canUse || isVerified || role === 'admin' || role === 'lockdown');\n const isParticipant = Boolean(ptz?.isOperator || ptz?.queuedPosition);\n // PTZ is a separate route but shares the browser's page settings. Applying the catalog class to\n // its body surface exposes the theme only through layout padding and card gaps; camera pixels,\n // controls, and card interiors retain their purpose-built dark backgrounds.\n const pageBackgroundClass = usePageThemeClass(pageSettings?.backgroundTheme);\n\n useEffect(() => {\n // Route-exit cleanup runs after the last render, so retain the latest\n // server-confirmed membership without making the lifecycle effect resubscribe.\n participantRef.current = isParticipant;\n }, [isParticipant]);\n\n useEffect(() => {\n if (routeExitReleaseTimerRef.current) {\n clearTimeout(routeExitReleaseTimerRef.current);\n routeExitReleaseTimerRef.current = null;\n }\n\n return () => {\n if (!participantRef.current || closingThroughButtonRef.current) return;\n /*\n Browser Back and route navigation unmount the PTZ page without invoking\n its Close button. Defer release by one task so React Strict Mode's\n development-only cleanup/remount cycle can cancel it in the next setup;\n a real route exit has no replacement setup, so membership is released.\n\n This is intentionally membership-gated. An admin release command can\n revoke the current operator even when the admin is not that operator,\n so an admin merely visiting/leaving a disabled or unjoined page must not\n emit a release command.\n */\n routeExitReleaseTimerRef.current = setTimeout(() => {\n routeExitReleaseTimerRef.current = null;\n ptzRelease().catch(() => {});\n }, 0);\n };\n }, [ptzRelease]);\n\n useEffect(() => {\n if (!featureEnabled || !ptz || !socketId || !canUse) return undefined;\n\n if (ptz.isOperator || ptz.queuedPosition) {\n /*\n Navigation from the driver queue normally arrives with membership\n already established. Mark this socket complete so later session syncs\n cannot turn that normal route transition into another claim request.\n */\n autoClaimSocketRef.current = socketId;\n return undefined;\n }\n\n if (autoClaimSocketRef.current === socketId) return undefined;\n autoClaimSocketRef.current = socketId;\n let active = true;\n\n /*\n A direct /ptz load still receives the ordinary user role first, which can\n briefly assign a rover. Claiming through the existing server action is\n deliberate: ptzCameraService releases that rover ownership before it\n activates or queues this socket, keeping one authoritative transition.\n\n The socket-keyed ref suppresses repeats caused by session updates and\n React's development effect replay. The server claim is also idempotent for\n an existing operator/queue member, which covers an acknowledgement racing\n with a fresh public-state sync.\n */\n ptzClaim().catch((err) => {\n if (!active) return;\n pushAlert({\n id: `ptz-auto-claim-${socketId}`,\n title: 'PTZ camera',\n message: err?.message || 'Unable to join the PTZ queue.',\n color: '#f59e0b',\n lifetimeMs: 6000,\n });\n });\n\n return () => {\n // Do not emit or update UI from a rejected request after this route has\n // unmounted; the server still owns completion of any request in flight.\n active = false;\n };\n }, [canUse, featureEnabled, ptz, ptzClaim, pushAlert, socketId]);\n\n const releaseAndClose = useCallback(async () => {\n if (releasePending) return;\n setReleasePending(true);\n closingThroughButtonRef.current = true;\n try {\n /*\n Stop first so a held key/pointer cannot leave ONVIF continuous movement\n running while the server removes this socket from the PTZ queue.\n */\n stopAllMotion?.();\n if (ptz?.isOperator || ptz?.queuedPosition) {\n await ptzRelease();\n }\n navigate('/');\n } catch (err) {\n // A rejected manual release leaves the route mounted, so route-exit\n // cleanup must remain armed for a later Back/navigation attempt.\n closingThroughButtonRef.current = false;\n throw err;\n } finally {\n setReleasePending(false);\n }\n }, [navigate, ptz?.isOperator, ptz?.queuedPosition, ptzRelease, releasePending, stopAllMotion]);\n\n if (!featureEnabled) {\n return (\n
\n \n

The PTZ camera is not available.

\n \n
\n
\n );\n }\n\n return (\n
\n {/* The fullscreen CardFrame remains the structural shell. Painting its otherwise\n transparent body is what lets every desktop and mobile PTZ composition share one\n continuous pattern without threading theme props into each individual child panel. */}\n \n Close\n \n )}\n hideHeader={isMobile}\n fillHeight\n clipOverflow={false}\n className=\"h-[100dvh] w-[100vw] rounded-none border-0 !bg-black\"\n bodyClassName={`relative min-h-0 flex-1 ${pageBackgroundClass}`}\n >\n {isMobile ? (\n layout === 'mobile-landscape' ? (\n \n ) : (\n \n )\n ) : (\n \n )}\n \n
\n );\n}\n\nexport default function PtzQueueCard() {\n const featureEnabled = useSessionSelector((state) => isFeatureEnabled(state, 'ptzCamera'));\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n const isVerified = useSessionSelector((state) => Boolean(state.session?.isVerified));\n const role = useSessionSelector((state) => state.session?.role || null);\n const selfId = useSessionSelector((state) => state.session?.socketId || null);\n const { ptzClaim, ptzRelease } = useSessionActions();\n const navigate = useNavigate();\n const lookupUser = usePtzQueueLookup(ptz);\n const { queue, currentId, nextId } = normalizePtzQueue(ptz);\n const now = useSharedClock(1000, Boolean(ptz?.deadline));\n const [pending, setPending] = useState(false);\n const canUse = Boolean(ptz?.canUse || isVerified || role === 'admin' || role === 'lockdown');\n const isParticipant = Boolean(ptz?.isOperator || ptz?.queuedPosition);\n const timerLabel = ptz?.isOperator && ptz?.deadline ? `${formatRemaining(ptz.deadline, now)} left` : '';\n\n if (!featureEnabled) return null;\n\n const handleRequest = async () => {\n if (!canUse || pending) return;\n if (isParticipant) {\n navigate('/ptz');\n return;\n }\n setPending(true);\n try {\n const response = await ptzClaim();\n /*\n The server is authoritative for whether the click became an active turn\n or a queued wait. Open only after it confirms one of those states so a\n dock-guard rejection does not strand the user in fullscreen.\n */\n if (response?.state?.isOperator || response?.state?.queuedPosition) {\n navigate('/ptz');\n }\n } catch (err) {\n alert(err.message || 'PTZ request failed.');\n } finally {\n setPending(false);\n }\n };\n\n const handleLeave = async () => {\n if (pending) return;\n setPending(true);\n try {\n await ptzRelease();\n } catch (err) {\n alert(err.message || 'Failed to leave PTZ camera.');\n } finally {\n setPending(false);\n }\n };\n\n const actionLabel = pending\n ? '...'\n : ptz?.isOperator\n ? 'Open'\n : ptz?.queuedPosition\n ? 'Open'\n : 'request';\n\n return (\n \n
    \n \n
\n {isParticipant ? (\n \n ) : null}\n {!canUse ? (\n
\n Verify your account to use the PTZ camera.\n
\n ) : null}\n
\n );\n}\n","// User List Panel\n// Purpose: Defines the User List Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useState, useCallback } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport NicknameForm from '../NicknameForm/index.jsx';\nimport SocialButtonsGrid from '../SocialButtonsGrid/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport RoverLabel from '../RoverLabel/index.jsx';\n\nexport function NicknameEntryPanel({ compact = false }) {\n return (\n \n
\n \n
\n
\n );\n}\n\nexport function LinkButtonsPanel({ className = '', fillHeight = true }) {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'socials'));\n\n /*\n This component is the actual Links panel shell. SocialButtonsGrid already\n hides the buttons when socials are disabled, but the shell must also hide\n itself so the UI does not leave an empty \"Links!\" card behind.\n */\n if (!enabled) return null;\n\n return (\n \n \n \n );\n}\n\nfunction roleColors(role) {\n switch (role) {\n case 'admin':\n case 'lockdown':\n return 'text-amber-300';\n case 'spectator':\n return 'text-slate-400';\n default:\n return 'text-sky-300';\n }\n}\n\nfunction formatLabel(user, selfId) {\n if (!user) return '';\n const base = user.nickname || user.socketId?.slice(0, 6) || 'unknown';\n if (user.socketId && user.socketId === selfId) {\n return `${base} (you)`;\n }\n return base;\n}\n\nexport default function UserListPanel({\n hideNicknameForm = false,\n hideHeader = false,\n className = '',\n fillHeight = false,\n compact = false,\n showBothTurnsAndUsers = false,\n}) {\n const users = useSessionSelector((state) => state.session?.users ?? []);\n const selfId = useSessionSelector((state) => state.session?.socketId || null);\n const mode = useSessionSelector((state) => state.session?.mode || null);\n const turnQueues = useSessionSelector((state) => state.session?.turnQueues || {});\n const roster = useSessionSelector((state) => state.session?.roster || []);\n const isTurnsMode = mode === 'turns';\n const [turnView, setTurnView] = useState('queues');\n\n useEffect(() => {\n if (!isTurnsMode) return;\n setTurnView('queues');\n }, [isTurnsMode]);\n\n const sorted = useMemo(\n () =>\n [...users].sort((a, b) => {\n if (a.socketId === selfId) return -1;\n if (b.socketId === selfId) return 1;\n return (a.nickname || '').localeCompare(b.nickname || '');\n }),\n [selfId, users],\n );\n\n const rosterEntry = useCallback(\n (roverId) => roster.find((r) => String(r.id) === String(roverId)) || null,\n [roster],\n );\n\n const lookupUser = useCallback(\n (socketId) => users.find((u) => u.socketId === socketId) || { socketId, nickname: null, role: null },\n [users],\n );\n\n const secondsRemaining = useCallback((deadline) => {\n if (!deadline) return null;\n const ms = deadline - Date.now();\n if (ms <= 0) return 0;\n return Math.ceil(ms / 1000);\n }, []);\n\n const baseListClass = fillHeight\n ? 'flex-1 min-h-0 overflow-y-auto'\n : compact\n ? 'h-28 overflow-y-auto'\n : 'h-48 overflow-y-auto';\n const turnsListClass =\n isTurnsMode && fillHeight\n ? 'max-h-40 overflow-y-auto'\n : isTurnsMode && compact\n ? 'max-h-32 overflow-y-auto'\n : baseListClass;\n const usersListClass =\n isTurnsMode && fillHeight ? 'flex-1 min-h-0 overflow-y-auto' : baseListClass;\n const showToggle = isTurnsMode && !showBothTurnsAndUsers;\n const showQueuesSection = isTurnsMode && (showBothTurnsAndUsers || turnView === 'queues');\n const showUsersSection = !isTurnsMode || (showToggle && turnView === 'users');\n const showUsersSecondary = isTurnsMode && showBothTurnsAndUsers;\n\n const renderUserList = () =>\n sorted.length === 0 ? (\n

Waiting for users…

\n ) : (\n sorted.map((user) => {\n const isAdmin =\n user.role === 'admin' || user.role === 'lockdown';\n return (\n \n

{formatLabel(user, selfId)}

\n {user.roverId ? (\n \n ) : (\n no rover\n )}\n {isAdmin && (\n \n Admin\n \n )}\n \n );\n })\n );\n\n return (\n \n {!hideNicknameForm && (\n
\n {/* The shared panel can be mounted in a narrow column on a wide desktop,\n so this split must follow the card width rather than the viewport. */}\n
\n
\n
\n \n
\n
\n \n
\n
\n )}\n\n
\n {!hideHeader && showToggle ? (\n
\n
\n setTurnView('queues')}\n >\n Queues\n \n setTurnView('users')}\n >\n Users\n \n
\n
\n ) : null}\n {showQueuesSection ? (\n
\n {Object.keys(turnQueues || {}).length === 0 ? (\n

No turn queues yet.

\n ) : (\n Object.entries(turnQueues).map(([roverId, info]) => {\n const queue = info?.queue || [];\n const deadline = info?.idleDeadline || info?.deadline || null;\n const remaining = secondsRemaining(deadline);\n const currentId = info?.current || null;\n const currentIdx = currentId ? queue.findIndex((id) => id === currentId) : -1;\n const nextId =\n queue.length > 1\n ? currentIdx >= 0\n ? queue[(currentIdx + 1) % queue.length]\n : queue[0]\n : null;\n return (\n
\n
\n

\n \n

\n {remaining != null && (\n \n {remaining}s left\n \n )}\n
\n {queue.length === 0 ? (\n

No drivers queued.

\n ) : (\n
\n {queue.map((socketId, idx) => {\n const user = lookupUser(socketId);\n const isCurrent = socketId === currentId;\n const isNext = Boolean(nextId && socketId === nextId && !isCurrent);\n const isSelf = Boolean(selfId && socketId === selfId);\n const isAdmin =\n user.role === 'admin' || user.role === 'lockdown';\n const highlightClass = isCurrent\n ? 'bg-sky-600 text-white ring-2 ring-amber-300 animate-pulse'\n : isNext\n ? 'bg-emerald-700/60 text-emerald-100 ring-1 ring-emerald-300/70'\n : 'bg-slate-800 text-slate-200';\n return (\n \n \n {formatLabel(user, selfId)}\n \n {isAdmin && ★}\n {/* {isSelf && YOU} */}\n {isCurrent && now}\n {isNext && next}\n \n );\n })}\n
\n )}\n
\n );\n })\n )}\n
\n ) : null}\n\n {showUsersSection ? (\n
\n {renderUserList()}\n
\n ) : null}\n\n {showUsersSecondary ? (\n
\n
\n Users\n {sorted.length}\n
\n
{renderUserList()}
\n
\n ) : null}\n
\n \n );\n}\n","// Tabs\n// Purpose: Defines the Tabs module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { createContext, useCallback, useContext, useMemo, useState, useEffect } from 'react';\nimport { themeGapClass, themeStackClass } from '../../themes/index.js';\n\nconst TabsContext = createContext(null);\n\nfunction useTabsContext() {\n const context = useContext(TabsContext);\n if (!context) {\n throw new Error('Tabs components must be used within a provider.');\n }\n return context;\n}\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useTabIsActive(id) {\n /*\n Tab content that manages a mounted media lifecycle needs to know whether it\n is selected without having the parent shell relay activeTab as a prop. This\n reads the same Tabs context that already controls TabPanel visibility.\n */\n return useTabsContext().activeTab === id;\n}\n\nconst TAB_VARIANTS = {\n primary: {\n base: 'flex-1 px-0.5 py-0.5 text-sm font-medium focus-visible:outline focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-slate-500 rounded-md border border-slate-800',\n active: 'bg-sky-600 text-white border-white',\n inactive: 'bg-zinc-900 text-slate-300 hover:bg-sky-500 hover:text-white',\n },\n};\n\nconst TAB_HIGHLIGHTS = {\n none: '',\n pink: 'bg-pink-500 text-white border-pink-200 hover:bg-pink-400',\n green: 'bg-emerald-500 text-white border-emerald-200 hover:bg-emerald-400',\n pinkblue: 'bg-gradient-to-r from-lime-800 to-teal-800'\n};\n\nconst DEFAULT_VARIANT = 'primary';\n\nfunction classNames(...parts) {\n return parts.filter(Boolean).join(' ');\n}\n\nexport default function Tabs({ children, defaultTab, currentTab, onTabChange, variant = DEFAULT_VARIANT }) {\n const [internalTab, setInternalTab] = useState(defaultTab ?? null);\n const [tabOrder, setTabOrder] = useState([]);\n\n const registerTab = useCallback((id) => {\n if (!id) {\n return () => {};\n }\n\n setTabOrder((prev) => {\n if (prev.includes(id)) {\n return prev;\n }\n return [...prev, id];\n });\n\n return () =>\n setTabOrder((prev) => {\n if (!prev.includes(id)) {\n return prev;\n }\n return prev.filter((existing) => existing !== id);\n });\n }, []);\n\n const activeTab = currentTab ?? internalTab ?? tabOrder[0] ?? null;\n\n useEffect(() => {\n if (defaultTab && currentTab === undefined) {\n setInternalTab(defaultTab);\n }\n }, [defaultTab, currentTab]);\n\n const setActiveTab = useCallback(\n (id) => {\n if (!id) {\n return;\n }\n if (currentTab === undefined) {\n setInternalTab(id);\n }\n if (onTabChange) {\n onTabChange(id);\n }\n },\n [currentTab, onTabChange]\n );\n\n const value = useMemo(\n () => ({\n activeTab,\n setActiveTab,\n registerTab,\n variant,\n }),\n [activeTab, setActiveTab, registerTab, variant]\n );\n\n return {children};\n}\n\nexport function TabList({ children, className = '' }) {\n return (\n \n {/* Wrapping is driven by the selector's actual contents and allocated width,\n so the same tabs remain compact in wide panels and readable in sidebars. */}\n
{children}
\n \n );\n}\n\nexport function Tab({ id, children, className = '', disabled = false, highlight = 'none' }) {\n const { activeTab, setActiveTab, registerTab, variant } = useTabsContext();\n\n useEffect(() => registerTab(id), [id, registerTab]);\n\n const variantStyles = TAB_VARIANTS[variant] ?? TAB_VARIANTS[DEFAULT_VARIANT];\n const isActive = activeTab === id;\n const highlightClass = TAB_HIGHLIGHTS[highlight] || TAB_HIGHLIGHTS.none;\n\n const buttonClassName = classNames(\n variantStyles.base,\n highlightClass || (isActive ? variantStyles.active : variantStyles.inactive),\n disabled ? 'cursor-not-allowed opacity-50' : '',\n className\n );\n\n return (\n !disabled && setActiveTab(id)}\n aria-pressed={isActive}\n aria-disabled={disabled}\n >\n {children}\n \n );\n}\n\nexport function TabPanels({ children, className = '' }) {\n return
{children}
;\n}\n\nexport function TabPanel({ id, children, keepMounted = false }) {\n const { activeTab } = useTabsContext();\n const isActive = activeTab === id;\n\n if (!isActive && !keepMounted) {\n return null;\n }\n\n if (!isActive && keepMounted) {\n return (\n \n );\n }\n\n return <>{children};\n}\n","// Preserve raw sensor text and units; a sensor's non-on value is never \"off\".\nexport default function ReadOnlyControl({ entity }) {\n return \n {entity.available ? (entity.password ? '••••••' : `${entity.state}${entity.unit ? ` ${entity.unit}` : ''}`) : 'Unavailable'}\n ;\n}\n","\nexport default function ToggleControl({ entity, disabled, onChange }) {\n const on = entity.state === 'on';\n // The label reflects reported state, rather than claiming success before HA\n // publishes it. The entire compact button remains an accessible click target.\n return <>\n \n ;\n}\n","// Number/text drafts are local until the short pause expires. HA broadcasts\n// cannot erase unfinished typing. After sending, the reported state owns the UI.\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nexport default function useDraftControl(onChange, disabled) {\n const [draft, setDraft] = useState(null);\n const timer = useRef(null);\n const cancel = useCallback(() => {\n clearTimeout(timer.current);\n timer.current = null;\n }, []);\n\n // A lock, disconnect, or unmount cancels queued edits. Unlocking must never\n // replay a change that was typed before permission was removed.\n useEffect(() => cancel, [cancel, disabled]);\n\n const commit = useCallback((value) => {\n cancel();\n if (disabled) return;\n // Sending ends the local edit, not a request/response transaction. The\n // next HA broadcast updates this input just like any external change.\n onChange(value);\n setDraft(null);\n }, [onChange, disabled, cancel]);\n\n const edit = (value, debounce = true) => {\n cancel();\n setDraft(value);\n if (debounce && !disabled) timer.current = setTimeout(() => commit(value), 650);\n };\n return { draft, edit, commit, cancel };\n}\n","import useDraftControl from '../useDraftControl';\n\nexport default function NumberControl({ entity, disabled, onChange }) {\n const limitsKnown = entity.min !== null && entity.max !== null;\n const control = useDraftControl(onChange, disabled || !limitsKnown);\n const value = control.draft ?? (entity.available ? entity.state : '');\n const blocked = disabled || !limitsKnown;\n // Sliders commit on release (including keyboard adjustment), not for every\n // intermediate position. Number typing uses the same local draft and debounce.\n return <>\n
\n {limitsKnown ? control.edit(event.target.value, false)}\n onPointerUp={(event) => control.commit(event.currentTarget.value)}\n onKeyUp={(event) => {\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End', 'PageUp', 'PageDown'].includes(event.key)) control.commit(event.currentTarget.value);\n }} /> : null}\n control.edit(event.target.value)}\n onKeyDown={(event) => { if (event.key === 'Enter') control.commit(event.currentTarget.value); }}\n className=\"w-16 min-w-0 rounded border border-neutral-700 bg-neutral-950 px-1 py-0.5 text-xs text-slate-200 disabled:opacity-50\" />\n {entity.unit ? {entity.unit} : null}\n
\n {!limitsKnown ? Waiting for number limits : null}\n ;\n}\n","import { useRef } from 'react';\nimport useDraftControl from '../useDraftControl';\n\nexport default function TextControl({ entity, disabled, onChange }) {\n const control = useDraftControl(onChange, disabled);\n const composing = useRef(false);\n // IME composition may pause mid-word, so it must finish before automatic\n // sending starts. Enter remains an immediate action for ordinary typing.\n return <>\n control.edit(event.target.value, !composing.current)}\n onCompositionStart={() => { composing.current = true; control.cancel(); }}\n onCompositionEnd={(event) => { composing.current = false; control.edit(event.currentTarget.value); }}\n onKeyDown={(event) => { if (event.key === 'Enter' && !composing.current) control.commit(event.currentTarget.value); }}\n className=\"w-full min-w-0 rounded border border-neutral-700 bg-neutral-950 px-1 py-0.5 text-xs text-slate-200 disabled:opacity-50\" />\n ;\n}\n","\nexport default function SelectControl({ entity, disabled, onChange }) {\n // Keep the actual reported value visible even if HA changes its option list;\n // only current options are selectable or accepted by the server.\n return <>\n \n ;\n}\n","\nexport default function ButtonControl({ entity, disabled, onChange }) {\n // HA button states are timestamps. A press is an action, never a toggle.\n return <>\n \n ;\n}\n","import { useCallback } from 'react';\nimport * as FaIcons from 'react-icons/fa';\nimport { FaCube, FaLock } from 'react-icons/fa';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext';\nimport CardFrame from '../CardFrame';\n// Each control keeps its own JSX file; this panel only selects its renderer.\nimport ReadOnlyControl from './controls/ReadOnlyControl';\nimport ToggleControl from './controls/ToggleControl';\nimport NumberControl from './controls/NumberControl';\nimport TextControl from './controls/TextControl';\nimport SelectControl from './controls/SelectControl';\nimport ButtonControl from './controls/ButtonControl';\n\nconst controls = { readOnly: ReadOnlyControl, toggle: ToggleControl, number: NumberControl, text: TextControl, select: SelectControl, button: ButtonControl };\n\n\nfunction ActivityTile({ entity, connected, allowed, admin }) {\n const { homeAssistantActivityAct } = useSessionActions();\n const onChange = useCallback((value) => homeAssistantActivityAct(entity.id, value), [homeAssistantActivityAct, entity.id]);\n // Resolve precisely the same Font Awesome names accepted by social links.\n // Unknown names remain usable with a neutral fallback rather than an error.\n const candidate = FaIcons[entity.icon?.trim()];\n const Icon = typeof candidate === 'function' ? candidate : FaCube;\n // Translucent fills preserve text contrast; an amber border still identifies\n // locked tiles regardless of the admin's chosen color.\n const color = /^#[0-9a-f]{6}$/i.test(entity.color) ? entity.color : '#3b82f6';\n const Control = controls[entity.type] || ReadOnlyControl;\n const disabled = !connected || !entity.available || !allowed || (entity.locked && !admin);\n return
\n
\n \n {entity.name}\n {entity.locked ? Locked : null}\n
\n {!entity.available && entity.type !== 'readOnly' ? Unavailable : null}\n \n
;\n}\n\nexport default function HomeAssistantActivitiesPanel() {\n const state = useSessionSelector((session) => session.session?.homeAssistantActivities);\n const socketConnected = useSessionSelector((session) => session.connected);\n const role = useSessionSelector((session) => session.session?.role);\n const mode = useSessionSelector((session) => session.session?.mode);\n const admin = role === 'admin' || role === 'lockdown';\n const allowed = ['user', 'admin', 'lockdown'].includes(role) && (mode !== 'admin' || admin) && (mode !== 'lockdown' || role === 'lockdown');\n if (!state?.enabled || !state.items.length) return null;\n // Session data survives a browser disconnect. Disable immediately so local\n // debounce timers are cancelled even when HA itself remains connected.\n const connected = state.connected && socketConnected;\n // Reuse the room-control auto-fit grid and compact tile rhythm, while keeping\n // all data and commands in the Activities namespace on both device layouts.\n return {connected ? 'Connected' : 'Offline'}}>\n {!connected ?

{socketConnected ? 'Home Assistant is offline.' : 'Server disconnected.'} Values may be out of date.

: null}\n {!allowed ?

Controls are read-only with your current access.

: null}\n
\n {state.items.map((entity) => )}\n
\n
;\n}\n","// Neato Card\n// Purpose: Defines the public Neato activity card and the local helpers/components used in this file.\n// Scope: Keeps Neato state display and commands together because each button's availability depends on the same shared robot telemetry.\nimport { useState } from 'react';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\n\nfunction normalizeState(value) {\n return String(value || '').trim();\n}\n\nfunction displayRawState(value) {\n // Only substitute a placeholder when Home Assistant supplied no value at all.\n // Otherwise preserve the complete string so the status panel is a faithful\n // view of BrainSlug output, including identifiers unknown to this frontend.\n if (value == null || value === '') return '--';\n return String(value);\n}\n\nfunction metricToneClass(tone) {\n if (tone === 'good') return 'bg-emerald-600 text-white';\n if (tone === 'warn') return 'bg-amber-500 text-slate-900';\n if (tone === 'danger') return 'bg-rose-600 text-white';\n return 'bg-slate-700 text-slate-100';\n}\n\nfunction StatusTile({ label, value, tone = 'muted', valueClass = '', hideLabel = false }) {\n return (\n
\n {!hideLabel ?
{label}
: null}\n
\n {value}\n
\n
\n );\n}\n\nexport default function NeatoCard() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'neato'));\n\n /*\n Neato support is optional hardware surfaced through Home Assistant. Keeping\n the feature gate in this card avoids scattered checks in each route layout.\n */\n if (!enabled) return null;\n\n return ;\n}\n\nfunction NeatoCardContent() {\n /*\n Neato is a standalone public activity card. It owns its session selector and\n command actions so callers do not need to know the socket event names or\n keep a parallel list of Neato props in every tab layout.\n */\n const neato = useSessionSelector((state) => state.session?.neato || null);\n const {\n neatoStart,\n neatoSendHome,\n neatoLocate,\n neatoClearErrors,\n neatoPowerCycle,\n neatoSetNavigationMode,\n } = useSessionActions();\n const [working, setWorking] = useState('');\n\n const configured = Boolean(neato?.configured);\n const connected = Boolean(neato?.enabled && neato?.connected);\n const docked = Boolean(neato?.telemetry?.extPowerPresent);\n const charging = Boolean(neato?.telemetry?.chargingActive);\n\n // These values deliberately stay raw. BrainSlug owns their meaning, and a\n // partial frontend translation would create a second, potentially incorrect\n // state model instead of showing what the robot actually reported.\n const uiStateRaw = displayRawState(neato?.telemetry?.uiState);\n const robotStateRaw = displayRawState(neato?.telemetry?.robotState);\n const battery = neato?.telemetry?.batteryPercent;\n const batteryLabel = Number.isFinite(battery) ? `${battery}%` : '--';\n const voltage = neato?.telemetry?.batteryVoltage;\n const voltageLabel = Number.isFinite(voltage) ? `${voltage.toFixed(2)} V` : '--';\n const robotError = displayRawState(neato?.telemetry?.robotError);\n const robotAlert = displayRawState(neato?.telemetry?.robotAlert);\n\n const controls = neato?.controls || {};\n const canStart = Boolean(controls?.start?.available);\n const canSendHome = Boolean(controls?.sendHome?.available);\n const canLocate = Boolean(controls?.locate?.available);\n const canClearErrors = Boolean(controls?.clearErrors?.available);\n const canPowerCycle = Boolean(controls?.powerCycle?.available);\n const navigationMode = controls?.navigationMode || {};\n const canSetNavigationMode = Boolean(navigationMode.available);\n const navigationModeValue = normalizeState(navigationMode.value);\n const navigationModeOptions = Array.isArray(navigationMode.options) ? navigationMode.options : [];\n\n const canRunStart = configured && connected && canStart;\n const canRunSendHome = configured && connected && canSendHome;\n const canRunLocate = configured && connected && canLocate;\n const canRunClearErrors = configured && connected && canClearErrors;\n const canRunPowerCycle = configured && connected && canPowerCycle;\n const canRunNavigationMode = configured && connected && canSetNavigationMode;\n\n const runAction = async (key, fn) => {\n if (!fn) return;\n setWorking(key);\n try {\n await fn();\n } catch {\n // Keep UI minimal; errors are intentionally silent in-panel.\n } finally {\n setWorking('');\n }\n };\n\n const headerStatus = !configured ? 'Not configured' : !connected ? 'Offline' : 'Online';\n const headerTone = !configured ? 'warn' : !connected ? 'danger' : 'good';\n\n const batteryTone =\n battery == null ? 'muted' : battery >= 60 ? 'good' : battery >= 25 ? 'warn' : 'danger';\n\n return (\n \n {headerStatus}\n \n }\n >\n
\n
\n

Control the autonomous Neato robovac. Be nice to him.

\n
\n\n {/* Neato's control and status groups depend on card width, not on whether\n the overall desktop viewport happens to cross Tailwind's lg breakpoint. */}\n
\n
\n

Controls

\n runAction('start', neatoStart)}\n className=\"rounded-md border border-sky-300 bg-emerald-600 px-1 py-1 text-base font-semibold text-white transition hover:border-sky-500 hover:bg-emerald-500 disabled:opacity-50\"\n >\n {working === 'start' ? 'Starting...' : 'Start cleaning'}\n \n runAction('sendHome', neatoSendHome)}\n className=\"rounded-md border border-sky-300 bg-sky-600 px-1 py-1 text-base font-semibold text-white transition hover:border-sky-500 hover:bg-sky-500 disabled:opacity-50\"\n >\n {working === 'sendHome' ? 'Sending...' : 'Send to dock'}\n \n
\n runAction('locate', neatoLocate)}\n className=\"w-full rounded-md border border-sky-300 bg-fuchsia-600 px-1 py-0.5 text-xs font-semibold text-white transition hover:border-sky-500 hover:bg-fuchsia-500 disabled:opacity-50\"\n >\n {working === 'locate' ? 'Playing...' : 'Play sound'}\n \n runAction('clearErrors', neatoClearErrors)}\n className=\"w-full rounded-md border border-sky-300 bg-amber-500 px-1 py-0.5 text-xs font-semibold text-slate-900 transition hover:border-sky-500 hover:bg-amber-400 disabled:opacity-50\"\n >\n {working === 'clearErrors' ? 'Clearing...' : 'Clear errors'}\n \n runAction('powerCycle', neatoPowerCycle)}\n className=\"w-full rounded-md border border-rose-300 bg-rose-600 px-1 py-0.5 text-xs font-semibold text-white transition hover:border-rose-500 hover:bg-rose-500 disabled:opacity-50\"\n >\n {working === 'powerCycle' ? 'Cycling...' : 'Power cycle'}\n \n
\n
\n \n
\n
\n

Power status

\n
\n \n \n \n \n
\n
\n
\n\n
\n
\n

Robot Status

\n
\n
\n
Robot alert
\n
{robotAlert}
\n
\n
\n
Robot error
\n
{robotError}
\n
\n
\n
Robot state
\n
{robotStateRaw}
\n
\n
\n
UI state
\n
{uiStateRaw}
\n
\n
\n
\n
\n
\n\n {!configured || !connected || !canStart || !canSendHome || !canLocate || !canClearErrors || !canPowerCycle ? (\n

\n {!configured\n ? 'Set homeAssistant.neato.device in server config to enable Neato controls.'\n : !connected\n ? 'Home Assistant is offline.'\n : 'Waiting for required Neato entities in Home Assistant.'}\n

\n ) : null}\n
\n \n );\n}\n","// Lift Card\n// Purpose: Renders a shared lift controller panel synced from server session state.\n// Scope: Presents public activity controls while reflecting global busy/position/cooldown state.\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\n\nfunction badgeClass(tone) {\n if (tone === 'good') return 'bg-emerald-600 text-white';\n if (tone === 'warn') return 'bg-amber-500 text-slate-900';\n if (tone === 'danger') return 'bg-rose-600 text-white';\n return 'bg-slate-700 text-slate-100';\n}\n\nfunction positionLabel(value) {\n if (value === 'up') return 'Up';\n if (value === 'down') return 'Down';\n if (value === 'stopped') return 'Transitioning...';\n if (value === 'conflict') return 'Conflict';\n return '--';\n}\n\nexport default function LiftCard() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'lift'));\n\n /*\n Lift is an optional Home Assistant-backed hardware feature. The card owns\n that existence check so disabled installs do not need layout-level guards.\n */\n if (!enabled) return null;\n\n return ;\n}\n\nfunction LiftCardContent() {\n /*\n The lift card is a complete Activities-tab feature, so it reads the shared\n lift state and socket actions directly. Keeping that wiring inside the card\n means each tab only decides where the card appears, and the command policy\n cannot accidentally diverge between mobile and desktop layouts.\n */\n const lift = useSessionSelector((state) => state.session?.lift || null);\n const { liftUp, liftDown } = useSessionActions();\n const [working, setWorking] = useState('');\n const [nowMs, setNowMs] = useState(() => Date.now());\n\n const configured = Boolean(lift?.configured);\n const connected = Boolean(lift?.enabled && lift?.connected);\n const busy = Boolean(lift?.busy);\n const activeTarget = String(lift?.target || '').toLowerCase();\n const position = String(lift?.position || '').toLowerCase();\n const upAvailable = Boolean(lift?.availability?.upSwitch);\n const downAvailable = Boolean(lift?.availability?.downSwitch);\n const lastActionAt = Number(lift?.lastActionAt || 0);\n const commandCooldownMs = Math.max(0, Number(lift?.commandCooldownMs || 0));\n const cooldownRemainingMs = Math.max(0, lastActionAt + commandCooldownMs - nowMs);\n const cooldownActive = !busy && cooldownRemainingMs > 0;\n const blocked = busy || cooldownActive;\n\n useEffect(() => {\n if (!blocked) return undefined;\n const t = setInterval(() => {\n setNowMs(Date.now());\n }, 100);\n return () => clearInterval(t);\n }, [blocked]);\n\n useEffect(() => {\n setNowMs(Date.now());\n }, [lastActionAt, commandCooldownMs, busy]);\n\n const status = !configured ? 'Not configured' : !connected ? 'Offline' : blocked ? 'Busy' : 'Ready';\n const statusTone = !configured ? 'warn' : !connected ? 'danger' : blocked ? 'warn' : 'good';\n\n const canRun = configured && connected && !blocked && !working && upAvailable && downAvailable;\n const cooldownSeconds = useMemo(() => Math.ceil(cooldownRemainingMs / 1000), [cooldownRemainingMs]);\n\n const run = async (dir, fn) => {\n if (!fn) return;\n setWorking(dir);\n try {\n await fn();\n } catch {\n // Errors are surfaced by shared state and command ack handling.\n } finally {\n setWorking('');\n }\n };\n\n return (\n \n {status}\n \n }\n >\n {blocked ? (\n
\n
\n

\n {busy ? 'Preparing to move' : 'Moving!'}\n

\n

\n Controls are disabled while the lift is moving, otherwise its tiny brain would get confused.\n

\n {!busy && cooldownActive ? (\n

About {cooldownSeconds}s remaining.

\n ) : null}\n
\n
\n ) : null}\n
\n
\n

Move the lift up and down. Please don't break anything...

\n
\n\n
\n {/* Stack status and actions in narrow cards, then restore the compact\n three-column control row when this card grows wide enough. */}\n
\n
\n
Position
\n
{positionLabel(position)}
\n
\n run('down', liftDown)}\n className={`button-dark w-full text-sm disabled:opacity-50 ${position === 'down' || activeTarget === 'down' ? 'bg-emerald-500 text-white hover:bg-emerald-500' : ''}`}\n >\n {working === 'down' || activeTarget === 'down' ? 'Lowering...' : 'Down'}\n \n run('up', liftUp)}\n className={`button-dark w-full text-sm disabled:opacity-50 ${position === 'up' || activeTarget === 'up' ? 'bg-emerald-500 text-white hover:bg-emerald-500' : ''}`}\n >\n {working === 'up' || activeTarget === 'up' ? 'Raising...' : 'Up'}\n \n
\n
\n\n {!configured || !connected || !upAvailable || !downAvailable ? (\n

\n {!configured\n ? 'Set homeAssistant.lift.upSwitch and homeAssistant.lift.downSwitch in server config.'\n : !connected\n ? 'Home Assistant is offline.'\n : 'Waiting for required lift switch entities in Home Assistant.'}\n

\n ) : null}\n\n {lift?.lastError ?

Last error: {lift.lastError}

: null}\n
\n \n );\n}\n","// Balance Board Panel\n// Purpose: Shows exactly what the Bluetooth board is doing and its current total weight.\n// Scope: Owns optional feature gating and the live weight-frame subscription only.\nimport { useEffect, useState } from 'react';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport CardFrame from '../CardFrame/index.jsx';\n\nconst EMPTY_CORNERS = {\n topLeft: 0,\n topRight: 0,\n bottomLeft: 0,\n bottomRight: 0,\n};\nconst EMPTY_FRAME = {\n totalKg: 0,\n batteryPercent: null,\n // Null distinguishes \"no live frame received yet\" from a legitimate record\n // of zero, allowing the persisted session value to remain visible while the\n // socket room subscription is being established.\n recordKg: null,\n recordedAt: null,\n corners: EMPTY_CORNERS,\n};\n\nfunction formatWeight(value) {\n const weight = Number(value);\n return Number.isFinite(weight) ? `${weight.toFixed(2)} kg` : '0.00 kg';\n}\n\nfunction finiteNumber(value) {\n if (value == null || value === '') return null;\n const number = Number(value);\n return Number.isFinite(number) ? number : null;\n}\n\nfunction centerOfPressure(corners) {\n const topLeft = Math.max(0, finiteNumber(corners.topLeft) || 0);\n const topRight = Math.max(0, finiteNumber(corners.topRight) || 0);\n const bottomLeft = Math.max(0, finiteNumber(corners.bottomLeft) || 0);\n const bottomRight = Math.max(0, finiteNumber(corners.bottomRight) || 0);\n const total = topLeft + topRight + bottomLeft + bottomRight;\n\n // Only an exact zero stays centered because dividing by zero cannot produce a\n // position. Every positive reading participates immediately, with no minimum\n // weight or center deadzone hiding small shifts reported by the load cells.\n if (total === 0) return { left: 50, top: 50, active: false };\n const horizontal = ((topRight + bottomRight) - (topLeft + bottomLeft)) / total;\n const vertical = ((bottomLeft + bottomRight) - (topLeft + topRight)) / total;\n return {\n left: 50 + Math.max(-1, Math.min(1, horizontal)) * 37,\n top: 50 + Math.max(-1, Math.min(1, vertical)) * 37,\n active: true,\n };\n}\n\nfunction CornerReading({ className, label, value }) {\n return (\n
\n
{label}
\n
{formatWeight(value)}
\n
\n );\n}\n\nexport default function BalanceBoardPanel() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'balanceBoard'));\n // Keep feature ownership inside the component so layouts do not need special\n // cases or empty wrappers when the optional hardware is disabled.\n if (!enabled) return null;\n return ;\n}\n\nfunction BalanceBoardPanelContent() {\n const socket = useSocket();\n const board = useSessionSelector((state) => state.session?.balanceBoard || null);\n const role = useSessionSelector((state) => state.session?.role || null);\n const [frame, setFrame] = useState(EMPTY_FRAME);\n const [unpairing, setUnpairing] = useState(false);\n const [zeroRequesting, setZeroRequesting] = useState(false);\n const [resettingRecord, setResettingRecord] = useState(false);\n\n useEffect(() => {\n if (!socket) return undefined;\n const handleFrame = (next = {}) => setFrame({ ...EMPTY_FRAME, ...next });\n\n // Socket.IO room membership belongs to one server-side connection, not to\n // the long-lived browser socket object. A brief network interruption gives\n // the browser a new server-side socket while React keeps this component and\n // this effect mounted, so subscribing only here would silently lose all\n // later weight frames. Rejoin after every connection as well as immediately\n // for the already-connected case.\n const subscribe = () => {\n socket.emit('balanceBoard:subscribe', {}, () => {});\n };\n\n socket.on('balanceBoard:frame', handleFrame);\n socket.on('connect', subscribe);\n subscribe();\n\n return () => {\n socket.off('balanceBoard:frame', handleFrame);\n socket.off('connect', subscribe);\n // The panel is the only consumer represented by this component. Leaving\n // the room on unmount prevents an inactive route or tab from continuing\n // to receive the board's continuous measurement stream.\n socket.emit('balanceBoard:unsubscribe');\n };\n }, [socket]);\n\n // Mask the previous reading immediately when disconnected. Keeping the last\n // socket frame in state avoids effect-driven state resets and stale flashes.\n const liveFrame = board?.connected ? frame : EMPTY_FRAME;\n const corners = { ...EMPTY_CORNERS, ...(liveFrame.corners || {}) };\n const center = centerOfPressure(corners);\n const liveBattery = finiteNumber(liveFrame.batteryPercent);\n const sessionBattery = finiteNumber(board?.batteryPercent);\n const battery = liveBattery ?? sessionBattery;\n // Live frames make a newly reached record move immediately. The session copy\n // remains available while the board sleeps or before this panel subscribes,\n // which is important because the record belongs to the installation rather\n // than to one Bluetooth connection.\n const liveRecord = board?.connected ? finiteNumber(frame.recordKg) : null;\n const sessionRecord = finiteNumber(board?.recordKg);\n const record = liveRecord ?? sessionRecord ?? 0;\n const sleeping = board?.status === 'sleeping';\n const isAdmin = role === 'admin' || role === 'lockdown';\n const calibration = board?.calibration || null;\n const zeroing = Boolean(calibration?.active);\n\n const zero = () => {\n if (zeroRequesting || zeroing || !board?.connected) return;\n if (!window.confirm('Use the board’s current load as zero? Keep everything still for ten seconds.')) return;\n setZeroRequesting(true);\n socket.emit('balanceBoard:zero', {}, (response = {}) => {\n setZeroRequesting(false);\n if (response.error) window.alert(response.error);\n });\n };\n\n const unpair = () => {\n if (unpairing || !board?.paired) return;\n if (!window.confirm('Unpair this Balance Board and require the red Sync button to pair it again?')) return;\n setUnpairing(true);\n socket.emit('balanceBoard:unpair', {}, (response = {}) => {\n setUnpairing(false);\n if (response.error) {\n window.alert(response.error);\n } else if (response.warning) {\n window.alert('Board forgotten locally, but BlueZ reported a bond-removal warning.');\n }\n });\n };\n\n const resetRecord = () => {\n if (resettingRecord) return;\n if (!window.confirm('Reset the highest weight record?')) return;\n setResettingRecord(true);\n socket.emit('balanceBoard:resetRecord', {}, (response = {}) => {\n setResettingRecord(false);\n if (response.error) window.alert(response.error);\n });\n };\n\n const actions = isAdmin ? (\n
\n \n {zeroing\n ? `Zeroing ${calibration.samplesCollected}/${calibration.totalSamples}`\n : zeroRequesting ? 'Starting…' : 'Zero'}\n \n \n {unpairing ? 'Unpairing…' : 'Unpair'}\n \n
\n ) : null;\n\n return (\n \n {sleeping ? (\n
\n
\n

The Balance Board is asleep

\n

Press the front power button on the board to wake it.

\n
\n
\n ) : null}\n\n {/* Keep the measurement column narrow and fixed so the board remains the\n dominant visual while record and battery stay in one predictable\n place. Both pieces use the shared dark panel treatment instead of\n introducing a Balance Board-specific background style. */}\n
\n
\n {zeroing ? (\n
\n
\n

\n Zeroing {calibration.samplesCollected}/{calibration.totalSamples}\n

\n

Keep the board and everything on it still.

\n
\n
\n ) : null}\n \n \n \n \n \n
\n
\n
Total weight
\n
\n {formatWeight(liveFrame.totalKg)}\n
\n
\n
\n
\n\n
\n
\n
Weight record
\n
{formatWeight(record)}
\n {isAdmin ? (\n \n {resettingRecord ? 'Resetting…' : 'Reset'}\n \n ) : null}\n
\n
\n
Battery
\n
\n {battery == null ? '—' : `${Math.round(battery)}%`}\n
\n
\n
\n
\n \n );\n}\n","// Barcode Game State Hook\n// Purpose: Subscribes only interested pages/components to barcode game state.\n// Scope: Keeps scanner-game traffic out of the global session tree so unrelated\n// UI pages do not receive or retain barcode game data.\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\n\nconst STATE_STALE_MS = 10 * 1000;\nconst RESUBSCRIBE_MS = 5 * 1000;\n\nconst EMPTY_BARCODE_GAME_STATE = {\n activeGameId: null,\n games: [],\n activeGame: null,\n participants: [],\n counters: {\n objects: [],\n rovers: [],\n codes: [],\n },\n recentEvents: [],\n ownPlayer: null,\n};\n\nfunction normalizeState(payload = {}) {\n return {\n ...EMPTY_BARCODE_GAME_STATE,\n ...(payload && typeof payload === 'object' ? payload : {}),\n games: Array.isArray(payload?.games) ? payload.games : [],\n participants: Array.isArray(payload?.participants) ? payload.participants : [],\n counters: {\n ...EMPTY_BARCODE_GAME_STATE.counters,\n ...(payload?.counters && typeof payload.counters === 'object' ? payload.counters : {}),\n },\n recentEvents: Array.isArray(payload?.recentEvents) ? payload.recentEvents : [],\n };\n}\n\nexport default function useBarcodeGameState() {\n const socket = useSocket();\n const [state, setState] = useState(EMPTY_BARCODE_GAME_STATE);\n const [connectionState, setConnectionState] = useState({\n connected: Boolean(socket.connected),\n stale: true,\n lastReceivedAt: null,\n });\n\n useEffect(() => {\n let disposed = false;\n let staleTimer = null;\n let retryTimer = null;\n let lastReceivedAt = 0;\n\n function handleState(payload = {}) {\n if (disposed) return;\n lastReceivedAt = Date.now();\n setState(normalizeState(payload));\n setConnectionState({\n connected: Boolean(socket.connected),\n stale: false,\n lastReceivedAt,\n });\n }\n\n function subscribeToGameState() {\n // Socket.io rooms are server-side state, so a reconnect needs a fresh\n // subscribe packet. Retrying the same idempotent subscribe is cheap and\n // prevents the scanner page from getting stuck with old game text after a\n // transient Wi-Fi or server restart.\n socket.emit('barcodeGame:subscribe', {}, (response = {}) => {\n if (response.state) {\n handleState(response.state);\n return;\n }\n setConnectionState((previous) => ({\n ...previous,\n connected: Boolean(socket.connected),\n stale: !lastReceivedAt,\n }));\n });\n }\n\n function handleConnect() {\n setConnectionState((previous) => ({\n ...previous,\n connected: true,\n stale: !lastReceivedAt,\n }));\n subscribeToGameState();\n }\n\n function handleDisconnect() {\n setConnectionState((previous) => ({\n ...previous,\n connected: false,\n stale: true,\n }));\n }\n\n socket.on('barcodeGame:state', handleState);\n socket.on('connect', handleConnect);\n socket.on('disconnect', handleDisconnect);\n subscribeToGameState();\n\n staleTimer = window.setInterval(() => {\n const isStale = !lastReceivedAt || Date.now() - lastReceivedAt > STATE_STALE_MS;\n setConnectionState((previous) => ({\n ...previous,\n connected: Boolean(socket.connected),\n stale: isStale,\n }));\n }, 1000);\n\n retryTimer = window.setInterval(() => {\n if (!socket.connected) return;\n if (!lastReceivedAt || Date.now() - lastReceivedAt > STATE_STALE_MS) {\n subscribeToGameState();\n }\n }, RESUBSCRIBE_MS);\n\n return () => {\n disposed = true;\n window.clearInterval(staleTimer);\n window.clearInterval(retryTimer);\n socket.off('barcodeGame:state', handleState);\n socket.off('connect', handleConnect);\n socket.off('disconnect', handleDisconnect);\n };\n }, [socket]);\n\n const voteForGame = useCallback(\n (gameId) =>\n new Promise((resolve, reject) => {\n socket.emit('barcodeGame:vote', { gameId }, (response = {}) => {\n if (response.error) {\n reject(new Error(response.error));\n return;\n }\n if (response.state) {\n setState(normalizeState(response.state));\n }\n resolve(response);\n });\n }),\n [socket],\n );\n\n return useMemo(\n () => ({\n state,\n connectionState,\n voteForGame,\n }),\n [connectionState, state, voteForGame],\n );\n}\n","// Barcode Games Panel\n// Purpose: Shows barcode game selection, current game status, and player points in the Activities tab.\n// Scope: Keeps the driver-side UI compact but informative; game-specific rules stay in server game modules.\nimport { useEffect, useMemo, useState } from 'react';\nimport useBarcodeGameState from '../../barcodeGames/useBarcodeGameState.js';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\n\nfunction clampRgbChannel(value) {\n if (!Number.isFinite(value)) return null;\n return Math.max(0, Math.min(255, Math.round(value)));\n}\n\nfunction normalizeRgb(themeColor) {\n const r = clampRgbChannel(themeColor?.r);\n const g = clampRgbChannel(themeColor?.g);\n const b = clampRgbChannel(themeColor?.b);\n if (r === null || g === null || b === null) return null;\n return { r, g, b };\n}\n\nfunction rgba(rgb, alpha) {\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n}\n\nfunction getGameTheme(themeColor) {\n const rgb = normalizeRgb(themeColor);\n if (!rgb) {\n return {\n textStyle: undefined,\n buttonStyle: undefined,\n titleBoxStyle: undefined,\n boxStyle: undefined,\n };\n }\n\n // The game supplies only identity color. This component chooses opacity and\n // placement so every game stays visually consistent with the dark CardFrame\n // UI while still being recognizable at a glance.\n return {\n textStyle: { color: rgba(rgb, 0.96) },\n buttonStyle: {\n borderLeftColor: rgba(rgb, 0.9),\n },\n selectedButtonStyle: {\n borderLeftColor: rgba(rgb, 1),\n backgroundColor: rgba(rgb, 0.12),\n },\n titleBoxStyle: {\n borderLeftColor: rgba(rgb, 0.88),\n },\n };\n}\n\nfunction useClock(enabled) {\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (!enabled) return undefined;\n const timer = window.setInterval(() => {\n setNow(Date.now());\n }, 500);\n return () => window.clearInterval(timer);\n }, [enabled]);\n\n return now;\n}\n\nfunction formatTimer(endsAt, now) {\n if (!Number.isFinite(endsAt)) return null;\n const totalSeconds = Math.max(0, Math.ceil((endsAt - now) / 1000));\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return minutes > 0 ? `${minutes}:${String(seconds).padStart(2, '0')}` : `${seconds}s`;\n}\n\nfunction GameChoice({ game, disabled, onVote }) {\n const theme = getGameTheme(game.themeColor);\n const style = game.active || game.selected ? theme.selectedButtonStyle || theme.buttonStyle : theme.buttonStyle;\n return (\n onVote(game.id)}\n className=\"surface flex min-h-[3.5rem] flex-col items-start justify-between border-l-4 border-l-neutral-600 px-1 py-0.75 text-left transition-colors hover:bg-neutral-700 disabled:cursor-not-allowed disabled:opacity-70\"\n style={style}\n >\n \n {game.title}\n {game.voteCount || 0}\n \n {game.description}\n \n {game.active ? 'Active' : game.selected ? 'Selected' : game.actionLabel || 'Vote'}\n \n \n );\n}\n\nfunction StatGrid({ stats, theme }) {\n if (!Array.isArray(stats) || !stats.length) return null;\n return (\n
\n {stats.slice(0, 6).map((stat) => (\n
\n

{stat.label}

\n

{stat.value}

\n
\n ))}\n
\n );\n}\n\nfunction getSectionItemText(item) {\n // Game modules may send section items as simple strings or as objects with a\n // status flag. The panel accepts both so games can stay lightweight until\n // they need richer per-row state like scan quest's active route item.\n if (typeof item === 'string') return item;\n if (!item || typeof item !== 'object') return '';\n return String(item.label || item.value || item.text || '').trim();\n}\n\nfunction DisplaySections({ sections }) {\n // display.sections is the shared rich-status contract for barcode games. This\n // renderer deliberately stays generic: game modules decide the content, while\n // the Activities panel only applies compact CardFrame-style formatting.\n const visibleSections = Array.isArray(sections)\n ? sections\n .map((section) => ({\n title: String(section?.title || '').trim(),\n items: Array.isArray(section?.items)\n ? section.items\n .map((item) => ({\n text: getSectionItemText(item),\n status: typeof item === 'object' && item ? item.status : null,\n }))\n .filter((item) => item.text)\n : [],\n }))\n .filter((section) => section.title || section.items.length)\n : [];\n\n if (!visibleSections.length) return null;\n\n return (\n
\n {visibleSections.map((section, sectionIndex) => (\n
\n {section.title ? (\n

{section.title}

\n ) : null}\n
\n {section.items.slice(0, 8).map((item, itemIndex) => (\n \n {item.text}\n

\n ))}\n
\n
\n ))}\n
\n );\n}\n\nfunction ParticipantsBlock({ participants, theme }) {\n const knownParticipants = Array.isArray(participants) ? participants : [];\n // Participants are server-owned because rover scans, identity lookup, and\n // score eligibility all happen outside this panel. The UI only formats the\n // current round list so users can tell whether their rover was counted.\n const displayNames = knownParticipants\n .map((participant) => participant?.nickname || participant?.roverId)\n .filter(Boolean);\n\n return (\n
\n

Participants

\n

\n {knownParticipants.length}\n

\n

\n {displayNames.length ? displayNames.join(', ') : 'Scan rover to join'}\n

\n
\n );\n}\n\nfunction CounterList({ title, entries }) {\n if (!Array.isArray(entries) || !entries.length) return null;\n return (\n
\n

{title}

\n
\n {entries.slice(0, 4).map((entry) => (\n
\n {entry.label || entry.entityId || entry.code}\n {entry.count || 0}\n
\n ))}\n
\n
\n );\n}\n\nfunction Leaderboard({ players, ownPlayer }) {\n const hasOwnPoints = ownPlayer && Number.isFinite(ownPlayer.totalPoints);\n return (\n
\n
\n
\n
\n

Your points

\n

\n {ownPlayer?.rank ? `Rank ${ownPlayer.rank}` : 'No rank yet'}\n

\n
\n

\n {hasOwnPoints ? ownPlayer.totalPoints : 0}\n

\n
\n
\n

Leaderboard

\n {Array.isArray(players) && players.length ? (\n
\n {players.slice(0, 4).map((player, idx) => (\n
\n {idx + 1}\n {player.nickname}\n {player.totalPoints}\n
\n ))}\n
\n ) : (\n

No points yet

\n )}\n
\n
\n
\n );\n}\nexport default function BarcodeGamesPanel() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'barcodeGames'));\n\n /*\n Barcode games depend on the optional scanner station. The panel owns the\n feature gate so disabled installs do not show empty game voting controls.\n */\n if (!enabled) return null;\n\n return ;\n}\n\nfunction BarcodeGamesPanelContent() {\n const { state, voteForGame } = useBarcodeGameState();\n const [pendingGameId, setPendingGameId] = useState(null);\n const activeGame = state.activeGame;\n const display = activeGame?.display || {};\n // Voting should stop once the shared game system has moved past selection.\n // The joining phase is included because it is still part of starting the\n // selected game, even though game rules are not running until the countdown.\n const votingDisabled = state.phase === 'joining' || state.phase === 'starting' || state.phase === 'running';\n const timerEndsAt = display.timer?.endsAt;\n const now = useClock(Number.isFinite(timerEndsAt));\n const timerText = formatTimer(timerEndsAt, now);\n const games = useMemo(() => (Array.isArray(state.games) ? state.games : []), [state.games]);\n const participants = Array.isArray(state.participants) ? state.participants : [];\n const activeTheme = getGameTheme(activeGame?.themeColor);\n\n const handleVote = async (gameId) => {\n setPendingGameId(gameId);\n try {\n await voteForGame(gameId);\n } finally {\n setPendingGameId(null);\n }\n };\n\n return (\n \n
\n {games.map((game) => (\n \n ))}\n
\n\n
\n {/* The game summary becomes a three-part dashboard only when the card can\n fit its fixed timer and participant blocks without crushing the title. */}\n
\n
\n

\n {display.title || activeGame?.title || 'No game active'}\n

\n

\n {display.primary || 'Vote for a game to start'}\n

\n {display.secondary ? (\n

{display.secondary}

\n ) : null}\n \n
\n
\n

{display.timer?.label || 'Time'}

\n

\n {timerText || '--'}\n

\n

\n {timerText ? 'active timer' : 'no timer'}\n

\n
\n \n
\n \n
\n\n \n\n
\n
\n \n
\n
\n \n
\n
\n
\n );\n}\n","// Fleet Report Hook\n// Purpose: Provides one request lifecycle for compact and fullscreen read-only report surfaces.\n// Scope: Owns socket acknowledgement handling and refresh state; presentation remains in report components.\nimport { useCallback, useEffect, useState } from 'react';\nimport { useSocket } from '../context/SocketContext.jsx';\n\nexport default function useFleetReport({ since, until, compact = false, includeEvents = true, roverIds = null }) {\n const socket = useSocket();\n const [report, setReport] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [refreshKey, setRefreshKey] = useState(0);\n\n const refresh = useCallback(() => {\n setLoading(true);\n setError(null);\n setRefreshKey((value) => value + 1);\n }, []);\n\n useEffect(() => {\n // Effects synchronize with the external Socket.IO connection. React state\n // changes occur only in the acknowledgement callback, avoiding a\n // synchronous state cascade merely because query inputs changed.\n socket.emit('fleetReports:get', {\n since,\n until,\n compact,\n includeEvents,\n roverIds,\n eventLimit: compact ? 100 : 1000,\n }, (response = {}) => {\n if (response.error || !response.report) {\n setError(response.error || 'Fleet report unavailable');\n setLoading(false);\n return;\n }\n setReport(response.report);\n setLoading(false);\n });\n }, [compact, includeEvents, refreshKey, roverIds, since, socket, until]);\n\n return { report, loading, error, refresh };\n}\n","// Odometer Panel\n// Purpose: Renders persistent rover distance totals derived from Roomba wheel encoders.\n// Scope: Keeps odometer display and socket subscription logic isolated from the raw sensor panel.\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport useFleetReport from '../../hooks/useFleetReport.js';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport CardFrame from '../CardFrame/index.jsx';\n\nfunction mapByRoverId(entries = []) {\n const next = {};\n entries.forEach((entry) => {\n if (!entry?.roverId) return;\n next[String(entry.roverId)] = entry;\n });\n return next;\n}\n\nfunction mergeOdometerMap(previous, entries = []) {\n const next = { ...previous };\n entries.forEach((entry) => {\n if (!entry?.roverId) return;\n next[String(entry.roverId)] = entry;\n });\n return next;\n}\n\nfunction formatDistance(mm) {\n const value = Number(mm);\n if (!Number.isFinite(value)) return '--';\n if (value >= 1000 * 1000) return `${(value / (1000 * 1000)).toFixed(2)} km`;\n if (value >= 1000) return `${(value / 1000).toFixed(1)} m`;\n return `${Math.round(value)} mm`;\n}\n\nfunction formatAge(timestamp, now) {\n const value = Number(timestamp);\n if (!Number.isFinite(value)) return '--';\n const ageMs = Math.max(0, now - value);\n if (ageMs < 1500) return 'now';\n if (ageMs < 60 * 1000) return `${Math.round(ageMs / 1000)}s ago`;\n return `${Math.round(ageMs / (60 * 1000))}m ago`;\n}\n\nfunction formatSpeed(mmPerSecond) {\n const value = Number(mmPerSecond);\n if (!Number.isFinite(value)) return '--';\n return `${(value / 1000).toFixed(2)} m/s`;\n}\n\nfunction formatHealth(percent) {\n const value = Number(percent);\n return Number.isFinite(value) ? `${value.toFixed(0)}%` : '--';\n}\n\nfunction formatEfficiency(whPerKm) {\n const value = Number(whPerKm);\n return Number.isFinite(value) ? `${value.toFixed(1)} Wh/km` : '--';\n}\n\nfunction roverLabel(rover) {\n return rover?.name || rover?.id || 'Unknown rover';\n}\n\nexport default function OdometerPanel() {\n const socket = useSocket();\n const assignedRoverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const roster = useSessionSelector((state) => state.session?.roster ?? []);\n const sessionOdometers = useSessionSelector((state) => state.session?.odometers ?? []);\n const fleetReportsEnabled = useSessionSelector((state) => isFeatureEnabled(state, 'fleetReports'));\n const sessionOdometerMap = useMemo(() => mapByRoverId(sessionOdometers), [sessionOdometers]);\n const [liveOdometerMap, setLiveOdometerMap] = useState({});\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n function handleUpdate({ roverId, odometer } = {}) {\n if (!roverId || !odometer) return;\n setLiveOdometerMap((previous) => ({\n ...previous,\n [String(roverId)]: odometer,\n }));\n }\n\n socket.on('odometer:update', handleUpdate);\n socket.emit('odometer:subscribe', {}, (response = {}) => {\n if (Array.isArray(response.odometers)) {\n setLiveOdometerMap((previous) => mergeOdometerMap(previous, response.odometers));\n }\n });\n return () => {\n socket.off('odometer:update', handleUpdate);\n };\n }, [socket]);\n\n useEffect(() => {\n const timer = window.setInterval(() => {\n setNow(Date.now());\n }, 1000);\n return () => window.clearInterval(timer);\n }, []);\n\n const odometerMap = useMemo(\n () => ({\n ...sessionOdometerMap,\n ...liveOdometerMap,\n }),\n [liveOdometerMap, sessionOdometerMap],\n );\n\n const visibleRows = useMemo(\n () =>\n roster.map((rover) => ({\n rover,\n odometer: odometerMap[String(rover.id)] || null,\n })),\n [odometerMap, roster],\n );\n const visibleRoverIds = useMemo(() => roster.map((rover) => String(rover.id)), [roster]);\n\n /*\n The emphasized summary represents \"your rover\", so it must follow the\n actual assignment rather than silently promoting the first visible rover.\n Unassigned users still retain the compact all-rover list below.\n */\n const primaryRoverId = assignedRoverId || null;\n const primaryRover = visibleRows.find((entry) => String(entry.rover?.id) === String(primaryRoverId))?.rover || null;\n const primary = primaryRoverId ? odometerMap[String(primaryRoverId)] || null : null;\n\n return (\n \n {fleetReportsEnabled ? (\n \n ) : (\n \n )}\n \n );\n}\n\nfunction OdometerReportContent({ roverIds, ...props }) {\n // A lazy state initializer establishes one stable 24-hour query boundary;\n // ordinary odometer re-renders must not trigger fresh historical requests.\n const [rangeEnd] = useState(() => Date.now());\n const { report } = useFleetReport({\n since: rangeEnd - 24 * 60 * 60 * 1000,\n until: rangeEnd,\n compact: true,\n includeEvents: false,\n roverIds,\n });\n const reportByRoverId = useMemo(\n () => Object.fromEntries((report?.rovers || []).map((rover) => [String(rover.roverId), rover])),\n [report],\n );\n return ;\n}\n\nfunction OdometerContent({ now, primary, primaryRover, primaryRoverId, rows, reportByRoverId = {} }) {\n const primaryReport = primaryRoverId ? reportByRoverId[String(primaryRoverId)] : null;\n return (\n <>\n {primaryRoverId ? (\n \n ) : (\n

You do not currently have a rover.

\n )}\n \n \n );\n}\n\nfunction OdometerSummary({ odometer, rover, report, now }) {\n return (\n
\n
\n {roverLabel(rover)}\n {formatAge(odometer?.updatedAt, now)}\n
\n {/* A single metric row keeps both its label and value visible in the narrow\n desktop sidebar. Wider cards progressively regain dashboard density. */}\n {/* Five compact odometer metrics need far less than Tailwind's 42rem 2xl\n container. Returning at 28rem restores the normal row in old and mobile\n layouts while preserving the two-column fallback in genuinely slim cards. */}\n
\n \n \n \n \n \n
\n
\n );\n}\n\nfunction Metric({ label, value }) {\n return (\n
\n {label}\n {value ?? '--'}\n
\n );\n}\n\nfunction RoverOdometerList({ rows, primaryRoverId, reportByRoverId }) {\n if (!rows.length) return null;\n return (\n \n {rows.map(({ rover, odometer }) => {\n const active = String(rover?.id) === String(primaryRoverId);\n const report = reportByRoverId[String(rover?.id)];\n return (\n \n {roverLabel(rover)}\n {formatDistance(odometer?.totalMm)}\n {/* Secondary health metrics share their own line so they never push\n the rover identity or primary distance out of a slim card. */}\n \n \n Battery {formatHealth(report?.batteryHealth?.capacityRetentionPercent)}\n \n \n Efficiency {formatEfficiency(report?.overallWhPerKm)}\n \n \n \n );\n })}\n \n );\n}\n\nfunction DetailCard({ title, children }) {\n return (\n
\n
{title}
\n
{children}
\n
\n );\n}\n","// Button Box Panel\n// Purpose: Defines the Button Box Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { AUDIO_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport ButtonBoxTile from '../ButtonBoxTile/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\n\nconst FLASH_MS = 420;\nconst REWARD_FLASH_MS = 1200;\nconst LIMIT_FLASH_MS = 800;\nconst BUTTON_TONES = {\n 1: 262,\n 2: 330,\n 3: 392,\n 4: 523,\n};\n\nexport default function ButtonBoxPanel() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'buttonBox'));\n\n /*\n The physical button box should vanish by owning its own feature gate. Routes\n can keep mounting this component without leaking empty reward panels.\n */\n if (!enabled) return null;\n\n return ;\n}\n\nfunction ButtonBoxPanelContent() {\n const buttonBoxButtons = useSessionSelector((state) => state.session?.buttonBox?.buttons ?? []);\n const socket = useSocket();\n const { value: audioSettings } = useSettingsNamespace('audio', AUDIO_SETTINGS_DEFAULTS);\n const masterVolume = Number.isFinite(audioSettings?.masterVolume)\n ? audioSettings.masterVolume\n : AUDIO_SETTINGS_DEFAULTS.masterVolume;\n const alertVolume = Number.isFinite(audioSettings?.alertVolume)\n ? audioSettings.alertVolume\n : AUDIO_SETTINGS_DEFAULTS.alertVolume;\n const effectiveAlertVolume = Math.max(0, Math.min(1, masterVolume * alertVolume));\n const buttons = useMemo(() => {\n const list = Array.isArray(buttonBoxButtons) ? buttonBoxButtons : [];\n if (list.length === 4) return list;\n return [1, 2, 3, 4].map((id) => list.find((entry) => Number(entry?.id) === id) || {\n id,\n count: 0,\n goal: 0,\n rewardName: null,\n rewardDescription: null,\n rewardId: null,\n rewardNumber: null,\n dailyCount: 0,\n dailyLimit: null,\n lastRewardAt: null,\n });\n }, [buttonBoxButtons]);\n\n const [incFlash, setIncFlash] = useState({});\n const [limitFlash, setLimitFlash] = useState({});\n const [rewardFlash, setRewardFlash] = useState({});\n const timersRef = useRef(new Map());\n const limitTimersRef = useRef(new Map());\n const rewardTimersRef = useRef(new Map());\n const prevRewardAtRef = useRef({});\n const audioCtxRef = useRef(null);\n\n useEffect(() => {\n const nextMap = {};\n buttons.forEach((button) => {\n nextMap[button.id] = Number(button.lastRewardAt || 0);\n });\n const prev = prevRewardAtRef.current || {};\n\n buttons.forEach((button) => {\n const id = Number(button.id);\n const nextTs = nextMap[id] || 0;\n const prevTs = Number(prev[id] || 0);\n if (nextTs > 0 && nextTs !== prevTs) {\n setRewardFlash((current) => ({ ...current, [id]: true }));\n const oldTimer = rewardTimersRef.current.get(id);\n if (oldTimer) {\n clearTimeout(oldTimer);\n }\n const timer = setTimeout(() => {\n setRewardFlash((current) => ({ ...current, [id]: false }));\n rewardTimersRef.current.delete(id);\n }, REWARD_FLASH_MS);\n rewardTimersRef.current.set(id, timer);\n }\n });\n\n prevRewardAtRef.current = nextMap;\n }, [buttons]);\n\n useEffect(() => {\n function playTone(buttonId) {\n const freq = BUTTON_TONES[buttonId];\n if (!freq) return;\n if (effectiveAlertVolume <= 0) return;\n let ctx = audioCtxRef.current;\n if (!ctx) {\n const Ctor = window.AudioContext || window.webkitAudioContext;\n if (!Ctor) return;\n ctx = new Ctor();\n audioCtxRef.current = ctx;\n }\n const osc = ctx.createOscillator();\n const gain = ctx.createGain();\n osc.type = 'square';\n osc.frequency.value = freq;\n const peakGain = 0.14 * effectiveAlertVolume;\n gain.gain.setValueAtTime(0.0001, ctx.currentTime);\n gain.gain.exponentialRampToValueAtTime(Math.max(0.0001, peakGain), ctx.currentTime + 0.01);\n gain.gain.exponentialRampToValueAtTime(0.0001, ctx.currentTime + 0.2);\n osc.connect(gain);\n gain.connect(ctx.destination);\n osc.start();\n osc.stop(ctx.currentTime + 0.21);\n }\n\n function onIncrement(payload = {}) {\n const buttonId = Number(payload.buttonId);\n if (!Number.isFinite(buttonId) || buttonId < 1 || buttonId > 4) return;\n if (payload.limited) {\n /*\n Capped presses are intentionally visible but not celebratory: red\n feedback tells users the physical press was received, while skipping\n the tone keeps it distinct from real reward progress.\n */\n setLimitFlash((current) => ({ ...current, [buttonId]: true }));\n const oldTimer = limitTimersRef.current.get(buttonId);\n if (oldTimer) {\n clearTimeout(oldTimer);\n }\n const timer = setTimeout(() => {\n setLimitFlash((current) => ({ ...current, [buttonId]: false }));\n limitTimersRef.current.delete(buttonId);\n }, LIMIT_FLASH_MS);\n limitTimersRef.current.set(buttonId, timer);\n return;\n }\n setIncFlash((current) => ({ ...current, [buttonId]: true }));\n const oldTimer = timersRef.current.get(buttonId);\n if (oldTimer) {\n clearTimeout(oldTimer);\n }\n const timer = setTimeout(() => {\n setIncFlash((current) => ({ ...current, [buttonId]: false }));\n timersRef.current.delete(buttonId);\n }, FLASH_MS);\n timersRef.current.set(buttonId, timer);\n playTone(buttonId);\n }\n\n socket.on('buttonBox:increment', onIncrement);\n return () => {\n socket.off('buttonBox:increment', onIncrement);\n };\n }, [effectiveAlertVolume, socket]);\n\n useEffect(\n () => () => {\n /*\n The panel owns short visual timers for press feedback. Clearing them on\n unmount avoids leaving stale timeout callbacks behind if the panel is\n hidden during a burst of button-box activity.\n */\n timersRef.current.forEach((timer) => clearTimeout(timer));\n timersRef.current.clear();\n limitTimersRef.current.forEach((timer) => clearTimeout(timer));\n limitTimersRef.current.clear();\n rewardTimersRef.current.forEach((timer) => clearTimeout(timer));\n rewardTimersRef.current.clear();\n },\n [],\n );\n\n return (\n \n
\n {buttons.map((button) => {\n const id = Number(button.id);\n const count = Number.isFinite(button.count) ? button.count : 0;\n const goal = Number.isFinite(button.goal) ? button.goal : 0;\n const dailyCount = Number.isFinite(button.dailyCount) ? button.dailyCount : 0;\n const dailyLimit = Number.isFinite(button.dailyLimit) ? button.dailyLimit : null;\n const rewardName = typeof button.rewardName === 'string' && button.rewardName.trim()\n ? button.rewardName.trim()\n : 'Unassigned';\n const rewardDescription = typeof button.rewardDescription === 'string' && button.rewardDescription.trim()\n ? button.rewardDescription.trim()\n : null;\n const rewardNumber = Number.isFinite(button.rewardNumber) ? button.rewardNumber : '?';\n const incActive = Boolean(incFlash[id]);\n const limitActive = Boolean(limitFlash[id]);\n const rewardActive = Boolean(rewardFlash[id]);\n\n return (\n \n );\n })}\n
\n
\n );\n}\n","// Kinect Point Cloud Viewer\n// Purpose: Renders a requested Kinect point-cloud frame as an interactive local Three.js scene.\n// Scope: Owns lazy-loading Three.js, converting binary point data into geometry, and pausing work off-screen.\nimport { useCallback, useEffect, useRef } from 'react';\n\nexport default function PointCloudViewer({ frame }) {\n const hostRef = useRef(null);\n const rendererRef = useRef(null);\n const cameraRef = useRef(null);\n const sceneRef = useRef(null);\n const objectRef = useRef(null);\n const controlsRef = useRef(null);\n const threeRef = useRef(null);\n const visibleRef = useRef(false);\n const frameRef = useRef(frame);\n\n const renderOnce = useCallback(() => {\n const renderer = rendererRef.current;\n const scene = sceneRef.current;\n const camera = cameraRef.current;\n if (!renderer || !scene || !camera || !visibleRef.current) return;\n renderer.render(scene, camera);\n }, []);\n\n const disposeRenderedObject = useCallback(() => {\n const object = objectRef.current;\n if (!object) return;\n sceneRef.current?.remove(object);\n object.geometry?.dispose();\n object.material?.dispose();\n objectRef.current = null;\n }, []);\n\n const rebuildGeometry = useCallback(() => {\n const scene = sceneRef.current;\n const currentFrame = frameRef.current;\n const THREE = threeRef.current;\n if (!scene || !THREE || !currentFrame?.buffer || !visibleRef.current) return;\n\n const strideBytes = Number(currentFrame.meta?.strideBytes) || 16;\n const width = Number(currentFrame.meta?.width) || 0;\n const height = Number(currentFrame.meta?.height) || 0;\n const gridPointCount = width * height;\n if (!currentFrame.meta?.grid || !gridPointCount || strideBytes < 16) {\n disposeRenderedObject();\n return;\n }\n\n const view = new DataView(currentFrame.buffer);\n const positions = new Float32Array(gridPointCount * 3);\n const colors = new Float32Array(gridPointCount * 3);\n const valid = new Uint8Array(gridPointCount);\n const zValues = new Float32Array(gridPointCount);\n\n // The server sends x/y/z as little-endian floats followed by rgba bytes.\n // Building typed arrays only when the canvas is visible keeps expensive\n // browser-side point conversion from happening while the card is off-screen.\n for (let index = 0; index < gridPointCount; index += 1) {\n const source = index * strideBytes;\n const target = index * 3;\n positions[target + 0] = view.getFloat32(source + 0, true);\n positions[target + 1] = view.getFloat32(source + 4, true);\n const z = view.getFloat32(source + 8, true);\n positions[target + 2] = -z;\n colors[target + 0] = view.getUint8(source + 12) / 255;\n colors[target + 1] = view.getUint8(source + 13) / 255;\n colors[target + 2] = view.getUint8(source + 14) / 255;\n valid[index] = view.getUint8(source + 15) > 0 ? 1 : 0;\n zValues[index] = z;\n }\n\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));\n geometry.setAttribute('color', new THREE.BufferAttribute(colors, 3));\n\n const indices = [];\n const maxDepthStepMeters = 0.12;\n const canConnect = (a, b, c) => {\n if (!valid[a] || !valid[b] || !valid[c]) return false;\n const minZ = Math.min(zValues[a], zValues[b], zValues[c]);\n const maxZ = Math.max(zValues[a], zValues[b], zValues[c]);\n return maxZ - minZ <= maxDepthStepMeters;\n };\n\n // Kinect depth is a regular image. Each 2x2 pixel cell can become two\n // triangles, but only when all vertices are valid and close in depth. The\n // depth-step check prevents the mesh from drawing sheets across object\n // edges, missing-depth holes, or foreground/background gaps.\n for (let y = 0; y < height - 1; y += 1) {\n for (let x = 0; x < width - 1; x += 1) {\n const a = y * width + x;\n const b = a + 1;\n const c = a + width;\n const d = c + 1;\n if (canConnect(a, c, b)) indices.push(a, c, b);\n if (canConnect(b, c, d)) indices.push(b, c, d);\n }\n }\n\n geometry.setIndex(indices);\n geometry.computeVertexNormals();\n const material = new THREE.MeshBasicMaterial({\n vertexColors: true,\n side: THREE.DoubleSide,\n });\n const object = new THREE.Mesh(geometry, material);\n\n geometry.computeBoundingSphere();\n disposeRenderedObject();\n objectRef.current = object;\n scene.add(object);\n renderOnce();\n }, [disposeRenderedObject, renderOnce]);\n\n useEffect(() => {\n frameRef.current = frame;\n rebuildGeometry();\n }, [frame, rebuildGeometry]);\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return undefined;\n\n let cancelled = false;\n let resizeObserver = null;\n let intersectionObserver = null;\n\n async function initRenderer() {\n // Three.js is loaded only after a point-cloud frame exists and this view\n // mounts. The import resolves from locally built assets, so the viewer\n // still works without internet access.\n const [threeModule, controlsModule] = await Promise.all([\n import('three'),\n import('three/examples/jsm/controls/OrbitControls.js'),\n ]);\n if (cancelled) return;\n\n const THREE = threeModule;\n const { OrbitControls } = controlsModule;\n threeRef.current = THREE;\n\n const scene = new THREE.Scene();\n scene.background = new THREE.Color(0x0a0a0a);\n const camera = new THREE.PerspectiveCamera(55, 4 / 3, 0.01, 20);\n camera.position.set(0, 0.15, 2.2);\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: false });\n renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 1.5));\n renderer.setSize(host.clientWidth || 640, host.clientHeight || 480, false);\n host.appendChild(renderer.domElement);\n\n const controls = new OrbitControls(camera, renderer.domElement);\n controls.enableDamping = false;\n controls.target.set(0, 0, -1.4);\n controls.addEventListener('change', renderOnce);\n\n sceneRef.current = scene;\n cameraRef.current = camera;\n rendererRef.current = renderer;\n controlsRef.current = controls;\n\n resizeObserver = new ResizeObserver(([entry]) => {\n const width = Math.max(1, entry.contentRect.width);\n const height = Math.max(1, entry.contentRect.height);\n camera.aspect = width / height;\n camera.updateProjectionMatrix();\n renderer.setSize(width, height, false);\n renderOnce();\n });\n resizeObserver.observe(host);\n\n intersectionObserver = new IntersectionObserver(\n ([entry]) => {\n const nextVisible = Boolean(entry?.isIntersecting);\n visibleRef.current = nextVisible;\n if (nextVisible) {\n // When the card becomes visible again, rebuild from the latest\n // cached frame so users see current data without rendering while\n // hidden.\n rebuildGeometry();\n renderOnce();\n }\n },\n { threshold: 0.01 },\n );\n intersectionObserver.observe(host);\n }\n\n initRenderer();\n\n return () => {\n cancelled = true;\n intersectionObserver?.disconnect();\n resizeObserver?.disconnect();\n controlsRef.current?.removeEventListener('change', renderOnce);\n controlsRef.current?.dispose();\n disposeRenderedObject();\n rendererRef.current?.dispose();\n rendererRef.current?.domElement?.remove();\n sceneRef.current = null;\n cameraRef.current = null;\n rendererRef.current = null;\n controlsRef.current = null;\n threeRef.current = null;\n };\n }, [disposeRenderedObject, rebuildGeometry, renderOnce]);\n\n return
;\n}\n","// Kinect Panel Utilities\n// Purpose: Keeps small normalization helpers out of the visual component files.\n// Scope: Handles session status defaults, socket binary payload conversion, and title-bar status pill state.\nexport const EMPTY_KINECT_STATUS = {\n enabled: false,\n available: false,\n busy: false,\n captureCooldownUntil: 0,\n lastError: null,\n hasPointCloud: false,\n hasColorImage: false,\n};\n\nexport function normalizeKinectStatus(status) {\n return {\n ...EMPTY_KINECT_STATUS,\n ...(status && typeof status === 'object' ? status : {}),\n };\n}\n\nexport function normalizeBinaryPayload(buffer) {\n if (!buffer) return null;\n if (buffer instanceof ArrayBuffer) return buffer;\n if (ArrayBuffer.isView(buffer)) {\n return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n }\n return null;\n}\n\nexport function buildStatusPill({ cooldownText, enabled, busy, lastError }) {\n if (cooldownText) {\n return {\n label: cooldownText,\n className: 'border-red-400 bg-red-600 text-red-50',\n };\n }\n if (!enabled || lastError) {\n return {\n label: 'Off',\n className: 'border-red-400 bg-red-700 text-red-50',\n };\n }\n if (busy) {\n return {\n label: '...',\n className: 'border-amber-200 bg-amber-500 text-amber-950',\n };\n }\n return {\n label: 'Ready',\n className: 'border-emerald-300 bg-emerald-600 text-emerald-50',\n };\n}\n","// Kinect Panel\n// Purpose: Displays request-only Kinect image and 3D snapshots shared by the server.\n// Scope: Owns browser socket events, cached frame display, request controls, and card layout.\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport PointCloudViewer from './PointCloudViewer.jsx';\nimport {\n buildStatusPill,\n normalizeBinaryPayload,\n normalizeKinectStatus,\n} from './utils.js';\nimport { isFeatureEnabled } from '../../lib/features.js';\n\nexport default function KinectPanel() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'kinect'));\n\n /*\n Kinect is optional local hardware. Keep the feature gate inside the panel so\n disabled installs do not need special cases in every Activities layout.\n */\n if (!enabled) return null;\n\n return ;\n}\n\nfunction KinectPanelContent() {\n const socket = useSocket();\n const status = useSessionSelector((state) => normalizeKinectStatus(state.session?.kinect));\n const [activeView, setActiveView] = useState('3d');\n const [pointCloudFrame, setPointCloudFrame] = useState(null);\n const [colorUrl, setColorUrl] = useState(null);\n const [requestError, setRequestError] = useState(null);\n const [nowMs, setNowMs] = useState(() => Date.now());\n\n useEffect(() => {\n const timer = setInterval(() => setNowMs(Date.now()), 1000);\n return () => clearInterval(timer);\n }, []);\n\n useEffect(() => {\n if (!socket) return undefined;\n\n const handlePointCloudFrame = (meta = {}, buffer) => {\n const normalized = normalizeBinaryPayload(buffer);\n // The current 3D viewer only supports grid frames because the mesh needs\n // the original Kinect pixel layout. Ignore old packed-point cached\n // frames so they cannot silently render as the retired dot-cloud view.\n if (!normalized || !meta?.grid) return;\n setPointCloudFrame({ meta, buffer: normalized });\n setActiveView('3d');\n setRequestError(null);\n };\n\n const handleColorFrame = (...args) => {\n const buffer = args[1];\n const normalized = normalizeBinaryPayload(buffer);\n if (!normalized) return;\n const blob = new Blob([normalized], { type: 'image/jpeg' });\n const nextUrl = URL.createObjectURL(blob);\n setColorUrl((previous) => {\n if (previous) URL.revokeObjectURL(previous);\n return nextUrl;\n });\n setActiveView('image');\n setRequestError(null);\n };\n\n socket.on('kinect:pointCloudFrame', handlePointCloudFrame);\n socket.on('kinect:colorFrame', handleColorFrame);\n socket.emit('kinect:requestCachedFrames', {}, () => {});\n\n return () => {\n socket.off('kinect:pointCloudFrame', handlePointCloudFrame);\n socket.off('kinect:colorFrame', handleColorFrame);\n };\n }, [socket]);\n\n useEffect(() => () => {\n if (colorUrl) URL.revokeObjectURL(colorUrl);\n }, [colorUrl]);\n\n const cooldownRemainingMs = Math.max(0, Number(status.captureCooldownUntil || 0) - nowMs);\n const controlsDisabled = !status.enabled || status.busy || cooldownRemainingMs > 0;\n const cooldownText = cooldownRemainingMs > 0 ? `${Math.ceil(cooldownRemainingMs / 1000)}s` : null;\n const statusPill = useMemo(\n () =>\n buildStatusPill({\n cooldownText,\n enabled: status.enabled,\n busy: status.busy,\n lastError: status.lastError,\n }),\n [cooldownText, status.busy, status.enabled, status.lastError],\n );\n const visibleError = requestError || status.lastError;\n\n const emitRequest = useCallback(\n (eventName) => {\n if (!socket || controlsDisabled) return;\n setRequestError(null);\n socket.emit(eventName, {}, (resp = {}) => {\n if (resp.error) {\n setRequestError(resp.error);\n }\n });\n },\n [controlsDisabled, socket],\n );\n\n const actions = (\n
\n \n {statusPill.label}\n \n
\n {['3d', 'image'].map((option) => (\n setActiveView(option)}\n >\n {option === '3d' ? '3D' : 'Image'}\n \n ))}\n
\n emitRequest('kinect:requestPointCloud')}\n >\n Request 3D\n \n emitRequest('kinect:requestColorImage')}\n >\n Request Image\n \n
\n );\n\n return (\n \n
\n {activeView === '3d' && pointCloudFrame?.buffer ? (\n \n ) : activeView === '3d' ? (\n
\n Request a 3D frame\n
\n ) : colorUrl ? (\n \"Kinect\n ) : (\n
\n Request an image\n
\n )}\n
\n {visibleError ? (\n

{String(visibleError).toLowerCase()}

\n ) : null}\n
\n );\n}\n","// Fleet Reports Card\n// Purpose: Shows every rover's key battery and efficiency metrics at the bottom of Activities.\n// Scope: Self-gates through session.features and links to the all-rovers fullscreen report.\nimport { Link } from 'react-router-dom';\nimport { useState } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { isFeatureEnabled } from '../../lib/features.js';\nimport useFleetReport from '../../hooks/useFleetReport.js';\nimport CardFrame from '../CardFrame/index.jsx';\n\nfunction value(number, digits = 1) {\n return Number.isFinite(Number(number))\n ? Number(number).toLocaleString(undefined, { maximumFractionDigits: digits })\n : '--';\n}\n\nfunction distance(millimeters) {\n return Number(millimeters) >= 1e6\n ? `${value(Number(millimeters) / 1e6, 2)} km`\n : `${value(Number(millimeters) / 1000, 1)} m`;\n}\n\nfunction EnabledFleetReportsCard() {\n const [now, setNow] = useState(() => Date.now());\n const { report, loading, error } = useFleetReport({\n since: now - 24 * 60 * 60 * 1000,\n until: now,\n compact: true,\n includeEvents: false,\n });\n return (\n Open full report
}\n bodyClassName=\"space-y-0.5 p-0.5 text-sm\"\n >\n {loading && !report ?

Loading fleet metrics…

: null}\n {error ?

{error}

: null}\n {report ? (\n
\n \n \n {report.rovers.map((rover) => (\n \n \n \n \n \n \n \n ))}\n
RoverStateHealthConfidenceWh/kmDistanceUsedTemperature
{rover.name}{rover.online ? 'online' : 'offline'}{rover.batteryHealth.capacityRetentionPercent == null ? '--' : `${value(rover.batteryHealth.capacityRetentionPercent)}%`}{rover.batteryHealth.confidence}{value(rover.overallWhPerKm)}{distance(rover.distanceMm)}{value(rover.dischargedWh, 2)} Wh{value(rover.maximumTemperatureC)} °C
\n
\n ) : null}\n \n );\n}\n\nexport default function FleetReportsCard() {\n const enabled = useSessionSelector((state) => isFeatureEnabled(state, 'fleetReports'));\n /*\n Keeping the hook inside the enabled child ensures a disabled optional\n feature creates no socket traffic and leaves the Activities layout unaware\n of reporting internals.\n */\n return enabled ? : null;\n}\n","// Driver Activities Tab\n// Purpose: Owns the shared desktop/mobile ordering of activity cards.\nimport { TabPanel } from '../../../../../components/Tabs/index.jsx';\nimport HomeAssistantActivitiesPanel from '../../../../../components/HomeAssistantActivitiesPanel/index.jsx';\nimport NeatoCard from '../../../../../components/NeatoCard/index.jsx';\nimport LiftCard from '../../../../../components/LiftCard/index.jsx';\nimport BalanceBoardPanel from '../../../../../components/BalanceBoardPanel/index.jsx';\nimport BarcodeGamesPanel from '../../../../../components/BarcodeGamesPanel/index.jsx';\nimport OdometerPanel from '../../../../../components/OdometerPanel/index.jsx';\nimport ButtonBoxPanel from '../../../../../components/ButtonBoxPanel/index.jsx';\nimport KinectPanel from '../../../../../components/KinectPanel/index.jsx';\nimport FleetReportsCard from '../../../../../components/FleetReportsCard/index.jsx';\nimport { themeGapClass } from '../../../../../themes/index.js';\n\nexport default function ActivitiesTab() {\n return (\n \n
\n \n \n \n \n \n \n \n \n \n
\n
\n );\n}\n","// constants\n// Purpose: Defines the constants module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport const COOKIE_KEY_REGEX = /^cu_[a-f0-9]{32}$/;\n\nexport const fieldClass = 'field-input w-full max-w-sm text-left focus:ring-emerald-500';\nexport const flowWrapClass = 'mx-auto w-full max-w-xl flex justify-center';\nexport const innerFlowClass = 'mx-auto flex w-full max-w-md flex-col items-center space-y-0.5 text-center';\n\nexport function maskKey(value) {\n const key = String(value || '').trim();\n if (!key) return '';\n if (key.length <= 10) return `${key.slice(0, 2)}***${key.slice(-2)}`;\n return `${key.slice(0, 6)}...${key.slice(-6)}`;\n}\n","// constants\n// Purpose: Defines the constants module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport const MAX_UPLOAD_BYTES = 8 * 1024 * 1024;\nexport const TARGET_SAMPLE_RATE = 16000;\nexport const RTC_CONFIG = {\n iceServers: [{ urls: 'stun:stun.l.google.com:19302' }],\n bundlePolicy: 'max-bundle',\n rtcpMuxPolicy: 'require',\n};\n","// base64\n// Purpose: Defines the base64 module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport function bytesToBase64(bytes) {\n let binary = '';\n const chunkSize = 0x8000;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n const chunk = bytes.subarray(i, i + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return btoa(binary);\n}\n\nfunction encodeBase64(value) {\n if (typeof btoa === 'function') return btoa(value);\n return '';\n}\n\nexport function buildAuthHeader(token) {\n if (!token) return {};\n const encoded = encodeBase64(`${token}:${token}`);\n return encoded ? { Authorization: `Basic ${encoded}` } : {};\n}\n","// whip Transport\n// Purpose: Defines the whip Transport module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport function waitForIceGatheringComplete(pc, timeoutMs = 1500) {\n return new Promise((resolve) => {\n if (!pc || pc.iceGatheringState === 'complete') {\n resolve();\n return;\n }\n const timer = setTimeout(() => {\n pc.removeEventListener('icegatheringstatechange', onChange);\n resolve();\n }, timeoutMs);\n function onChange() {\n if (pc.iceGatheringState === 'complete') {\n clearTimeout(timer);\n pc.removeEventListener('icegatheringstatechange', onChange);\n resolve();\n }\n }\n pc.addEventListener('icegatheringstatechange', onChange);\n });\n}\n\nfunction isPeerTransportReady(pc) {\n if (!pc) return false;\n const conn = pc.connectionState;\n const ice = pc.iceConnectionState;\n if (conn === 'connected') return true;\n if (ice === 'connected' || ice === 'completed') return true;\n return false;\n}\n\nexport function waitForPeerConnected(pc, timeoutMs = 10000) {\n return new Promise((resolve, reject) => {\n if (!pc) {\n reject(new Error('Peer connection missing'));\n return;\n }\n if (isPeerTransportReady(pc)) {\n resolve();\n return;\n }\n const timer = setTimeout(() => {\n cleanup();\n reject(new Error('Peer connection timeout'));\n }, timeoutMs);\n const onState = () => {\n if (isPeerTransportReady(pc)) {\n cleanup();\n resolve();\n } else if (\n pc.connectionState === 'failed' ||\n pc.connectionState === 'closed' ||\n pc.iceConnectionState === 'failed'\n ) {\n cleanup();\n reject(new Error(`Peer connection ${pc.connectionState || pc.iceConnectionState}`));\n }\n };\n function cleanup() {\n clearTimeout(timer);\n pc.removeEventListener('connectionstatechange', onState);\n pc.removeEventListener('iceconnectionstatechange', onState);\n }\n pc.addEventListener('connectionstatechange', onState);\n pc.addEventListener('iceconnectionstatechange', onState);\n });\n}\n\nexport async function configureSenderForLowLatency(sender) {\n if (!sender?.getParameters || !sender?.setParameters) return;\n const params = sender.getParameters() || {};\n const first = (params.encodings && params.encodings[0]) || {};\n params.encodings = [\n {\n ...first,\n maxBitrate: 64000,\n dtx: 'disabled',\n },\n ];\n try {\n await sender.setParameters(params);\n } catch {\n // Browser support varies; keep defaults if rejected.\n }\n}\n\nexport function waitForOutboundAudioFlow(pc, timeoutMs = 6000) {\n return new Promise((resolve, reject) => {\n if (!pc) {\n reject(new Error('Peer connection missing'));\n return;\n }\n const start = Date.now();\n let baseline = -1;\n const timer = setInterval(async () => {\n if (Date.now() - start > timeoutMs) {\n clearInterval(timer);\n reject(new Error('WHIP connected but no outbound audio flow'));\n return;\n }\n try {\n const senders = pc.getSenders().filter((s) => s.track?.kind === 'audio');\n for (const sender of senders) {\n const stats = await sender.getStats();\n for (const report of stats.values()) {\n if (report.type !== 'outbound-rtp' || report.kind !== 'audio') continue;\n const sent = Number(report.bytesSent || 0);\n const packets = Number(report.packetsSent || 0);\n if (baseline < 0) {\n baseline = sent;\n } else if (sent > baseline + 200 || packets > 5) {\n clearInterval(timer);\n resolve();\n return;\n }\n }\n }\n } catch {\n // Keep polling until timeout.\n }\n }, 250);\n });\n}\n","// audio Codec\n// Purpose: Defines the audio Codec module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport function mergeFloatChunks(chunks) {\n const total = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const merged = new Float32Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n merged.set(chunk, offset);\n offset += chunk.length;\n }\n return merged;\n}\n\nfunction pcm16FromFloat32(samples) {\n const out = new Int16Array(samples.length);\n for (let i = 0; i < samples.length; i += 1) {\n const s = Math.max(-1, Math.min(1, samples[i]));\n out[i] = s < 0 ? s * 0x8000 : s * 0x7fff;\n }\n return out;\n}\n\nexport function encodeWavMono16(samples, sampleRate) {\n const pcm = pcm16FromFloat32(samples);\n const dataSize = pcm.length * 2;\n const buffer = new ArrayBuffer(44 + dataSize);\n const view = new DataView(buffer);\n\n const writeString = (offset, value) => {\n for (let i = 0; i < value.length; i += 1) {\n view.setUint8(offset + i, value.charCodeAt(i));\n }\n };\n\n writeString(0, 'RIFF');\n view.setUint32(4, 36 + dataSize, true);\n writeString(8, 'WAVE');\n writeString(12, 'fmt ');\n view.setUint32(16, 16, true);\n view.setUint16(20, 1, true);\n view.setUint16(22, 1, true);\n view.setUint32(24, sampleRate, true);\n view.setUint32(28, sampleRate * 2, true);\n view.setUint16(32, 2, true);\n view.setUint16(34, 16, true);\n writeString(36, 'data');\n view.setUint32(40, dataSize, true);\n\n let offset = 44;\n for (let i = 0; i < pcm.length; i += 1, offset += 2) {\n view.setInt16(offset, pcm[i], true);\n }\n\n return new Uint8Array(buffer);\n}\n","// Status Indicator\n// Purpose: Defines the Status Indicator module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport default function StatusIndicator({ label, active, detail = '' }) {\n return (\n \n
{label}
\n
{detail || (active ? 'active' : 'idle')}
\n \n );\n}\n","// Vip Audio Upload Card Content\n// Purpose: Defines the Vip Audio Upload Card Content module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { fieldClass } from '../constants.js';\nimport { useControlSelector } from '../../../controls/index.js';\nimport ControlHint from '../../ControlHint/index.jsx';\nimport { useSettingsNamespace } from '../../../settings/index.js';\nimport { MAX_UPLOAD_BYTES, TARGET_SAMPLE_RATE, RTC_CONFIG } from './constants.js';\nimport { bytesToBase64, buildAuthHeader } from './base64.js';\nimport {\n waitForIceGatheringComplete,\n waitForPeerConnected,\n configureSenderForLowLatency,\n waitForOutboundAudioFlow,\n} from './whipTransport.js';\nimport { mergeFloatChunks, encodeWavMono16 } from './audioCodec.js';\nimport StatusIndicator from './StatusIndicator.jsx';\nimport KeyPill from './KeyPill.jsx';\nimport CardFrame from '../../CardFrame/index.jsx';\n\nexport default function VipAudioUploadCard({\n ownRoverId = '',\n audioForwardByRover = {},\n playUploadedAudio,\n stopUploadedAudio,\n startMicWhip,\n readyMicWhip,\n stopMicWhip,\n}) {\n const pttActive = useControlSelector((control) => Boolean(control.state.mic?.pttActive));\n const { value: vipAudio, save: saveVipAudio } = useSettingsNamespace('vipAudio', {\n openMicEnabled: false,\n pttMode: 'live',\n });\n\n const roverId = String(ownRoverId || '').trim();\n const [selectedUpload, setSelectedUpload] = useState(null);\n const [working, setWorking] = useState(false);\n const openMicEnabled = Boolean(vipAudio?.openMicEnabled);\n const pttMode = vipAudio?.pttMode === 'clip' ? 'clip' : 'live';\n const clipMode = pttMode === 'clip';\n\n const [micState, setMicState] = useState('idle');\n const [clipState, setClipState] = useState('idle');\n const [message, setMessage] = useState('');\n\n const streamRef = useRef(null);\n const audioTrackRef = useRef(null);\n const whipPcRef = useRef(null);\n const micActiveRef = useRef(false);\n const activeRoverRef = useRef('');\n\n const clipStreamRef = useRef(null);\n const clipAudioContextRef = useRef(null);\n const clipSourceRef = useRef(null);\n const clipProcessorRef = useRef(null);\n const clipMuteGainRef = useRef(null);\n const clipChunksRef = useRef([]);\n const clipRecordingRef = useRef(false);\n const clipSampleRateRef = useRef(TARGET_SAMPLE_RATE);\n\n\n const selectedForwardState = useMemo(\n () => (roverId ? audioForwardByRover?.[roverId] || null : null),\n [audioForwardByRover, roverId],\n );\n\n const pipelineConnected = Boolean(\n selectedForwardState && selectedForwardState.state !== 'offline' && !selectedForwardState.error,\n );\n const uploadPlaying = Boolean(\n selectedForwardState?.source === 'upload' && selectedForwardState?.state === 'playing',\n );\n const micRelayActive = Boolean(\n selectedForwardState?.source === 'mic-whip' &&\n (selectedForwardState?.state === 'starting' || selectedForwardState?.state === 'playing'),\n );\n const micHot = Boolean(!clipMode && audioTrackRef.current && (openMicEnabled || pttActive));\n const whipLinkActive = !clipMode && (micState === 'live' || micState === 'starting');\n const clipRecording = clipMode && clipState === 'recording';\n const clipSending = clipMode && clipState === 'sending';\n const pttKeyLabel = ;\n\n const setPttMode = useCallback(\n (nextMode) => {\n const mode = nextMode === 'clip' ? 'clip' : 'live';\n saveVipAudio((current) => ({ ...(current || {}), pttMode: mode }));\n },\n [saveVipAudio],\n );\n\n const handleUploadPlay = async () => {\n if (!roverId) {\n setMessage('Take control of your rover first.');\n return;\n }\n if (!selectedUpload) {\n setMessage('Select an audio file first.');\n return;\n }\n if (selectedUpload.size > MAX_UPLOAD_BYTES) {\n setMessage(`File too large (max ${MAX_UPLOAD_BYTES} bytes).`);\n return;\n }\n\n setWorking(true);\n setMessage('');\n try {\n const buffer = await selectedUpload.arrayBuffer();\n const dataBase64 = bytesToBase64(new Uint8Array(buffer));\n await playUploadedAudio?.({\n roverId,\n name: selectedUpload.name,\n mime: selectedUpload.type || '',\n dataBase64,\n });\n setMessage('Upload playback started.');\n } catch (err) {\n setMessage(err?.message || 'Failed to play upload.');\n } finally {\n setWorking(false);\n }\n };\n\n const handleUploadStop = async () => {\n if (!roverId) {\n setMessage('Take control of your rover first.');\n return;\n }\n\n setWorking(true);\n setMessage('');\n try {\n await stopUploadedAudio?.(roverId);\n setMessage('Upload playback stopped.');\n } catch (err) {\n setMessage(err?.message || 'Failed to stop upload.');\n } finally {\n setWorking(false);\n }\n };\n\n const stopMicCapture = useCallback(\n async (targetRoverId) => {\n const target = String(targetRoverId || activeRoverRef.current || '').trim();\n micActiveRef.current = false;\n setMicState('idle');\n if (whipPcRef.current) {\n try {\n whipPcRef.current.getSenders().forEach((sender) => sender.track?.stop());\n } catch {\n // noop\n }\n try {\n whipPcRef.current.close();\n } catch {\n // noop\n }\n }\n whipPcRef.current = null;\n if (streamRef.current) {\n try {\n streamRef.current.getTracks().forEach((track) => track.stop());\n } catch {\n // noop\n }\n }\n streamRef.current = null;\n audioTrackRef.current = null;\n if (target) {\n try {\n await stopMicWhip?.(target);\n } catch {\n // noop\n }\n }\n activeRoverRef.current = '';\n },\n [stopMicWhip],\n );\n\n const startWhipMic = useCallback(\n async (target) => {\n const startPayload = await startMicWhip?.(target);\n const whipUrl = String(startPayload?.whipUrl || '').trim();\n const token = String(startPayload?.token || '').trim();\n if (!whipUrl || !token) {\n throw new Error('WHIP endpoint unavailable');\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: 1,\n sampleRate: TARGET_SAMPLE_RATE,\n echoCancellation: false,\n noiseSuppression: false,\n autoGainControl: false,\n },\n });\n streamRef.current = stream;\n\n const track = stream.getAudioTracks()?.[0];\n audioTrackRef.current = track || null;\n if (track) {\n track.enabled = Boolean(openMicEnabled || pttActive);\n }\n if (track?.applyConstraints) {\n try {\n await track.applyConstraints({\n channelCount: 1,\n sampleRate: TARGET_SAMPLE_RATE,\n echoCancellation: false,\n noiseSuppression: false,\n autoGainControl: false,\n });\n } catch {\n // noop\n }\n }\n\n const pc = new RTCPeerConnection(RTC_CONFIG);\n whipPcRef.current = pc;\n pc.onconnectionstatechange = () => {\n if (!micActiveRef.current) return;\n const state = pc.connectionState;\n if (state === 'connected') {\n setMicState('live');\n return;\n }\n if (state === 'failed' || state === 'disconnected' || state === 'closed') {\n setMicState('error');\n setMessage(`WHIP transport ${state}.`);\n }\n };\n stream.getAudioTracks().forEach((audioTrack) => {\n const sender = pc.addTrack(audioTrack, stream);\n configureSenderForLowLatency(sender);\n });\n\n const offer = await pc.createOffer({ offerToReceiveAudio: false, offerToReceiveVideo: false });\n await pc.setLocalDescription(offer);\n await waitForIceGatheringComplete(pc, 1800);\n\n const response = await fetch(whipUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/sdp',\n ...buildAuthHeader(token),\n },\n body: pc.localDescription?.sdp || offer.sdp,\n });\n if (!response.ok) {\n throw new Error(`WHIP request failed: ${response.status}`);\n }\n const answerSdp = await response.text();\n await pc.setRemoteDescription({ type: 'answer', sdp: answerSdp });\n await waitForPeerConnected(pc, 10000);\n await waitForOutboundAudioFlow(pc, 6000);\n await readyMicWhip?.(target);\n },\n [openMicEnabled, pttActive, readyMicWhip, startMicWhip],\n );\n\n const teardownClipPipeline = useCallback(async () => {\n clipRecordingRef.current = false;\n if (clipProcessorRef.current) {\n try {\n clipProcessorRef.current.disconnect();\n } catch {\n // noop\n }\n clipProcessorRef.current.onaudioprocess = null;\n }\n if (clipSourceRef.current) {\n try {\n clipSourceRef.current.disconnect();\n } catch {\n // noop\n }\n }\n if (clipMuteGainRef.current) {\n try {\n clipMuteGainRef.current.disconnect();\n } catch {\n // noop\n }\n }\n if (clipStreamRef.current) {\n try {\n clipStreamRef.current.getTracks().forEach((track) => track.stop());\n } catch {\n // noop\n }\n }\n if (clipAudioContextRef.current) {\n try {\n await clipAudioContextRef.current.close();\n } catch {\n // noop\n }\n }\n\n clipChunksRef.current = [];\n clipProcessorRef.current = null;\n clipSourceRef.current = null;\n clipMuteGainRef.current = null;\n clipStreamRef.current = null;\n clipAudioContextRef.current = null;\n clipSampleRateRef.current = TARGET_SAMPLE_RATE;\n }, []);\n\n const ensureClipPipeline = useCallback(async () => {\n if (clipStreamRef.current && clipAudioContextRef.current && clipProcessorRef.current) {\n return;\n }\n\n setClipState((prev) => (prev === 'recording' ? prev : 'arming'));\n\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: 1,\n sampleRate: TARGET_SAMPLE_RATE,\n echoCancellation: false,\n noiseSuppression: false,\n autoGainControl: false,\n },\n });\n\n const context = new AudioContext({ latencyHint: 'interactive' });\n const source = context.createMediaStreamSource(stream);\n const processor = context.createScriptProcessor(1024, 1, 1);\n const muteGain = context.createGain();\n muteGain.gain.value = 0;\n\n processor.onaudioprocess = (event) => {\n if (!clipRecordingRef.current) return;\n const input = event.inputBuffer.getChannelData(0);\n clipChunksRef.current.push(new Float32Array(input));\n };\n\n source.connect(processor);\n processor.connect(muteGain);\n muteGain.connect(context.destination);\n\n clipStreamRef.current = stream;\n clipAudioContextRef.current = context;\n clipSourceRef.current = source;\n clipProcessorRef.current = processor;\n clipMuteGainRef.current = muteGain;\n clipSampleRateRef.current = context.sampleRate || TARGET_SAMPLE_RATE;\n }, []);\n\n const finishClipRecording = useCallback(\n async ({ send }) => {\n const wasRecording = clipRecordingRef.current;\n clipRecordingRef.current = false;\n if (!wasRecording) {\n if (!send) setClipState('idle');\n return;\n }\n\n const chunks = clipChunksRef.current;\n clipChunksRef.current = [];\n\n if (!send) {\n setClipState('idle');\n return;\n }\n\n if (!roverId) {\n setClipState('idle');\n return;\n }\n\n if (!chunks.length) {\n setClipState('idle');\n return;\n }\n\n setClipState('sending');\n try {\n const merged = mergeFloatChunks(chunks);\n const wavBytes = encodeWavMono16(merged, clipSampleRateRef.current || TARGET_SAMPLE_RATE);\n const dataBase64 = bytesToBase64(wavBytes);\n await playUploadedAudio?.({\n roverId,\n name: `ptt-${Date.now()}.wav`,\n mime: 'audio/wav',\n dataBase64,\n });\n setClipState('idle');\n } catch (err) {\n setClipState('error');\n setMessage(err?.message || 'Failed to send PTT clip.');\n }\n },\n [playUploadedAudio, roverId],\n );\n\n const startClipRecording = useCallback(async () => {\n if (!roverId) {\n setMessage('Take control of your rover first.');\n return;\n }\n await ensureClipPipeline();\n clipChunksRef.current = [];\n clipRecordingRef.current = true;\n setClipState('recording');\n }, [ensureClipPipeline, roverId]);\n\n useEffect(() => {\n let cancelled = false;\n\n async function syncLiveMic() {\n if (clipMode) {\n await stopMicCapture(activeRoverRef.current || roverId);\n return;\n }\n\n if (!roverId) {\n await stopMicCapture(activeRoverRef.current);\n return;\n }\n if (micActiveRef.current && activeRoverRef.current === roverId) return;\n if (!openMicEnabled && !pttActive) return;\n\n try {\n setMicState('starting');\n setMessage('');\n micActiveRef.current = true;\n activeRoverRef.current = roverId;\n await startWhipMic(roverId);\n if (!cancelled) {\n setMicState('live');\n }\n } catch (err) {\n if (!cancelled) {\n setMicState('error');\n setMessage(err?.message || 'Failed to start mic forwarding.');\n }\n await stopMicCapture(roverId);\n }\n }\n\n syncLiveMic();\n return () => {\n cancelled = true;\n };\n }, [clipMode, openMicEnabled, pttActive, roverId, startWhipMic, stopMicCapture]);\n\n useEffect(() => {\n const track = audioTrackRef.current;\n if (!track) return;\n track.enabled = Boolean(!clipMode && (openMicEnabled || pttActive));\n }, [clipMode, openMicEnabled, pttActive]);\n\n useEffect(() => {\n let cancelled = false;\n\n async function prewarmClip() {\n if (!clipMode || !roverId) {\n if (clipRecordingRef.current) {\n await finishClipRecording({ send: false });\n }\n setClipState('idle');\n return;\n }\n try {\n await ensureClipPipeline();\n if (!cancelled && !clipRecordingRef.current) {\n setClipState('idle');\n }\n } catch (err) {\n if (!cancelled) {\n setClipState('error');\n setMessage(err?.message || 'Microphone access failed for clip mode.');\n }\n }\n }\n\n prewarmClip();\n return () => {\n cancelled = true;\n };\n }, [clipMode, ensureClipPipeline, finishClipRecording, roverId]);\n\n useEffect(() => {\n let cancelled = false;\n\n async function syncClipPtt() {\n if (!clipMode) return;\n if (!roverId) {\n if (clipRecordingRef.current) {\n await finishClipRecording({ send: false });\n }\n return;\n }\n\n if (pttActive) {\n if (!clipRecordingRef.current) {\n try {\n setMessage('');\n await startClipRecording();\n } catch (err) {\n if (!cancelled) {\n setClipState('error');\n setMessage(err?.message || 'Failed to start clip recording.');\n }\n }\n }\n } else if (clipRecordingRef.current) {\n await finishClipRecording({ send: true });\n }\n }\n\n syncClipPtt();\n return () => {\n cancelled = true;\n };\n }, [clipMode, finishClipRecording, pttActive, roverId, startClipRecording]);\n\n useEffect(\n () => () => {\n stopMicCapture(activeRoverRef.current || roverId);\n teardownClipPipeline();\n },\n [roverId, stopMicCapture, teardownClipPipeline],\n );\n\n return (\n \n
\n
\n
\n Push-to-Talk Key\n \n
\n
\n\n {/* PTT controls split only when the Audio Controls card itself is wide. */}\n
\n
\n
\n

PTT Mode

\n

\n Choose how holding your PTT key behaves: live mic stream, or record-and-send clip. If the live stream doesn't work, switch to clip mode.\n

\n
\n setPttMode('live')}\n >\n Live Mic (WHIP)\n \n setPttMode('clip')}\n >\n Record Clip\n \n
\n
\n
\n\n
\n
\n

PTT Clip Status

\n
\n \n \n \n \n
\n
\n
\n
\n\n {/* Upload and live-microphone controls stack in narrow sidebars instead\n of inheriting the desktop viewport's two-column decision. */}\n
\n
\n
\n

Audio Upload

\n\n \n\n
\n {selectedUpload ? (\n
\n {selectedUpload.name} ({selectedUpload.size} bytes)\n
\n ) : (\n
No file selected
\n )}\n
\n\n
\n \n \n
\n
\n
\n\n
\n
\n

Live Microphone

\n \n
\n \n \n
Hold to talk
\n
\n
\n
\n
\n\n
\n
\n

Audio Status

\n {/* A compact sidebar gets two readable status columns. At 28rem the six\n short status values fit again, restoring the card's normal strip in\n old desktop and sufficiently wide mobile surfaces. */}\n
\n \n \n \n \n \n \n
\n {message ?
{message}
: null}\n
\n
\n
\n
\n );\n}\n","// Midi Beeper constants\n// Purpose: Keeps Roomba beeper timing, note limits, and UI defaults in one place.\n// Scope: Shared by the Midi card, parser helpers, and playback scheduler.\n\nexport const ROOMBA_NOTE_MIN = 31;\nexport const ROOMBA_NOTE_MAX = 127;\n\n// Roomba Open Interface song durations are expressed in 1/64 second ticks.\n// Keeping this conversion explicit avoids confusing those device ticks with\n// JavaScript milliseconds or MIDI ticks-per-beat.\nexport const ROOMBA_DURATION_TICK_MS = 1000 / 64;\n\n// The Roomba drops a song command while a previous song is still playing. This\n// guard accounts for browser timer jitter and websocket latency so the next\n// note is less likely to arrive a few milliseconds too early.\nexport const BEEPER_READY_GUARD_MS = 24;\n\nexport const ROOMBA_SONG_MAX_NOTES = 16;\n\nexport const DEFAULT_LIVE_NOTE_TICKS = 8;\nexport const DEFAULT_FILE_NOTE_TICKS = 10;\nexport const DEFAULT_ARPEGGIO_NOTE_TICKS = 4;\nexport const DEFAULT_ARPEGGIO_NOTE_LIMIT = 6;\nexport const DEFAULT_ARRANGER_DENSITY = 3;\n\n// OI accepts smaller duration bytes, but this app targets audible rover music,\n// not theoretical byte validity. Values below this have not been useful on the\n// physical beeper, so arrangement controls clamp to the practical floor.\nexport const PRACTICAL_MIN_NOTE_TICKS = 4;\n\n// Long held MIDI notes sound bad on the Roomba and block following notes. This\n// cap keeps playback responsive while still preserving rough note lengths.\nexport const MAX_FILE_NOTE_TICKS = 48;\n\n// Small MIDI timing gaps are usually expressive overlap/quantization noise, not\n// meaningful silence for a single-note beeper. Larger gaps should split chunks\n// so file playback still breathes between phrases.\nexport const FILE_CHUNK_GAP_THRESHOLD_MS = 45;\n\nexport const PLAYBACK_MODES = [\n { id: 'arranged', label: 'Arranged' },\n { id: 'mono', label: 'Lead line' },\n { id: 'arpeggio', label: 'Arpeggio' },\n];\n\nexport const LIVE_DEVICE_EMPTY_VALUE = '';\n","// data can be any array-like object. It just needs to support .length, .slice, and an element getter []\n\nfunction parseMidi(data) {\n var p = new Parser(data)\n\n var headerChunk = p.readChunk()\n if (headerChunk.id != 'MThd')\n throw \"Bad MIDI file. Expected 'MHdr', got: '\" + headerChunk.id + \"'\"\n var header = parseHeader(headerChunk.data)\n\n var tracks = []\n for (var i=0; !p.eof() && i < header.numTracks; i++) {\n var trackChunk = p.readChunk()\n if (trackChunk.id != 'MTrk')\n throw \"Bad MIDI file. Expected 'MTrk', got: '\" + trackChunk.id + \"'\"\n var track = parseTrack(trackChunk.data)\n tracks.push(track)\n }\n\n return {\n header: header,\n tracks: tracks\n }\n}\n\n\nfunction parseHeader(data) {\n var p = new Parser(data)\n\n var format = p.readUInt16()\n var numTracks = p.readUInt16()\n\n var result = {\n format: format,\n numTracks: numTracks\n }\n\n var timeDivision = p.readUInt16()\n if (timeDivision & 0x8000) {\n result.framesPerSecond = 0x100 - (timeDivision >> 8)\n result.ticksPerFrame = timeDivision & 0xFF\n } else {\n result.ticksPerBeat = timeDivision\n }\n\n return result\n}\n\nfunction parseTrack(data) {\n var p = new Parser(data)\n\n var events = []\n while (!p.eof()) {\n var event = readEvent()\n events.push(event)\n }\n\n return events\n\n var lastEventTypeByte = null\n\n function readEvent() {\n var event = {}\n event.deltaTime = p.readVarInt()\n\n var eventTypeByte = p.readUInt8()\n\n if ((eventTypeByte & 0xf0) === 0xf0) {\n // system / meta event\n if (eventTypeByte === 0xff) {\n // meta event\n event.meta = true\n var metatypeByte = p.readUInt8()\n var length = p.readVarInt()\n switch (metatypeByte) {\n case 0x00:\n event.type = 'sequenceNumber'\n if (length !== 2) throw \"Expected length for sequenceNumber event is 2, got \" + length\n event.number = p.readUInt16()\n return event\n case 0x01:\n event.type = 'text'\n event.text = p.readString(length)\n return event\n case 0x02:\n event.type = 'copyrightNotice'\n event.text = p.readString(length)\n return event\n case 0x03:\n event.type = 'trackName'\n event.text = p.readString(length)\n return event\n case 0x04:\n event.type = 'instrumentName'\n event.text = p.readString(length)\n return event\n case 0x05:\n event.type = 'lyrics'\n event.text = p.readString(length)\n return event\n case 0x06:\n event.type = 'marker'\n event.text = p.readString(length)\n return event\n case 0x07:\n event.type = 'cuePoint'\n event.text = p.readString(length)\n return event\n case 0x20:\n event.type = 'channelPrefix'\n if (length != 1) throw \"Expected length for channelPrefix event is 1, got \" + length\n event.channel = p.readUInt8()\n return event\n case 0x21:\n event.type = 'portPrefix'\n if (length != 1) throw \"Expected length for portPrefix event is 1, got \" + length\n event.port = p.readUInt8()\n return event\n case 0x2f:\n event.type = 'endOfTrack'\n if (length != 0) throw \"Expected length for endOfTrack event is 0, got \" + length\n return event\n case 0x51:\n event.type = 'setTempo';\n if (length != 3) throw \"Expected length for setTempo event is 3, got \" + length\n event.microsecondsPerBeat = p.readUInt24()\n return event\n case 0x54:\n event.type = 'smpteOffset';\n if (length != 5) throw \"Expected length for smpteOffset event is 5, got \" + length\n var hourByte = p.readUInt8()\n var FRAME_RATES = { 0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30 }\n event.frameRate = FRAME_RATES[hourByte & 0x60]\n event.hour = hourByte & 0x1f\n event.min = p.readUInt8()\n event.sec = p.readUInt8()\n event.frame = p.readUInt8()\n event.subFrame = p.readUInt8()\n return event\n case 0x58:\n event.type = 'timeSignature'\n if (length != 2 && length != 4) throw \"Expected length for timeSignature event is 4 or 2, got \" + length\n event.numerator = p.readUInt8()\n event.denominator = (1 << p.readUInt8())\n if (length === 4) {\n event.metronome = p.readUInt8()\n event.thirtyseconds = p.readUInt8()\n } else {\n event.metronome = 0x24\n event.thirtyseconds = 0x08\n }\n return event\n case 0x59:\n event.type = 'keySignature'\n if (length != 2) throw \"Expected length for keySignature event is 2, got \" + length\n event.key = p.readInt8()\n event.scale = p.readUInt8()\n return event\n case 0x7f:\n event.type = 'sequencerSpecific'\n event.data = p.readBytes(length)\n return event\n default:\n event.type = 'unknownMeta'\n event.data = p.readBytes(length)\n event.metatypeByte = metatypeByte\n return event\n }\n } else if (eventTypeByte == 0xf0) {\n event.type = 'sysEx'\n var length = p.readVarInt()\n event.data = p.readBytes(length)\n return event\n } else if (eventTypeByte == 0xf7) {\n event.type = 'endSysEx'\n var length = p.readVarInt()\n event.data = p.readBytes(length)\n return event\n } else {\n throw \"Unrecognised MIDI event type byte: \" + eventTypeByte\n }\n } else {\n // channel event\n var param1\n if ((eventTypeByte & 0x80) === 0) {\n // running status - reuse lastEventTypeByte as the event type.\n // eventTypeByte is actually the first parameter\n if (lastEventTypeByte === null)\n throw \"Running status byte encountered before status byte\"\n param1 = eventTypeByte\n eventTypeByte = lastEventTypeByte\n event.running = true\n } else {\n param1 = p.readUInt8()\n lastEventTypeByte = eventTypeByte\n }\n var eventType = eventTypeByte >> 4\n event.channel = eventTypeByte & 0x0f\n switch (eventType) {\n case 0x08:\n event.type = 'noteOff'\n event.noteNumber = param1\n event.velocity = p.readUInt8()\n return event\n case 0x09:\n var velocity = p.readUInt8()\n event.type = velocity === 0 ? 'noteOff' : 'noteOn'\n event.noteNumber = param1\n event.velocity = velocity\n if (velocity === 0) event.byte9 = true\n return event\n case 0x0a:\n event.type = 'noteAftertouch'\n event.noteNumber = param1\n event.amount = p.readUInt8()\n return event\n case 0x0b:\n event.type = 'controller'\n event.controllerType = param1\n event.value = p.readUInt8()\n return event\n case 0x0c:\n event.type = 'programChange'\n event.programNumber = param1\n return event\n case 0x0d:\n event.type = 'channelAftertouch'\n event.amount = param1\n return event\n case 0x0e:\n event.type = 'pitchBend'\n event.value = (param1 + (p.readUInt8() << 7)) - 0x2000\n return event\n default:\n throw \"Unrecognised MIDI event type: \" + eventType\n }\n }\n }\n}\n\nfunction Parser(data) {\n this.buffer = data\n this.bufferLen = this.buffer.length\n this.pos = 0\n}\n\nParser.prototype.eof = function() {\n return this.pos >= this.bufferLen\n}\n\nParser.prototype.readUInt8 = function() {\n var result = this.buffer[this.pos]\n this.pos += 1\n return result\n}\n\nParser.prototype.readInt8 = function() {\n var u = this.readUInt8()\n if (u & 0x80)\n return u - 0x100\n else\n return u\n}\n\nParser.prototype.readUInt16 = function() {\n var b0 = this.readUInt8(),\n b1 = this.readUInt8()\n\n return (b0 << 8) + b1\n}\n\nParser.prototype.readInt16 = function() {\n var u = this.readUInt16()\n if (u & 0x8000)\n return u - 0x10000\n else\n return u\n}\n\nParser.prototype.readUInt24 = function() {\n var b0 = this.readUInt8(),\n b1 = this.readUInt8(),\n b2 = this.readUInt8()\n\n return (b0 << 16) + (b1 << 8) + b2\n}\n\nParser.prototype.readInt24 = function() {\n var u = this.readUInt24()\n if (u & 0x800000)\n return u - 0x1000000\n else\n return u\n}\n\nParser.prototype.readUInt32 = function() {\n var b0 = this.readUInt8(),\n b1 = this.readUInt8(),\n b2 = this.readUInt8(),\n b3 = this.readUInt8()\n\n return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3\n}\n\nParser.prototype.readBytes = function(len) {\n var bytes = this.buffer.slice(this.pos, this.pos + len)\n this.pos += len\n return bytes\n}\n\nParser.prototype.readString = function(len) {\n var bytes = this.readBytes(len)\n return String.fromCharCode.apply(null, bytes)\n}\n\nParser.prototype.readVarInt = function() {\n var result = 0\n while (!this.eof()) {\n var b = this.readUInt8()\n if (b & 0x80) {\n result += (b & 0x7f)\n result <<= 7\n } else {\n // b is last byte\n return result + b\n }\n }\n // premature eof\n return result\n}\n\nParser.prototype.readChunk = function() {\n var id = this.readString(4)\n var length = this.readUInt32()\n var data = this.readBytes(length)\n return {\n id: id,\n length: length,\n data: data\n }\n}\n\nmodule.exports = parseMidi\n","// data should be the same type of format returned by parseMidi\n// for maximum compatibililty, returns an array of byte values, suitable for conversion to Buffer, Uint8Array, etc.\n\n// opts:\n// - running reuse previous eventTypeByte when possible, to compress file\n// - useByte9ForNoteOff use 0x09 for noteOff when velocity is zero\n\nfunction writeMidi(data, opts) {\n if (typeof data !== 'object')\n throw 'Invalid MIDI data'\n\n opts = opts || {}\n\n var header = data.header || {}\n var tracks = data.tracks || []\n var i, len = tracks.length\n\n var w = new Writer()\n writeHeader(w, header, len)\n\n for (i=0; i < len; i++) {\n writeTrack(w, tracks[i], opts)\n }\n\n return w.buffer\n}\n\nfunction writeHeader(w, header, numTracks) {\n var format = header.format == null ? 1 : header.format\n\n var timeDivision = 128\n if (header.timeDivision) {\n timeDivision = header.timeDivision\n } else if (header.ticksPerFrame && header.framesPerSecond) {\n timeDivision = (-(header.framesPerSecond & 0xFF) << 8) | (header.ticksPerFrame & 0xFF)\n } else if (header.ticksPerBeat) {\n timeDivision = header.ticksPerBeat & 0x7FFF\n }\n\n var h = new Writer()\n h.writeUInt16(format)\n h.writeUInt16(numTracks)\n h.writeUInt16(timeDivision)\n\n w.writeChunk('MThd', h.buffer)\n}\n\nfunction writeTrack(w, track, opts) {\n var t = new Writer()\n var i, len = track.length\n var eventTypeByte = null\n for (i=0; i < len; i++) {\n // Reuse last eventTypeByte when opts.running is set, or event.running is explicitly set on it.\n // parseMidi will set event.running for each event, so that we can get an exact copy by default.\n // Explicitly set opts.running to false, to override event.running and never reuse last eventTypeByte.\n if (opts.running === false || !opts.running && !track[i].running) eventTypeByte = null\n\n eventTypeByte = writeEvent(t, track[i], eventTypeByte, opts.useByte9ForNoteOff)\n }\n w.writeChunk('MTrk', t.buffer)\n}\n\nfunction writeEvent(w, event, lastEventTypeByte, useByte9ForNoteOff) {\n var type = event.type\n var deltaTime = event.deltaTime\n var text = event.text || ''\n var data = event.data || []\n var eventTypeByte = null\n w.writeVarInt(deltaTime)\n\n switch (type) {\n // meta events\n case 'sequenceNumber':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x00)\n w.writeVarInt(2)\n w.writeUInt16(event.number)\n break;\n\n case 'text':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x01)\n w.writeVarInt(text.length)\n w.writeString(text)\n break;\n\n case 'copyrightNotice':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x02)\n w.writeVarInt(text.length)\n w.writeString(text)\n break;\n\n case 'trackName':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x03)\n w.writeVarInt(text.length)\n w.writeString(text)\n break;\n\n case 'instrumentName':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x04)\n w.writeVarInt(text.length)\n w.writeString(text)\n break;\n\n case 'lyrics':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x05)\n w.writeVarInt(text.length)\n w.writeString(text)\n break;\n\n case 'marker':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x06)\n w.writeVarInt(text.length)\n w.writeString(text)\n break;\n\n case 'cuePoint':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x07)\n w.writeVarInt(text.length)\n w.writeString(text)\n break;\n\n case 'channelPrefix':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x20)\n w.writeVarInt(1)\n w.writeUInt8(event.channel)\n break;\n\n case 'portPrefix':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x21)\n w.writeVarInt(1)\n w.writeUInt8(event.port)\n break;\n\n case 'endOfTrack':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x2F)\n w.writeVarInt(0)\n break;\n\n case 'setTempo':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x51)\n w.writeVarInt(3)\n w.writeUInt24(event.microsecondsPerBeat)\n break;\n\n case 'smpteOffset':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x54)\n w.writeVarInt(5)\n var FRAME_RATES = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 }\n var hourByte = (event.hour & 0x1F) | FRAME_RATES[event.frameRate]\n w.writeUInt8(hourByte)\n w.writeUInt8(event.min)\n w.writeUInt8(event.sec)\n w.writeUInt8(event.frame)\n w.writeUInt8(event.subFrame)\n break;\n\n case 'timeSignature':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x58)\n w.writeVarInt(4)\n w.writeUInt8(event.numerator)\n var denominator = Math.floor((Math.log(event.denominator) / Math.LN2)) & 0xFF\n w.writeUInt8(denominator)\n w.writeUInt8(event.metronome)\n w.writeUInt8(event.thirtyseconds || 8)\n break;\n\n case 'keySignature':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x59)\n w.writeVarInt(2)\n w.writeInt8(event.key)\n w.writeUInt8(event.scale)\n break;\n\n case 'sequencerSpecific':\n w.writeUInt8(0xFF)\n w.writeUInt8(0x7F)\n w.writeVarInt(data.length)\n w.writeBytes(data)\n break;\n\n case 'unknownMeta':\n if (event.metatypeByte != null) {\n w.writeUInt8(0xFF)\n w.writeUInt8(event.metatypeByte)\n w.writeVarInt(data.length)\n w.writeBytes(data)\n }\n break;\n\n // system-exclusive\n case 'sysEx':\n w.writeUInt8(0xF0)\n w.writeVarInt(data.length)\n w.writeBytes(data)\n break;\n\n case 'endSysEx':\n w.writeUInt8(0xF7)\n w.writeVarInt(data.length)\n w.writeBytes(data)\n break;\n\n // channel events\n case 'noteOff':\n // Use 0x90 when opts.useByte9ForNoteOff is set and velocity is zero, or when event.byte9 is explicitly set on it.\n // parseMidi will set event.byte9 for each event, so that we can get an exact copy by default.\n // Explicitly set opts.useByte9ForNoteOff to false, to override event.byte9 and always use 0x80 for noteOff events.\n var noteByte = ((useByte9ForNoteOff !== false && event.byte9) || (useByte9ForNoteOff && event.velocity == 0)) ? 0x90 : 0x80\n\n eventTypeByte = noteByte | event.channel\n if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte)\n w.writeUInt8(event.noteNumber)\n w.writeUInt8(event.velocity)\n break;\n\n case 'noteOn':\n eventTypeByte = 0x90 | event.channel\n if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte)\n w.writeUInt8(event.noteNumber)\n w.writeUInt8(event.velocity)\n break;\n\n case 'noteAftertouch':\n eventTypeByte = 0xA0 | event.channel\n if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte)\n w.writeUInt8(event.noteNumber)\n w.writeUInt8(event.amount)\n break;\n\n case 'controller':\n eventTypeByte = 0xB0 | event.channel\n if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte)\n w.writeUInt8(event.controllerType)\n w.writeUInt8(event.value)\n break;\n\n case 'programChange':\n eventTypeByte = 0xC0 | event.channel\n if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte)\n w.writeUInt8(event.programNumber)\n break;\n\n case 'channelAftertouch':\n eventTypeByte = 0xD0 | event.channel\n if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte)\n w.writeUInt8(event.amount)\n break;\n\n case 'pitchBend':\n eventTypeByte = 0xE0 | event.channel\n if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte)\n var value14 = 0x2000 + event.value\n var lsb14 = (value14 & 0x7F)\n var msb14 = (value14 >> 7) & 0x7F\n w.writeUInt8(lsb14)\n w.writeUInt8(msb14)\n break;\n\n default:\n throw 'Unrecognized event type: ' + type\n }\n return eventTypeByte\n}\n\n\nfunction Writer() {\n this.buffer = []\n}\n\nWriter.prototype.writeUInt8 = function(v) {\n this.buffer.push(v & 0xFF)\n}\nWriter.prototype.writeInt8 = Writer.prototype.writeUInt8\n\nWriter.prototype.writeUInt16 = function(v) {\n var b0 = (v >> 8) & 0xFF,\n b1 = v & 0xFF\n\n this.writeUInt8(b0)\n this.writeUInt8(b1)\n}\nWriter.prototype.writeInt16 = Writer.prototype.writeUInt16\n\nWriter.prototype.writeUInt24 = function(v) {\n var b0 = (v >> 16) & 0xFF,\n b1 = (v >> 8) & 0xFF,\n b2 = v & 0xFF\n\n this.writeUInt8(b0)\n this.writeUInt8(b1)\n this.writeUInt8(b2)\n}\nWriter.prototype.writeInt24 = Writer.prototype.writeUInt24\n\nWriter.prototype.writeUInt32 = function(v) {\n var b0 = (v >> 24) & 0xFF,\n b1 = (v >> 16) & 0xFF,\n b2 = (v >> 8) & 0xFF,\n b3 = v & 0xFF\n\n this.writeUInt8(b0)\n this.writeUInt8(b1)\n this.writeUInt8(b2)\n this.writeUInt8(b3)\n}\nWriter.prototype.writeInt32 = Writer.prototype.writeUInt32\n\n\nWriter.prototype.writeBytes = function(arr) {\n this.buffer = this.buffer.concat(Array.prototype.slice.call(arr, 0))\n}\n\nWriter.prototype.writeString = function(str) {\n var i, len = str.length, arr = []\n for (i=0; i < len; i++) {\n arr.push(str.codePointAt(i))\n }\n this.writeBytes(arr)\n}\n\nWriter.prototype.writeVarInt = function(v) {\n if (v < 0) throw \"Cannot write negative variable-length integer\"\n\n if (v <= 0x7F) {\n this.writeUInt8(v)\n } else {\n var i = v\n var bytes = []\n bytes.push(i & 0x7F)\n i >>= 7\n while (i) {\n var b = i & 0x7F | 0x80\n bytes.push(b)\n i >>= 7\n }\n this.writeBytes(bytes.reverse())\n }\n}\n\nWriter.prototype.writeChunk = function(id, data) {\n this.writeString(id)\n this.writeUInt32(data.length)\n this.writeBytes(data)\n}\n\nmodule.exports = writeMidi\n","exports.parseMidi = require('./lib/midi-parser')\nexports.writeMidi = require('./lib/midi-writer')\n","// Midi Beeper utilities\n// Purpose: Parses MIDI files into simple beeper note events and converts timing into Roomba song units.\n// Scope: Pure helpers only; React state, browser MIDI input, and command sending live in the card component.\nimport { parseMidi } from 'midi-file';\nimport {\n DEFAULT_ARPEGGIO_NOTE_TICKS,\n DEFAULT_ARPEGGIO_NOTE_LIMIT,\n DEFAULT_ARRANGER_DENSITY,\n DEFAULT_FILE_NOTE_TICKS,\n FILE_CHUNK_GAP_THRESHOLD_MS,\n MAX_FILE_NOTE_TICKS,\n PRACTICAL_MIN_NOTE_TICKS,\n ROOMBA_SONG_MAX_NOTES,\n ROOMBA_DURATION_TICK_MS,\n ROOMBA_NOTE_MAX,\n ROOMBA_NOTE_MIN,\n} from './constants.js';\n\nfunction clamp(value, min, max) {\n const number = Number(value);\n if (!Number.isFinite(number)) return min;\n return Math.max(min, Math.min(max, number));\n}\n\nexport function clampRoombaNote(note) {\n return clamp(Math.round(note), ROOMBA_NOTE_MIN, ROOMBA_NOTE_MAX);\n}\n\nexport function clampRoombaDurationTicks(ticks) {\n return clamp(Math.round(ticks), 1, 255);\n}\n\nfunction clampPracticalDurationTicks(ticks) {\n return clamp(Math.round(ticks), PRACTICAL_MIN_NOTE_TICKS, 255);\n}\n\nexport function roombaTicksToMs(ticks) {\n return clampRoombaDurationTicks(ticks) * ROOMBA_DURATION_TICK_MS;\n}\n\nfunction formatTrackLabel(index, name, noteCount, channels = []) {\n const cleanName = String(name || '').trim();\n const prefix = cleanName || `Track ${index + 1}`;\n const channelLabel = channels.length > 1 ? `, ${channels.length} channels` : channels.length === 1 ? ', 1 channel' : '';\n return `${prefix} (${noteCount} notes${channelLabel})`;\n}\n\nfunction collectAbsoluteEvents(track = []) {\n let tick = 0;\n return track.map((event) => {\n tick += Number(event?.deltaTime) || 0;\n return { ...event, absoluteTick: tick };\n });\n}\n\nfunction createTempoMap(parsed) {\n const tempoEvents = [];\n\n /*\n MIDI tempo is global for normal format-1 files, and tempo events often sit\n in track 0 while the notes live in a later track. Reading tempo changes from\n every track gives selected-track playback the same timing map without\n requiring server work or a heavier sequencer library.\n */\n (parsed?.tracks || []).forEach((track) => {\n collectAbsoluteEvents(track).forEach((event) => {\n if (event.type !== 'setTempo') return;\n tempoEvents.push({\n tick: event.absoluteTick,\n microsecondsPerBeat: Number(event.microsecondsPerBeat) || 500000,\n });\n });\n });\n\n tempoEvents.sort((a, b) => a.tick - b.tick);\n if (!tempoEvents.length || tempoEvents[0].tick !== 0) {\n tempoEvents.unshift({ tick: 0, microsecondsPerBeat: 500000 });\n }\n\n return tempoEvents;\n}\n\nfunction tickToMs(tick, tempoMap, ticksPerBeat) {\n let elapsedMs = 0;\n let previousTick = 0;\n let microsecondsPerBeat = 500000;\n\n /*\n Tempo changes are piecewise-linear: each segment uses the tempo active at\n the start of that segment. This loop is intentionally small and direct\n because MIDI files for this feature are expected to be short, and clarity is\n more important than caching every possible tick conversion.\n */\n for (const tempo of tempoMap) {\n if (tempo.tick > tick) break;\n const deltaTicks = Math.max(0, tempo.tick - previousTick);\n elapsedMs += (deltaTicks / ticksPerBeat) * (microsecondsPerBeat / 1000);\n previousTick = tempo.tick;\n microsecondsPerBeat = tempo.microsecondsPerBeat;\n }\n\n const remainingTicks = Math.max(0, tick - previousTick);\n return elapsedMs + (remainingTicks / ticksPerBeat) * (microsecondsPerBeat / 1000);\n}\n\nfunction extractTrackNotes(track = [], tempoMap, ticksPerBeat) {\n const absoluteEvents = collectAbsoluteEvents(track);\n const activeNotes = new Map();\n const notes = [];\n let trackName = '';\n\n absoluteEvents.forEach((event) => {\n if (event.type === 'trackName' && event.text) {\n trackName = String(event.text);\n return;\n }\n\n if (event.type !== 'noteOn' && event.type !== 'noteOff') return;\n\n const channel = Number(event.channel) || 0;\n const noteNumber = Number(event.noteNumber);\n if (!Number.isFinite(noteNumber)) return;\n const key = `${channel}:${noteNumber}`;\n const velocity = Number(event.velocity) || 0;\n const isNoteStart = event.type === 'noteOn' && velocity > 0;\n\n if (isNoteStart) {\n /*\n A repeated note-on for the same note/channel before note-off is unusual\n but possible. Replacing the active note keeps the parser from creating a\n negative or huge duration if the file is messy.\n */\n activeNotes.set(key, {\n channel,\n noteNumber,\n startTick: event.absoluteTick,\n velocity,\n });\n return;\n }\n\n const active = activeNotes.get(key);\n if (!active) return;\n activeNotes.delete(key);\n\n const startMs = tickToMs(active.startTick, tempoMap, ticksPerBeat);\n const endMs = tickToMs(event.absoluteTick, tempoMap, ticksPerBeat);\n notes.push({\n channel: active.channel,\n noteNumber: active.noteNumber,\n velocity: active.velocity,\n startMs,\n durationMs: Math.max(ROOMBA_DURATION_TICK_MS, endMs - startMs),\n });\n });\n\n notes.sort((a, b) => a.startMs - b.startMs || b.noteNumber - a.noteNumber);\n return { trackName, notes };\n}\n\nfunction summarizeChannels(notes = []) {\n const counts = new Map();\n\n notes.forEach((note) => {\n const channel = Number(note?.channel);\n if (!Number.isInteger(channel)) return;\n const previous = counts.get(channel) || {\n noteCount: 0,\n minNote: 127,\n maxNote: 0,\n noteTotal: 0,\n };\n previous.noteCount += 1;\n previous.minNote = Math.min(previous.minNote, Number(note.noteNumber) || previous.minNote);\n previous.maxNote = Math.max(previous.maxNote, Number(note.noteNumber) || previous.maxNote);\n previous.noteTotal += Number(note.noteNumber) || 0;\n counts.set(channel, previous);\n });\n\n return Array.from(counts.entries())\n .sort((a, b) => a[0] - b[0])\n .map(([channel, summary]) => ({\n channel,\n noteCount: summary.noteCount,\n minNote: summary.minNote,\n maxNote: summary.maxNote,\n averageNote: summary.noteCount > 0 ? summary.noteTotal / summary.noteCount : 0,\n // MIDI channels are zero-based in the file data, but musicians and most\n // MIDI tools display them as 1-16. Keeping both avoids off-by-one logic in\n // the UI and makes channel 10 percussion obvious.\n label: `Ch ${channel + 1}`,\n isPercussion: channel === 9,\n }));\n}\n\nfunction buildPartSourceLabel(track, channelInfo) {\n const trackName = String(track?.name || '').trim();\n const trackLabel = trackName || `Track ${Number(track?.index || 0) + 1}`;\n const channelLabel = channelInfo?.label || `Ch ${Number(channelInfo?.channel || 0) + 1}`;\n return `${trackLabel} - ${channelLabel}`;\n}\n\nfunction buildPlayableParts(tracks = []) {\n const parts = [];\n\n tracks.forEach((track) => {\n (track.channels || []).forEach((channelInfo) => {\n const notes = (track.notes || []).filter((note) => Number(note.channel) === Number(channelInfo.channel));\n if (!notes.length) return;\n const trackName = String(track?.name || '').trim();\n const partNumber = parts.length + 1;\n const visibleLabel = trackName ? `Part ${partNumber}: ${trackName}` : `Part ${partNumber}`;\n\n /*\n A \"part\" is the user-facing musical unit. Internally it is still the\n MIDI file's track+channel pair, because that is the only reliable way to\n separate instruments across the inconsistent MIDI files people upload.\n */\n parts.push({\n id: `${track.index}:${channelInfo.channel}`,\n trackIndex: track.index,\n channel: channelInfo.channel,\n label: visibleLabel,\n sourceLabel: buildPartSourceLabel(track, channelInfo),\n shortLabel: `${Number(track.index) + 1}.${Number(channelInfo.channel) + 1}`,\n noteCount: notes.length,\n minNote: channelInfo.minNote,\n maxNote: channelInfo.maxNote,\n averageNote: channelInfo.averageNote,\n isPercussion: Boolean(channelInfo.isPercussion),\n role: inferPartRole(channelInfo),\n notes: notes.map((note) => ({\n ...note,\n partId: `${track.index}:${channelInfo.channel}`,\n })),\n });\n });\n });\n\n return parts.sort((a, b) => {\n if (a.isPercussion !== b.isPercussion) return a.isPercussion ? 1 : -1;\n return b.noteCount - a.noteCount || a.trackIndex - b.trackIndex || a.channel - b.channel;\n });\n}\n\nfunction inferPartRole(channelInfo) {\n if (channelInfo?.isPercussion) return 'drums';\n const average = Number(channelInfo?.averageNote) || 0;\n const max = Number(channelInfo?.maxNote) || 0;\n\n /*\n MIDI files do not reliably tell us instrument intent, so this is deliberately\n heuristic. Low average pitch behaves well as bass, high maximum pitch often\n carries melody, and everything else becomes harmony/fill material.\n */\n if (average > 0 && average < 52) return 'bass';\n if (max >= 72 || average >= 64) return 'melody';\n return 'harmony';\n}\n\nexport function getDefaultSelectedPartIds(parts = []) {\n const playable = Array.isArray(parts) ? parts : [];\n const pitchedParts = playable.filter((part) => !part.isPercussion);\n const candidates = pitchedParts.length ? pitchedParts : playable;\n\n /*\n Default to a small, useful ensemble instead of everything. Dense MIDI files\n can overwhelm a one-note Roomba beeper, so selecting the largest pitched\n parts gives the user a recognizable starting point while keeping drums off\n unless the file has nothing else.\n */\n return candidates.slice(0, 6).map((part) => part.id);\n}\n\nexport function getPresetPartIds(parts = [], preset = 'default') {\n const playable = Array.isArray(parts) ? parts : [];\n const pitchedParts = playable.filter((part) => !part.isPercussion);\n const source = pitchedParts.length ? pitchedParts : playable;\n\n switch (preset) {\n case 'none':\n return [];\n case 'all-pitched':\n return source.map((part) => part.id);\n case 'bass': {\n const sorted = [...source].sort((a, b) => a.averageNote - b.averageNote || b.noteCount - a.noteCount);\n return sorted.slice(0, 2).map((part) => part.id);\n }\n case 'melody': {\n const sorted = [...source].sort((a, b) => b.averageNote - a.averageNote || b.noteCount - a.noteCount);\n return sorted.slice(0, 3).map((part) => part.id);\n }\n default:\n return getDefaultSelectedPartIds(playable);\n }\n}\n\nexport function collectNotesForParts(parts = [], selectedPartIds = []) {\n if (!Array.isArray(parts) || !Array.isArray(selectedPartIds) || selectedPartIds.length === 0) return [];\n const selected = new Set(selectedPartIds.map((id) => String(id)));\n return parts\n .filter((part) => selected.has(String(part.id)))\n .flatMap((part) => part.notes || [])\n .sort((a, b) => a.startMs - b.startMs || b.velocity - a.velocity || b.noteNumber - a.noteNumber);\n}\n\nfunction groupNotesByStart(notes = []) {\n const groups = [];\n let current = null;\n\n notes.forEach((note) => {\n /*\n A tiny tolerance catches chord notes that quantize to the same musical\n time but differ by a fraction of a millisecond after tempo conversion.\n */\n if (!current || Math.abs(note.startMs - current.startMs) > 1) {\n current = { startMs: note.startMs, notes: [] };\n groups.push(current);\n }\n current.notes.push(note);\n });\n\n return groups;\n}\n\nfunction groupNotesForArrangement(notes = [], toleranceMs = 24) {\n const groups = [];\n let current = null;\n\n notes.forEach((note) => {\n if (!current || Math.abs(note.startMs - current.startMs) > toleranceMs) {\n current = { startMs: note.startMs, notes: [] };\n groups.push(current);\n }\n current.notes.push(note);\n });\n\n return groups;\n}\n\nfunction noteDurationToRoombaTicks(note, fallbackTicks, maxTicks) {\n const naturalTicks = note.durationMs / ROOMBA_DURATION_TICK_MS;\n const cap = clampPracticalDurationTicks(maxTicks || MAX_FILE_NOTE_TICKS);\n return clampPracticalDurationTicks(Math.min(cap, naturalTicks || fallbackTicks));\n}\n\nexport function filterNotesByChannels(notes = [], selectedChannels = []) {\n if (!Array.isArray(selectedChannels) || selectedChannels.length === 0) return [];\n const channelSet = new Set(selectedChannels.map((channel) => Number(channel)));\n return notes.filter((note) => channelSet.has(Number(note?.channel)));\n}\n\nexport function buildBeeperEvents(notes = [], mode = 'mono', options = {}) {\n const groups = groupNotesByStart(notes);\n const events = [];\n const arpeggioTicks = clampPracticalDurationTicks(options.arpeggioTicks || DEFAULT_ARPEGGIO_NOTE_TICKS);\n const arpeggioLimit = clamp(Math.round(options.arpeggioLimit || DEFAULT_ARPEGGIO_NOTE_LIMIT), 1, 16);\n const monoFallbackTicks = clampPracticalDurationTicks(options.monoFallbackTicks || DEFAULT_FILE_NOTE_TICKS);\n const monoMaxTicks = clampPracticalDurationTicks(options.monoMaxTicks || MAX_FILE_NOTE_TICKS);\n\n groups.forEach((group) => {\n const playableNotes = [...group.notes].sort((a, b) => {\n /*\n Higher velocity usually represents the melody or accented chord tone.\n Note number breaks ties so dense chords become predictable instead of\n depending on the file's internal event order.\n */\n return b.velocity - a.velocity || b.noteNumber - a.noteNumber;\n });\n\n if (mode === 'arpeggio') {\n playableNotes.slice(0, arpeggioLimit).forEach((note, index) => {\n const ticks = arpeggioTicks;\n events.push({\n atMs: group.startMs + index * roombaTicksToMs(ticks),\n note: clampRoombaNote(note.noteNumber),\n duration: ticks,\n });\n });\n return;\n }\n\n const selected = playableNotes[0];\n if (!selected) return;\n events.push({\n atMs: selected.startMs,\n note: clampRoombaNote(selected.noteNumber),\n duration: noteDurationToRoombaTicks(selected, monoFallbackTicks, monoMaxTicks),\n });\n });\n\n return events.sort((a, b) => a.atMs - b.atMs || b.note - a.note);\n}\n\nfunction sortBestLeadNotes(a, b) {\n return b.velocity - a.velocity || b.noteNumber - a.noteNumber;\n}\n\nfunction sortBestBassNotes(a, b) {\n return b.velocity - a.velocity || a.noteNumber - b.noteNumber;\n}\n\nfunction chooseBestNote(notes = [], role = 'melody') {\n if (!notes.length) return null;\n const sorted = [...notes].sort(role === 'bass' ? sortBestBassNotes : sortBestLeadNotes);\n return sorted[0] || null;\n}\n\nfunction selectedPartsById(parts = [], selectedPartIds = []) {\n const selected = new Set((selectedPartIds || []).map((id) => String(id)));\n return (parts || []).filter((part) => selected.has(String(part.id)));\n}\n\nfunction makeEvent(note, atMs, durationTicks) {\n return {\n atMs,\n note: clampRoombaNote(note.noteNumber),\n duration: clampPracticalDurationTicks(durationTicks),\n partId: note.partId || '',\n };\n}\n\nfunction suppressNoisyRepeats(events = [], minGapMs) {\n const lastByNote = new Map();\n return events.filter((event) => {\n const key = event.note;\n const lastAt = lastByNote.get(key);\n if (typeof lastAt === 'number' && event.atMs - lastAt < minGapMs) {\n return false;\n }\n lastByNote.set(key, event.atMs);\n return true;\n });\n}\n\nexport function arrangeRoombaBeeperEvents(parts = [], selectedPartIds = [], mode = 'arranged', options = {}) {\n const selectedParts = selectedPartsById(parts, selectedPartIds).filter((part) => !part.isPercussion);\n const fallbackParts = selectedParts.length ? selectedParts : selectedPartsById(parts, selectedPartIds);\n const notes = fallbackParts\n .flatMap((part) => part.notes || [])\n .sort((a, b) => a.startMs - b.startMs || b.velocity - a.velocity || b.noteNumber - a.noteNumber);\n\n if (!notes.length) return [];\n\n const density = clamp(Math.round(options.density || DEFAULT_ARRANGER_DENSITY), 1, 5);\n const monoFallbackTicks = clampPracticalDurationTicks(options.monoFallbackTicks || DEFAULT_FILE_NOTE_TICKS);\n const monoMaxTicks = clampPracticalDurationTicks(options.monoMaxTicks || MAX_FILE_NOTE_TICKS);\n const arpeggioTicks = clampPracticalDurationTicks(options.arpeggioTicks || DEFAULT_ARPEGGIO_NOTE_TICKS);\n const arpeggioLimit = clamp(Math.round(options.arpeggioLimit || DEFAULT_ARPEGGIO_NOTE_LIMIT), 1, 16);\n const groups = groupNotesForArrangement(notes, density >= 4 ? 36 : 24);\n const partCountCap = Math.max(1, Math.min(arpeggioLimit, fallbackParts.length || arpeggioLimit));\n const events = [];\n let lastBassAt = -Infinity;\n let groupIndex = 0;\n\n groups.forEach((group) => {\n const byPart = new Map();\n group.notes.forEach((note) => {\n const partId = String(note.partId || '');\n if (!partId) return;\n if (!byPart.has(partId)) byPart.set(partId, []);\n byPart.get(partId).push(note);\n });\n\n if (mode === 'arpeggio') {\n const onePerPart = Array.from(byPart.entries())\n .map(([partId, partNotes]) => {\n const part = fallbackParts.find((entry) => String(entry.id) === partId);\n return {\n part,\n note: chooseBestNote(partNotes, part?.role === 'bass' ? 'bass' : 'melody'),\n };\n })\n .filter((entry) => entry.note)\n .sort((a, b) => {\n const roleRank = { bass: 0, harmony: 1, melody: 2, drums: 3 };\n return (roleRank[a.part?.role] ?? 2) - (roleRank[b.part?.role] ?? 2) || b.note.velocity - a.note.velocity;\n });\n\n onePerPart.slice(0, partCountCap).forEach((entry, index) => {\n events.push(makeEvent(entry.note, group.startMs + index * roombaTicksToMs(arpeggioTicks), arpeggioTicks));\n });\n return;\n }\n\n const bassNotes = [];\n const melodyNotes = [];\n const harmonyNotes = [];\n\n group.notes.forEach((note) => {\n const part = fallbackParts.find((entry) => String(entry.id) === String(note.partId || ''));\n if (part?.role === 'bass') {\n bassNotes.push(note);\n } else if (part?.role === 'harmony') {\n harmonyNotes.push(note);\n } else {\n melodyNotes.push(note);\n }\n });\n\n const leadNote = chooseBestNote(melodyNotes.length ? melodyNotes : group.notes, 'melody');\n if (leadNote) {\n events.push(makeEvent(leadNote, group.startMs, noteDurationToRoombaTicks(leadNote, monoFallbackTicks, monoMaxTicks)));\n }\n\n if (mode === 'arranged') {\n const bassSpacingMs = density >= 4 ? 320 : density >= 3 ? 460 : 700;\n const shouldAddBass = bassNotes.length && group.startMs - lastBassAt >= bassSpacingMs;\n if (shouldAddBass) {\n const bassNote = chooseBestNote(bassNotes, 'bass');\n if (bassNote) {\n events.push(makeEvent(bassNote, group.startMs + roombaTicksToMs(arpeggioTicks), Math.max(arpeggioTicks, 6)));\n lastBassAt = group.startMs;\n }\n }\n\n const shouldAddHarmony = density >= 4 || (density >= 3 && groupIndex % 2 === 0);\n if (shouldAddHarmony && harmonyNotes.length) {\n const harmonyNote = chooseBestNote(harmonyNotes, 'melody');\n if (harmonyNote) {\n events.push(makeEvent(harmonyNote, group.startMs + roombaTicksToMs(arpeggioTicks) * 2, arpeggioTicks));\n }\n }\n }\n\n groupIndex += 1;\n });\n\n const repeatGapMs = density >= 4 ? 55 : density >= 3 ? 80 : 120;\n return suppressNoisyRepeats(events, repeatGapMs).sort((a, b) => a.atMs - b.atMs || b.note - a.note);\n}\n\nfunction createChunk(startMs) {\n return {\n startMs,\n notes: [],\n durationMs: 0,\n sourceEndMs: startMs,\n };\n}\n\nexport function buildRoombaSongChunks(events = []) {\n const chunks = [];\n const sortedEvents = [...events].sort((a, b) => a.atMs - b.atMs || b.note - a.note);\n let chunk = null;\n let cursorMs = 0;\n\n sortedEvents.forEach((event) => {\n const noteDurationMs = roombaTicksToMs(event.duration);\n const hasOpenChunk = Boolean(chunk && chunk.notes.length > 0);\n const gapAfterCurrentChunk = hasOpenChunk ? event.atMs - cursorMs : 0;\n const shouldStartNewChunk =\n !hasOpenChunk ||\n chunk.notes.length >= ROOMBA_SONG_MAX_NOTES ||\n gapAfterCurrentChunk > FILE_CHUNK_GAP_THRESHOLD_MS;\n\n if (shouldStartNewChunk) {\n /*\n A new chunk is scheduled at the MIDI event time when there is real\n silence before it. If the incoming event overlaps the previous phrase,\n it starts at the current serialized cursor instead so playback bends\n toward \"play the next note\" instead of \"drop the next note\".\n */\n const startMs = Math.max(event.atMs, cursorMs);\n chunk = createChunk(startMs);\n chunks.push(chunk);\n cursorMs = startMs;\n }\n\n const safeNote = {\n note: clampRoombaNote(event.note),\n duration: clampRoombaDurationTicks(event.duration),\n };\n\n chunk.notes.push(safeNote);\n chunk.durationMs += noteDurationMs;\n chunk.sourceEndMs = chunk.startMs + chunk.durationMs;\n cursorMs += noteDurationMs;\n });\n\n return chunks;\n}\n\nexport async function parseMidiFile(file) {\n const bytes = new Uint8Array(await file.arrayBuffer());\n const parsed = parseMidi(bytes);\n const ticksPerBeat = Number(parsed?.header?.ticksPerBeat || parsed?.header?.timeDivision || 0);\n if (!ticksPerBeat || ticksPerBeat < 0) {\n throw new Error('Only beat-based MIDI timing is supported.');\n }\n\n const tempoMap = createTempoMap(parsed);\n const tracks = (parsed.tracks || []).map((track, index) => {\n const extracted = extractTrackNotes(track, tempoMap, ticksPerBeat);\n const channels = summarizeChannels(extracted.notes);\n return {\n index,\n name: extracted.trackName,\n label: formatTrackLabel(index, extracted.trackName, extracted.notes.length, channels),\n notes: extracted.notes,\n noteCount: extracted.notes.length,\n channels,\n };\n });\n const parts = buildPlayableParts(tracks);\n\n return {\n fileName: file.name,\n format: parsed.header?.format,\n ticksPerBeat,\n tracks,\n parts,\n };\n}\n","// Midi Beeper status row\n// Purpose: Provides compact status readouts that match the existing VIP card visual language.\n// Scope: Presentational only; the parent owns all state and wording.\nexport default function StatusRow({ label, value, active = false }) {\n return (\n
\n {label}\n \n {value}\n \n
\n );\n}\n","// Vip Midi Beeper Card\n// Purpose: Adds client-only MIDI file and live MIDI input playback through the existing Roomba song command path.\n// Scope: Keeps MIDI parsing, Web MIDI selection, local beeper pacing, and VIP card UI isolated from the rest of the page.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport CardFrame from '../../CardFrame/index.jsx';\nimport { useControlActions } from '../../../controls/index.js';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { fieldClass } from '../constants.js';\nimport {\n BEEPER_READY_GUARD_MS,\n DEFAULT_ARPEGGIO_NOTE_LIMIT,\n DEFAULT_ARPEGGIO_NOTE_TICKS,\n DEFAULT_ARRANGER_DENSITY,\n DEFAULT_FILE_NOTE_TICKS,\n DEFAULT_LIVE_NOTE_TICKS,\n LIVE_DEVICE_EMPTY_VALUE,\n MAX_FILE_NOTE_TICKS,\n PLAYBACK_MODES,\n PRACTICAL_MIN_NOTE_TICKS,\n} from './constants.js';\nimport {\n arrangeRoombaBeeperEvents,\n buildRoombaSongChunks,\n clampRoombaDurationTicks,\n clampRoombaNote,\n getDefaultSelectedPartIds,\n getPresetPartIds,\n parseMidiFile,\n roombaTicksToMs,\n} from './midiBeeperUtils.js';\nimport StatusRow from './StatusRow.jsx';\n\nfunction getNow() {\n return typeof performance !== 'undefined' && performance.now ? performance.now() : Date.now();\n}\n\nexport default function VipMidiBeeperCard() {\n const { sendSong } = useControlActions();\n const ownRoverId = useSessionSelector((state) => String(state.session?.assignment?.roverId || '').trim());\n\n const [selectedFileName, setSelectedFileName] = useState('');\n const [parsedMidi, setParsedMidi] = useState(null);\n const [selectedPartIds, setSelectedPartIds] = useState([]);\n const [playbackMode, setPlaybackMode] = useState('arranged');\n const [monoMaxTicks, setMonoMaxTicks] = useState(MAX_FILE_NOTE_TICKS);\n const [arpeggioNoteTicks, setArpeggioNoteTicks] = useState(DEFAULT_ARPEGGIO_NOTE_TICKS);\n const [arpeggioNoteLimit, setArpeggioNoteLimit] = useState(DEFAULT_ARPEGGIO_NOTE_LIMIT);\n const [arrangerDensity, setArrangerDensity] = useState(DEFAULT_ARRANGER_DENSITY);\n const [liveNoteTicks, setLiveNoteTicks] = useState(DEFAULT_LIVE_NOTE_TICKS);\n const [message, setMessage] = useState('');\n const [playbackState, setPlaybackState] = useState('idle');\n const [stats, setStats] = useState({ sent: 0, dropped: 0 });\n const [midiAccessState, setMidiAccessState] = useState('idle');\n const [midiInputs, setMidiInputs] = useState([]);\n const [selectedInputId, setSelectedInputId] = useState(LIVE_DEVICE_EMPTY_VALUE);\n const [liveEnabled, setLiveEnabled] = useState(false);\n\n const midiAccessRef = useRef(null);\n const activeInputRef = useRef(null);\n const playbackRunRef = useRef(0);\n const playbackTimersRef = useRef([]);\n const beeperBusyUntilRef = useRef(0);\n const playbackCursorMsRef = useRef(0);\n const playbackStartedAtRef = useRef(0);\n const playbackConfigRef = useRef(null);\n\n const playableParts = useMemo(() => parsedMidi?.parts || [], [parsedMidi]);\n\n const beeperOptions = useMemo(\n () => ({\n monoFallbackTicks: DEFAULT_FILE_NOTE_TICKS,\n monoMaxTicks,\n arpeggioTicks: arpeggioNoteTicks,\n arpeggioLimit: arpeggioNoteLimit,\n density: arrangerDensity,\n }),\n [arpeggioNoteLimit, arpeggioNoteTicks, arrangerDensity, monoMaxTicks],\n );\n\n const beeperEvents = useMemo(() => {\n if (!playableParts.length || !selectedPartIds.length) return [];\n return arrangeRoombaBeeperEvents(playableParts, selectedPartIds, playbackMode, beeperOptions);\n }, [beeperOptions, playableParts, playbackMode, selectedPartIds]);\n\n const songChunks = useMemo(() => buildRoombaSongChunks(beeperEvents), [beeperEvents]);\n\n const midiSupported = typeof navigator !== 'undefined' && typeof navigator.requestMIDIAccess === 'function';\n const selectedInput = useMemo(\n () => midiInputs.find((input) => input.id === selectedInputId) || null,\n [midiInputs, selectedInputId],\n );\n const selectedPartSet = useMemo(\n () => new Set(selectedPartIds.map((id) => String(id))),\n [selectedPartIds],\n );\n\n useEffect(() => {\n /*\n File playback has to let settings change while a song is playing. React\n callbacks created at play-start would otherwise close over stale mode and\n channel values, so the scheduler reads the latest normalized config from a\n ref each time it reaches a chunk boundary.\n */\n playbackConfigRef.current = {\n playableParts,\n selectedPartIds,\n playbackMode,\n beeperOptions,\n };\n }, [beeperOptions, playableParts, playbackMode, selectedPartIds]);\n\n const clearPlaybackTimers = useCallback(() => {\n playbackTimersRef.current.forEach((timer) => clearTimeout(timer));\n playbackTimersRef.current = [];\n }, []);\n\n const applyPartPreset = useCallback(\n (preset) => {\n setSelectedPartIds(getPresetPartIds(playableParts, preset));\n },\n [playableParts],\n );\n\n const togglePart = useCallback((partId) => {\n const normalized = String(partId || '');\n if (!normalized) return;\n\n setSelectedPartIds((current) => {\n const currentSet = new Set(current.map((entry) => String(entry)));\n if (currentSet.has(normalized)) {\n currentSet.delete(normalized);\n } else {\n currentSet.add(normalized);\n }\n return Array.from(currentSet).sort();\n });\n }, []);\n\n const stopPlayback = useCallback(() => {\n /*\n Stopping playback cannot stop a note that the Roomba is already beeping.\n It only cancels future browser timers and lets the local busy clock expire\n naturally, which matches the beeper's real \"no interruption\" behavior.\n */\n playbackRunRef.current += 1;\n clearPlaybackTimers();\n setPlaybackState('idle');\n }, [clearPlaybackTimers]);\n\n const sendBeeperNote = useCallback(\n ({ note, duration, source }) => {\n const now = getNow();\n const safeDuration = clampRoombaDurationTicks(duration);\n\n if (!ownRoverId) {\n setMessage('Take control of your rover first.');\n setStats((prev) => ({ ...prev, dropped: prev.dropped + 1 }));\n return false;\n }\n\n if (now < beeperBusyUntilRef.current) {\n /*\n The server and Roomba will accept fast commands, but the Roomba song\n player drops a song while it is already playing one. This local gate\n chooses an intentional skip instead of sending a command that is very\n likely to disappear silently.\n */\n setStats((prev) => ({ ...prev, dropped: prev.dropped + 1 }));\n return false;\n }\n\n const sent = sendSong?.([{ note: clampRoombaNote(note), duration: safeDuration }], { slot: 0 });\n if (!sent) {\n setStats((prev) => ({ ...prev, dropped: prev.dropped + 1 }));\n return false;\n }\n\n beeperBusyUntilRef.current = now + roombaTicksToMs(safeDuration) + BEEPER_READY_GUARD_MS;\n setStats((prev) => ({ ...prev, sent: prev.sent + 1 }));\n if (source === 'live') {\n setMessage('Live note sent.');\n }\n return true;\n },\n [ownRoverId, sendSong],\n );\n\n const sendBeeperChunk = useCallback(\n (chunk) => {\n const notes = Array.isArray(chunk?.notes) ? chunk.notes : [];\n if (!notes.length) return false;\n\n if (!ownRoverId) {\n setMessage('Take control of your rover first.');\n setStats((prev) => ({ ...prev, dropped: prev.dropped + notes.length }));\n return false;\n }\n\n /*\n File playback sends a complete Roomba song definition instead of racing\n individual note commands against the beeper's busy state. The Roomba can\n play up to 16 notes from one accepted command, so the browser only has\n to time phrase boundaries instead of every single note.\n */\n const sent = sendSong?.(notes, { slot: 0 });\n if (!sent) {\n setStats((prev) => ({ ...prev, dropped: prev.dropped + notes.length }));\n return false;\n }\n\n beeperBusyUntilRef.current = getNow() + (Number(chunk.durationMs) || 0) + BEEPER_READY_GUARD_MS;\n setStats((prev) => ({ ...prev, sent: prev.sent + notes.length }));\n return true;\n },\n [ownRoverId, sendSong],\n );\n\n const buildNextPlaybackChunk = useCallback(() => {\n const config = playbackConfigRef.current || {};\n const parts = Array.isArray(config.playableParts) ? config.playableParts : [];\n const partIds = Array.isArray(config.selectedPartIds) ? config.selectedPartIds : [];\n if (!parts.length || partIds.length === 0) return null;\n\n const events = arrangeRoombaBeeperEvents(parts, partIds, config.playbackMode, config.beeperOptions)\n .filter((event) => event.atMs >= playbackCursorMsRef.current - 0.5);\n const chunks = buildRoombaSongChunks(events);\n return chunks[0] || null;\n }, []);\n\n const handleFileChange = async (event) => {\n const file = event.target.files?.[0] || null;\n stopPlayback();\n setMessage('');\n setParsedMidi(null);\n setSelectedFileName(file?.name || '');\n setSelectedPartIds([]);\n\n if (!file) return;\n\n try {\n const nextMidi = await parseMidiFile(file);\n setParsedMidi(nextMidi);\n const defaultParts = getDefaultSelectedPartIds(nextMidi.parts);\n setSelectedPartIds(defaultParts);\n setMessage(nextMidi.parts?.length ? 'Midi file loaded.' : 'Midi file loaded, but no playable parts were found.');\n } catch (err) {\n setMessage(err?.message || 'Failed to parse Midi file.');\n setSelectedFileName('');\n }\n };\n\n const handlePlayFile = () => {\n if (!songChunks.length) {\n setMessage('Choose at least one playable part first.');\n return;\n }\n if (!ownRoverId) {\n setMessage('Take control of your rover first.');\n return;\n }\n\n stopPlayback();\n setLiveEnabled(false);\n setStats({ sent: 0, dropped: 0 });\n setMessage('');\n setPlaybackState('playing');\n\n const runId = playbackRunRef.current + 1;\n playbackRunRef.current = runId;\n playbackStartedAtRef.current = getNow();\n playbackCursorMsRef.current = songChunks[0]?.startMs || 0;\n\n const scheduleNextChunk = (delayMs = 0) => {\n if (playbackRunRef.current !== runId) return;\n const timer = setTimeout(() => {\n if (playbackRunRef.current !== runId) return;\n const chunk = buildNextPlaybackChunk();\n if (!chunk) {\n setPlaybackState('idle');\n setMessage(`Playback finished in ${Math.round((getNow() - playbackStartedAtRef.current) / 1000)}s.`);\n return;\n }\n\n const sourceGapMs = Math.max(0, chunk.startMs - playbackCursorMsRef.current);\n if (sourceGapMs > 0) {\n /*\n Real rests are handled as source-time cursor advances. The follow-up\n timer recomputes the next chunk from the latest channel/mode\n settings instead of committing to a chunk before the silence has\n elapsed.\n */\n playbackCursorMsRef.current = chunk.startMs;\n scheduleNextChunk(sourceGapMs);\n return;\n }\n\n sendBeeperChunk(chunk);\n playbackCursorMsRef.current = Math.max(playbackCursorMsRef.current + 0.5, Number(chunk.sourceEndMs) || playbackCursorMsRef.current);\n scheduleNextChunk((Number(chunk.durationMs) || 0) + BEEPER_READY_GUARD_MS);\n }, Math.max(0, delayMs));\n playbackTimersRef.current.push(timer);\n };\n\n /*\n Chunks are scheduled one boundary at a time. Each boundary rebuilds the\n next phrase from the latest selected channels and playback settings, so\n changes made while the current Roomba song is playing affect the next\n song command without trying to interrupt the one already in the beeper.\n */\n scheduleNextChunk(0);\n };\n\n const refreshMidiInputs = useCallback((access) => {\n const inputs = Array.from(access?.inputs?.values?.() || []).map((input) => ({\n id: input.id,\n name: input.name || input.manufacturer || 'Midi input',\n state: input.state || 'connected',\n }));\n setMidiInputs(inputs);\n setSelectedInputId((current) => {\n if (current && inputs.some((input) => input.id === current)) return current;\n return inputs[0]?.id || LIVE_DEVICE_EMPTY_VALUE;\n });\n }, []);\n\n const requestMidiAccess = useCallback(async () => {\n if (!midiSupported) {\n setMidiAccessState('unsupported');\n setMessage('This browser does not support live Midi input.');\n return;\n }\n\n try {\n setMidiAccessState('requesting');\n const access = await navigator.requestMIDIAccess({ sysex: false });\n midiAccessRef.current = access;\n refreshMidiInputs(access);\n access.onstatechange = () => refreshMidiInputs(access);\n setMidiAccessState('ready');\n setMessage('Live Midi input ready.');\n } catch (err) {\n setMidiAccessState('error');\n setMessage(err?.message || 'Midi access was denied.');\n }\n }, [midiSupported, refreshMidiInputs]);\n\n useEffect(() => {\n if (!liveEnabled || !selectedInput || !midiAccessRef.current) {\n if (activeInputRef.current) {\n activeInputRef.current.onmidimessage = null;\n activeInputRef.current = null;\n }\n return undefined;\n }\n\n const input = midiAccessRef.current.inputs.get(selectedInput.id);\n if (!input) return undefined;\n\n const handleMidiMessage = (event) => {\n const [status, noteNumber, velocity] = Array.from(event.data || []);\n const command = status & 0xf0;\n const isNoteOn = command === 0x90 && velocity > 0;\n if (!isNoteOn) return;\n\n /*\n Live note-off messages cannot stop the Roomba beeper, so live mode uses\n fixed short notes. Users can tune that length instead of expecting MIDI\n keyboard release timing to behave like a synthesizer.\n */\n sendBeeperNote({\n note: noteNumber,\n duration: liveNoteTicks,\n source: 'live',\n });\n };\n\n if (activeInputRef.current && activeInputRef.current !== input) {\n activeInputRef.current.onmidimessage = null;\n }\n input.onmidimessage = handleMidiMessage;\n activeInputRef.current = input;\n\n return () => {\n if (input.onmidimessage === handleMidiMessage) {\n input.onmidimessage = null;\n }\n };\n }, [liveEnabled, liveNoteTicks, selectedInput, sendBeeperNote]);\n\n useEffect(\n () => () => {\n /*\n The user-facing stop handler updates React state, but unmount cleanup\n should only tear down external work. Incrementing the run id cancels any\n late timer callback without asking React to render a card that is going\n away.\n */\n playbackRunRef.current += 1;\n clearPlaybackTimers();\n if (activeInputRef.current) {\n activeInputRef.current.onmidimessage = null;\n }\n if (midiAccessRef.current) {\n midiAccessRef.current.onstatechange = null;\n }\n },\n [clearPlaybackTimers],\n );\n\n return (\n \n
\n {/* The file and live-input workspaces follow this card's width. A wide\n viewport must not force them beside each other inside a sidebar. */}\n
\n
\n
\n

File playback

\n \n\n
\n Parts\n
\n \n \n \n \n
\n {playableParts.length ? (\n
\n
\n {playableParts.map((part) => {\n const checked = selectedPartSet.has(String(part.id));\n return (\n \n \n togglePart(part.id)}\n />\n {part.label}\n \n \n {part.isPercussion ? 'drums' : `${part.noteCount} notes`}\n \n \n );\n })}\n
\n
\n ) : (\n
No playable parts
\n )}\n \n
\n\n \n\n
\n Playback shape\n
\n \n \n \n \n
\n
\n\n
\n {selectedFileName ? (\n
{selectedFileName}
\n ) : (\n
No Midi file selected
\n )}\n
\n\n
\n \n Play file\n \n \n Stop\n \n
\n
\n
\n\n
\n
\n

Live input

\n
\n \n {midiAccessState === 'ready' ? 'Refresh devices' : 'Enable Midi'}\n \n
\n\n \n\n \n\n \n
\n
\n
\n\n
\n
\n

Beeper status

\n {/* Status stays legible as a short vertical list in slim cards, then\n returns to the normal six-value strip as soon as 28rem is available. */}\n
\n \n \n 0} />\n \n 0} />\n \n
\n {message ?
{message}
: null}\n
\n
\n
\n
\n );\n}\n","// Vip Verification Card\n// Purpose: Defines the Vip Verification Card module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useState } from 'react';\nimport NicknameForm from '../NicknameForm/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { flowWrapClass, innerFlowClass, fieldClass } from './constants.js';\n\nexport default function VipVerificationCard({\n pendingRequestId,\n currentStoredKey,\n nickname,\n requestVerification,\n applyIdentityKey,\n onMessage,\n fullWidth = false,\n}) {\n const [requestFlowStep, setRequestFlowStep] = useState(0);\n const [requestKeyInput, setRequestKeyInput] = useState('');\n const [confirmNickname, setConfirmNickname] = useState(false);\n const [working, setWorking] = useState(false);\n\n const beginRequestFlow = () => {\n setRequestFlowStep(1);\n setRequestKeyInput(currentStoredKey);\n setConfirmNickname(false);\n onMessage?.('');\n };\n\n const cancelRequestFlow = () => {\n setRequestFlowStep(0);\n setConfirmNickname(false);\n };\n\n const handleRequestSubmit = async (event) => {\n event.preventDefault();\n if (!confirmNickname) {\n onMessage?.('Please confirm your nickname agreement before sending.');\n return;\n }\n if (requestFlowStep < 3) {\n onMessage?.('Complete all request steps before sending.');\n return;\n }\n setWorking(true);\n onMessage?.('');\n try {\n const applied = await applyIdentityKey(requestKeyInput);\n await requestVerification?.();\n setRequestKeyInput(applied);\n setRequestFlowStep(0);\n setConfirmNickname(false);\n onMessage?.('Verification request sent to lockdown admins.');\n } catch (err) {\n onMessage?.(err.message || 'Failed to submit request.');\n } finally {\n setWorking(false);\n }\n };\n\n const wrapClass = fullWidth ? 'w-full' : flowWrapClass;\n\n if (pendingRequestId) {\n return (\n \n
Verification request pending: {pendingRequestId}
\n
\n );\n }\n\n if (requestFlowStep === 0) {\n return (\n \n
\n \n
\n
\n );\n }\n\n return (\n \n
\n
\n

\n Step {requestFlowStep} of 3\n

\n\n {requestFlowStep === 1 ? (\n
\n

\n Confirm your nickname, which is used as part of the verification process. You can edit it here before requesting.\n

\n
\n \n
\n
\n Current nickname: {nickname || '(not set)'}\n
\n \n
\n setRequestFlowStep(2)}\n >\n Continue\n \n \n
\n
\n ) : null}\n\n {requestFlowStep === 2 ? (\n
\n

\n Save your identity key in a safe place. You can use it to restore your identity in another browser.\n

\n setRequestKeyInput(event.target.value.toLowerCase())}\n placeholder=\"Identity key for this request\"\n />\n
\n navigator.clipboard?.writeText(requestKeyInput)}\n >\n Copy Key\n \n setRequestFlowStep(3)}\n >\n Continue\n \n \n
\n
\n ) : null}\n\n {requestFlowStep === 3 ? (\n
\n

\n Final step: confirm and send your verification request.\n

\n setRequestKeyInput(event.target.value.toLowerCase())}\n placeholder=\"Identity key for this request\"\n />\n
\n \n \n
\n
\n ) : null}\n
\n
\n
\n );\n}\n","// Vip Identity Card\n// Purpose: Defines the Vip Identity Card module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useState } from 'react';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { fieldClass, flowWrapClass, innerFlowClass, maskKey } from './constants.js';\n\nexport default function VipIdentityCard({ currentStoredKey, applyIdentityKey, onMessage, fullWidth = false }) {\n const [restoreFlowStep, setRestoreFlowStep] = useState(0);\n const [restoreKeyInput, setRestoreKeyInput] = useState('');\n const [working, setWorking] = useState(false);\n\n const beginRestoreFlow = () => {\n setRestoreFlowStep(1);\n setRestoreKeyInput('');\n onMessage?.('');\n };\n\n const cancelRestoreFlow = () => {\n setRestoreFlowStep(0);\n setRestoreKeyInput('');\n };\n\n const handleRestoreSubmit = async (event) => {\n event.preventDefault();\n if (restoreFlowStep < 2) return;\n setWorking(true);\n onMessage?.('');\n try {\n await applyIdentityKey(restoreKeyInput);\n setRestoreFlowStep(0);\n setRestoreKeyInput('');\n onMessage?.('Identity key restored.');\n } catch (err) {\n onMessage?.(err.message || 'Failed to restore key.');\n } finally {\n setWorking(false);\n }\n };\n\n const wrapClass = fullWidth ? 'w-full' : flowWrapClass;\n\n return (\n \n
\n

Current: {maskKey(currentStoredKey) || 'not set yet'}

\n \n {restoreFlowStep === 0 ? (\n
\n navigator.clipboard?.writeText(currentStoredKey)}\n >\n Copy Key\n \n \n
\n ) : null}\n\n {restoreFlowStep === 1 ? (\n
\n

\n Restoring your key should only be done when needed. Use this to move your identity to another browser.\n

\n
\n \n \n
\n
\n ) : null}\n\n {restoreFlowStep === 2 ? (\n
\n setRestoreKeyInput(event.target.value.toLowerCase())}\n placeholder=\"Paste key to restore\"\n />\n
\n \n \n
\n \n ) : null}\n
\n
\n );\n}\n","// Vip Private Rover Access Card\n// Purpose: Defines the Vip Private Rover Access Card module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo, useState } from 'react';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { flowWrapClass, innerFlowClass } from './constants.js';\nimport RoverLabel from '../RoverLabel/index.jsx';\n\nexport default function VipPrivateRoverAccessCard({\n requestableRovers = [],\n pendingRequests = [],\n requestPrivateRoverAccess,\n onMessage,\n fullWidth = false,\n}) {\n const [pendingByRover, setPendingByRover] = useState({});\n const pendingMap = useMemo(() => {\n const next = new Map();\n (pendingRequests || []).forEach((entry) => {\n if (!entry?.roverId) return;\n next.set(String(entry.roverId), entry);\n });\n return next;\n }, [pendingRequests]);\n\n const wrapClass = fullWidth ? 'w-full' : flowWrapClass;\n\n const handleRequest = async (roverId) => {\n if (!roverId) return;\n setPendingByRover((prev) => ({ ...prev, [roverId]: true }));\n onMessage?.('');\n try {\n const response = await requestPrivateRoverAccess?.(roverId);\n if (response?.existing) {\n onMessage?.('You already have a pending request for that rover.');\n } else {\n onMessage?.('Private rover access request sent to lockdown admins.');\n }\n } catch (err) {\n onMessage?.(err.message || 'Failed to send request.');\n } finally {\n setPendingByRover((prev) => ({ ...prev, [roverId]: false }));\n }\n };\n\n return (\n \n
\n {requestableRovers.length === 0 ? (\n

No closed private rovers are available to request right now.

\n ) : (\n
\n {requestableRovers.map((rover) => {\n const roverId = String(rover.id);\n const inFlight = Boolean(pendingByRover[roverId]);\n const pending = pendingMap.get(roverId);\n return (\n
\n
\n

\n \n

\n

{roverId}

\n
\n {pending ? (\n \n Pending\n \n ) : (\n handleRequest(roverId)}\n disabled={inFlight}\n className=\"button-dark text-xs disabled:opacity-50\"\n >\n {inFlight ? 'Sending...' : 'Request'}\n \n )}\n
\n );\n })}\n
\n )}\n
\n
\n );\n}\n","// Vip Profile Image Card\n// Purpose: Lets verified VIP users persist a profile image URL used for chat message avatars.\n// Scope: Owns local URL validation UX and writes to the existing profile settings namespace.\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { fieldClass, flowWrapClass, innerFlowClass } from './constants.js';\n\nfunction normalizeHttpUrl(value) {\n const raw = String(value || '').trim();\n if (!raw) return '';\n try {\n const parsed = new URL(raw);\n const protocol = String(parsed.protocol || '').toLowerCase();\n if (protocol !== 'http:' && protocol !== 'https:') return '';\n return parsed.toString();\n } catch {\n return '';\n }\n}\n\nexport default function VipProfileImageCard({ isVerified = false, fullWidth = false, onMessage }) {\n const { value: profile, save: saveProfile } = useSettingsNamespace('profile', {\n nickname: '',\n profileImageUrl: '',\n });\n const stored = String(profile?.profileImageUrl || '').trim();\n const [input, setInput] = useState(stored);\n const [working, setWorking] = useState(false);\n\n useEffect(() => {\n setInput(stored);\n }, [stored]);\n\n const normalizedInput = useMemo(() => normalizeHttpUrl(input), [input]);\n const hasUnsaved = String(input || '').trim() !== stored;\n const canSave = Boolean(isVerified && hasUnsaved && (normalizedInput || !String(input || '').trim()));\n const wrapClass = fullWidth ? 'w-full' : flowWrapClass;\n\n const handleSave = async (event) => {\n event.preventDefault();\n if (!isVerified) {\n onMessage?.('Verify your account before setting a profile image URL.');\n return;\n }\n setWorking(true);\n onMessage?.('');\n try {\n const next = normalizedInput || '';\n saveProfile((current) => ({ ...(current || {}), profileImageUrl: next }));\n onMessage?.(next ? 'Profile image URL saved.' : 'Profile image URL cleared.');\n } finally {\n setWorking(false);\n }\n };\n\n return (\n \n
\n

\n Verified users can set a custom avatar for chat and Discord bridge messages.\n

\n setInput(event.target.value)}\n disabled={!isVerified || working}\n />\n {!normalizedInput && String(input || '').trim() ? (\n

Enter a valid http/https image URL.

\n ) : null}\n
\n \n setInput('')}\n >\n Clear\n \n
\n \n
\n );\n}\n","// Vip Panel\n// Purpose: Defines the Vip Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo, useState } from 'react';\nimport { useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { COOKIE_KEY_REGEX, flowWrapClass } from '../vip/constants.js';\nimport VipAudioUploadCard from '../vip/VipAudioUploadCard/index.jsx';\nimport VipMidiBeeperCard from '../vip/VipMidiBeeperCard/index.jsx';\nimport VipVerificationCard from '../vip/VipVerificationCard.jsx';\nimport VipIdentityCard from '../vip/VipIdentityCard.jsx';\nimport VipPrivateRoverAccessCard from '../vip/VipPrivateRoverAccessCard.jsx';\nimport VipProfileImageCard from '../vip/VipProfileImageCard.jsx';\n\nexport default function VipPanel() {\n const session = useSessionSelector((state) => state.session);\n const {\n identifySession,\n requestVerification,\n requestPrivateRoverAccess,\n playUploadedAudio,\n stopUploadedAudio,\n startMicWhip,\n readyMicWhip,\n stopMicWhip,\n } = useSessionActions();\n const { value: identity, save: saveIdentity } = useSettingsNamespace('identity', { cookieUserId: '' });\n const { value: profile } = useSettingsNamespace('profile', { nickname: '' });\n\n const currentStoredKey = useMemo(() => (identity?.cookieUserId || '').trim(), [identity?.cookieUserId]);\n const nickname = (profile?.nickname || '').trim();\n const isVerified = Boolean(session?.isVerified);\n const pendingRequestId = session?.verification?.pendingRequestId || null;\n const requestablePrivateRovers = session?.privateRoverAccess?.requestableRovers || [];\n const pendingPrivateRoverRequests = session?.privateRoverAccess?.pendingRequests || [];\n const ownRoverId = String(session?.assignment?.roverId || '').trim();\n const [message, setMessage] = useState('');\n\n const applyIdentityKey = async (nextRaw) => {\n const next = String(nextRaw || '').trim().toLowerCase();\n if (!next) {\n throw new Error('Identity key required.');\n }\n if (!COOKIE_KEY_REGEX.test(next)) {\n throw new Error('Identity key must match format: cu_ + 32 lowercase hex chars.');\n }\n saveIdentity((current) => ({ ...(current || {}), cookieUserId: next }));\n await identifySession({ cookieUserId: next, nickname });\n return next;\n };\n\n // VipPanel owns its outer grid rather than placing it inside one CardFrame,\n // so it establishes its own query boundary for the same width-aware behavior.\n return (\n
\n
\n {!isVerified ? (\n
\n \n
\n ) : null}\n\n
\n {isVerified ? (\n
\n \n \n
\n ) : (\n
\n
\n Verify your account to unlock VIP features.\n
\n
\n )}\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n {message ? (\n
\n

{message}

\n
\n ) : null}\n
\n );\n}\n","// Driver VIP Tab\n// Purpose: Owns the shared keep-mounted VIP panel lifecycle.\nimport { TabPanel, useTabIsActive } from '../../../../../components/Tabs/index.jsx';\nimport VipPanel from '../../../../../components/VipPanel/index.jsx';\nimport { useDriverLayout } from '../../../DriverLayoutContext.jsx';\n\nexport default function VipTab() {\n const layout = useDriverLayout();\n const isActive = useTabIsActive('vip');\n return (\n \n \n \n );\n}\n","// Driver VIP Tab Button\n// Purpose: Keeps verification and active-audio status identical across every driver layout.\nimport { Tab } from '../../../../../components/Tabs/index.jsx';\nimport { useControlSelector } from '../../../../../controls/index.js';\nimport { useSessionSelector } from '../../../../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../../../../settings/index.js';\n\nexport default function VipTabButton({ compact = false }) {\n const isVerified = useSessionSelector((state) => Boolean(state.session?.isVerified));\n const ownRoverId = useSessionSelector((state) => String(state.session?.assignment?.roverId || '').trim());\n const ownAudioForward = useSessionSelector((state) => (\n ownRoverId ? state.session?.audioForward?.[ownRoverId] || null : null\n ));\n const pttActive = useControlSelector((control) => Boolean(control.state.mic?.pttActive));\n const { value: vipAudio } = useSettingsNamespace('vipAudio', { openMicEnabled: false, pttMode: 'live' });\n const clipMode = vipAudio?.pttMode === 'clip';\n\n // Pink represents a live microphone path, while green means an uploaded clip\n // is actively forwarding. Keeping these conditions here prevents desktop and\n // mobile selectors from drifting away from the mounted VIP audio lifecycle.\n const micActive = Boolean(\n ownRoverId\n && isVerified\n && (clipMode ? pttActive : (vipAudio?.openMicEnabled || pttActive)),\n );\n const clipPlaying = Boolean(\n ownRoverId\n && isVerified\n && clipMode\n && ownAudioForward?.source === 'upload'\n && ownAudioForward?.state === 'playing',\n );\n const dotSizeClass = compact ? 'h-1.5 w-1.5' : 'h-3 w-3';\n const gapClass = compact ? 'gap-0.5' : 'gap-2';\n\n return (\n \n \n VIP\n \n \n \n );\n}\n","// Help Panel\n// Purpose: Defines the Help Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useControlSelector } from '../../controls/index.js';\nimport CardFrame from '../CardFrame/index.jsx';\nimport HelpContentView from '../HelpContentView/index.jsx';\n\nexport default function HelpPanel({ layout, onOpenOverlay }) {\n const keymap = useControlSelector((control) => control.state.keymap);\n\n const actions = (\n \n Open full help\n \n );\n\n return (\n \n \n \n );\n}\n","// Driver Help Tab\n// Purpose: Owns the shared driver help panel placement.\nimport { TabPanel } from '../../../../../components/Tabs/index.jsx';\nimport HelpPanel from '../../../../../components/HelpPanel/index.jsx';\nimport { useOpenDriverHelp } from '../../../DriverLayoutContext.jsx';\nimport { useDriverLayout } from '../../../DriverLayoutContext.jsx';\n\nexport default function HelpTab() {\n const openHelp = useOpenDriverHelp();\n const layout = useDriverLayout();\n return (\n \n \n \n );\n}\n","// Rover Roster\n// Purpose: Defines the Rover Roster module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport RoverLabel from '../RoverLabel/index.jsx';\n\nfunction classNames(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nfunction formatBattery(rover) {\n const percent = rover?.batteryState?.percentDisplay;\n if (percent == null) return '--';\n return `${percent}%`;\n}\n\nfunction batteryClass(rover) {\n if (!rover?.batteryState) return 'text-slate-400';\n if (rover.batteryState.urgentActive) return 'text-red-400';\n if (rover.batteryState.warnActive) return 'text-amber-300';\n return 'text-emerald-300';\n}\n\nexport default function RoverRoster({\n title,\n roster = [],\n emptyText = 'No roster data.',\n renderActions = null,\n}) {\n return (\n
\n {title &&

{title}

}\n {roster.length === 0 ? (\n

{emptyText}

\n ) : (\n
    \n {roster.map((rover) => {\n const isPrivateOpen = Boolean(rover?.private?.enabled && rover?.private?.open);\n const isLocked = Boolean(rover?.locked);\n return (\n \n
    \n

    \n \n

    \n

    \n {rover.locked ? 'locked' : 'free'}\n {rover.lockReason && {rover.lockReason}}\n \n Battery {formatBattery(rover)}\n \n

    \n
    \n {renderActions ? renderActions(rover) : null}\n \n );\n })}\n
\n )}\n
\n );\n}\n","// llm Helpers\n// Purpose: Defines the llm Helpers module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport function buildLlmLargeIndicatorFromState(state) {\n const runtime = state?.runtime || {};\n const output = state?.output || {};\n const errors = state?.errors || {};\n if (runtime.inFlight) {\n return {\n label: 'IN FLIGHT',\n detail: runtime.reason || 'Generating commentary now',\n className: 'border-amber-400/60 bg-amber-700/20 text-amber-200',\n };\n }\n if (runtime.outcome === 'posted') {\n return {\n label: 'POSTED',\n detail: output.posted ? `Last: ${output.posted}` : 'Commentary posted',\n className: 'border-emerald-400/60 bg-emerald-700/20 text-emerald-200',\n };\n }\n if (runtime.outcome === 'skipped') {\n return {\n label: 'SKIPPED',\n detail: runtime.reason || 'Model chose to skip',\n className: 'border-slate-400/60 bg-slate-700/30 text-slate-200',\n };\n }\n if (runtime.outcome === 'failed') {\n return {\n label: 'FAILED',\n detail: errors.message || runtime.reason || 'Tick failed',\n className: 'border-red-400/60 bg-red-700/20 text-red-200',\n };\n }\n return {\n label: runtime.running ? 'IDLE' : 'STOPPED',\n detail: runtime.reason || 'Waiting for next tick',\n className: 'border-sky-400/50 bg-sky-700/20 text-sky-200',\n };\n}\n\nexport function buildLlmConversationRowsFromMessages(modelMessages, rawOutput) {\n const now = Date.now();\n const messages = Array.isArray(modelMessages) ? modelMessages : [];\n const rows = messages.map((entry, index) => {\n const role = String(entry?.role || '').toLowerCase();\n const content =\n typeof entry?.content === 'string' ? entry.content : JSON.stringify(entry?.content ?? null, null, 2);\n const nickname =\n role === 'system'\n ? 'LLM System'\n : role === 'assistant'\n ? 'LLM Context'\n : role === 'user'\n ? 'LLM Input'\n : 'LLM Message';\n return {\n id: `llm-msg-${index}`,\n message: {\n ts: now + index,\n nickname,\n text: content,\n role: 'spectator',\n bot: role === 'system',\n },\n };\n });\n if (rawOutput != null) {\n const raw = String(rawOutput);\n rows.push({\n id: 'llm-output',\n message: {\n ts: now + rows.length + 1,\n nickname: 'LLM Output',\n text: raw.trim() ? raw : '',\n role: 'spectator',\n bot: true,\n },\n });\n }\n return rows;\n}\n","// Llm Commentary Panel\n// Purpose: Defines the Llm Commentary Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useState } from 'react';\nimport ChatMessageRow from '../ChatMessageRow/index.jsx';\nimport { buildLlmLargeIndicatorFromState, buildLlmConversationRowsFromMessages } from './llmHelpers.js';\n\nexport default function LlmCommentaryPanel({ state, onClearHistory, clearingHistory }) {\n const [selectedRunId, setSelectedRunId] = useState(null);\n if (!state) {\n return (\n
\n
LLM Commentary
\n
No status received yet.
\n
\n );\n }\n const runtime = state.runtime || {};\n const counters = state.counters || {};\n const timings = state.timings || {};\n const input = state.input || {};\n const output = state.output || {};\n const errors = state.errors || {};\n const history = Array.isArray(state.history) ? state.history : [];\n const selectedRun =\n history.find((run) => run.runId === selectedRunId) || (history.length ? history[history.length - 1] : null);\n const largeIndicator = buildLlmLargeIndicatorFromState(state);\n const conversationRows = buildLlmConversationRowsFromMessages(input.modelMessages, output.raw);\n const statPills = [\n { label: 'running', value: runtime.running ? 'yes' : 'no' },\n { label: 'in flight', value: runtime.inFlight ? 'yes' : 'no' },\n { label: 'phase', value: runtime.phase || '--' },\n { label: 'run id', value: runtime.currentRunId ?? '--' },\n { label: 'tick count', value: runtime.tickCount ?? 0 },\n {\n label: 'last tick',\n value: runtime.lastTickAt ? new Date(runtime.lastTickAt).toLocaleString() : 'never',\n },\n {\n label: 'next run',\n value: runtime.nextRunAt ? new Date(runtime.nextRunAt).toLocaleString() : 'n/a',\n },\n { label: 'outcome', value: runtime.outcome || '--' },\n { label: 'reason', value: runtime.reason || '--' },\n { label: 'skip streak', value: counters.skipStreak ?? 0 },\n { label: 'clear count', value: counters.clearCount ?? 0 },\n { label: 'last gen', value: timings.lastGenerationMs != null ? `${timings.lastGenerationMs} ms` : '--' },\n { label: 'avg gen', value: timings.avgGenerationMs != null ? `${timings.avgGenerationMs} ms` : '--' },\n { label: 'gen count', value: timings.generationCount ?? 0 },\n { label: 'prompt chars', value: counters.promptChars ?? 0 },\n { label: 'active drivers', value: counters.snapshotSummary?.activeDrivers ?? 0 },\n { label: 'snapshot rovers', value: counters.snapshotSummary?.rovers ?? 0 },\n { label: 'snapshot chat', value: counters.snapshotSummary?.chatMessages ?? 0 },\n ];\n\n return (\n
\n
LLM Commentary
\n
\n \n {clearingHistory ? 'Clearing...' : 'Clear LLM History'}\n \n
\n
\n
{largeIndicator.label}
\n
{largeIndicator.detail}
\n
\n
\n {statPills.map((pill) => (\n \n {pill.label}: {pill.value}\n \n ))}\n
\n {errors.message ? (\n
Error: {errors.message}
\n ) : null}\n {errors.details ? (\n
\n Failure details\n
\n            {JSON.stringify(errors.details, null, 2)}\n          
\n
\n ) : null}\n {output.generated ? (\n
Generated: {output.generated}
\n ) : null}\n {output.posted ? (\n
Posted: {output.posted}
\n ) : null}\n
\n
\n
Live Input Conversation
\n
\n {conversationRows.length ? (\n conversationRows.map((row) => )\n ) : (\n
No model conversation captured yet.
\n )}\n
\n
\n
\n
Output + Error
\n
\n
Raw output: {output.raw?.trim() ? output.raw : ''}
\n
Posted: {output.posted || ''}
\n
Output at: {output.modelOutputAt ? new Date(output.modelOutputAt).toLocaleString() : 'n/a'}
\n
Failed at: {errors.failedAt ? new Date(errors.failedAt).toLocaleString() : 'n/a'}
\n
\n
\n
\n
\n Full Monitor Payload\n
\n          {JSON.stringify(state, null, 2)}\n        
\n
\n
\n
Recent Runs
\n
\n {history.length ? (\n history\n .slice()\n .reverse()\n .map((run) => (\n setSelectedRunId(run.runId)}\n className={`w-full text-left surface ${\n selectedRun?.runId === run.runId ? 'border border-sky-400/50' : ''\n }`}\n >\n #{run.runId}{' '}\n {run.outcome || run.phase || '--'}{' '}\n {run.durationMs != null ? `${run.durationMs}ms` : '--'}{' '}\n {run.reason || ''}\n \n ))\n ) : (\n
No runs recorded yet.
\n )}\n
\n
\n {selectedRun ? (\n
\n Run #{selectedRun.runId} details\n
\n            {JSON.stringify(selectedRun, null, 2)}\n          
\n
\n ) : null}\n
\n );\n}\n","import { useState } from 'react';\n\nexport default function OverseerControlPanel({ state, onClearHistory, clearingHistory }) {\n const [showPayload, setShowPayload] = useState(false);\n if (!state) {\n return (\n
\n
Overseer Control
\n
No status received yet.
\n
\n );\n }\n\n const runtime = state.runtime || {};\n const cfg = state.config || {};\n const output = state.output || {};\n const timings = state.timings || {};\n const input = state.input || {};\n const errors = state.errors || {};\n const renderModelMessages = () => {\n const messages = Array.isArray(input.modelMessages) ? input.modelMessages : [];\n if (!messages.length) return '';\n return messages\n .map((msg, idx) => {\n const role = String(msg?.role || 'unknown').toUpperCase();\n const content = String(msg?.content || '');\n return `#${idx + 1} ${role}\\n${content}`;\n })\n .join('\\n\\n----------------------------------------\\n\\n');\n };\n\n return (\n
\n
Overseer Control
\n
\n \n {clearingHistory ? 'Clearing...' : 'Clear Overseer History'}\n \n
\n
\n running: {runtime.running ? 'yes' : 'no'}\n phase: {runtime.phase || '--'}\n tick: {runtime.tickCount ?? 0}\n trigger: {runtime.lastTriggerReason || '--'}\n name: {cfg.name || '--'}\n model: {cfg.model || '--'}\n observeOnly: {cfg.observeOnly ? 'yes' : 'no'}\n decision: {output.normalized || '--'}\n outcome: {output.outcome || '--'}\n reason: {output.reason || '--'}\n last gen: {timings.lastGenerationMs != null ? `${timings.lastGenerationMs}ms` : '--'}\n
\n\n
\n Latest Context\n
\n          {input.stateUpdate || ''}\n        
\n
\n\n
\n Exact Model Input (messages[])\n
\n          {renderModelMessages()}\n        
\n
\n\n
\n Exact System Prompt\n
\n          {input.systemPrompt || ''}\n        
\n
\n\n
\n Exact Transcript Rows\n
\n          {JSON.stringify(input.transcript || [], null, 2)}\n        
\n
\n\n
\n Tool Availability\n
\n          {JSON.stringify({ available: input.availableTools, blocked: input.blockedTools }, null, 2)}\n        
\n
\n\n
\n Exact Model Output\n
\n          {output.raw || ''}\n        
\n
\n\n
\n Live Tool Calls\n
\n          {JSON.stringify(output.liveToolCalls || [], null, 2)}\n        
\n
\n\n
\n
Normalized decision: {output.normalized || '--'}
\n
Model input at: {input.modelInputAt ? new Date(input.modelInputAt).toLocaleString() : 'n/a'}
\n
Model output at: {output.outputAt ? new Date(output.outputAt).toLocaleString() : 'n/a'}
\n
\n\n {errors.message ?
Error: {errors.message}
: null}\n\n
\n Recent Runs\n
\n          {JSON.stringify(state.history || [], null, 2)}\n        
\n
\n\n \n {showPayload ? (\n
{JSON.stringify(state, null, 2)}
\n ) : null}\n
\n );\n}\n","// Replay Snapshot Health\n// Purpose: Defines the Replay Snapshot Health module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport RoverLabel from '../RoverLabel/index.jsx';\n\nexport default function ReplaySnapshotHealth({ health, roster = [] }) {\n if (!health) return null;\n const replay = health.replay || { sources: [], readyCount: 0, totalCount: 0 };\n const snapshots = health.snapshots || { rovers: [], rooms: [] };\n const roverColorFor = (id) => roster.find((entry) => String(entry.id) === String(id))?.color || null;\n const replaySummary = `${replay.readyCount}/${replay.totalCount} sources ready`;\n const roverStale = snapshots.rovers.filter((entry) => entry.stale).length;\n const roomStale = snapshots.rooms.filter((entry) => entry.stale).length;\n return (\n
\n
Health
\n
\n
\n Replay segments\n {replaySummary}\n
\n
\n Rover snapshots\n \n {snapshots.rovers.length - roverStale}/{snapshots.rovers.length} ok\n \n
\n
\n Room cameras\n \n {snapshots.rooms.length - roomStale}/{snapshots.rooms.length} ok\n \n
\n
\n
\n {replay.sources.map((source) => (\n
\n {source.type === 'rover' ? (\n \n ) : (\n {source.label}\n )}\n \n {source.recentCount}/{source.neededCount}\n \n
\n ))}\n
\n
\n {snapshots.rovers.map((entry) => (\n
\n \n {entry.stale ? 'stale' : 'ok'}\n
\n ))}\n
\n
\n {snapshots.rooms.map((entry) => (\n
\n {entry.name}\n \n {entry.error ? 'error' : entry.stale ? 'stale' : 'ok'}\n \n
\n ))}\n
\n
\n );\n}\n","// Admin Ip Log Panel\n// Purpose: Defines the Admin Ip Log Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport CardFrame from '../CardFrame/index.jsx';\n\nexport default function AdminIpLogPanel({ entries }) {\n const logs = entries || [];\n return (\n \n
\n {logs.length === 0 ? (\n

No admin log entries yet.

\n ) : (\n logs\n .slice()\n .reverse()\n .map((entry) => (\n
\n {entry.ts ? new Date(entry.ts).toLocaleTimeString() : '--'}{' '}\n {entry.label && [{entry.label}]}{' '}\n {entry.message}{' '}\n {entry.ip && {entry.ip}}{' '}\n {entry.meta && {JSON.stringify(entry.meta)}}\n
\n ))\n )}\n
\n

Admin-only log stream; IPs never appear in user data.

\n
\n );\n}\n","// Admin Panel Content\n// Purpose: Defines the Admin Panel Content module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSession } from '../../context/SessionContext.jsx';\nimport RoverRoster from '../RoverRoster/index.jsx';\nimport LlmCommentaryPanel from './LlmCommentaryPanel.jsx';\nimport OverseerControlPanel from './OverseerControlPanel.jsx';\nimport ReplaySnapshotHealth from './ReplaySnapshotHealth.jsx';\nimport AdminIpLogPanel from './AdminIpLogPanel.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\n\nconst MODES = [\n { key: 'open', label: 'Open' },\n { key: 'turns', label: 'Turns' },\n { key: 'admin', label: 'Admin' },\n { key: 'lockdown', label: 'Lockdown' },\n];\n\n// These are the physical rover gain channels. Personal settings remain signed\n// percentages and never replace these server-owned base multipliers.\nconst GAIN_FIELDS = [\n { key: 'hornGain', label: 'Horn gain' },\n { key: 'ttsGain', label: 'TTS gain' },\n { key: 'forwardGain', label: 'Forward gain' },\n];\n\nfunction normalizeGainDraft(source, fallback) {\n const draft = {};\n GAIN_FIELDS.forEach(({ key }) => {\n draft[key] = Number.isFinite(source?.[key]) ? source[key] : fallback[key];\n });\n return draft;\n}\n\nfunction GainSlider({ label, value, onChange }) {\n return (\n \n );\n}\n\nfunction buildPrivateSafetyDraft(rover) {\n const safety = rover?.private?.safety || {};\n return {\n speedLimitEnabled: Boolean(safety.speedLimitEnabled),\n speedLimitMaxWheelSpeed: Number.isFinite(safety.speedLimitMaxWheelSpeed)\n ? safety.speedLimitMaxWheelSpeed\n : 250,\n hardOvercurrentEnabled: Boolean(safety.hardOvercurrentEnabled),\n overcurrentStopMs: Number.isFinite(safety.overcurrentStopMs)\n ? safety.overcurrentStopMs\n : 300,\n hardBumpEnabled: Boolean(safety.hardBumpEnabled),\n bumpBackoffSpeed: Number.isFinite(safety.bumpBackoffSpeed)\n ? safety.bumpBackoffSpeed\n : 250,\n bumpBackoffMs: Number.isFinite(safety.bumpBackoffMs)\n ? safety.bumpBackoffMs\n : 350,\n cliffEnabled: Boolean(safety.cliffEnabled),\n cliffBackoffSpeed: Number.isFinite(safety.cliffBackoffSpeed)\n ? safety.cliffBackoffSpeed\n : 250,\n cliffBackoffMs: Number.isFinite(safety.cliffBackoffMs)\n ? safety.cliffBackoffMs\n : 500,\n // Virtual wall is default-on for private rovers. Older rover hellos will\n // not include this field, so the admin form mirrors the server default\n // instead of rendering an unchecked box that would accidentally disable it.\n virtualWallEnabled: safety.virtualWallEnabled == null ? true : Boolean(safety.virtualWallEnabled),\n virtualWallBackoffSpeed: Number.isFinite(safety.virtualWallBackoffSpeed)\n ? safety.virtualWallBackoffSpeed\n : 250,\n virtualWallBackoffMs: Number.isFinite(safety.virtualWallBackoffMs)\n ? safety.virtualWallBackoffMs\n : 500,\n triggerCooldownMs: Number.isFinite(safety.triggerCooldownMs)\n ? safety.triggerCooldownMs\n : 800,\n };\n}\n\nexport default function AdminPanelContent() {\n const {\n session,\n lockRover,\n setMode,\n requestControl,\n setGlobalObjective,\n setAdminReason,\n rebootRover,\n updateRover,\n updateAllRovers,\n setAudioLevels,\n setPersonalAudioAdjustmentRange,\n setPrivateSafety,\n llmControl,\n overseerControl,\n adminLogs,\n llmCommentaryState,\n overseerControlState,\n } = useSession();\n const roster = useMemo(() => session?.roster ?? [], [session?.roster]);\n const [lockStates, setLockStates] = useState({});\n const [rebootStates, setRebootStates] = useState({});\n const [updateStates, setUpdateStates] = useState({});\n const [clearingLlmHistory, setClearingLlmHistory] = useState(false);\n const [clearingOverseerHistory, setClearingOverseerHistory] = useState(false);\n const health = session?.health || null;\n const currentGoal = session?.globalObjective?.text || '';\n const goalUpdatedAt = session?.globalObjective?.updatedAt || null;\n const [goalDraft, setGoalDraft] = useState(currentGoal);\n const currentReason = session?.adminReason?.text || '';\n const reasonUpdatedAt = session?.adminReason?.updatedAt || null;\n const [reasonDraft, setReasonDraft] = useState(currentReason);\n const currentAudioLevels = session?.audioLevels || {};\n const [audioLevelDraft, setAudioLevelDraft] = useState(\n () => normalizeGainDraft(currentAudioLevels, { hornGain: 1, ttsGain: 1, forwardGain: 1 }),\n );\n const [maxAdjustmentDraft, setMaxAdjustmentDraft] = useState(\n () => Number(currentAudioLevels.maxPersonalAdjustmentPercent) || 0,\n );\n const [privateSafetyDrafts, setPrivateSafetyDrafts] = useState({});\n const [privateSafetyDirty, setPrivateSafetyDirty] = useState({});\n\n const isAdmin =\n session?.role === 'admin' ||\n session?.role === 'lockdown';\n const isLockdownAdmin = session?.role === 'lockdown';\n\n const currentMode = session?.mode ?? 'open';\n\n const handleLockToggle = async (roverId, locked) => {\n try {\n await lockRover(roverId, locked);\n setLockStates((prev) => ({ ...prev, [roverId]: locked }));\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleModeChange = async (event) => {\n const mode = event.target.value;\n try {\n await setMode(mode);\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleForceControl = async (roverId) => {\n try {\n await requestControl(roverId, { force: true });\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleReboot = async (rover) => {\n if (!rover?.id) return;\n const ok = window.confirm(`Reboot rover \"${rover.name || rover.id}\" now?`);\n if (!ok) return;\n setRebootStates((prev) => ({ ...prev, [rover.id]: true }));\n try {\n await rebootRover(rover.id);\n } catch (err) {\n alert(err.message);\n } finally {\n setRebootStates((prev) => ({ ...prev, [rover.id]: false }));\n }\n };\n\n const handleUpdate = async (rover) => {\n if (!rover?.id) return;\n const ok = window.confirm(\n `Update rover \"${rover.name || rover.id}\" now? The rover will git pull the repo, run the roverd installer, and may disconnect while services restart.`,\n );\n if (!ok) return;\n setUpdateStates((prev) => ({ ...prev, [rover.id]: true }));\n try {\n // The rover acknowledges once the privileged self-update helper has been\n // launched, not when the full install finishes. That is deliberate: a\n // successful installer run restarts roverd, so waiting for completion over\n // the same websocket would make the button look failed even when the\n // update is doing exactly what it should.\n await updateRover(rover.id);\n } catch (err) {\n alert(err.message);\n } finally {\n setUpdateStates((prev) => ({ ...prev, [rover.id]: false }));\n }\n };\n\n const handleUpdateAll = async () => {\n const roverCount = roster.filter((rover) => rover?.id).length;\n if (roverCount === 0) return;\n\n const ok = window.confirm(\n `Update all ${roverCount} rover${roverCount === 1 ? '' : 's'} now? Each rover will run its self-update and reboot if the update starts successfully.`,\n );\n if (!ok) return;\n\n try {\n // The server owns the fan-out because it has the authoritative online\n // rover map and can enforce admin privileges once before issuing the\n // existing per-rover update command to every connected rover.\n const result = await updateAllRovers();\n if (result?.failed?.length) {\n alert(`Update requested for ${result.updated?.length || 0} rover(s). ${result.failed.length} rover(s) failed to queue.`);\n }\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleClearLlmHistory = async () => {\n const ok = window.confirm(\n 'Clear LLM commentary history now? This resets chat context, bot memory, and rover activity metrics for narration.',\n );\n if (!ok) return;\n setClearingLlmHistory(true);\n try {\n await llmControl('clearHistory');\n } catch (err) {\n alert(err.message);\n } finally {\n setClearingLlmHistory(false);\n }\n };\n\n const handleClearOverseerHistory = async () => {\n const ok = window.confirm('Clear Overseer Control history now?');\n if (!ok) return;\n setClearingOverseerHistory(true);\n try {\n await overseerControl('clearHistory');\n } catch (err) {\n alert(err.message);\n } finally {\n setClearingOverseerHistory(false);\n }\n };\n\n const handleGoalSave = async () => {\n try {\n await setGlobalObjective(goalDraft);\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleGoalClear = async () => {\n try {\n await setGlobalObjective(null);\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleReasonSave = async () => {\n try {\n await setAdminReason(reasonDraft);\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleReasonClear = async () => {\n try {\n await setAdminReason(null);\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleAudioLevelDraft = (key) => (event) => {\n const next = Number(event.target.value);\n setAudioLevelDraft((current) => ({ ...(current || {}), [key]: Number.isFinite(next) ? next : 1 }));\n };\n\n const handleAudioLevelsSave = async () => {\n try {\n await setAudioLevels(audioLevelDraft);\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handlePersonalAdjustmentRangeSave = async () => {\n try {\n await setPersonalAudioAdjustmentRange(maxAdjustmentDraft);\n } catch (err) {\n alert(err.message);\n }\n };\n\n const handleTestRewardOverlay = async () => {\n window.dispatchEvent(\n new CustomEvent('buttonBox:rewardRunLocalTest', {\n detail: {\n rewardName: 'Admin Mode',\n count: 1000,\n goal: 1000,\n },\n }),\n );\n };\n\n useEffect(() => {\n setGoalDraft(currentGoal);\n }, [currentGoal]);\n\n useEffect(() => {\n setReasonDraft(currentReason);\n }, [currentReason]);\n\n useEffect(() => {\n setAudioLevelDraft(normalizeGainDraft(currentAudioLevels, { hornGain: 1, ttsGain: 1, forwardGain: 1 }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentAudioLevels.forwardGain, currentAudioLevels.hornGain, currentAudioLevels.ttsGain]);\n\n useEffect(() => {\n setMaxAdjustmentDraft(Number(currentAudioLevels.maxPersonalAdjustmentPercent) || 0);\n }, [currentAudioLevels.maxPersonalAdjustmentPercent]);\n\n\n useEffect(() => {\n setPrivateSafetyDrafts((currentDrafts) => {\n const next = {};\n (roster || []).forEach((rover) => {\n if (!rover?.private?.enabled) return;\n // Session syncs can arrive while an admin is focused in one of these\n // inputs. Preserve that rover's local draft once touched; otherwise the\n // server roster remains the source of truth for newly connected rovers\n // and for rovers whose form is not being edited.\n next[rover.id] = privateSafetyDirty?.[rover.id]\n ? currentDrafts?.[rover.id] || buildPrivateSafetyDraft(rover)\n : buildPrivateSafetyDraft(rover);\n });\n return next;\n });\n }, [privateSafetyDirty, roster]);\n\n const lockMap = useMemo(() => {\n const map = {};\n roster.forEach((rover) => {\n map[rover.id] = lockStates[rover.id] ?? rover.locked;\n });\n return map;\n }, [roster, lockStates]);\n\n const updatePrivateSafetyDraft = (roverId, patch = {}) => {\n setPrivateSafetyDrafts((current) => ({\n ...(current || {}),\n [roverId]: { ...(current?.[roverId] || {}), ...(patch || {}) },\n }));\n // Mark the whole rover draft dirty rather than individual fields. The form\n // is saved as one object, so protecting it as one unit avoids partial\n // server refreshes that mix old roster values with the user's unsaved edit.\n setPrivateSafetyDirty((current) => ({ ...(current || {}), [roverId]: true }));\n };\n\n const handlePrivateSafetySave = async (roverId) => {\n try {\n const draft = privateSafetyDrafts?.[roverId];\n if (!draft) return;\n const resp = await setPrivateSafety(roverId, draft);\n if (resp?.safety) {\n setPrivateSafetyDrafts((current) => ({ ...(current || {}), [roverId]: resp.safety }));\n }\n setPrivateSafetyDirty((current) => {\n const next = { ...(current || {}) };\n delete next[roverId];\n return next;\n });\n } catch (err) {\n alert(err.message);\n }\n };\n\n if (!isAdmin) return null;\n\n const actions = (\n \n );\n\n return (\n \n
\n \n Test Reward Popup\n \n
\n
\n
\n Global audio levels\n {session?.audioLevels?.updatedAt ? (\n Updated {new Date(session.audioLevels.updatedAt).toLocaleString()}\n ) : null}\n
\n {GAIN_FIELDS.map(({ key, label }) => (\n \n ))}\n

\n These are the base multipliers. Approved personal adjustments are calculated around these values.\n

\n
\n \n
\n
\n
\n
\n Maximum personal adjustment\n {session?.audioLevels?.adjustmentRangeUpdatedAt ? (\n Updated {new Date(session.audioLevels.adjustmentRangeUpdatedAt).toLocaleString()}\n ) : null}\n
\n \n

\n Users with the personal audio adjustment permission can reduce or increase each base level by this percentage.\n

\n
\n \n
\n
\n
\n
\n Global objective\n {goalUpdatedAt ? (\n Updated {new Date(goalUpdatedAt).toLocaleString()}\n ) : null}\n
\n setGoalDraft(event.target.value)}\n placeholder=\"Set a global objective\"\n className=\"field-input text-sm\"\n />\n
\n \n \n
\n
\n
\n
\n Admin mode reason\n {reasonUpdatedAt ? (\n Updated {new Date(reasonUpdatedAt).toLocaleString()}\n ) : null}\n
\n setReasonDraft(event.target.value)}\n placeholder=\"Set an admin mode reason\"\n className=\"field-input text-sm min-h-[3.5rem]\"\n />\n
\n \n \n
\n
\n\n
\n Rovers\n \n Update All\n \n
\n (\n
\n handleLockToggle(rover.id, !lockMap[rover.id])}\n className=\"button-dark\"\n >\n {lockMap[rover.id] ? 'Unlock' : 'Lock'}\n \n \n handleReboot(rover)}\n disabled={Boolean(rebootStates[rover.id])}\n className=\"button-danger disabled:cursor-not-allowed disabled:opacity-60\"\n >\n {rebootStates[rover.id] ? 'Rebooting...' : 'Reboot'}\n \n handleUpdate(rover)}\n disabled={Boolean(updateStates[rover.id])}\n className=\"button-danger disabled:cursor-not-allowed disabled:opacity-60\"\n >\n {updateStates[rover.id] ? 'Updating...' : 'Update'}\n \n {rover?.private?.enabled ? (\n
\n
Private safety
\n \n \n updatePrivateSafetyDraft(rover.id, {\n speedLimitMaxWheelSpeed: Number(event.target.value) || 250,\n })}\n />\n \n \n \n \n handlePrivateSafetySave(rover.id)}\n className=\"button-dark disabled:opacity-50\"\n >\n Apply Safety\n \n
\n ) : null}\n
\n )}\n />\n \n \n \n \n
\n );\n}\n","// Keymap Settings\n// Purpose: Defines the Keymap Settings module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo, useState, useEffect, useCallback } from 'react';\nimport { useControlActions, useControlSelector } from '../../controls/index.js';\nimport { DEFAULT_KEYMAP } from '../../controls/constants.js';\nimport { canonicalizeKeyInput, formatKeyLabel } from '../../controls/keymapUtils.js';\nimport { setKeyboardCaptureLocked } from '../../controls/inputs/keyboardCaptureLock.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { INPUT_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport CardFrame from '../CardFrame/index.jsx';\n\nconst KEY_ACTIONS = [\n { id: 'driveForward', label: 'Drive Forward', group: 'Driving' },\n { id: 'driveBackward', label: 'Drive Backward', group: 'Driving' },\n { id: 'driveLeft', label: 'Turn Left', group: 'Driving' },\n { id: 'driveRight', label: 'Turn Right', group: 'Driving' },\n { id: 'boostModifier', label: 'Boost Modifier', group: 'Driving' },\n { id: 'slowModifier', label: 'Slow Modifier', group: 'Driving' },\n { id: 'auxMainForward', label: 'Main Brush Forward', group: 'Aux Motors' },\n { id: 'auxMainReverse', label: 'Main Brush Reverse', group: 'Aux Motors' },\n { id: 'auxSideForward', label: 'Side Brush Forward', group: 'Aux Motors' },\n { id: 'auxSideReverse', label: 'Side Brush Reverse', group: 'Aux Motors' },\n { id: 'auxVacuumFast', label: 'Vacuum Max', group: 'Aux Motors' },\n { id: 'auxVacuumSlow', label: 'Vacuum Low', group: 'Aux Motors' },\n { id: 'auxAllForward', label: 'All Aux Forward', group: 'Aux Motors' },\n { id: 'cameraUp', label: 'Camera Up', group: 'Camera' },\n { id: 'cameraDown', label: 'Camera Down', group: 'Camera' },\n { id: 'headlightToggle', label: 'Toggle Headlight', group: 'Camera' },\n { id: 'laserToggle', label: 'Toggle Laser', group: 'Camera' },\n { id: 'videoFilterCycle', label: 'Cycle Video Filter', group: 'Camera' },\n { id: 'hornHonk', label: 'Horn (Hold)', group: 'Audio' },\n { id: 'micPtt', label: 'Mic Push To Talk', group: 'Audio' },\n { id: 'driveMacro', label: 'Drive Macro', group: 'Macros' },\n { id: 'dockMacro', label: 'Dock Macro', group: 'Macros' },\n { id: 'chatFocus', label: 'Toggle Chat', group: 'Chat' },\n { id: 'songNoteUp', label: 'Song Note Up', group: 'Audio' },\n { id: 'songNoteDown', label: 'Song Note Down', group: 'Audio' },\n { id: 'homeAssistantOn', label: 'Room Lights On (Cycle)', group: 'Room Lights' },\n { id: 'homeAssistantOff', label: 'Room Lights Off (Cycle)', group: 'Room Lights' },\n];\n\nfunction groupActions(actions) {\n return actions.reduce((acc, action) => {\n const list = acc[action.group] || (acc[action.group] = []);\n list.push(action);\n return acc;\n }, {});\n}\n\nfunction clampSpeed(value, fallback) {\n const num = Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(0, Math.min(500, num));\n}\n\nconst TILT_INTERVAL_MIN = 5;\nconst TILT_INTERVAL_MAX = 500;\nconst TILT_SPEED_MIN = 1;\nconst TILT_SPEED_MAX = 100;\n\nfunction clampTiltInterval(value, fallback) {\n const num = Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(TILT_INTERVAL_MIN, Math.min(TILT_INTERVAL_MAX, num));\n}\n\nfunction clampTiltSpeed(value, fallback) {\n const num = Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(TILT_SPEED_MIN, Math.min(TILT_SPEED_MAX, num));\n}\n\nfunction mapTiltSpeedToInterval(speed) {\n const clampedSpeed = clampTiltSpeed(speed, speed);\n const ratio = (clampedSpeed - TILT_SPEED_MIN) / (TILT_SPEED_MAX - TILT_SPEED_MIN);\n const interval = TILT_INTERVAL_MAX - ratio * (TILT_INTERVAL_MAX - TILT_INTERVAL_MIN);\n return Math.round(interval);\n}\n\nfunction mapTiltIntervalToSpeed(interval) {\n const clampedInterval = clampTiltInterval(interval, interval);\n const ratio = (TILT_INTERVAL_MAX - clampedInterval) / (TILT_INTERVAL_MAX - TILT_INTERVAL_MIN);\n const speed = TILT_SPEED_MIN + ratio * (TILT_SPEED_MAX - TILT_SPEED_MIN);\n return Math.round(speed);\n}\n\nfunction useKeyCapture(onCapture) {\n const [active, setActive] = useState(null);\n\n const startCapture = useCallback((actionId) => {\n setKeyboardCaptureLocked(true);\n setActive(actionId);\n }, []);\n\n const cancel = useCallback(() => {\n setKeyboardCaptureLocked(false);\n setActive(null);\n }, []);\n\n const captureFromEvent = useCallback(\n (actionId, event) => {\n event.preventDefault();\n event.stopPropagation();\n if (event.key === 'Escape') {\n cancel();\n return;\n }\n const canonical = canonicalizeKeyInput(event.key ?? '');\n if (!canonical) return;\n onCapture(actionId, canonical, event);\n cancel();\n },\n [cancel, onCapture],\n );\n\n useEffect(() => () => setKeyboardCaptureLocked(false), []);\n\n return { active, startCapture, cancel, captureFromEvent };\n}\n\nfunction SettingsGroupLabel({ children }) {\n // Group labels stay at the app's normal small-panel scale, but use white text so they are\n // readable without resorting to oversized type or all-caps styling.\n return

{children}

;\n}\n\nfunction SpeedField({ label, description, value, onChange, min = 0, max = 500, step = 5 }) {\n return (\n \n );\n}\n\nfunction BindingRow({ action, value, isActive, onCaptureStart, onCancel, onCaptureKeyDown }) {\n // Binding rows are intentionally constrained and boxed: the action name, current key, and\n // change button are one interaction unit, so proximity matters more than stretching to fill\n // every available pixel in the surrounding sidebar.\n return (\n
\n
\n

{action.label}

\n

{formatKeyLabel(value)}

\n
\n
\n {/* The cancel button only appears during capture so the normal row stays compact, while\n the active row still gives users an obvious way out if they clicked Change by mistake. */}\n {isActive && (\n \n )}\n \n {isActive ? 'Press a key...' : 'Change'}\n \n
\n
\n );\n}\n\nexport default function KeymapSettings() {\n const keymap = useControlSelector((control) => control.state.keymap);\n const { updateKeyBinding, resetKeyBindings } = useControlActions();\n const { value: inputSettings, save: saveInputSettings } = useSettingsNamespace('inputs', INPUT_SETTINGS_DEFAULTS);\n const keyboardSettings = {\n ...INPUT_SETTINGS_DEFAULTS.keyboard,\n ...(inputSettings.keyboard ?? {}),\n };\n const tiltSpeed = useMemo(() => {\n if (typeof keyboardSettings.tiltSpeed === 'number') {\n return clampTiltSpeed(keyboardSettings.tiltSpeed, INPUT_SETTINGS_DEFAULTS.keyboard.tiltSpeed);\n }\n if (typeof keyboardSettings.tiltIntervalMs === 'number') {\n return clampTiltSpeed(\n mapTiltIntervalToSpeed(keyboardSettings.tiltIntervalMs),\n INPUT_SETTINGS_DEFAULTS.keyboard.tiltSpeed,\n );\n }\n return INPUT_SETTINGS_DEFAULTS.keyboard.tiltSpeed;\n }, [keyboardSettings.tiltIntervalMs, keyboardSettings.tiltSpeed]);\n const grouped = useMemo(() => groupActions(KEY_ACTIONS), []);\n const { active, startCapture, cancel, captureFromEvent } = useKeyCapture((actionId, value) => {\n updateKeyBinding(actionId, value);\n });\n\n const currentKey = useCallback(\n (id) => keymap?.[id]?.[0] || DEFAULT_KEYMAP[id]?.[0] || '',\n [keymap],\n );\n\n const updateKeyboardSpeed = useCallback(\n (key, nextValue) => {\n const defaults = INPUT_SETTINGS_DEFAULTS.keyboard;\n const clamped = clampSpeed(nextValue, defaults[key]);\n saveInputSettings((prev) => ({\n ...(prev ?? {}),\n keyboard: {\n ...(prev?.keyboard ?? defaults),\n [key]: clamped,\n },\n }));\n },\n [saveInputSettings],\n );\n\n const updateTiltInterval = useCallback(\n (nextValue) => {\n const defaults = INPUT_SETTINGS_DEFAULTS.keyboard;\n const clamped = clampTiltSpeed(nextValue, defaults.tiltSpeed);\n const mappedInterval = mapTiltSpeedToInterval(clamped);\n saveInputSettings((prev) => ({\n ...(prev ?? {}),\n keyboard: {\n ...(prev?.keyboard ?? defaults),\n tiltSpeed: clamped,\n tiltIntervalMs: mappedInterval,\n },\n }));\n },\n [saveInputSettings],\n );\n\n return (\n resetKeyBindings()} className=\"button-dark px-1 py-0.5 text-xs\">\n Reset defaults\n \n }\n bodyClassName=\"space-y-2 p-1 text-sm\"\n >\n
\n Keyboard speeds\n {/* Speed controls remain stacked instead of becoming two columns because each slider\n needs enough width for fine adjustment and a nearby number input. */}\n
\n updateKeyboardSpeed('baseSpeed', value)}\n />\n updateKeyboardSpeed('turboSpeed', value)}\n />\n updateKeyboardSpeed('precisionSpeed', value)}\n />\n
\n
\n
\n Camera tilt\n \n
\n
\n {Object.entries(grouped).map(([group, actions]) => (\n
\n {group}\n
\n {actions.map((action) => {\n const value = currentKey(action.id);\n const isActive = active === action.id;\n // Each action keeps the same capture behavior as before; only the row chrome\n // changes so the current binding and Change button stay visually connected.\n return (\n cancel()}\n onCaptureStart={() => startCapture(action.id)}\n onCaptureKeyDown={(event) => captureFromEvent(action.id, event)}\n />\n );\n })}\n
\n
\n ))}\n
\n \n );\n}\n","// constants\n// Purpose: Defines the constants module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport const NUMBER_FORMAT = new Intl.NumberFormat(undefined, { maximumFractionDigits: 2 });\n\nexport const ACTIONS = [\n {\n id: 'drive',\n label: 'Drive stick',\n kind: 'axisPair',\n section: 'Driving',\n invertDefaults: { invertX: false, invertY: true },\n driveMode: 'single',\n },\n {\n id: 'tankLeft',\n label: 'Left track',\n kind: 'axis',\n section: 'Driving',\n invertDefaults: { invert: true },\n driveMode: 'tank',\n },\n {\n id: 'tankRight',\n label: 'Right track',\n kind: 'axis',\n section: 'Driving',\n invertDefaults: { invert: true },\n driveMode: 'tank',\n },\n {\n id: 'cameraTilt',\n label: 'Camera tilt',\n kind: 'axis',\n section: 'Camera',\n invertDefaults: { invert: true },\n driveMode: 'single',\n },\n { id: 'tankCameraUp', label: 'Camera up', kind: 'button', section: 'Camera', driveMode: 'tank' },\n { id: 'tankCameraDown', label: 'Camera down', kind: 'button', section: 'Camera', driveMode: 'tank' },\n {\n id: 'mainBrush',\n label: 'Main brush',\n kind: 'axis',\n section: 'Brushes',\n invertDefaults: { invert: false },\n },\n {\n id: 'sideBrush',\n label: 'Side brush',\n kind: 'axis',\n section: 'Brushes',\n invertDefaults: { invert: false },\n },\n { id: 'vacuum', label: 'Vacuum only', kind: 'button', section: 'Aux buttons' },\n { id: 'allAux', label: 'All cleaning motors', kind: 'button', section: 'Aux buttons' },\n { id: 'mainReverse', label: 'Main reverse toggle', kind: 'button', section: 'Brush toggles' },\n { id: 'sideReverse', label: 'Side reverse toggle', kind: 'button', section: 'Brush toggles' },\n { id: 'driveMacro', label: 'Drive / undock sequence', kind: 'button', section: 'Mode controls' },\n { id: 'dockMacro', label: 'Manual docking assist', kind: 'button', section: 'Mode controls' },\n { id: 'headlightToggle', label: 'Headlight toggle', kind: 'button', section: 'Camera' },\n { id: 'laserToggle', label: 'Laser toggle', kind: 'button', section: 'Camera' },\n { id: 'boostModifier', label: 'Turbo modifier', kind: 'button', section: 'Driving' },\n { id: 'slowModifier', label: 'Precision modifier', kind: 'button', section: 'Driving' },\n { id: 'hornHonk', label: 'Horn (hold)', kind: 'button', section: 'Audio and chat' },\n { id: 'micPtt', label: 'Microphone push to talk', kind: 'button', section: 'Audio and chat' },\n { id: 'chatFocus', label: 'Focus chat', kind: 'button', section: 'Audio and chat' },\n { id: 'videoFilterCycle', label: 'Cycle video filter', kind: 'button', section: 'Camera' },\n { id: 'songNoteUp', label: 'Play higher note', kind: 'button', section: 'Audio and chat', driveMode: 'single' },\n { id: 'songNoteDown', label: 'Play lower note', kind: 'button', section: 'Audio and chat', driveMode: 'single' },\n { id: 'homeAssistantOn', label: 'Turn next room light on', kind: 'button', section: 'Room lights' },\n { id: 'homeAssistantOff', label: 'Turn next room light off', kind: 'button', section: 'Room lights' },\n /* Digital aux actions provide exact parity with the keyboard help surface. They coexist with\n analog brush controls so each operator can choose proportional triggers or discrete buttons. */\n { id: 'auxMainForward', label: 'Main brush forward', kind: 'button', section: 'Aux buttons' },\n { id: 'auxMainReverse', label: 'Main brush reverse', kind: 'button', section: 'Aux buttons' },\n { id: 'auxSideForward', label: 'Side brush forward', kind: 'button', section: 'Aux buttons' },\n { id: 'auxSideReverse', label: 'Side brush reverse', kind: 'button', section: 'Aux buttons' },\n { id: 'auxVacuumFast', label: 'Vacuum max', kind: 'button', section: 'Aux buttons' },\n { id: 'auxVacuumSlow', label: 'Vacuum low', kind: 'button', section: 'Aux buttons' },\n { id: 'auxAllForward', label: 'All motors forward', kind: 'button', section: 'Aux buttons' },\n];\n\nexport const CAPTURE_AXIS_THRESHOLD = 0.45;\nexport const CAPTURE_BUTTON_THRESHOLD = 0.6;\n","// Slider Field\n// Purpose: Defines the Slider Field module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { NUMBER_FORMAT } from './constants.js';\n\nexport default function SliderField({ label, description, min, max, step, value, onChange }) {\n return (\n \n );\n}\n","// helpers\n// Purpose: Defines the helpers module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { CAPTURE_AXIS_THRESHOLD, CAPTURE_BUTTON_THRESHOLD, NUMBER_FORMAT } from './constants.js';\n\nexport function formatSource(source) {\n if (!source) return 'Unassigned';\n if (source.kind === 'axisPair') {\n const invert = `${source.invertX ? 'X inv ' : ''}${source.invertY ? 'Y inv' : ''}`.trim();\n return `Axes ${source.x}/${source.y}${invert ? ` (${invert})` : ''}`;\n }\n if (source.kind === 'axis') {\n return `Axis ${source.index}${source.invert ? ' (inv)' : ''}`;\n }\n if (source.kind === 'button') {\n return `Button ${source.index}`;\n }\n if (source.kind === 'buttonAxis') {\n return `Button ${source.index} (analog)`;\n }\n if (source.kind === 'axisButton') {\n const dir = source.direction < 0 ? '<' : '>';\n return `Axis ${source.index} ${dir} ${NUMBER_FORMAT.format(source.threshold ?? 0.6)}`;\n }\n return 'Unassigned';\n}\n\nexport function groupActions(actions) {\n return actions.reduce((acc, action) => {\n const list = acc[action.section] || (acc[action.section] = []);\n list.push(action);\n return acc;\n }, {});\n}\n\nexport function pickActivePad(pads, activeInstanceKey) {\n if (!pads || pads.length === 0) return null;\n if (activeInstanceKey) {\n const match = pads.find((pad) => pad.instanceKey === activeInstanceKey);\n if (match) return match;\n }\n return pads[0];\n}\n\nexport function snapshotBaseline(pad) {\n return {\n axes: Array.from(pad.axes ?? []),\n buttons: (pad.buttons ?? []).map((btn) => ({\n pressed: Boolean(btn?.pressed),\n value: typeof btn?.value === 'number' ? btn.value : btn?.pressed ? 1 : 0,\n })),\n };\n}\n\nfunction detectAxisCapture(pad, baseline, action) {\n const deltas = (pad.axes ?? []).map((value, index) => ({\n index,\n delta: Math.abs((value ?? 0) - (baseline.axes?.[index] ?? 0)),\n value,\n }));\n deltas.sort((a, b) => b.delta - a.delta);\n if (action.kind === 'axisPair') {\n const top = deltas.filter((entry) => entry.delta > CAPTURE_AXIS_THRESHOLD).slice(0, 2);\n if (top.length < 2) return null;\n const orderedIndices = top.map((entry) => entry.index).sort((a, b) => a - b);\n return {\n kind: 'axisPair',\n // Browsers expose two-dimensional controls as adjacent X/Y axes. Sorting the captured pair\n // prevents whichever direction moved first from randomly swapping steering and throttle.\n x: orderedIndices[0],\n y: orderedIndices[1],\n ...(action.invertDefaults ?? {}),\n };\n }\n const match = deltas.find((entry) => entry.delta > CAPTURE_AXIS_THRESHOLD);\n if (!match) return null;\n return {\n kind: 'axis',\n index: match.index,\n ...(action.invertDefaults ?? {}),\n };\n}\n\nfunction detectButtonCapture(pad, baseline, action) {\n const buttons = pad.buttons ?? [];\n const newlyPressed = [];\n for (let i = 0; i < buttons.length; i += 1) {\n const btn = buttons[i];\n const value = typeof btn?.value === 'number' ? btn.value : btn?.pressed ? 1 : 0;\n const baselineValue = baseline.buttons?.[i]?.value ?? 0;\n const baselinePressed = baseline.buttons?.[i]?.pressed ?? false;\n if (!baselinePressed && (btn?.pressed || value - baselineValue > CAPTURE_BUTTON_THRESHOLD)) {\n if (action.kind === 'axis') {\n return { kind: 'buttonAxis', index: i };\n }\n newlyPressed.push({ kind: 'button', index: i });\n }\n }\n if (newlyPressed.length > 1) {\n // Capturing all buttons observed in the same frame makes intentional modifier chords possible\n // without a separate advanced editor, while a normal single press keeps the compact shape.\n return { kind: 'chord', inputs: newlyPressed };\n }\n if (newlyPressed.length === 1) return newlyPressed[0];\n const axes = pad.axes ?? [];\n for (let i = 0; i < axes.length; i += 1) {\n const value = axes[i] ?? 0;\n const delta = Math.abs(value - (baseline.axes?.[i] ?? 0));\n if (Math.abs(value) > 0.7 && delta > 0.5) {\n if (action.kind === 'axis') {\n return { kind: 'axis', index: i, ...(action.invertDefaults ?? {}) };\n }\n return { kind: 'axisButton', index: i, direction: value >= 0 ? 1 : -1, threshold: 0.6 };\n }\n }\n return null;\n}\n\nexport function buildDescriptorFromCapture(pad, baseline, action) {\n if (!pad) return null;\n if (action.kind === 'axis' || action.kind === 'axisPair') {\n const axisDescriptor = detectAxisCapture(pad, baseline, action);\n if (axisDescriptor) return axisDescriptor;\n }\n return detectButtonCapture(pad, baseline, action);\n}\n","// Gamepad Mapping Settings Content\n// Purpose: Defines the Gamepad Mapping Settings Content module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { GAMEPAD_PROFILE_DEFAULT, GAMEPAD_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport {\n computeGamepadOutputs,\n createProfileForPad,\n resolveGamepadProfile,\n} from '../../controls/inputs/gamepadBindings.js';\nimport { useGamepadHubState } from '../../controls/inputs/gamepadHub.js';\nimport { acquireControllerControlLock } from '../../controls/inputs/controllerRuntime.js';\nimport { describeController, formatControllerBinding } from '../../controls/inputs/controllerLabels.js';\nimport CardFrame from '../CardFrame/index.jsx';\nimport SliderField from './SliderField.jsx';\nimport { ACTIONS, NUMBER_FORMAT } from './constants.js';\nimport {\n groupActions,\n pickActivePad,\n snapshotBaseline,\n buildDescriptorFromCapture,\n} from './helpers.js';\n\nfunction SettingsGroupLabel({ children }) {\n // Section labels stay visually modest so this panel matches the rest of the app, while white\n // text keeps them readable without uppercase or oversized type.\n return

{children}

;\n}\n\nfunction physicalInputKey(source) {\n /* Inversion and activation thresholds describe how an input is interpreted, not which physical\n control it is. Ignoring those fields ensures Axis 3 cannot silently own both a tank track and\n camera tilt merely because one binding happens to be inverted. */\n if (source?.kind === 'axis' || source?.kind === 'axisButton') return `axis:${source.index}`;\n if (source?.kind === 'button' || source?.kind === 'buttonAxis') return `button:${source.index}`;\n return JSON.stringify(source);\n}\n\nfunction sourcesUseSamePhysicalInput(left, right) {\n if (!left || !right) return false;\n return physicalInputKey(left) === physicalInputKey(right);\n}\n\nfunction actionDriveMode(actionId) {\n return ACTIONS.find((action) => action.id === actionId)?.driveMode ?? null;\n}\n\nfunction CurveField({ label, value, onChange }) {\n return (\n \n );\n}\n\nfunction MappingRow({\n action,\n source,\n sourceLabel,\n liveValue,\n isCapturing,\n onClear,\n onCapture,\n onInvert,\n disabled,\n}) {\n // Mapping rows are constrained to a readable width so the source text and buttons remain\n // visually connected. Buttons wrap on very narrow panes instead of forcing tiny text.\n return (\n
\n
\n
\n

{action.label}

\n \n
\n

{sourceLabel}

\n
\n
\n {/* Axis-pair controls expose independent inversion because stick X/Y directions often\n differ between browser mappings. Keeping those buttons beside the source avoids\n making users hunt across a wide row while testing a binding. */}\n {action.kind === 'axisPair' && (\n <>\n onInvert(action, 'invertX')}\n className=\"button-dark px-1 py-0.5 text-xs font-medium disabled:opacity-50\"\n >\n Invert X\n \n onInvert(action, 'invertY')}\n className=\"button-dark px-1 py-0.5 text-xs font-medium disabled:opacity-50\"\n >\n Invert Y\n \n \n )}\n {/* Single-axis mappings only have one inversion flag, so they render the smaller control\n set and keep button clutter down for trigger-like bindings. */}\n {action.kind === 'axis' && (\n onInvert(action)}\n className=\"button-dark px-1 py-0.5 text-xs font-medium disabled:opacity-50\"\n >\n Invert\n \n )}\n {/* Clear and Capture are always present because they are the primary row actions. They\n wrap with the inversion controls on narrow panes instead of shrinking text. */}\n \n onCapture(action)}\n className={`${\n isCapturing\n ? 'rounded-md bg-emerald-500 px-1 py-0.5 text-emerald-950 hover:bg-emerald-400'\n : 'button-dark px-1 py-0.5'\n } text-xs font-medium disabled:opacity-50`}\n >\n {isCapturing ? 'Waiting...' : 'Capture'}\n \n
\n
\n );\n}\n\nexport default function GamepadMappingSettings() {\n const hubState = useGamepadHubState();\n const { value: gamepadSettings, save: saveGamepadSettings } = useSettingsNamespace(\n 'gamepad',\n GAMEPAD_SETTINGS_DEFAULTS,\n );\n const [captureAction, setCaptureAction] = useState(null);\n const [actionFilter, setActionFilter] = useState('');\n const baselineRef = useRef(null);\n const captureCandidateRef = useRef(null);\n\n useEffect(() => {\n /* The settings panel remains a live control surface so operators can tune calibration while\n driving and immediately feel the result. Only capture owns the controller lock: without\n that narrow guard, pressing the input being assigned could also drive a wheel, start a\n motor, or toggle rover hardware before the new binding is saved. */\n if (!captureAction) return undefined;\n return acquireControllerControlLock('controller-binding-capture');\n }, [captureAction]);\n\n const activePad = useMemo(\n () => pickActivePad(hubState.pads, gamepadSettings.activeInstanceKey),\n [hubState.pads, gamepadSettings.activeInstanceKey],\n );\n\n const activeSignature = activePad?.signature ?? null;\n const activeProfile = useMemo(() => {\n const storedProfile = !activeSignature\n ? gamepadSettings?.defaults?.profile ?? GAMEPAD_PROFILE_DEFAULT\n : (\n gamepadSettings?.profiles?.[activeSignature] ??\n gamepadSettings?.defaults?.profile ??\n GAMEPAD_PROFILE_DEFAULT\n );\n return resolveGamepadProfile(storedProfile, GAMEPAD_PROFILE_DEFAULT);\n }, [activeSignature, gamepadSettings?.defaults?.profile, gamepadSettings?.profiles]);\n const driveMode = activeProfile.calibration?.driveMode === 'tank' ? 'tank' : 'single';\n const grouped = useMemo(() => {\n const query = actionFilter.trim().toLowerCase();\n /* Only the active steering scheme is shown. Keeping inactive track/stick bindings out of the\n mapping list prevents operators from tuning controls that currently have no runtime effect. */\n const modeActions = ACTIONS.filter(\n (action) => !action.driveMode || action.driveMode === driveMode,\n );\n const visibleActions = query\n ? modeActions.filter((action) => `${action.label} ${action.section}`.toLowerCase().includes(query))\n : modeActions;\n return groupActions(visibleActions);\n }, [actionFilter, driveMode]);\n\n useEffect(() => {\n if (!activePad || !activeSignature) return;\n if (gamepadSettings?.profiles?.[activeSignature]) return;\n saveGamepadSettings((prev) => {\n const current = prev ?? GAMEPAD_SETTINGS_DEFAULTS;\n if (current.profiles?.[activeSignature]) return current;\n const base = resolveGamepadProfile(current?.defaults?.profile, GAMEPAD_PROFILE_DEFAULT);\n const nextProfile = createProfileForPad(activePad, base);\n return {\n ...current,\n profiles: {\n ...(current.profiles ?? {}),\n [activeSignature]: nextProfile,\n },\n };\n });\n }, [activePad, activeSignature, gamepadSettings?.profiles, saveGamepadSettings]);\n\n useEffect(() => {\n baselineRef.current = null;\n captureCandidateRef.current = null;\n }, [captureAction, activeSignature]);\n\n useEffect(() => {\n if (!captureAction || !activePad) return;\n if (!baselineRef.current) {\n baselineRef.current = snapshotBaseline(activePad);\n return;\n }\n let descriptor = buildDescriptorFromCapture(activePad, baselineRef.current, captureAction);\n if (captureAction.kind === 'button' && descriptor?.kind !== 'chord') {\n const now = typeof performance !== 'undefined' ? performance.now() : Date.now();\n if (descriptor && !captureCandidateRef.current) {\n /* Give the user a short window to add a modifier after the first button. Immediate capture\n makes chords physically impossible because browser frames never report both presses at\n precisely the same instant. */\n captureCandidateRef.current = { descriptor, startedAt: now };\n return;\n }\n if (!captureCandidateRef.current) return;\n if (now - captureCandidateRef.current.startedAt < 220) return;\n /* A quick tap may already be released when the chord window expires. Preserve the original\n candidate so capture completes normally instead of waiting for an unrelated later press. */\n descriptor = captureCandidateRef.current.descriptor;\n }\n if (!descriptor) return;\n saveGamepadSettings((prev) => {\n const current = prev ?? GAMEPAD_SETTINGS_DEFAULTS;\n const baseProfile = resolveGamepadProfile(\n current.profiles?.[activeSignature] ?? current?.defaults?.profile,\n GAMEPAD_PROFILE_DEFAULT,\n );\n const bindingsWithoutConflict = Object.fromEntries(\n Object.entries(baseProfile.bindings ?? {}).map(([actionId, binding]) => {\n if (actionId === captureAction.id) return [actionId, binding];\n const otherMode = actionDriveMode(actionId);\n const captureMode = actionDriveMode(captureAction.id);\n /* Opposing mode-only actions may intentionally reuse a physical input because runtime\n never activates them together. Common actions still conflict with both modes. */\n if (captureMode && otherMode && captureMode !== otherMode) return [actionId, binding];\n const sources = (binding?.sources ?? []).filter(\n (source) => !sourcesUseSamePhysicalInput(source, descriptor),\n );\n return [actionId, { ...binding, sources }];\n }),\n );\n const nextProfile = {\n ...baseProfile,\n bindings: {\n /* A physical input has one owner by default. Removing an exact duplicate avoids two\n toggles firing from one press while still allowing deliberate multi-button chords. */\n ...bindingsWithoutConflict,\n [captureAction.id]: {\n ...(baseProfile.bindings?.[captureAction.id] ?? {}),\n kind: captureAction.kind,\n sources: [descriptor],\n },\n },\n };\n return {\n ...current,\n profiles: {\n ...(current.profiles ?? {}),\n [activeSignature]: nextProfile,\n },\n };\n });\n /* Hub snapshots drive this effect, but capture state is React-owned UI state. Deferring its\n reset to a microtask avoids a synchronous state cascade inside the effect while the id\n guard prevents an older completion from cancelling a newer capture request. */\n const completedActionId = captureAction.id;\n queueMicrotask(() => {\n setCaptureAction((current) => current?.id === completedActionId ? null : current);\n });\n }, [activePad, activeSignature, captureAction, saveGamepadSettings]);\n\n const setActiveInstanceKey = useCallback(\n (instanceKey) => {\n saveGamepadSettings((prev) => ({\n ...(prev ?? GAMEPAD_SETTINGS_DEFAULTS),\n activeInstanceKey: instanceKey || null,\n }));\n },\n [saveGamepadSettings],\n );\n\n const updateCalibration = useCallback(\n (patch) => {\n saveGamepadSettings((prev) => {\n const current = prev ?? GAMEPAD_SETTINGS_DEFAULTS;\n const storedProfile =\n (activeSignature && current.profiles?.[activeSignature]) ??\n current?.defaults?.profile;\n const baseProfile = resolveGamepadProfile(storedProfile, GAMEPAD_PROFILE_DEFAULT);\n const nextProfile = {\n ...baseProfile,\n calibration: {\n ...(baseProfile.calibration ?? {}),\n ...patch,\n },\n };\n if (!activeSignature) {\n return {\n ...current,\n defaults: {\n ...(current.defaults ?? {}),\n profile: nextProfile,\n },\n };\n }\n return {\n ...current,\n profiles: {\n ...(current.profiles ?? {}),\n [activeSignature]: nextProfile,\n },\n };\n });\n },\n [activeSignature, saveGamepadSettings],\n );\n\n const updateProfile = useCallback(\n (patch) => {\n saveGamepadSettings((prev) => {\n const current = prev ?? GAMEPAD_SETTINGS_DEFAULTS;\n const storedProfile =\n (activeSignature && current.profiles?.[activeSignature]) ??\n current?.defaults?.profile;\n const nextProfile = {\n ...resolveGamepadProfile(storedProfile, GAMEPAD_PROFILE_DEFAULT),\n ...patch,\n };\n if (!activeSignature) {\n return {\n ...current,\n defaults: { ...(current.defaults ?? {}), profile: nextProfile },\n };\n }\n return {\n ...current,\n profiles: { ...(current.profiles ?? {}), [activeSignature]: nextProfile },\n };\n });\n },\n [activeSignature, saveGamepadSettings],\n );\n\n const resetActiveProfile = useCallback(() => {\n /* Resetting only the selected hardware avoids erasing carefully tuned profiles for other\n controllers. Device metadata is rebuilt so the profile remains recognizable offline. */\n const nextProfile = createProfileForPad(activePad, GAMEPAD_PROFILE_DEFAULT);\n updateProfile(nextProfile);\n setCaptureAction(null);\n }, [activePad, updateProfile]);\n\n const updateBinding = useCallback(\n (actionId, updater) => {\n saveGamepadSettings((prev) => {\n const current = prev ?? GAMEPAD_SETTINGS_DEFAULTS;\n const storedProfile =\n (activeSignature && current.profiles?.[activeSignature]) ??\n current?.defaults?.profile;\n const baseProfile = resolveGamepadProfile(storedProfile, GAMEPAD_PROFILE_DEFAULT);\n const nextBinding = updater(baseProfile.bindings?.[actionId] ?? {});\n const nextProfile = {\n ...baseProfile,\n bindings: {\n ...(baseProfile.bindings ?? {}),\n [actionId]: nextBinding,\n },\n };\n if (!activeSignature) {\n return {\n ...current,\n defaults: {\n ...(current.defaults ?? {}),\n profile: nextProfile,\n },\n };\n }\n return {\n ...current,\n profiles: {\n ...(current.profiles ?? {}),\n [activeSignature]: nextProfile,\n },\n };\n });\n },\n [activeSignature, saveGamepadSettings],\n );\n\n const handleClear = useCallback(\n (action) => {\n updateBinding(action.id, (binding) => ({\n ...binding,\n sources: [],\n }));\n },\n [updateBinding],\n );\n\n const handleInvert = useCallback(\n (action, axisKey) => {\n updateBinding(action.id, (binding) => {\n const sources = Array.isArray(binding.sources) ? [...binding.sources] : [];\n if (!sources[0]) return binding;\n const next = { ...sources[0] };\n if (axisKey === 'invertX') {\n next.invertX = !next.invertX;\n } else if (axisKey === 'invertY') {\n next.invertY = !next.invertY;\n } else {\n next.invert = !next.invert;\n }\n sources[0] = next;\n return { ...binding, sources };\n });\n },\n [updateBinding],\n );\n\n const diagnostics = useMemo(() => {\n if (!activePad) return null;\n const outputs = computeGamepadOutputs(activePad, activeProfile);\n return { outputs };\n }, [activePad, activeProfile]);\n const controllerDescription = useMemo(() => describeController(activePad), [activePad]);\n\n const liveValueForAction = useCallback((actionId) => {\n const outputs = diagnostics?.outputs;\n if (!outputs) return false;\n if (actionId === 'drive') return Math.hypot(outputs.driveVector.x, outputs.driveVector.y) > 0.01;\n if (actionId === 'tankLeft') return Math.abs(outputs.tankTracks?.left ?? 0) > 0.01;\n if (actionId === 'tankRight') return Math.abs(outputs.tankTracks?.right ?? 0) > 0.01;\n if (actionId === 'tankCameraUp' || actionId === 'tankCameraDown') {\n return Boolean(outputs.buttons[actionId]);\n }\n if (actionId === 'cameraTilt') return Math.abs(outputs.cameraAxis) > 0.01;\n if (actionId === 'mainBrush') return Math.abs(outputs.auxAxis.main) > 0.01;\n if (actionId === 'sideBrush') return Math.abs(outputs.auxAxis.side) > 0.01;\n return Boolean(outputs.buttons[actionId]);\n }, [diagnostics]);\n\n return (\n \n Reset profile\n \n }\n bodyClassName=\"space-y-2 p-1 text-sm\"\n >\n {captureAction && (\n
\n Release controls, then move or press the input for {captureAction.label}.\n \n
\n )}\n\n
\n Connected controller\n {hubState.error ? (\n

\n Controller access failed: {hubState.error}\n

\n ) : hubState.pads.length === 0 ? (\n

\n {hubState.supported === false\n ? 'This browser does not support controllers.'\n : 'No controller detected. Connect it, focus this page, then press a button.'}\n

\n ) : (\n
\n setActiveInstanceKey(event.target.value)}\n className=\"min-w-0 rounded border border-neutral-600 bg-neutral-900 px-1 py-0.5 text-sm text-white\"\n >\n {hubState.pads.map((pad) => (\n \n ))}\n \n \n {activePad?.mapping ?? 'unknown'}\n \n

\n {controllerDescription.description ?? activePad?.id}\n

\n
\n )}\n
\n\n
\n Calibration\n {/* Calibration controls stay in one stacked column because range inputs become harder to\n tune when squeezed into multiple narrow columns. */}\n
\n \n \n updateCalibration({ driveDeadzone: value })}\n />\n updateCalibration({ driveCurve: value })}\n />\n updateCalibration({ baseSpeed: value })}\n />\n updateCalibration({ turboSpeed: value })}\n />\n {driveMode === 'single' && (\n <>\n {/* Analog-only settings are hidden in tank mode because its two D-pad camera\n directions are digital velocity inputs. The values remain saved for when the\n operator returns to single-stick steering. */}\n updateCalibration({ cameraDeadzone: value })}\n />\n updateCalibration({ cameraCurve: value })}\n />\n \n )}\n updateCalibration({ auxDeadzone: value })}\n />\n updateCalibration({ auxCurve: value })}\n />\n updateCalibration({ auxSideScale: value })}\n />\n updateCalibration({ precisionSpeed: value })}\n />\n {driveMode === 'single' && (\n \n )}\n updateCalibration({ cameraSensitivity: value })}\n />\n
\n
\n\n
\n \n {Object.entries(grouped).map(([section, actions]) => (\n
\n {section}\n
\n {actions.map((action) => {\n const binding = activeProfile.bindings?.[action.id];\n const source = binding?.sources?.[0] ?? null;\n // The binding data is unchanged; MappingRow only changes presentation so the\n // existing capture, clear, and invert handlers continue to own behavior.\n return (\n \n );\n })}\n
\n
\n ))}\n
\n\n
\n {!activePad ? (\n null\n ) : (\n
\n Advanced diagnostics\n
\n

Raw axes

\n
\n {activePad.axes.map((value, index) => (\n \n A{index}: {NUMBER_FORMAT.format(value)}\n \n ))}\n
\n

Raw buttons

\n
\n {activePad.buttons.map((btn, index) => (\n \n B{index}: {NUMBER_FORMAT.format(btn.value)} {btn.pressed ? '●' : ''}\n \n ))}\n
\n {diagnostics?.outputs && (\n <>\n

Mapped outputs

\n
\n \n Drive: {NUMBER_FORMAT.format(diagnostics.outputs.driveVector.x)},{' '}\n {NUMBER_FORMAT.format(diagnostics.outputs.driveVector.y)}\n \n \n Camera: {NUMBER_FORMAT.format(diagnostics.outputs.cameraAxis)}\n \n \n Main: {NUMBER_FORMAT.format(diagnostics.outputs.auxAxis.main)}\n \n \n Side: {NUMBER_FORMAT.format(diagnostics.outputs.auxAxis.side)}\n \n
\n \n )}\n
\n
\n )}\n
\n \n );\n}\n","// Overcurrent Protection Panel\n// Purpose: Presents detailed server-calculated motor stress and command-tracking diagnostics.\n// Scope: Read-only status surface for the assigned rover; protection and recovery remain server-owned.\n\nimport { useControlSelector } from '../../controls/index.js';\nimport CardFrame from '../CardFrame/index.jsx';\n\nconst MOTOR_LABELS = {\n leftWheel: 'Left wheel',\n rightWheel: 'Right wheel',\n mainBrush: 'Main brush',\n sideBrush: 'Side brush',\n};\n\nfunction formatPct(value) {\n if (!Number.isFinite(value)) return '--';\n return `${Math.round(value * 100)}%`;\n}\n\nfunction formatSpeed(value) {\n if (!Number.isFinite(value)) return '--';\n return `${Math.round(value)} mm/s`;\n}\n\nfunction formatClassification(value) {\n if (value === 'stalled') return 'Stalled';\n if (value === 'partial') return 'Partial';\n if (value === 'moving') return 'Moving';\n return 'Unknown';\n}\n\nfunction ProgressBar({ value, color = 'bg-emerald-500' }) {\n const width = `${Math.round(Math.max(0, Math.min(1, Number(value) || 0)) * 100)}%`;\n return (\n
\n
\n
\n );\n}\n\nfunction statusLabel(protection) {\n if (protection?.adminImmune) return 'Admin bypass';\n if (protection?.status === 'stopped') return 'Drive stopped';\n if (protection?.status === 'limiting') return 'Limiting';\n if (protection?.status === 'overcurrent') return 'Overcurrent detected';\n if (protection?.status === 'recovering') return 'Recovering';\n return 'Ready';\n}\n\nexport default function OvercurrentLimiterPanel() {\n const roverId = useControlSelector((control) => control.state.roverId);\n const protection = useControlSelector((control) => control.overcurrentLimiter);\n const motors = protection?.motors || {};\n\n return (\n \n {!roverId ? (\n

Assign a rover to view protection status.

\n ) : (\n
\n {Object.entries(MOTOR_LABELS).map(([key, label]) => {\n const motor = motors[key] || {};\n const wheel = key === 'leftWheel' || key === 'rightWheel';\n return (\n
\n
\n {label}\n \n {motor.overcurrent ? 'Overcurrent' : 'Clear'}\n \n
\n
\n Stress {formatPct(motor.stress)}\n Output {formatPct(motor.cap)}\n
\n \n {wheel ? (\n
\n {`Command ${formatSpeed(Math.abs(Number(motor.commandedSpeed)))}`}\n {`Measured ${formatSpeed(motor.measuredSpeed)}`}\n {`Progress ${formatPct(motor.progressRatio)}`}\n {`${formatClassification(motor.classification)} · stall ${formatPct(motor.stallFactor)}`}\n
\n ) : null}\n
\n );\n })}\n {protection?.drive?.blocked ? (\n

\n {protection.drive.requiresNeutral\n ? 'Drive is stopped. Release controls to neutral before resuming.'\n : 'Drive is stopped while the wheel condition clears.'}\n

\n ) : null}\n
\n
{`Drive output ${formatPct(protection?.drive?.cap)}`}
\n
\n {protection?.adminImmune\n ? 'This session bypasses all overcurrent enforcement.'\n : 'Status and output limits are calculated by the server.'}\n
\n
\n
\n )}\n \n );\n}\n","// Session Snapshot\n// Purpose: Defines the Session Snapshot module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useMemo } from 'react';\nimport { useSession } from '../../context/SessionContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\n\nexport default function SessionSnapshot() {\n const { session } = useSession();\n const payload = useMemo(() => JSON.stringify(session ?? {}, null, 2), [session]);\n return (\n \n
\n        {payload}\n      
\n
\n );\n}\n","// Socket Log Panel\n// Purpose: Defines the Socket Log Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\n\nconst MAX_ENTRIES = 300;\nconst MAX_PAYLOAD_LENGTH = 240;\n\nfunction formatValue(value, seen) {\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (typeof value === 'function') return '[Function]';\n if (value instanceof Error) return `${value.name}: ${value.message}`;\n if (value instanceof Date) return value.toISOString();\n\n if (!seen) {\n seen = new WeakSet();\n }\n if (typeof value === 'object') {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n\n try {\n return JSON.stringify(\n value,\n (key, nested) => {\n if (typeof nested === 'function') return '[Function]';\n if (nested instanceof Error) return `${nested.name}: ${nested.message}`;\n return nested;\n },\n 0,\n );\n } catch (err) {\n return String(value);\n }\n}\n\nfunction formatArgs(args) {\n const parts = args.map((arg) => formatValue(arg));\n const payload = parts.join(' ');\n if (payload.length > MAX_PAYLOAD_LENGTH) {\n return `${payload.slice(0, MAX_PAYLOAD_LENGTH)}…`;\n }\n return payload;\n}\n\nexport default function SocketLogPanel() {\n const socket = useSocket();\n const [entries, setEntries] = useState([]);\n\n const counters = useMemo(() => {\n return entries.reduce(\n (acc, entry) => {\n if (entry.direction === 'in') acc.in += 1;\n if (entry.direction === 'out') acc.out += 1;\n return acc;\n },\n { in: 0, out: 0 },\n );\n }, [entries]);\n\n useEffect(() => {\n const pushEntry = (direction, event, args) => {\n setEntries((prev) => {\n const next = [\n ...prev,\n {\n id: `${Date.now()}-${Math.random().toString(16).slice(2)}`,\n direction,\n event,\n payload: formatArgs(args),\n timestamp: new Date().toLocaleTimeString(),\n },\n ];\n if (next.length > MAX_ENTRIES) {\n return next.slice(-MAX_ENTRIES);\n }\n return next;\n });\n };\n\n const handleIncoming = (event, ...args) => pushEntry('in', event, args);\n const handleOutgoing = (event, ...args) => pushEntry('out', event, args);\n\n socket.onAny(handleIncoming);\n\n let restoreEmit = null;\n if (typeof socket.onAnyOutgoing === 'function') {\n socket.onAnyOutgoing(handleOutgoing);\n restoreEmit = () => socket.offAnyOutgoing(handleOutgoing);\n } else {\n const originalEmit = socket.emit.bind(socket);\n socket.emit = (event, ...args) => {\n handleOutgoing(event, ...args);\n return originalEmit(event, ...args);\n };\n restoreEmit = () => {\n socket.emit = originalEmit;\n };\n }\n\n return () => {\n socket.offAny(handleIncoming);\n if (restoreEmit) {\n restoreEmit();\n }\n };\n }, [socket]);\n\n const actions = (\n
\n in {counters.in}\n out {counters.out}\n \n
\n );\n\n return (\n \n
\n {entries.length === 0 ? (\n

No socket activity yet.

\n ) : (\n entries\n .slice()\n .reverse()\n .map((entry) => (\n
\n {entry.timestamp}{' '}\n \n [{entry.direction.toUpperCase()}]\n {' '}\n {entry.event}{' '}\n {entry.payload}\n
\n ))\n )}\n
\n

Logs are collected only while this panel is open.

\n
\n );\n}\n","// Personal Volume Adjustment Card\n// Purpose: Lets an approved user offset horn, text-to-speech, and microphone output around server-owned base levels.\n// Scope: Persists signed percentages in roverSettings while the server owns permission, clamping, and gain conversion.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport CardFrame from '../CardFrame/index.jsx';\nimport { useSession } from '../../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../../settings/index.js';\n\nconst ADJUSTMENT_FIELDS = [\n { key: 'hornPercent', label: 'Horn volume' },\n { key: 'ttsPercent', label: 'Text-to-speech volume' },\n { key: 'forwardPercent', label: 'Microphone volume' },\n];\nconst DEFAULT_ADJUSTMENTS = { hornPercent: 0, ttsPercent: 0, forwardPercent: 0 };\nconst COMMIT_DEBOUNCE_MS = 300;\n\nfunction clampPercent(value, maximum) {\n const number = Number(value);\n const limit = Math.max(0, Number(maximum) || 0);\n if (!Number.isFinite(number)) return 0;\n return Math.round(Math.max(-limit, Math.min(limit, number)));\n}\n\nfunction normalizeAdjustments(raw, maximum) {\n const normalized = {};\n ADJUSTMENT_FIELDS.forEach(({ key }) => {\n normalized[key] = clampPercent(raw?.[key], maximum);\n });\n return normalized;\n}\n\nfunction formatPercent(value) {\n const number = Number(value) || 0;\n return `${number > 0 ? '+' : ''}${number}%`;\n}\n\nexport default function VolumeSettingsCard() {\n const { session, setPersonalAudioAdjustments } = useSession();\n const { value: savedAdjustments, save: saveAdjustments } = useSettingsNamespace(\n 'audioAdjustments',\n DEFAULT_ADJUSTMENTS,\n );\n const serverState = session?.audioAdjustments || null;\n const allowed = Boolean(serverState?.allowed);\n const maximum = Math.max(0, Number(serverState?.maxAdjustmentPercent) || 0);\n const normalizedSaved = useMemo(\n () => normalizeAdjustments(savedAdjustments, maximum),\n [maximum, savedAdjustments],\n );\n const [draft, setDraft] = useState(normalizedSaved);\n const [error, setError] = useState(null);\n const timerRef = useRef(null);\n\n useEffect(() => {\n setDraft(normalizedSaved);\n }, [normalizedSaved]);\n\n const commit = useCallback(async (next) => {\n const normalized = normalizeAdjustments(next, maximum);\n // Saving first makes the cookie the durable source used by every reconnect\n // and session:identify update. The socket call applies it immediately to a\n // rover the current browser may already control.\n saveAdjustments(normalized);\n try {\n await setPersonalAudioAdjustments(normalized);\n setError(null);\n } catch (err) {\n setError(err?.message || 'Failed to apply volume adjustments');\n }\n }, [maximum, saveAdjustments, setPersonalAudioAdjustments]);\n\n useEffect(() => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n }, []);\n\n const handleChange = (key) => (event) => {\n const next = { ...draft, [key]: clampPercent(event.target.value, maximum) };\n setDraft(next);\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => commit(next), COMMIT_DEBOUNCE_MS);\n };\n\n if (!serverState) return null;\n\n return (\n \n {ADJUSTMENT_FIELDS.map(({ key, label }) => (\n \n ))}\n {error &&

{error}

}\n
\n );\n}\n","// Hook: useHudMapSetting\n// Purpose: Reads and persists HUD map visibility/preferences via settings namespaces. Scope: Exposes a small stateful API for map toggle interactions.\nimport { useSettingsNamespace } from '../settings/index.js';\n\nexport function useHudMapSetting() {\n const { value, save } = useSettingsNamespace('page', { hudMapDesktop: false });\n const enabled = Boolean(value?.hudMapDesktop);\n const setEnabled = (next) => {\n save({ hudMapDesktop: Boolean(next) });\n };\n return [enabled, setEnabled];\n}\n","// Settings Panel\n// Purpose: Defines the Settings Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useMemo, useState } from 'react';\nimport { useControlActions, useControlSelector } from '../../controls/index.js';\nimport AuthPanel from '../AuthPanel/index.jsx';\nimport AdminPanel from '../AdminPanel/index.jsx';\nimport KeymapSettings from '../KeymapSettings/index.jsx';\nimport GamepadMappingSettings from '../GamepadMappingSettings/index.jsx';\nimport OvercurrentLimiterPanel from '../OvercurrentLimiterPanel/index.jsx';\nimport Tabs, { Tab, TabList, TabPanel, TabPanels } from '../Tabs/index.jsx';\nimport SessionSnapshot from '../SessionSnapshot/index.jsx';\nimport SocketLogPanel from '../SocketLogPanel/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport VolumeSettingsCard from '../VolumeSettingsCard/index.jsx';\nimport KeyPill from '../vip/VipAudioUploadCard/KeyPill.jsx';\nimport { useHudMapSetting } from '../../hooks/useHudMapSetting.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport { AUDIO_SETTINGS_DEFAULTS, VIDEO_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport ControlHint from '../ControlHint/index.jsx';\nimport {\n DEFAULT_PAGE_THEME_KEY,\n PAGE_THEME_OPTIONS,\n getPageTheme,\n getPageThemeClass,\n normalizePageThemeKey,\n} from '../../themes/index.js';\n\nconst manualTabs = [\n { key: 'start', label: 'Start OI' },\n { key: 'safe', label: 'Safe' },\n { key: 'full', label: 'Full' },\n { key: 'passive', label: 'Passive' },\n { key: 'dock', label: 'Dock' },\n];\n\nconst VIDEO_FILTER_OPTIONS = [\n // \"Color\" is the pass-through mode users can return to when the scene has usable color.\n { key: 'none', label: 'Color' },\n // Grayscale removes the pink IR-contaminated cast while preserving luminance detail.\n { key: 'grayscale', label: 'Gray' },\n // Greenscale keeps the same luminance-first idea as grayscale, then tints it green for\n // users who find green-on-black easier to visually parse in bright outdoor scenes.\n { key: 'greenscale', label: 'Green' },\n];\n\nfunction normalizeVideoFilter(value) {\n // Settings are stored in a browser cookie and can contain stale or hand-edited values.\n // Falling back here keeps the dropdown and media player predictable instead of rendering\n // with an unknown mode.\n return VIDEO_FILTER_OPTIONS.some((option) => option.key === value)\n ? value\n : VIDEO_SETTINGS_DEFAULTS.colorFilter;\n}\n\nfunction SettingRow({ children, inline = false, className = '' }) {\n // Page settings are changed one row at a time, so each row gets a subtle container and a\n // max width. This keeps the label and control together instead of stretching them across\n // the full settings pane.\n return (\n \n {children}\n \n );\n}\n\nfunction SettingHelp({ children }) {\n // Helper text is still secondary, but it no longer uses the very small microcopy scale that\n // made the settings panel difficult to read from a normal driving distance.\n return

{children}

;\n}\n\nfunction ThemePreviewCard({ title, className = '' }) {\n // Use the production CardFrame rather than a lookalike rectangle. This makes the demonstration\n // honest about borders, opaque card surfaces, and the exact amount of theme visible in a gap.\n return (\n \n {/* Neutral placeholder lines suggest real panel content without making the preview look like\n an interactive control surface or tying it to any one driver/PTZ layout. */}\n
\n
\n \n );\n}\n\nfunction RangeSetting({ label, value, disabled = false, onChange }) {\n // Range settings need enough horizontal room for accurate pointer input, so the slider spans\n // the row while the percentage value stays beside the label for quick feedback.\n return (\n \n );\n}\n\nfunction reconnectSocketWithTransport(socket, transport) {\n if (!socket?.io?.opts) return;\n /*\n Socket.IO reads its manager options when reconnecting. Keep this mutation in\n one helper instead of inside the component body so the settings handler only\n expresses the user-facing action: save preference, then reconnect.\n */\n socket.io.opts.transports = transport === 'polling' ? ['polling'] : ['websocket', 'polling'];\n socket.disconnect();\n socket.connect();\n}\n\nexport default function SettingsPanel() {\n const roverId = useControlSelector((control) => control.state.roverId);\n const { sendOiCommand, setSensorStream } = useControlActions();\n const canControl = Boolean(roverId);\n const [hudMapDesktop, setHudMapDesktop] = useHudMapSetting();\n const socket = useSocket();\n const { value: pageSettings, save: savePageSettings } = useSettingsNamespace('page', {\n hudMapDesktop: false,\n connectionTransport: 'websocket',\n swapMobileControlColumns: false,\n driveMacroBackoffEnabled: true,\n interInstanceTransferSettings: true,\n backgroundTheme: DEFAULT_PAGE_THEME_KEY,\n });\n const { value: audioSettings, save: saveAudioSettings } = useSettingsNamespace('audio', AUDIO_SETTINGS_DEFAULTS);\n const { value: videoSettings, save: saveVideoSettings } = useSettingsNamespace('video', VIDEO_SETTINGS_DEFAULTS);\n const connectionTransport = pageSettings?.connectionTransport || 'websocket';\n const swapMobileControlColumns = Boolean(pageSettings?.swapMobileControlColumns);\n const driveMacroBackoffEnabled =\n typeof pageSettings?.driveMacroBackoffEnabled === 'boolean'\n ? pageSettings.driveMacroBackoffEnabled\n : true;\n const interInstanceTransferSettings = pageSettings?.interInstanceTransferSettings !== false;\n const savedPageThemeKey = normalizePageThemeKey(pageSettings?.backgroundTheme);\n const [previewPageThemeKey, setPreviewPageThemeKey] = useState(savedPageThemeKey);\n const previewPageTheme = getPageTheme(previewPageThemeKey);\n const savedPageTheme = getPageTheme(savedPageThemeKey);\n const hasUnsavedPageTheme = previewPageThemeKey !== savedPageThemeKey;\n const masterVolume = Number.isFinite(audioSettings?.masterVolume) ? audioSettings.masterVolume : AUDIO_SETTINGS_DEFAULTS.masterVolume;\n const alertVolume = Number.isFinite(audioSettings?.alertVolume) ? audioSettings.alertVolume : AUDIO_SETTINGS_DEFAULTS.alertVolume;\n const roverVolume = Number.isFinite(audioSettings?.roverVolume) ? audioSettings.roverVolume : AUDIO_SETTINGS_DEFAULTS.roverVolume;\n const mainBrushDuckEnabled =\n typeof audioSettings?.mainBrushDuckEnabled === 'boolean'\n ? audioSettings.mainBrushDuckEnabled\n : typeof audioSettings?.autoLevelEnabled === 'boolean'\n ? audioSettings.autoLevelEnabled\n : AUDIO_SETTINGS_DEFAULTS.mainBrushDuckEnabled;\n const mainBrushDuckAmount = Number.isFinite(audioSettings?.mainBrushDuckAmount)\n ? Math.max(0, Math.min(1, audioSettings.mainBrushDuckAmount))\n : AUDIO_SETTINGS_DEFAULTS.mainBrushDuckAmount;\n const videoColorFilter = normalizeVideoFilter(videoSettings?.colorFilter);\n const videoFilterCycleKeyLabel = ;\n\n useEffect(() => {\n // Settings load after the provider mounts and can also be replaced by an incoming inter-instance\n // transfer. Resynchronize only when the persisted key changes; browsing the local preview does\n // not touch pageSettings, so Previous/Next choices are not accidentally reset.\n setPreviewPageThemeKey(savedPageThemeKey);\n }, [savedPageThemeKey]);\n\n const sensorButtons = useMemo(\n () => [\n { key: 'start', label: 'Enable stream', enable: true },\n { key: 'stop', label: 'Disable stream', enable: false },\n ],\n [],\n );\n\n const handleSensorToggle = (enable) => {\n if (!roverId) return;\n setSensorStream(enable);\n };\n\n const handleTransportChange = (event) => {\n const next = event.target.value;\n savePageSettings((current) => ({ ...(current ?? {}), connectionTransport: next }));\n reconnectSocketWithTransport(socket, next);\n };\n\n const handleAudioRange = (key) => (event) => {\n const raw = Number(event.target.value);\n const next = Number.isFinite(raw) ? Math.max(0, Math.min(1, raw)) : 0;\n saveAudioSettings((current) => ({ ...(current ?? {}), [key]: next }));\n };\n\n const handleMainBrushDuckEnabled = (event) => {\n const checked = Boolean(event.target.checked);\n saveAudioSettings((current) => ({ ...(current ?? {}), mainBrushDuckEnabled: checked }));\n };\n\n const handleSwapMobileControlColumns = (event) => {\n const checked = Boolean(event.target.checked);\n savePageSettings((current) => ({ ...(current ?? {}), swapMobileControlColumns: checked }));\n };\n\n const handleDriveMacroBackoffEnabled = (event) => {\n const checked = Boolean(event.target.checked);\n savePageSettings((current) => ({ ...(current ?? {}), driveMacroBackoffEnabled: checked }));\n };\n\n const handleInterInstanceTransferSettings = (event) => {\n const checked = Boolean(event.target.checked);\n /*\n This replaces the old per-click transfer confirmation. Keeping the choice\n in Page settings makes external-server navigation immediate while still\n letting users opt out of sending their current settings cookie.\n */\n savePageSettings((current) => ({ ...(current ?? {}), interInstanceTransferSettings: checked }));\n };\n\n const movePageThemePreview = (direction) => {\n const currentIndex = PAGE_THEME_OPTIONS.findIndex((theme) => theme.key === previewPageThemeKey);\n const safeIndex = currentIndex >= 0 ? currentIndex : 0;\n // Theme browsing wraps in both directions so the Back and Next buttons remain useful at the\n // ends of the catalog instead of forcing the user to reverse through every previous option.\n const nextIndex = (safeIndex + direction + PAGE_THEME_OPTIONS.length) % PAGE_THEME_OPTIONS.length;\n setPreviewPageThemeKey(PAGE_THEME_OPTIONS[nextIndex].key);\n };\n\n const handlePageThemeSelect = (event) => {\n setPreviewPageThemeKey(normalizePageThemeKey(event.target.value));\n };\n\n const handlePageThemeSave = () => {\n // Browsing is intentionally local. Persist only this explicit choice so opening Page settings\n // and experimenting with patterns cannot unexpectedly alter the driver or PTZ page background.\n savePageSettings((current) => ({\n ...(current ?? {}),\n backgroundTheme: previewPageThemeKey,\n }));\n };\n\n const handleVideoFilterChange = (event) => {\n const nextFilter = normalizeVideoFilter(event.target.value);\n\n // Merge into the current video namespace so future video preferences can coexist with this\n // filter choice. This follows the same persisted-settings shape used by page/audio options.\n saveVideoSettings((current) => ({\n ...(current ?? {}),\n colorFilter: nextFilter,\n }));\n };\n\n // Settings owns grids outside its individual CardFrames. This boundary makes\n // those grids react to the panel's allocated width in any desktop column.\n return (\n
\n \n \n {/* Four long labels cannot remain readable in one narrow sidebar row.\n Each tab claims half the row until this Settings container is wide,\n where the minimum is removed and the original single row returns. */}\n Keybindings\n Controller\n Page settings\n Admin\n \n \n \n
\n \n
\n
\n \n
\n \n
\n
\n \n {/* The normal two-column settings page returns at the width where two\n useful cards actually fit. The former 48rem threshold was unreachable\n in the old driver pane and incorrectly made its fallback permanent. */}\n
\n \n {/* The selector owns a full row at narrow widths. Navigation is a\n separate flex row so neither button can squeeze the select text. */}\n
\n \n {PAGE_THEME_OPTIONS.map((theme) => (\n \n ))}\n \n
\n movePageThemePreview(-1)}\n >\n Back\n \n movePageThemePreview(1)}\n >\n Next\n \n
\n
\n\n {/* This miniature layout contains both a full-height vertical seam and horizontal\n seams between stacked cards. It exercises the exact gap directions the artwork\n must serve on the driver and PTZ pages. */}\n \n \n \n \n \n
\n\n
\n

\n Previewing {previewPageTheme.label}\n {hasUnsavedPageTheme ? (\n ; saved theme is {savedPageTheme.label}.\n ) : (\n ; this is your saved theme.\n )}\n

\n \n Save theme\n \n
\n \n \n \n setHudMapDesktop(e.target.checked)}\n />\n Show top-down map in HUD (desktop)\n \n Mobile HUD keeps the map on by default.\n \n \n {/* The dropdown mirrors the other Page settings controls and writes through the\n existing cookie-backed settings provider, so the choice survives reloads without\n adding rover-side state. */}\n \n Rover video filter\n \n {VIDEO_FILTER_OPTIONS.map((option) => (\n \n ))}\n \n \n \n {/* Use the live keymap value here instead of hardcoding the default key because\n this shortcut is user-configurable in the Keybindings tab. */}\n \n Use\n {videoFilterCycleKeyLabel ? : null}\n to cycle filters. Applies only to rover camera pixels; HUD overlays stay full color.\n \n \n \n \n \n \n Swap control columns (put joystick on the left)\n \n \n \n \n \n Enable backward bump in drive macro\n \n \n \n {/* Audio sliders are stacked inside the wider card so the value chip, label, and\n slider remain easy to compare while preserving enough drag distance. */}\n \n \n \n \n Main brush ducking\n \n \n \n \n Lowers rover audio only while the main brush is running.\n \n \n {/* Volume is server-backed rather than cookie-backed: it changes what the\n rover plays for everyone in the room, so the server owns the limits. */}\n \n \n \n Transport\n \n \n \n \n \n Switching reconnects your session.\n \n \n \n \n Transfer settings when opening external servers\n \n \n Sends this browser's saved identity and page settings to the destination server automatically.\n \n \n
\n \n \n
\n \n
\n {manualTabs.map((tab) => (\n sendOiCommand(tab.key)}\n disabled={!canControl}\n className=\"button-dark text-xs disabled:opacity-30\"\n >\n {tab.label}\n \n ))}\n
\n
\n \n
\n {sensorButtons.map((btn) => (\n handleSensorToggle(btn.enable)}\n disabled={!canControl}\n className=\"flex-1 button-dark text-xs disabled:opacity-30\"\n >\n {btn.label}\n \n ))}\n
\n {!canControl &&

Assign a rover to toggle streams.

}\n
\n \n \n \n \n \n
\n
\n \n \n
\n );\n}\n","// Driver Settings Tab\n// Purpose: Owns the shared driver settings panel placement.\nimport { TabPanel } from '../../../../../components/Tabs/index.jsx';\nimport SettingsPanel from '../../../../../components/SettingsPanel/index.jsx';\nimport { themeStackClass } from '../../../../../themes/index.js';\nimport { useDriverLayout } from '../../../DriverLayoutContext.jsx';\n\nexport default function SettingsTab() {\n const layout = useDriverLayout();\n const wrapped = layout !== 'desktop';\n return (\n \n {wrapped ?
: }\n
\n );\n}\n","// Desktop Driver Layout\n// Purpose: Places existing site columns around the full-height rover video and integrated HUD.\n// Scope: Owns the default desktop composition only; video and HUD behavior remain component concerns.\nimport NewDriveVideo from '../../../components/NewDriveVideo/index.jsx';\nimport ChatPanel from '../../../components/ChatPanel/index.jsx';\nimport RawUserPilePanel from '../../../components/RawUserPilePanel/index.jsx';\nimport RoverQueuesPanel from '../../../components/RoverQueuesPanel/index.jsx';\nimport ReplaySourcesPanel from '../../../components/ReplaySourcesPanel/index.jsx';\nimport HomeAssistantControls from '../../../components/HomeAssistantControls/index.jsx';\nimport RoomCameraPanel from '../../../components/RoomCameraPanel/index.jsx';\nimport GlobalObjectiveBanner from '../../../components/GlobalObjectiveBanner/index.jsx';\nimport DriverAdCard from '../../../components/DriverAdCard/index.jsx';\nimport OverseerPreferencePanel from '../../../components/OverseerPreferencePanel/index.jsx';\nimport PtzQueueCard from '../../../components/PtzCamera/index.jsx';\nimport { LinkButtonsPanel } from '../../../components/UserListPanel/index.jsx';\nimport Tabs, { Tab, TabList, TabPanel, TabPanels } from '../../../components/Tabs/index.jsx';\nimport ActivitiesTab from '../tabs/shared/ActivitiesTab/index.jsx';\nimport VipTab from '../tabs/shared/VipTab/index.jsx';\nimport VipTabButton from '../tabs/shared/VipTabButton/index.jsx';\nimport HelpTab from '../tabs/shared/HelpTab/index.jsx';\nimport SettingsTab from '../tabs/shared/SettingsTab/index.jsx';\nimport { themeGapClass } from '../../../themes/index.js';\n\nfunction LeftColumnTabs() {\n return (\n \n \n Room\n Activities\n \n \n \n \n
\n {/* The objective belongs below the selector so the tab bar remains the first visible,\n sticky control at the top of the independently scrolling left column. */}\n \n \n \n
\n
\n {/* These shared tabs retain their existing feature gates and mounted-media behavior. */}\n \n \n
\n
\n );\n}\n\nfunction CommunityColumn() {\n return (\n
\n {/* A fixed initial chat height keeps the composer usable in a narrow column. The sidebar\n itself scrolls, so every rover/site panel below remains reachable on a 720p display. */}\n
\n \n
\n \n \n \n \n \n \n
\n );\n}\n\nfunction RightColumnTabs() {\n return (\n \n \n Chat/Rovers\n Help\n Settings\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default function DesktopLayout() {\n return (\n /* Equal 17rem minimums keep reused site cards usable on a 1280px desktop.\n The center track deliberately retains a zero minimum so the 4:3 video,\n rather than either sidebar, gives up width when the viewport is tight. */\n \n \n \n \n \n\n \n\n \n \n \n
\n );\n}\n","import RoverLabel from '../../RoverLabel/index.jsx';\n\nexport default function RoverLabelOverlay({\n variant = 'default',\n label,\n roverColor = null,\n driverLabel = null,\n mobileHud = false,\n labelScale = 1,\n}) {\n const labelPadClass = mobileHud ? 'px-0.25 py-0.25' : 'px-0.5 py-0.5';\n const labelTextClass = mobileHud ? 'text-[0.55rem]' : 'text-[0.8rem]';\n const labelPosClass = 'bottom-0.5';\n const labelWrapperStyle = {\n transform: `translateX(-50%) scale(${labelScale})`,\n transformOrigin: 'center bottom',\n };\n\n if (variant === 'spectator') {\n return (\n
\n
\n \n {driverLabel ? • {driverLabel} : null}\n
\n
\n );\n }\n\n return (\n
\n
\n \n
\n
\n );\n}\n","export default function SpectatorTelemetryOverlay({ sensors, telemetry = null, mobileHud = false }) {\n const voltageMv = telemetry?.voltageMv ?? sensors?.voltageMv ?? null;\n const currentMa = telemetry?.currentMa ?? sensors?.currentMa ?? null;\n const batteryChargeMah = telemetry?.batteryChargeMah ?? sensors?.batteryChargeMah ?? null;\n const oiLabel = telemetry?.oiModeLabel ?? sensors?.oiMode?.label ?? 'Unknown';\n const docked = telemetry?.homeBase ?? Boolean(sensors?.chargingSources?.homeBase);\n const chargingLabel = telemetry?.chargingStateLabel ?? sensors?.chargingState?.label ?? '';\n const statusPadClass = mobileHud ? 'px-0.25 py-0.25' : 'px-1 py-0.5';\n const telemetryPosClass = mobileHud ? 'left-0.5 top-1/2' : 'left-1 top-1/2';\n const telemetryTextClass = mobileHud ? 'text-[0.45rem]' : 'text-[0.65rem]';\n const telemetryEntries = [\n ['Voltage', voltageMv != null ? `${(voltageMv / 1000).toFixed(2)} V` : '--'],\n ['Current', currentMa != null ? `${currentMa} mA` : '--'],\n ['Charge', batteryChargeMah != null ? `${batteryChargeMah}` : '--'],\n ['OI', oiLabel || '--'],\n ];\n const charging = Boolean(chargingLabel && chargingLabel.toLowerCase() !== 'not charging');\n const oiNormalized = oiLabel.toLowerCase();\n const oiTone =\n oiNormalized === 'full'\n ? 'bg-emerald-500/80 text-emerald-50'\n : oiNormalized === 'safe'\n ? 'bg-amber-400/80 text-amber-950'\n : oiNormalized === 'passive'\n ? 'bg-slate-700/80 text-slate-100'\n : 'bg-slate-700/60 text-slate-200';\n const dockTone = docked ? 'bg-emerald-500/80 text-emerald-50' : 'bg-slate-700/70 text-slate-200';\n const chargingTone = charging\n ? 'bg-emerald-500/80 text-emerald-50'\n : docked\n ? 'bg-amber-400/80 text-amber-950'\n : 'bg-slate-700/70 text-slate-200';\n\n return (\n \n
\n
\n {docked ? 'Docked' : 'Undocked'}\n \n {charging ? 'Charging' : docked ? 'Not charging' : 'Not charging'}\n \n OI: {oiLabel}\n
\n {telemetryEntries.map(([labelText, value]) => (\n \n {labelText}\n {value}\n \n ))}\n
\n
\n );\n}\n","// helpers\n// Purpose: Defines the helpers module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport function clamp01(value) {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function toRad(angleDeg) {\n return ((angleDeg - 90) * Math.PI) / 180;\n}\n\nexport function polarToCartesian(cx, cy, r, angleDeg) {\n const rad = toRad(angleDeg);\n return {\n x: cx + r * Math.cos(rad),\n y: cy + r * Math.sin(rad),\n };\n}\n\nexport function describeArc(cx, cy, r, startDeg, endDeg) {\n let start = startDeg;\n let end = endDeg;\n if (end <= start) end += 360;\n const startPt = polarToCartesian(cx, cy, r, start);\n const endPt = polarToCartesian(cx, cy, r, end);\n return ['M', startPt.x, startPt.y, 'A', r, r, 0, 0, 1, endPt.x, endPt.y].join(' ');\n}\n\nexport function currentColor(value, overcurrent) {\n if (overcurrent) return '#ef4444';\n const mag = Math.abs(value);\n if (mag > 900) return '#f59e0b';\n if (mag > 300) return '#22c55e';\n return '#64748b';\n}\n\nexport function lightBumpColor(value, max) {\n if (value == null || value <= 0) return 'hsl(200 60% 18%)';\n const maxVal = max || 1;\n const norm = clamp01(value / maxVal);\n const eased = Math.pow(norm, 0.45);\n const startHue = 200;\n const hue = (startHue + eased * 360) % 360;\n return `hsl(${hue} 100% 60%)`;\n}\n\nexport function buildSegments({ count, totalSpan, gap, startAngle }) {\n const usable = totalSpan - gap * (count - 1);\n const width = usable / count;\n const segments = [];\n let cursor = startAngle;\n for (let i = 0; i < count; i += 1) {\n const end = cursor + width;\n segments.push({ start: cursor, end });\n cursor = end + gap;\n }\n return segments;\n}\n","// visuals\n// Purpose: Defines the visuals module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport React, { useMemo } from 'react';\nimport { clamp01, currentColor, describeArc, polarToCartesian, toRad } from './helpers.js';\n\nexport const ArcSegment = React.memo(function ArcSegment({ cx, cy, rInner, rOuter, startDeg, endDeg, color, pulse = false, opacity = 1 }) {\n const rMid = (rInner + rOuter) / 2;\n const strokeWidth = rOuter - rInner;\n const path = useMemo(\n () => describeArc(cx, cy, rMid, startDeg, endDeg),\n [cx, cy, endDeg, rMid, startDeg],\n );\n return (\n <>\n \n {pulse ? (\n \n ) : null}\n \n );\n});\n\nexport const CurvedArcBar = React.memo(function CurvedArcBar({\n cx,\n cy,\n rInner,\n rOuter,\n startDeg,\n endDeg,\n percent,\n backgroundColor,\n fillColor,\n fillFromEnd = false,\n}) {\n const safePercent = clamp01(percent ?? 0);\n const rMid = (rInner + rOuter) / 2;\n const strokeWidth = rOuter - rInner;\n const backgroundPath = useMemo(\n () => describeArc(cx, cy, rMid, startDeg, endDeg),\n [cx, cy, endDeg, rMid, startDeg],\n );\n const fillPath = useMemo(() => {\n // The foreground bar uses the same arc geometry as the background pill.\n // Mirroring is done by anchoring the fill to the opposite end of the arc,\n // which keeps left/right cliff sensors visually symmetric around the robot.\n const span = endDeg - startDeg;\n const fillSpan = span * safePercent;\n const fillStart = fillFromEnd ? endDeg - fillSpan : startDeg;\n const fillEnd = fillFromEnd ? endDeg : startDeg + fillSpan;\n return describeArc(cx, cy, rMid, fillStart, fillEnd);\n }, [cx, cy, endDeg, fillFromEnd, rMid, safePercent, startDeg]);\n\n return (\n <>\n \n {safePercent > 0 ? (\n \n ) : null}\n \n );\n});\n\nexport const ConeSegment = React.memo(function ConeSegment({ cx, cy, rBase, rTip, startDeg, endDeg, color, value, max }) {\n const mid = (startDeg + endDeg) / 2;\n const norm = clamp01(value != null ? value / (max || 1) : 0);\n const eased = Math.pow(norm, 0.35);\n const filledR = rBase - (rBase - rTip) * eased;\n const barR = Math.max(rTip, Math.min(filledR, rBase));\n const fg = useMemo(() => {\n // The cone geometry is still dynamic because the filled radius changes\n // with light-bump strength, but the memo prevents unrelated parent renders\n // from rebuilding the SVG path string for every cone.\n const tip = polarToCartesian(cx, cy, rTip, mid);\n const filledA = polarToCartesian(cx, cy, barR, startDeg);\n const filledB = polarToCartesian(cx, cy, barR, endDeg);\n return `M ${tip.x} ${tip.y} L ${filledA.x} ${filledA.y} L ${filledB.x} ${filledB.y} Z`;\n }, [barR, cx, cy, endDeg, mid, rTip, startDeg]);\n\n return ;\n});\n\nexport const WheelVisual = React.memo(function WheelVisual({ cx, cy, current, speed, drop, overcurrent, label }) {\n const currentMagnitude = Math.abs(current);\n const currentPercent = clamp01(currentMagnitude / 1200);\n const currentFillColor = currentColor(current, overcurrent);\n const hasSpeed = Number.isFinite(Number(speed));\n const speedValue = hasSpeed ? Number(speed) : 0;\n const speedMagnitude = Math.abs(speedValue);\n const speedPercent = clamp01(speedMagnitude / 500);\n const barH = 52;\n const barW = 8;\n const gap = 3;\n const groupWidth = 24;\n const groupHeight = 58;\n const barTop = -barH / 2;\n const barBottom = barH / 2;\n const outsideSign = label === 'L' ? -1 : 1;\n const insideSign = -outsideSign;\n /*\n The wheel glyphs mirror each other around the robot body. Current belongs\n on the inside edge because it is a motor/load signal tied to the chassis,\n while speed belongs on the outside edge where wheel motion is easiest to\n read at a glance.\n */\n const speedCenterX = outsideSign * (barW / 2 + gap / 2);\n const currentCenterX = insideSign * (barW / 2 + gap / 2);\n const currentFill = barH * currentPercent;\n const speedFill = (barH / 2) * speedPercent;\n const speedIsForward = speedValue >= 0;\n const speedFillY = speedIsForward ? -speedFill : 0;\n const speedColor = hasSpeed ? (speedIsForward ? '#38bdf8' : '#f59e0b') : '#475569';\n const dropLabelRotation = label === 'L' ? -90 : 90;\n\n return (\n \n \n\n {/*\n Keep the speed bar in the same compact visual language as the original\n wheel current bar. The only extra cue is the zero line: encoder-derived\n forward speed fills above it, while reverse speed fills below it.\n */}\n \n \n {hasSpeed && speedFill > 0 ? (\n \n ) : null}\n\n {/*\n Current stays as the familiar bottom-up load meter. Keeping both bars\n narrow avoids turning this layer into a dashboard and preserves the\n original top-down sensor-map density.\n */}\n \n \n\n {drop ? (\n <>\n {/*\n The dropped state covers the existing compact wheel visual instead\n of adding another status column. This satisfies the \"whole wheel is\n dropped\" meaning without increasing the layer footprint.\n */}\n \n \n Dropped\n \n \n ) : null}\n {label}\n \n );\n});\n\nexport const SideBrushVisual = React.memo(function SideBrushVisual({ cx, cy, current, overcurrent }) {\n let mag = Math.abs(current);\n if (mag < 10) mag = 0;\n const color = currentColor(current * 3, overcurrent);\n const armLength = 43;\n const spinDuration = mag > 0 ? 0.65 : null;\n const spinDirection = 'reverse';\n\n return (\n \n \n {[0, 120, 240].map((deg) => {\n const rad = toRad(deg);\n const x2 = cx + armLength * Math.cos(rad);\n const y2 = cy + armLength * Math.sin(rad);\n return ;\n })}\n {overcurrent ? : null}\n \n );\n});\n\nexport const ReadoutBar = React.memo(function ReadoutBar({\n x,\n y,\n width,\n height,\n label,\n valueText,\n percent,\n color = '#38bdf8',\n missing = false,\n}) {\n const safePercent = clamp01(percent ?? 0);\n const fillWidth = width * safePercent;\n\n return (\n \n \n \n \n {label}\n {valueText}\n \n );\n});\n\nexport const RawFrameStrip = React.memo(function RawFrameStrip({ x, y, width, height, bytes }) {\n const safeBytes = Array.isArray(bytes) ? bytes : [];\n const count = safeBytes.length;\n const gap = 0;\n const cellWidth = count > 0 ? Math.max(0.8, (width - gap * (count - 1)) / count) : width;\n\n return (\n \n {safeBytes.map((byte, idx) => {\n // This strip intentionally visualizes the raw decoded frame bytes\n // instead of decoded sensor meanings. Hue makes byte identity visible,\n // while bar height makes quiet/low and loud/high byte values distinct.\n const value = Number.isFinite(byte) ? Math.max(0, Math.min(255, byte)) : 0;\n const normalized = value / 255;\n const barHeight = 2 + normalized * (height - 5);\n const hue = Math.round(normalized * 300 + 35);\n const barX = idx * (cellWidth + gap);\n const barY = height - 2 - barHeight;\n\n return (\n \n );\n })}\n \n );\n});\n\nexport const MainBrushVisual = React.memo(function MainBrushVisual({ cx, cy, current, overcurrent, variant, dirtLeft, dirtRight }) {\n const mag = Math.abs(current);\n const color = currentColor(current, overcurrent);\n const opacity = 1;\n const rollerWidth = 96;\n const rollerHeight = 12;\n const patternA = `main-brush-pattern-a-${variant}`;\n const patternB = `main-brush-pattern-b-${variant}`;\n const dur = mag > 0 ? 0.6 : null;\n const dir = current >= 0 ? 1 : -1;\n\n const renderDirtDot = (dotCx, dotCy, value) => {\n // The Create dirt packets are impulse-style 0-255 counters rather than a\n // calibrated percentage. A low divisor keeps small real hits visible, while\n // clamp01 prevents rare large values from growing beyond the brush layout.\n const numericValue = Number.isFinite(Number(value)) ? Math.max(0, Number(value)) : 0;\n const strength = clamp01(numericValue / 80);\n const radius = 2.5 + strength * 5.5;\n const fill = numericValue > 0 ? '#fbbf24' : '#475569';\n const stroke = numericValue > 0 ? '#fde68a' : '#1e293b';\n return (\n 0 ? 0.95 : 0.45}\n className={numericValue > 0 ? 'animate-pulse' : ''}\n />\n );\n };\n\n return (\n \n \n {[patternA, patternB].map((id, idx) => (\n \n \n \n {dur ? (\n \n ) : null}\n \n ))}\n \n \n \n {renderDirtDot(cx - rollerWidth / 4, cy - 8, dirtLeft)}\n {renderDirtDot(cx + rollerWidth / 4, cy + 8, dirtRight)}\n {overcurrent ? (\n \n ) : null}\n \n );\n});\n","import { useVisualTelemetrySelector } from '../../../context/TelemetryContext.jsx';\n\nexport function rawNumber(value, fallback = null) {\n // Top-down visual layers intentionally consume raw sensor resolution. The\n // visual subscription can still throttle notification cadence for mobile or\n // spectator layouts, but this helper never rounds or buckets the value.\n if (value == null || !Number.isFinite(Number(value))) return fallback;\n return Number(value);\n}\n\nexport function useTopDownTelemetry(roverId, sensors, selector, equalityFn) {\n // Raw sensor snapshots are kept for fallback/static call sites. Live map\n // rendering should subscribe by rover id, so passing null while raw sensors\n // are supplied avoids a wasted live subscription and keeps hook order stable.\n const selected = useVisualTelemetrySelector(sensors ? null : roverId, selector, equalityFn);\n return sensors ? selector({ sensors }) : selected;\n}\n","import React from 'react';\nimport { shallowObjectEqual } from '../../../../context/TelemetryContext.jsx';\nimport { ArcSegment } from '../../visuals.jsx';\nimport { useTopDownTelemetry } from '../layerTelemetry.js';\n\nconst EMPTY_BUMP_TELEMETRY = Object.freeze({\n bumpLeft: false,\n bumpRight: false,\n});\n\nfunction selectBumpTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_BUMP_TELEMETRY;\n const bumps = sensors.bumpsAndWheelDrops || {};\n return {\n bumpLeft: Boolean(bumps.bumpLeft),\n bumpRight: Boolean(bumps.bumpRight),\n };\n}\n\nfunction BumpLayer({ roverId, sensors, geometry }) {\n const telemetry = useTopDownTelemetry(roverId, sensors, selectBumpTelemetry, shallowObjectEqual);\n const bumpDepress = 6;\n const bumpLeftOffset = telemetry.bumpLeft ? bumpDepress : 0;\n const bumpRightOffset = telemetry.bumpRight ? bumpDepress : 0;\n\n return (\n <>\n \n \n \n );\n}\n\nexport default React.memo(BumpLayer);\n","import React from 'react';\nimport { shallowObjectEqual } from '../../../../context/TelemetryContext.jsx';\nimport { CurvedArcBar } from '../../visuals.jsx';\nimport { rawNumber, useTopDownTelemetry } from '../layerTelemetry.js';\n\nconst EMPTY_CLIFF_TELEMETRY = Object.freeze({\n cliffLeftSignal: null,\n cliffFrontLeftSignal: null,\n cliffFrontRightSignal: null,\n cliffRightSignal: null,\n cliffLeft: false,\n cliffFrontLeft: false,\n cliffFrontRight: false,\n cliffRight: false,\n});\n\nfunction selectCliffTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_CLIFF_TELEMETRY;\n return {\n cliffLeftSignal: rawNumber(sensors.cliffLeftSignal),\n cliffFrontLeftSignal: rawNumber(sensors.cliffFrontLeftSignal),\n cliffFrontRightSignal: rawNumber(sensors.cliffFrontRightSignal),\n cliffRightSignal: rawNumber(sensors.cliffRightSignal),\n cliffLeft: Boolean(sensors.cliffLeft),\n cliffFrontLeft: Boolean(sensors.cliffFrontLeft),\n cliffFrontRight: Boolean(sensors.cliffFrontRight),\n cliffRight: Boolean(sensors.cliffRight),\n };\n}\n\nfunction cliffSignalPercent(value) {\n // Create cliff signals are unsigned 12-bit-ish analog values in this stream.\n // The curved bar shows the raw signal magnitude as fill amount, while the\n // cliff boolean controls the danger background separately.\n if (value == null || !Number.isFinite(Number(value))) return 0;\n return Math.max(0, Math.min(1, Number(value) / 4095));\n}\n\nfunction CliffLayer({ roverId, sensors, geometry }) {\n const telemetry = useTopDownTelemetry(roverId, sensors, selectCliffTelemetry, shallowObjectEqual);\n\n return (\n <>\n {geometry.cliffSegments.map((seg) => (\n \n ))}\n \n );\n}\n\nexport default React.memo(CliffLayer);\n","import React from 'react';\nimport { shallowObjectEqual } from '../../../../context/TelemetryContext.jsx';\nimport { ReadoutBar } from '../../visuals.jsx';\nimport { rawNumber, useTopDownTelemetry } from '../layerTelemetry.js';\n\nconst EMPTY_ELECTRICAL_TELEMETRY = Object.freeze({\n voltageMv: null,\n currentMa: null,\n chargingStateLabel: '',\n});\n\nfunction selectElectricalTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_ELECTRICAL_TELEMETRY;\n return {\n voltageMv: rawNumber(sensors.voltageMv),\n currentMa: rawNumber(sensors.currentMa),\n chargingStateLabel: sensors.chargingState?.label || '',\n };\n}\n\nfunction formatVoltage(voltageMv) {\n if (voltageMv == null || !Number.isFinite(Number(voltageMv))) return '--.-V';\n return `${(Number(voltageMv) / 1000).toFixed(1)}V`;\n}\n\nfunction formatCurrent(currentMa) {\n if (currentMa == null || !Number.isFinite(Number(currentMa))) return '---mA';\n const current = Number(currentMa);\n const prefix = current > 0 ? '+' : '';\n return `${prefix}${Math.round(current)}mA`;\n}\n\nfunction voltagePercent(voltageMv) {\n // This is intentionally a display range, not battery-health logic. A Create\n // 2-class pack usually lives around the mid-teens in volts, so 12-17V gives\n // the tiny map bar useful movement without pretending to be a precise fuel\n // gauge. The real battery percent remains handled by the dedicated battery UI.\n if (voltageMv == null || !Number.isFinite(Number(voltageMv))) return 0;\n return clampDisplay((Number(voltageMv) - 12000) / 5000);\n}\n\nfunction currentPercent(currentMa) {\n // Current changes sign depending on charge/discharge direction, but the bar\n // is meant to show load magnitude. The signed text beside it preserves the\n // actual direction while the fill gives a quick \"how much is happening\" cue.\n if (currentMa == null || !Number.isFinite(Number(currentMa))) return 0;\n return clampDisplay(Math.abs(Number(currentMa)) / 2500);\n}\n\nfunction clampDisplay(value) {\n return Math.max(0, Math.min(1, value));\n}\n\nfunction ElectricalReadoutLayer({ roverId, sensors, geometry }) {\n const telemetry = useTopDownTelemetry(roverId, sensors, selectElectricalTelemetry, shallowObjectEqual);\n\n return (\n <>\n \n \n \n );\n}\n\nexport default React.memo(ElectricalReadoutLayer);\n","import React from 'react';\nimport { shallowArrayEqual } from '../../../../context/TelemetryContext.jsx';\nimport { lightBumpColor } from '../../helpers.js';\nimport { ConeSegment } from '../../visuals.jsx';\nimport { rawNumber, useTopDownTelemetry } from '../layerTelemetry.js';\n\nconst EMPTY_LIGHT_BUMP_TELEMETRY = Object.freeze([null, null, null, null, null, null]);\n\nfunction selectLightBumpTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_LIGHT_BUMP_TELEMETRY;\n return [\n rawNumber(sensors.lightBumpLeftSignal),\n rawNumber(sensors.lightBumpFrontLeftSignal),\n rawNumber(sensors.lightBumpCenterLeftSignal),\n rawNumber(sensors.lightBumpCenterRightSignal),\n rawNumber(sensors.lightBumpFrontRightSignal),\n rawNumber(sensors.lightBumpRightSignal),\n ];\n}\n\nfunction LightBumpLayer({ roverId, sensors, geometry }) {\n const lightValues = useTopDownTelemetry(roverId, sensors, selectLightBumpTelemetry, shallowArrayEqual);\n const lightMaxSamples = lightValues.filter((value) => value != null);\n const maxLight = lightMaxSamples.length ? Math.max(...lightMaxSamples, 1200) : 1200;\n\n return (\n <>\n {geometry.lightSegments.map((seg, idx) => {\n const value = lightValues[idx];\n const color = lightBumpColor(value, maxLight);\n const tipR = geometry.lightRingOuter + 4;\n const baseR = tipR + 28;\n return (\n \n );\n })}\n \n );\n}\n\nexport default React.memo(LightBumpLayer);\n","import React from 'react';\nimport { shallowObjectEqual } from '../../../../context/TelemetryContext.jsx';\nimport { MainBrushVisual } from '../../visuals.jsx';\nimport { rawNumber, useTopDownTelemetry } from '../layerTelemetry.js';\n\nconst EMPTY_MAIN_BRUSH_TELEMETRY = Object.freeze({\n mainBrushCurrentMa: 0,\n mainBrushOvercurrent: false,\n dirtDetectLeft: null,\n dirtDetect: null,\n});\n\nfunction selectMainBrushTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_MAIN_BRUSH_TELEMETRY;\n return {\n mainBrushCurrentMa: rawNumber(sensors.mainBrushCurrentMa, 0),\n mainBrushOvercurrent: Boolean(sensors.wheelOvercurrents?.mainBrush),\n dirtDetectLeft: rawNumber(sensors.dirtDetectLeft),\n dirtDetect: rawNumber(sensors.dirtDetect),\n };\n}\n\nfunction MainBrushLayer({ roverId, sensors, geometry, variant }) {\n const telemetry = useTopDownTelemetry(roverId, sensors, selectMainBrushTelemetry, shallowObjectEqual);\n\n return (\n \n );\n}\n\nexport default React.memo(MainBrushLayer);\n","import React from 'react';\nimport { shallowObjectEqual } from '../../../../context/TelemetryContext.jsx';\nimport { SideBrushVisual } from '../../visuals.jsx';\nimport { rawNumber, useTopDownTelemetry } from '../layerTelemetry.js';\n\nconst EMPTY_SIDE_BRUSH_TELEMETRY = Object.freeze({\n sideBrushCurrentMa: 0,\n sideBrushOvercurrent: false,\n});\n\nfunction selectSideBrushTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_SIDE_BRUSH_TELEMETRY;\n return {\n sideBrushCurrentMa: rawNumber(sensors.sideBrushCurrentMa, 0),\n sideBrushOvercurrent: Boolean(sensors.wheelOvercurrents?.sideBrush),\n };\n}\n\nfunction SideBrushLayer({ roverId, sensors, geometry }) {\n const telemetry = useTopDownTelemetry(roverId, sensors, selectSideBrushTelemetry, shallowObjectEqual);\n\n return (\n \n );\n}\n\nexport default React.memo(SideBrushLayer);\n","import React from 'react';\nimport { shallowObjectEqual } from '../../../../context/TelemetryContext.jsx';\nimport { WheelVisual } from '../../visuals.jsx';\nimport { rawNumber, useTopDownTelemetry } from '../layerTelemetry.js';\n\nconst EMPTY_WHEEL_TELEMETRY = Object.freeze({\n wheelDropLeft: false,\n wheelDropRight: false,\n leftWheelOvercurrent: false,\n rightWheelOvercurrent: false,\n wheelLeftCurrentMa: 0,\n wheelRightCurrentMa: 0,\n wheelLeftSpeedMmPerSecond: null,\n wheelRightSpeedMmPerSecond: null,\n});\n\nfunction selectWheelTelemetry(frame) {\n const sensors = frame?.sensors;\n if (!sensors) return EMPTY_WHEEL_TELEMETRY;\n const bumps = sensors.bumpsAndWheelDrops || {};\n const wheelOver = sensors.wheelOvercurrents || {};\n const wheelSpeeds = sensors.wheelSpeedsMmPerSecond || {};\n return {\n wheelDropLeft: Boolean(bumps.wheelDropLeft),\n wheelDropRight: Boolean(bumps.wheelDropRight),\n leftWheelOvercurrent: Boolean(wheelOver.leftWheel),\n rightWheelOvercurrent: Boolean(wheelOver.rightWheel),\n wheelLeftCurrentMa: rawNumber(sensors.wheelLeftCurrentMa, 0),\n wheelRightCurrentMa: rawNumber(sensors.wheelRightCurrentMa, 0),\n /*\n Speed is synthesized on the server from encoder deltas, so it can be null\n on the first frame or after an ignored encoder jump. Keeping null distinct\n from 0 lets the wheel visual show \"no valid speed sample\" without making\n an unknown state look like a stopped rover.\n */\n wheelLeftSpeedMmPerSecond: rawNumber(wheelSpeeds.left, null),\n wheelRightSpeedMmPerSecond: rawNumber(wheelSpeeds.right, null),\n };\n}\n\nfunction WheelLayer({ roverId, sensors, geometry }) {\n const telemetry = useTopDownTelemetry(roverId, sensors, selectWheelTelemetry, shallowObjectEqual);\n\n return (\n <>\n \n \n \n );\n}\n\nexport default React.memo(WheelLayer);\n","// Top Down Map Content\n// Purpose: Defines the Top Down Map Content module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport React, { useMemo } from 'react';\nimport { buildSegments } from './helpers.js';\nimport BumpLayer from './layers/BumpLayer/index.jsx';\nimport CliffLayer from './layers/CliffLayer/index.jsx';\nimport ElectricalReadoutLayer from './layers/ElectricalReadoutLayer/index.jsx';\nimport LightBumpLayer from './layers/LightBumpLayer/index.jsx';\nimport MainBrushLayer from './layers/MainBrushLayer/index.jsx';\n// import RawFrameStripLayer from './layers/RawFrameStripLayer/index.jsx';\nimport SideBrushLayer from './layers/SideBrushLayer/index.jsx';\nimport WheelLayer from './layers/WheelLayer/index.jsx';\n\nconst LIGHT_LABELS = ['L', 'FL', 'CL', 'CR', 'FR', 'R'];\n\nfunction buildGeometry(size, variant) {\n const center = size / 2;\n const offsetY = size * 0.05;\n const centerX = center;\n const centerY = center + offsetY;\n const innerCircle = center * 0.8;\n const lightRingInner = innerCircle - 4;\n const lightRingOuter = innerCircle + 4;\n const cliffRingInner = innerCircle - 14;\n const cliffRingOuter = innerCircle - 6;\n const wheelLineOffset = innerCircle * 0.65;\n const lightAngles = buildSegments({ count: 6, totalSpan: 140, gap: 6, startAngle: -70 });\n // The body circle consumes almost the whole square, especially in the HUD\n // overlay where the map is scaled down. The bottom corners are the only\n // reliable empty spaces, so new telemetry is anchored there instead of adding\n // separate HUD/non-HUD layouts that would drift apart over time.\n const maxCornerReadoutWidth = size * 0.46;\n const readoutWidth = Math.min(maxCornerReadoutWidth, Math.max(96, size * 0.42));\n const readoutHeight = Math.max(18, size * 0.08);\n const readoutInset = Math.max(6, size * 0.03);\n const bottomReadoutY = size - readoutInset - readoutHeight;\n const rawFrameStripWidth = innerCircle * 1.05;\n const rawFrameStripHeight = Math.max(13, size * 0.055);\n const rawFrameStripY = centerY + innerCircle * 0.38;\n\n return {\n size,\n variant,\n centerX,\n centerY,\n innerCircle,\n lightRingInner,\n lightRingOuter,\n cliffRingInner,\n cliffRingOuter,\n wheelLineOffset,\n voltageReadout: {\n x: readoutInset,\n y: bottomReadoutY,\n width: readoutWidth,\n height: readoutHeight,\n },\n currentReadout: {\n x: size - readoutInset - readoutWidth,\n y: bottomReadoutY,\n width: readoutWidth,\n height: readoutHeight,\n },\n // rawFrameStrip: {\n // x: centerX - rawFrameStripWidth / 2,\n // y: rawFrameStripY,\n // width: rawFrameStripWidth,\n // height: rawFrameStripHeight,\n // },\n lightSegments: lightAngles.map((angle, idx) => ({\n label: LIGHT_LABELS[idx],\n start: angle.start,\n end: angle.end,\n })),\n cliffSegments: [\n { label: 'Cliff L', start: -60, end: -46, valueKey: 'cliffLeftSignal', activeKey: 'cliffLeft', fillFromEnd: true },\n { label: 'Cliff FL', start: -32, end: -16, valueKey: 'cliffFrontLeftSignal', activeKey: 'cliffFrontLeft', fillFromEnd: true },\n { label: 'Cliff FR', start: 16, end: 32, valueKey: 'cliffFrontRightSignal', activeKey: 'cliffFrontRight', fillFromEnd: false },\n { label: 'Cliff R', start: 46, end: 60, valueKey: 'cliffRightSignal', activeKey: 'cliffRight', fillFromEnd: false },\n ],\n };\n}\n\nfunction TopDownMapContent({ roverId = null, sensors = null, variant = 'full', size: overrideSize, overlay = false }) {\n const size = overrideSize || (variant === 'mini' ? 190 : 260);\n const geometry = useMemo(() => buildGeometry(size, variant), [size, variant]);\n\n return (\n \n \n \n \n \n \n {/* */}\n \n \n \n \n \n \n );\n}\n\nexport default React.memo(TopDownMapContent);\n","import TopDownMap from '../../TopDownMap/index.jsx';\n\nexport default function HudMapOverlay({\n roverId = null,\n sensors,\n show = true,\n mapPosition = 'top-center',\n layoutFormat = 'desktop',\n mobileHud = false,\n}) {\n if (!show) return null;\n const portraitMobile = layoutFormat === 'mobile-portrait';\n const mapSize = '240px';\n const mapScale = portraitMobile ? 0.3 : mobileHud ? 0.33 : 0.7;\n const mapOpacity = mobileHud ? 0.6 : 0.7;\n const mapStyle = {\n width: mapSize,\n height: mapSize,\n opacity: mapOpacity,\n transform: mapPosition === 'top-center' ? `translateX(-50%) scale(${mapScale})` : `scale(${mapScale})`,\n transformOrigin:\n mapPosition === 'bottom-left'\n ? 'bottom left'\n : mapPosition === 'top-center'\n ? 'top center'\n : 'top right',\n ...(mapPosition === 'bottom-left'\n ? { left: '0.25rem', bottom: '0.25rem' }\n : mapPosition === 'top-center'\n ? { left: '50%', top: '0.25rem' }\n : { right: '0.25rem', top: '0.25rem' }),\n };\n\n return (\n
\n \n
\n );\n}\n","// Hud Overlay\n// Purpose: Defines the Hud Overlay module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport React from 'react';\nimport { useHudMapSetting } from '../../../hooks/useHudMapSetting.js';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { useVisualTelemetrySelector } from '../../../context/TelemetryContext.jsx';\nimport {\n selectSpectatorTelemetry,\n spectatorTelemetryEqual,\n} from '../../../context/telemetryViews.js';\nimport RoverLabelOverlay from './RoverLabelOverlay.jsx';\nimport SpectatorTelemetryOverlay from './SpectatorTelemetryOverlay.jsx';\nimport HudMapOverlay from './HudMapOverlay.jsx';\n\nfunction HudOverlay({\n roverId = null,\n sensors,\n label,\n roverColor = null,\n layoutFormat = 'desktop',\n variant = 'default',\n driverLabel = null,\n showTopDown = undefined,\n mobileHud = false,\n mapPosition = null,\n labelScale = 1,\n}) {\n const assignedRoverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const effectiveRoverId = roverId ?? assignedRoverId;\n const spectatorTelemetry = useVisualTelemetrySelector(effectiveRoverId, selectSpectatorTelemetry, spectatorTelemetryEqual);\n const rosterInfo = useSessionSelector((state) => {\n if (!effectiveRoverId) return { label: null, roverColor: null };\n const roster = state.session?.roster || [];\n const rover = roster.find((entry) => String(entry.id) === String(effectiveRoverId));\n return {\n label: rover?.name || null,\n roverColor: rover?.color || null,\n };\n });\n const derivedDriverLabel = useSessionSelector((state) => {\n if (!effectiveRoverId || variant !== 'spectator') return null;\n const activeId = state.session?.activeDrivers?.[effectiveRoverId] || null;\n const users = state.session?.users || [];\n const match = users.find((u) => String(u.socketId || '') === String(activeId || ''));\n return match?.nickname || match?.name || null;\n });\n const resolvedSensors = sensors ?? null;\n const resolvedLabel = label ?? rosterInfo.label ?? null;\n const resolvedRoverColor = roverColor ?? rosterInfo.roverColor ?? null;\n const resolvedDriverLabel = driverLabel ?? derivedDriverLabel;\n const isMobile = mobileHud;\n const [showHudMapDesktop] = useHudMapSetting();\n const resolvedShowTopDown =\n typeof showTopDown === 'boolean'\n ? showTopDown\n : variant === 'spectator'\n ? true\n : isMobile\n ? true\n : showHudMapDesktop;\n const resolvedMapPosition =\n mapPosition || (variant === 'spectator' ? 'top-center' : isMobile ? 'top-right' : 'top-center');\n\n if (variant === 'none') {\n return null;\n }\n\n if (variant === 'spectator') {\n return (\n <>\n
\n \n \n
\n \n \n );\n }\n\n return (\n
\n \n \n
\n );\n}\n\nexport default React.memo(HudOverlay);\n","import React, { useEffect, useRef, useState } from 'react';\nimport { useManualDockAssist } from '../../../features/manualDockAssist/useManualDockAssist.js';\n\nfunction ManualDockAssistOverlay({ mobileHud = false }) {\n const { visible, statusLabel, statusTone, active, charging } = useManualDockAssist({ manageLifecycle: true });\n const [popupMessage, setPopupMessage] = useState('');\n const timerRef = useRef(null);\n const prevActiveRef = useRef(active);\n\n useEffect(() => {\n const prevActive = prevActiveRef.current;\n const enabledNow = active && !prevActive;\n const autoDisabledOnCharge = !active && prevActive && charging;\n if (enabledNow) {\n setPopupMessage('Dock assist mode enabled');\n } else if (autoDisabledOnCharge) {\n setPopupMessage('Docking successful! Thank you!');\n }\n prevActiveRef.current = active;\n }, [active, charging]);\n\n useEffect(() => {\n if (!popupMessage) return undefined;\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n setPopupMessage('');\n timerRef.current = null;\n }, 2500);\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n };\n }, [popupMessage]);\n\n if (!visible) return null;\n const toneClass =\n statusTone === 'good'\n ? 'border-emerald-200/90 bg-emerald-900/90 text-emerald-50'\n : statusTone === 'warn'\n ? 'border-amber-200/90 bg-amber-900/90 text-amber-50'\n : 'border-cyan-200/90 bg-cyan-900/90 text-cyan-50';\n\n return (\n
\n {popupMessage ? (\n
\n \n {popupMessage}\n
\n
\n ) : (\n \n {statusLabel}\n \n )}\n \n );\n}\n\nexport default React.memo(ManualDockAssistOverlay);\n","// Battery Utility Library\n// Purpose: Provides battery normalization, threshold classification, and display helpers. Scope: Keeps battery rendering/math consistent across UI components.\nexport const WARN_DISPLAY_PERCENT = 10;\n\nexport function buildBatteryVisual({ batteryState = null, charge = null, config = null }) {\n const percentDisplayFromState =\n batteryState?.percentDisplay != null && Number.isFinite(batteryState.percentDisplay)\n ? Math.round(batteryState.percentDisplay)\n : null;\n const warnActiveFromState = batteryState?.warnActive ?? null;\n const urgentActiveFromState = batteryState?.urgentActive ?? null;\n\n const full = config?.Full ?? null;\n const warn = config?.Warn ?? null;\n const urgent = config?.Urgent ?? null;\n const chargeValue = charge ?? batteryState?.charge ?? null;\n\n let percentDisplay = percentDisplayFromState;\n if (percentDisplay == null) {\n percentDisplay = computeDisplayPercent({ charge: chargeValue, full, warn, urgent });\n }\n if (percentDisplay == null) {\n return { available: false };\n }\n\n const percent = Math.max(0, Math.min(1, percentDisplay / 100));\n const warnActive =\n warnActiveFromState != null\n ? warnActiveFromState\n : Boolean(warn != null && chargeValue != null && chargeValue <= warn);\n const urgentActive =\n urgentActiveFromState != null\n ? urgentActiveFromState\n : Boolean(urgent != null && chargeValue != null && chargeValue <= urgent);\n\n return {\n available: true,\n percent,\n percentDisplay,\n warnActive,\n urgentActive,\n warnDisplayPercent: WARN_DISPLAY_PERCENT,\n };\n}\n\nfunction computeDisplayPercent({ charge, full, warn, urgent }) {\n if (\n charge != null &&\n full != null &&\n warn != null &&\n urgent != null &&\n full > warn &&\n warn > urgent\n ) {\n const warnOffset = WARN_DISPLAY_PERCENT / 100;\n const upperSpan = 1 - warnOffset;\n if (charge <= urgent) return 0;\n if (charge <= warn) {\n const t = (charge - urgent) / (warn - urgent);\n return Math.round(Math.max(0, Math.min(1, t)) * WARN_DISPLAY_PERCENT);\n }\n if (charge >= full) return 100;\n const t = (charge - warn) / (full - warn);\n return Math.round((warnOffset + Math.max(0, Math.min(1, t)) * upperSpan) * 100);\n }\n return null;\n}\n","// Low Battery Overlay\n// Purpose: Defines the Low Battery Overlay module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport React from 'react';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { useVisualTelemetrySelector } from '../../../context/TelemetryContext.jsx';\nimport { batteryTelemetryEqual, selectBatteryTelemetry } from '../../../context/telemetryViews.js';\nimport { buildBatteryVisual } from '../../../lib/battery.js';\n\nfunction LowBatteryOverlay({ roverId = null, sensors, batteryConfig, compact = false }) {\n const assignedRoverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const effectiveRoverId = roverId ?? assignedRoverId;\n const batteryTelemetry = useVisualTelemetrySelector(effectiveRoverId, selectBatteryTelemetry, batteryTelemetryEqual);\n const rosterBatteryConfig = useSessionSelector((state) => {\n if (!effectiveRoverId) return null;\n const roster = state.session?.roster || [];\n const rover = roster.find((entry) => String(entry.id) === String(effectiveRoverId));\n return rover?.battery ?? null;\n });\n const resolvedBatteryTelemetry = sensors\n ? {\n batteryChargeMah: sensors?.batteryChargeMah ?? null,\n batteryCapacityMah: sensors?.batteryCapacityMah ?? null,\n }\n : batteryTelemetry;\n const resolvedBatteryConfig = batteryConfig ?? rosterBatteryConfig;\n const battery = buildBatteryVisual({\n charge: resolvedBatteryTelemetry?.batteryChargeMah ?? null,\n config: resolvedBatteryConfig,\n });\n if (!battery?.available) return null;\n if (!battery.warnActive && !battery.urgentActive) return null;\n\n const message = battery.urgentActive\n ? 'BATTERY VERY LOW, DOCK THE ROVER AND CHARGE IMMEDIATELY!!'\n : 'Battery low! please dock and charge the rover soon.';\n\n const containerClass = compact ? 'p-2 top-6' : 'p-4 top-10';\n const textClass = compact ? 'text-sm' : 'text-2xl';\n\n return (\n \n
\n
{message}
\n
\n \n );\n}\n\nexport default React.memo(LowBatteryOverlay);\n","// Light Bump Bars\n// Purpose: Defines the Light Bump Bars module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport React from 'react';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { useVisualTelemetrySelector } from '../../../context/TelemetryContext.jsx';\nimport { lightBumpTelemetryEqual, selectLightBumpTelemetry } from '../../../context/telemetryViews.js';\n\nfunction LightBumpBars({ roverId = null, sensors }) {\n const assignedRoverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const effectiveRoverId = roverId ?? assignedRoverId;\n const selectedValues = useVisualTelemetrySelector(effectiveRoverId, selectLightBumpTelemetry, lightBumpTelemetryEqual);\n const values = sensors\n ? [\n sensors?.lightBumpLeftSignal,\n sensors?.lightBumpFrontLeftSignal,\n sensors?.lightBumpCenterLeftSignal,\n sensors?.lightBumpCenterRightSignal,\n sensors?.lightBumpFrontRightSignal,\n sensors?.lightBumpRightSignal,\n ]\n : selectedValues;\n const max = values.filter((v) => v != null).reduce((acc, v) => Math.max(acc, v), 1200);\n const eased = (v) => Math.pow(Math.max(0, Math.min(1, (v ?? 0) / max)), 0.35);\n const hueFor = (v) => {\n if (v == null || v <= 0) return 'hsl(200 60% 18%)';\n const h = (200 + eased(v) * 360) % 360;\n return `hsl(${h} 100% 60%)`;\n };\n const segments = 6;\n const barHeight = 12;\n\n return (\n
\n {values.map((v, idx) => {\n const t = eased(v);\n const dir = idx < segments / 2 ? -1 : 1;\n const fill = `${t * 100}%`;\n const color = hueFor(v);\n return (\n
\n
\n \n
\n
\n );\n })}\n
\n );\n}\n\nexport default React.memo(LightBumpBars);\n","// Battery Bar\n// Purpose: Defines the Battery Bar module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport React from 'react';\nimport './styles.css';\nimport { WARN_DISPLAY_PERCENT } from '../../lib/battery.js';\n\nconst WARN_FLASH_MS = 1600;\nconst URGENT_FLASH_MS = 800;\n\nfunction classNames(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nfunction BatteryBar({\n visual,\n orientation = 'horizontal',\n variant = 'inline',\n compact = false,\n showLabel,\n className = '',\n}) {\n const isBackground = variant === 'background';\n const isVertical = orientation === 'vertical';\n const resolvedShowLabel = showLabel ?? !isBackground;\n\n if (!visual?.available) {\n if (isBackground) {\n const warnPercent = WARN_DISPLAY_PERCENT;\n const markerClass = classNames(\n 'absolute z-10',\n isVertical ? 'left-0 right-0 h-[2px]' : 'top-0 bottom-0 w-[2px]',\n 'bg-black/70',\n );\n const markerStyle = isVertical ? { bottom: `${warnPercent}%` } : { left: `${warnPercent}%` };\n const containerClass = classNames('absolute inset-0 pointer-events-none', className);\n return (\n
\n
\n
\n
\n );\n }\n if (isVertical) return null;\n return

Battery telemetry unavailable

;\n }\n\n const percentDisplay = visual.percentDisplay ?? 0;\n const percent = Math.max(0, Math.min(100, percentDisplay));\n const warnPercent = visual.warnDisplayPercent ?? WARN_DISPLAY_PERCENT;\n\n const isUrgent = Boolean(visual.urgentActive);\n const isWarn = Boolean(visual.warnActive);\n const animationDuration = isUrgent ? `${URGENT_FLASH_MS}ms` : isWarn ? `${WARN_FLASH_MS}ms` : undefined;\n\n const fillColor = isUrgent || isWarn ? 'bg-red-500' : 'bg-emerald-500';\n const fillTone = isBackground\n ? isUrgent || isWarn\n ? 'bg-red-500/45'\n : 'bg-emerald-500/45'\n : fillColor;\n const baseTone = isUrgent || isWarn ? 'bg-red-900/35' : 'bg-slate-900/35';\n const baseToneStrong = isUrgent || isWarn ? 'bg-red-900/45' : 'bg-slate-900/35';\n\n const containerClass = classNames(\n isBackground ? 'absolute inset-0 pointer-events-none' : 'relative pointer-events-auto',\n isVertical && !isBackground ? 'flex flex-col items-center justify-center' : 'w-full',\n className,\n );\n\n if (isBackground) {\n const fillStyle = isVertical\n ? { height: `${percent}%` }\n : { width: `${percent}%` };\n const fillClass = classNames(\n 'absolute',\n isVertical ? 'bottom-0 left-0 right-0' : 'left-0 top-0 bottom-0',\n fillTone,\n 'transition-[width,height]',\n isUrgent && 'battery-urgent-flash',\n );\n const markerClass = classNames(\n 'absolute z-10',\n isVertical ? 'left-0 right-0 h-[2px]' : 'top-0 bottom-0 w-[2px]',\n 'bg-black/70',\n isWarn && !isUrgent && 'battery-tick-warn',\n );\n const markerStyle = isVertical ? { bottom: `${warnPercent}%` } : { left: `${warnPercent}%` };\n return (\n
\n
\n
\n
\n
\n );\n }\n\n const barShellClass = classNames(\n 'relative overflow-hidden rounded-sm border border-slate-800',\n isUrgent || isWarn ? baseToneStrong : 'bg-zinc-900/90',\n isUrgent && 'battery-urgent-flash',\n isVertical\n ? 'w-full flex-1'\n : compact\n ? 'h-4'\n : 'h-5',\n );\n\n const fillStyle = isVertical\n ? { height: `${percent}%` }\n : { width: `${percent}%` };\n\n const fillClass = classNames(\n 'absolute',\n isVertical ? 'bottom-0 left-0 right-0' : 'left-0 top-0 bottom-0',\n fillTone,\n 'transition-[width,height]',\n isUrgent && 'battery-urgent-flash',\n );\n\n const markerClass = classNames(\n 'absolute z-10',\n isVertical ? 'left-0 right-0 h-[2px]' : 'top-0 bottom-0 w-[2px]',\n 'bg-black/70',\n isWarn && !isUrgent && 'battery-tick-warn',\n );\n const markerStyle = isVertical ? { bottom: `${warnPercent}%` } : { left: `${warnPercent}%` };\n\n const labelText = `Battery ${percentDisplay}%`;\n const labelClass = classNames(\n 'pointer-events-none absolute inset-0 flex items-center justify-center text-center font-semibold',\n isVertical ? (compact ? 'text-[0.55rem]' : 'text-[0.65rem]') : 'text-xs',\n );\n const labelPillClass = classNames(\n 'rounded px-1.5 py-0.5',\n isBackground ? 'bg-black/30 text-slate-100' : 'bg-black/50 text-slate-100',\n );\n\n return (\n
\n
\n
\n
\n
\n {resolvedShowLabel && !isVertical ? (\n
\n {labelText}\n
\n ) : null}\n {resolvedShowLabel && isVertical ? (\n
\n {percentDisplay}%\n
\n ) : null}\n
\n );\n}\n\nexport default React.memo(BatteryBar);\n","import { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { useVisualTelemetrySelector } from '../../../context/TelemetryContext.jsx';\nimport { batteryTelemetryEqual, selectBatteryTelemetry } from '../../../context/telemetryViews.js';\nimport LightBumpBars from '../LightBumpBars/index.jsx';\nimport { buildBatteryVisual } from '../../../lib/battery.js';\nimport BatteryBar from '../../BatteryBar/index.jsx';\n\nexport default function DriverBottomStrip({ roverId = null, mobileHud = false }) {\n const assignedRoverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const effectiveRoverId = roverId ?? assignedRoverId;\n const batteryTelemetry = useVisualTelemetrySelector(effectiveRoverId, selectBatteryTelemetry, batteryTelemetryEqual);\n const batteryConfig = useSessionSelector((state) => {\n if (!effectiveRoverId) return null;\n const roster = state.session?.roster || [];\n const rover = roster.find((entry) => String(entry.id) === String(effectiveRoverId));\n return rover?.battery ?? null;\n });\n const batteryVisual = buildBatteryVisual({\n charge: batteryTelemetry?.batteryChargeMah ?? null,\n config: batteryConfig,\n });\n\n return (\n
\n \n
\n \n
\n
\n );\n}\n","import { useSessionSelector } from '../../context/SessionContext.jsx';\nimport RoverMediaPlayer from '../RoverMediaPlayer/index.jsx';\nimport { useControlSelector } from '../../controls/index.js';\nimport { useDriverVideoModePolicy } from '../../hooks/useDriverVideoModePolicy.js';\nimport TurnsOverlay from '../HudOverlays/TurnsOverlay/index.jsx';\nimport HudOverlay from '../HudOverlays/HudOverlay/index.jsx';\nimport ManualDockAssistOverlay from '../HudOverlays/ManualDockAssistOverlay/index.jsx';\nimport RoverDescriptionOverlay from '../HudOverlays/RoverDescriptionOverlay/index.jsx';\nimport OvercurrentOverlay from '../HudOverlays/OvercurrentOverlay/index.jsx';\nimport LowBatteryOverlay from '../HudOverlays/LowBatteryOverlay/index.jsx';\nimport DriverBottomStrip from '../HudOverlays/DriverBottomStrip/index.jsx';\nimport HudChatInput from '../HudOverlays/HudChatInput/index.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\nimport EmptyDriverVideoNotice from './EmptyDriverVideoNotice.jsx';\n\nexport default function DriverVideo({ layoutFormat = 'desktop' }) {\n const roverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const videoMode = useDriverVideoModePolicy(roverId);\n const lastControlIntentAt = useControlSelector((control) => control.state.lastControlIntentAt);\n\n if (!roverId) {\n return (\n \n {/* The legacy page keeps its existing muted 4:3 frame while sharing\n the removal-message behavior with the current video surface. */}\n
\n \n
\n
\n );\n }\n\n const mobileHud = layoutFormat !== 'desktop';\n return (\n \n
\n
\n \n \n \n \n \n \n \n \n
\n \n
\n
\n );\n}\n","// Pi Host Stats Card\n// Purpose: Renders Raspberry Pi host health for the assigned rover. Scope: Uses the separate roverHostStats stream, not Roomba sensorFrame data.\nimport CardFrame from '../CardFrame/index.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\nimport { hostStatsEqual, selectHostStats } from '../../context/telemetryViews.js';\n\nconst EMPTY_STATS = Object.freeze({});\nconst EMPTY_WIFI = Object.freeze({});\nconst PLACEHOLDER_STATS = Object.freeze({\n uptimeSec: 12840,\n cpuTempC: 74.2,\n cpuUsedPct: 80,\n coreVoltageV: 0.5,\n loadAvg1m: 0.42,\n memoryTotalKb: 948000,\n memoryAvailableKb: 417120,\n memoryUsedPct: 100,\n diskTotalBytes: 31200000000,\n diskFreeBytes: 8736000000,\n diskUsedPct: 72,\n undervoltageNow: true,\n undervoltageSeen: true,\n frequencyCappedNow: false,\n frequencyCappedSeen: true,\n throttledNow: false,\n throttledSeen: false,\n softTempLimitNow: false,\n softTempLimitSeen: false,\n wifi: Object.freeze({\n ssidSample: 'BsmnRvrNt',\n frequencyMhz: 2412,\n signalDbm: -45,\n quality: 10,\n qualityMax: 70,\n rxBitrateMbit: 72.2,\n txBitrateMbit: 58.5,\n downloadMbps: 12.4,\n uploadMbps: 3.7,\n rxBytes: 12400000,\n txBytes: 2300000,\n rxPackets: 12640,\n txPackets: 6840,\n }),\n});\n\nfunction valueOrDash(value) {\n return value == null || value === '' ? '--' : value;\n}\n\nfunction finiteNumber(value) {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : null;\n}\n\nfunction clampPercent(value) {\n const numeric = finiteNumber(value);\n if (numeric == null) return null;\n return Math.max(0, Math.min(100, numeric));\n}\n\nfunction thresholdTone(value, warnAt, badAt) {\n const numeric = finiteNumber(value);\n if (numeric == null) return 'neutral';\n if (numeric >= badAt) return 'bad';\n if (numeric >= warnAt) return 'warn';\n return 'good';\n}\n\nfunction toneTextClass(tone) {\n if (tone === 'bad') return 'text-red-400';\n if (tone === 'warn') return 'text-yellow-400';\n if (tone === 'good') return 'text-white';\n return 'text-slate-100';\n}\n\nfunction toneFillClass(tone) {\n if (tone === 'bad') return 'bg-red-500';\n if (tone === 'warn') return 'bg-yellow-500';\n if (tone === 'good') return 'bg-white';\n return 'bg-slate-300';\n}\n\nfunction formatPercent(value) {\n const numeric = finiteNumber(value);\n return numeric == null ? '--' : `${Math.round(numeric)}%`;\n}\n\nfunction formatTemp(value) {\n const numeric = finiteNumber(value);\n return numeric == null ? '--' : `${numeric.toFixed(1)} C`;\n}\n\nfunction formatVoltage(value) {\n const numeric = finiteNumber(value);\n return numeric == null ? '--' : `${numeric.toFixed(3)} V`;\n}\n\nfunction formatDbm(value) {\n const numeric = finiteNumber(value);\n return numeric == null ? '--' : `${Math.round(numeric)} dBm`;\n}\n\nfunction formatFrequency(value) {\n const numeric = finiteNumber(value);\n if (numeric == null) return '--';\n return `${Math.round(numeric)} MHz`;\n}\n\nfunction formatBitrate(value) {\n const numeric = finiteNumber(value);\n return numeric == null ? '--' : `${numeric.toFixed(numeric >= 100 ? 0 : 1)} Mb/s`;\n}\n\nfunction formatBytes(value) {\n const numeric = finiteNumber(value);\n if (numeric == null) return '--';\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n let scaled = numeric;\n let unitIndex = 0;\n while (scaled >= 1024 && unitIndex < units.length - 1) {\n scaled /= 1024;\n unitIndex += 1;\n }\n return `${scaled.toFixed(unitIndex === 0 ? 0 : 1)} ${units[unitIndex]}`;\n}\n\nfunction formatMemoryKb(value) {\n const numeric = finiteNumber(value);\n if (numeric == null) return '--';\n return formatBytes(numeric * 1024);\n}\n\nfunction formatUsedTotal(used, total, formatter) {\n const usedValue = finiteNumber(used);\n const totalValue = finiteNumber(total);\n if (usedValue == null || totalValue == null) return '--';\n return `${formatter(usedValue)} / ${formatter(totalValue)}`;\n}\n\nfunction memoryUsedKb(stats) {\n const total = finiteNumber(stats.memoryTotalKb);\n const available = finiteNumber(stats.memoryAvailableKb);\n if (total == null || available == null) return null;\n return Math.max(0, total - available);\n}\n\nfunction diskUsedBytes(stats) {\n const total = finiteNumber(stats.diskTotalBytes);\n const free = finiteNumber(stats.diskFreeBytes);\n if (total == null || free == null) return null;\n return Math.max(0, total - free);\n}\n\nfunction formatUptime(seconds) {\n const numeric = finiteNumber(seconds);\n if (numeric == null) return '--';\n const total = Math.max(0, Math.floor(numeric));\n const days = Math.floor(total / 86400);\n const hours = Math.floor((total % 86400) / 3600);\n const minutes = Math.floor((total % 3600) / 60);\n if (days > 0) return `${days}d ${hours}h`;\n if (hours > 0) return `${hours}h ${minutes}m`;\n return `${minutes}m`;\n}\n\nfunction wifiQualityPercent(wifi) {\n const quality = finiteNumber(wifi?.quality);\n const max = finiteNumber(wifi?.qualityMax);\n if (quality == null || !max) return null;\n return (quality / max) * 100;\n}\n\nfunction tempPercent(value) {\n const numeric = finiteNumber(value);\n if (numeric == null) return null;\n\n // Raspberry Pi thermal behavior becomes interesting long before the hard\n // throttle point, so the meter maps a practical 30-85 C operating range\n // instead of using 0-100 C where normal values would barely move.\n return ((numeric - 30) / (85 - 30)) * 100;\n}\n\nfunction tempTone(value) {\n return thresholdTone(value, 70, 80);\n}\n\nfunction signalBars(signalDbm) {\n const numeric = finiteNumber(signalDbm);\n if (numeric == null) return 0;\n if (numeric >= -55) return 4;\n if (numeric >= -65) return 3;\n if (numeric >= -75) return 2;\n return 1;\n}\n\nfunction signalTone(signalDbm) {\n const numeric = finiteNumber(signalDbm);\n if (numeric == null) return 'neutral';\n if (numeric >= -55) return 'good';\n if (numeric >= -70) return 'neutral';\n if (numeric >= -80) return 'warn';\n return 'bad';\n}\n\nfunction powerStatus(stats) {\n // Current throttle flags are more important than historical flags because\n // they describe active power or thermal limits. Historical flags are still\n // surfaced as \"seen\" so they remain useful without overstating urgency.\n if (stats.undervoltageNow) return 'Undervoltage';\n if (stats.throttledNow) return 'Throttled';\n if (stats.frequencyCappedNow) return 'Freq capped';\n if (stats.softTempLimitNow) return 'Soft temp';\n if (stats.undervoltageSeen || stats.throttledSeen || stats.frequencyCappedSeen || stats.softTempLimitSeen) return 'Seen';\n return 'OK';\n}\n\nfunction powerTone(stats) {\n if (stats.undervoltageNow || stats.throttledNow || stats.frequencyCappedNow || stats.softTempLimitNow) return 'bad';\n if (stats.undervoltageSeen || stats.throttledSeen || stats.frequencyCappedSeen || stats.softTempLimitSeen) return 'warn';\n return 'good';\n}\n\nfunction formatPacketCount(value) {\n const numeric = finiteNumber(value);\n if (numeric == null) return '--';\n if (numeric >= 1000000) return `${(numeric / 1000000).toFixed(1)}m`;\n if (numeric >= 1000) return `${(numeric / 1000).toFixed(1)}k`;\n return `${Math.round(numeric)}`;\n}\n\nfunction formatTraffic(bytes, packets) {\n return `${formatBytes(bytes)} / ${formatPacketCount(packets)}`;\n}\n\nfunction warningMessages(stats) {\n const messages = [];\n\n // Current warnings are listed first because they need immediate attention;\n // historical flags still matter, but they are lower urgency.\n if (stats.undervoltageNow) messages.push('undervoltage now');\n if (stats.throttledNow) messages.push('throttled now');\n if (stats.frequencyCappedNow) messages.push('frequency capped now');\n if (stats.softTempLimitNow) messages.push('soft temp limit now');\n if (!stats.undervoltageNow && stats.undervoltageSeen) messages.push('undervoltage seen');\n if (!stats.throttledNow && stats.throttledSeen) messages.push('throttled seen');\n if (!stats.frequencyCappedNow && stats.frequencyCappedSeen) messages.push('frequency cap seen');\n if (!stats.softTempLimitNow && stats.softTempLimitSeen) messages.push('soft temp limit seen');\n\n return messages;\n}\n\nexport default function PiHostStatsCard() {\n const roverId = useSessionSelector((state) => state.session?.assignment?.roverId ?? null);\n const stats = useTelemetrySelector(roverId, selectHostStats, hostStatsEqual) || EMPTY_STATS;\n const wifi = stats.wifi || EMPTY_WIFI;\n const warnings = warningMessages(stats);\n const wifiQuality = wifiQualityPercent(wifi);\n const bars = signalBars(wifi.signalDbm);\n const memoryUsed = memoryUsedKb(stats);\n const diskUsed = diskUsedBytes(stats);\n const currentPowerTone = powerTone(stats);\n const currentTempTone = tempTone(stats.cpuTempC);\n const currentSignalTone = signalTone(wifi.signalDbm);\n\n return (\n \n
\n
\n \n
\n
\n CPU Temp\n {formatTemp(stats.cpuTempC)}\n
\n \n
\n \n \n \n
\n\n
\n \n \n \n \n
\n\n
\n \n
\n
\n
\n
SSID: {valueOrDash(wifi.ssidSample)}
\n
{formatFrequency(wifi.frequencyMhz)}
\n
\n
\n
{formatDbm(wifi.signalDbm)}
\n \n
\n
\n
\n {/* Actual traffic belongs beside connection identity and signal,\n while negotiated link rates remain in their existing rows. */}\n \n \n
\n
\n \n
\n \n \n \n \n
\n
\n
\n\n {warnings.length ?
{warnings.join(' · ')}
: null}\n
\n );\n}\n\nfunction ColumnTitle({ label }) {\n return
{label}
;\n}\n\nfunction StatRow({ label, value, compact = false, valueClassName = 'text-slate-100' }) {\n return (\n
\n {label}\n {value}\n
\n );\n}\n\nfunction ThroughputRow({ label, value }) {\n return (\n
\n {label}\n {value}\n
\n );\n}\n\nfunction BarRow({ label, value, detail = null, percent, tone = 'neutral' }) {\n return (\n
\n
\n {label}\n \n {detail ? `${value}: ${detail}` : value}\n \n
\n \n
\n );\n}\n\nfunction Meter({ percent, tone = 'neutral' }) {\n const width = clampPercent(percent);\n\n return (\n
\n {/* The fill width is the visual data encoding; when data is missing the\n track remains visible but empty so the layout can be reviewed in dev. */}\n
\n
\n );\n}\n\nfunction SignalBars({ bars, tone = 'neutral' }) {\n const heights = ['h-1', 'h-2', 'h-3', 'h-4'];\n const fillClass = toneFillClass(tone);\n\n return (\n
\n {heights.map((height, idx) => {\n const active = idx < bars;\n return ;\n })}\n
\n );\n}\n","// Drive Dock State\n// Purpose: Selects only dock-related telemetry fields needed by drive/dock controls.\n// Scope: Keeps the action component focused on rendering while this hook owns telemetry subscription details.\n\nimport { useMemo } from 'react';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\nimport { dockTelemetryEqual, selectDockTelemetry } from '../../context/telemetryViews.js';\n\nexport function deriveDriveDockStateFromTelemetry(dockTelemetry) {\n const oiLabel = dockTelemetry?.oiModeLabel || 'Unknown';\n const oiNormalized = oiLabel.toLowerCase();\n const chargingLabel = dockTelemetry?.chargingStateLabel || '';\n const docked = Boolean(dockTelemetry?.homeBase);\n const charging = docked && chargingLabel.toLowerCase() !== 'not charging' && chargingLabel !== '';\n const driving = oiNormalized === 'full';\n const dockedNotCharging = docked && !charging;\n const dockingInProgress = !docked && !charging && oiNormalized === 'passive';\n return { driving, docked, charging, dockedNotCharging, dockingInProgress, oiLabel, chargingLabel };\n}\n\nexport function useDriveDockState(roverId) {\n const dockTelemetry = useTelemetrySelector(roverId, selectDockTelemetry, dockTelemetryEqual);\n return useMemo(() => deriveDriveDockStateFromTelemetry(dockTelemetry), [dockTelemetry]);\n}\n","// Drive Dock Action\n// Purpose: Defines the Drive Dock Action module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useState } from 'react';\nimport '../MobileControls/mobileControls.css';\nimport { useControlActions, useControlSelector } from '../../controls/index.js';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\nimport { dockTelemetryEqual, selectDockTelemetry } from '../../context/telemetryViews.js';\nimport ControlHint from '../ControlHint/index.jsx';\nimport { useManualDockAssist } from '../../features/manualDockAssist/useManualDockAssist.js';\nimport { deriveDriveDockStateFromTelemetry } from './driveDockState.js';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nfunction StatusRow({ value, tone = 'neutral' }) {\n const toneClasses =\n tone === 'good'\n ? 'border-emerald-200 bg-emerald-600 text-white'\n : tone === 'warn'\n ? 'border-amber-200 bg-amber-600 text-white'\n : tone === 'bad'\n ? 'border-red-200 bg-red-600 text-white'\n : 'border-slate-200/30 bg-slate-700 text-slate-100';\n return (\n \n {value}\n
\n );\n}\n\nfunction KeyPill({ label }) {\n if (!label) return null;\n return {label};\n}\n\nfunction ActionPill({ label, tone }) {\n const toneClasses =\n tone === 'emerald'\n ? 'border-emerald-200/70 bg-emerald-600/70 text-emerald-50'\n : tone === 'amber'\n ? 'border-amber-200/70 bg-amber-600/70 text-amber-50'\n : 'border-indigo-200/70 bg-indigo-600/70 text-indigo-50';\n return (\n \n {label}\n \n );\n}\n\nfunction DockModal({ instructions, onConfirm, onCancel, pending }) {\n return (\n
\n
\n
\n

Manual Docking Assist

\n

{instructions.summary}

\n \n
\n
\n \n Cancel\n \n \n {pending ? 'Starting…' : 'Enter Assist'}\n \n
\n
\n
\n );\n}\n\nexport default function DriveDockAction({\n layout = 'desktop',\n expand = false,\n fill = false,\n driveDockState,\n compactHeightClass = '',\n}) {\n const isMobile = layout === 'mobile';\n const roverId = useControlSelector((control) => control.state.roverId);\n const actions = useControlActions();\n const dockAssist = useManualDockAssist();\n const dockTelemetry = useTelemetrySelector(roverId, selectDockTelemetry, dockTelemetryEqual);\n const state = driveDockState ?? deriveDriveDockStateFromTelemetry(dockTelemetry);\n const { driving, docked, charging, dockingInProgress } = state;\n const [pending, setPending] = useState(null);\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [showModal, setShowModal] = useState(false);\n const manualAssistActive = Boolean(dockAssist.active);\n\n const driveDisabled = !roverId || pending !== null;\n const dockDisabled = !roverId || pending !== null;\n\n const driveKeyLabel = ;\n const dockKeyLabel = ;\n\n const dockInstructions = {\n summary: 'Use assist mode to manually line up with the dock.',\n steps: [\n 'Line up the center dot of your rover with the center of the dock',\n 'The UI will indicate when you are successfully docked',\n 'When good contact is made, the dock will stop flashing.',\n ],\n };\n\n const startDriveInstructions = {\n summary: 'You must enable driving mode before you can move the rover.',\n steps: ['Press the keybind or tap this button to enable driving mode', 'Once ready (should be instant), this dialog will change, and you will be able to move'],\n };\n const dockValue = docked ? 'Docked' : 'Undocked';\n const dockTone = docked ? 'good' : 'bad';\n const chargeValue = charging ? 'Charging' : docked ? 'Charging soon...' : '—';\n const chargeTone = charging ? 'good' : docked ? 'warn' : 'bad';\n\n const handleReturnToDrive = async () => {\n if (!roverId || pending) return;\n if (isMobile) triggerTouchHaptic('button');\n setPending('drive');\n try {\n dockAssist.exitAssist();\n actions.setMode('drive');\n await actions.runMacro('drive-sequence');\n } catch (err) {\n alert(err.message);\n } finally {\n setPending(null);\n }\n };\n\n const handleStartDrive = async () => {\n if (!roverId || pending) return;\n if (isMobile) triggerTouchHaptic('button');\n setConfirmOpen(false);\n setShowModal(false);\n setPending('drive');\n try {\n dockAssist.exitAssist();\n actions.setMode('drive');\n await actions.runMacro('drive-sequence');\n } catch (err) {\n alert(err.message);\n } finally {\n setPending(null);\n }\n };\n\n const handleConfirmDock = async () => {\n if (!roverId || pending) return;\n if (isMobile) triggerTouchHaptic('button');\n setPending('dock');\n try {\n dockAssist.enterAssist();\n } catch (err) {\n alert(err.message);\n } finally {\n setPending(null);\n setConfirmOpen(false);\n setShowModal(false);\n }\n };\n\n const handleOpenDock = () => {\n if (dockDisabled) return;\n if (isMobile) triggerTouchHaptic('button');\n if (manualAssistActive) {\n dockAssist.exitAssist();\n return;\n }\n setShowModal(true);\n setConfirmOpen(true);\n };\n\n // The drive/dock card appears inside the mobile controls and can be held or\n // tapped repeatedly; attach mobile touch suppression directly to the card so\n // Safari does not select labels or open callouts during those interactions.\n const baseCardClasses =\n 'mobile-touch-control flex w-full flex-col gap-0.5 overflow-hidden rounded-xl border-2 px-0.75 py-0.75 text-slate-100 shadow-md transition hover:-translate-y-0.5 hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 disabled:cursor-not-allowed disabled:opacity-60 select-none no-touch-select';\n const ctaText = 'text-center';\n const ctaLayout = 'items-center justify-between';\n const compactLayout = 'items-center justify-center';\n const ctaSize = isMobile ? 'text-sm font-semibold' : '';\n const emeraldCta =\n 'border-emerald-300/70 bg-emerald-800 text-emerald-50 hover:bg-emerald-700 focus-visible:ring-emerald-300';\n const amberCta =\n 'border-amber-300/70 bg-amber-900 text-amber-50 hover:bg-amber-800 focus-visible:ring-amber-300';\n const indigoCta =\n 'border-indigo-300/70 bg-indigo-900 text-indigo-50 hover:bg-indigo-800 focus-visible:ring-indigo-300';\n const cyanCta =\n 'border-cyan-300/70 bg-cyan-900 text-cyan-50 hover:bg-cyan-800 focus-visible:ring-cyan-300';\n const orangeCta =\n 'border-amber-300/70 bg-amber-900 text-amber-50 hover:bg-amber-800 focus-visible:ring-amber-300';\n const forceExpanded = dockingInProgress;\n const expanded = expand || forceExpanded;\n const filledHeight = expanded ? 'h-full flex-1' : fill ? 'flex-1' : '';\n const compactHeight = isMobile && !expanded ? compactHeightClass : '';\n const layoutClass = isMobile && !expanded ? compactLayout : ctaLayout;\n const compactDockedDriving = isMobile && !expanded && driving && docked;\n\n if (!driving && !dockingInProgress) {\n return (\n event.preventDefault()}\n disabled={driveDisabled}\n className={`${baseCardClasses} ${filledHeight} ${compactHeight} ${ctaText} ${layoutClass} ${ctaSize} ${emeraldCta}`}\n >\n
\n
\n Start Driving\n {!isMobile && expanded ? (\n
\n {driveKeyLabel ? : null}\n \n
\n ) : null}\n
\n {expanded ? (\n <>\n

{startDriveInstructions.summary}

\n \n \n ) : null}\n
\n {expanded ? (\n
\n \n \n
\n ) : null}\n \n );\n }\n\n if (dockingInProgress) {\n const inProgressCopy = {\n summary: 'The rover is currently attempting to dock itself due to being idle.',\n steps: ['Click to return to driving mode.'],\n };\n\n return (\n event.preventDefault()}\n className={`${baseCardClasses} ${filledHeight} ${compactHeight} ${ctaText} ${layoutClass} ${ctaSize} ${amberCta}`}\n >\n
\n
\n Attempting to auto-dock...\n {/* {!isMobile && expanded ? ( */}\n {expanded ? (\n
\n \n
\n ) : null}\n
\n {expanded ?

{inProgressCopy.summary}

: null}\n
\n {expanded ? (\n <>\n
\n \n \n
\n {!isMobile ? (\n \n ) : null}\n \n ) : null}\n \n );\n }\n\n return (\n <>\n event.preventDefault()}\n className={\n isMobile\n ? `flex w-full ${baseCardClasses} ${compactHeight} ${ctaText} ${layoutClass} ${ctaSize} ${\n manualAssistActive ? cyanCta : compactDockedDriving ? orangeCta : indigoCta\n }`\n : `${baseCardClasses} ${filledHeight} ${ctaText} ${ctaLayout} ${ctaSize} ${manualAssistActive ? cyanCta : indigoCta}`\n }\n >\n
\n \n {compactDockedDriving ? 'Docked!' : manualAssistActive ? 'Exit Docking Assist' : 'Dock and charge'}\n \n {!isMobile && expanded ? (\n
\n {dockKeyLabel ? : null}\n \n
\n ) : null}\n
\n {!isMobile && expanded && (\n <>\n

\n Get near a dock and press this button to enter docking assist mode.\n

\n
\n \n \n
\n \n )}\n \n {showModal || (!isMobile && confirmOpen) ? (\n {\n setShowModal(false);\n setConfirmOpen(false);\n }}\n onConfirm={handleConfirmDock}\n />\n ) : null}\n \n );\n}\n\nfunction StepList({ steps, tone = 'emerald' }) {\n const container =\n tone === 'emerald'\n ? 'bg-emerald-900/60 text-emerald-50/90 border-emerald-700/60'\n : tone === 'amber'\n ? 'bg-amber-900/60 text-amber-50/90 border-amber-700/60'\n : 'bg-indigo-900/60 text-indigo-50/90 border-indigo-700/60';\n const numberColor =\n tone === 'emerald'\n ? 'text-emerald-200'\n : tone === 'amber'\n ? 'text-amber-200'\n : 'text-indigo-200';\n return (\n
\n {steps.map((step, idx) => (\n
\n
\n {idx + 1}.\n {step}\n
\n {idx < steps.length - 1 ?
: null}\n
\n ))}\n
\n );\n}\n","// Horn Control\n// Purpose: Defines the Horn Control module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport '../MobileControls/mobileControls.css';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport { HORN_SETTINGS_DEFAULTS } from '../../settings/namespaces.js';\nimport { HORN_MAX_FREQUENCY } from '../../controls/constants.js';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nfunction clampFreq(value) {\n const num = Number(value);\n if (!Number.isFinite(num)) return 0;\n if (num <= 0) return 0;\n return Math.min(HORN_MAX_FREQUENCY, Math.round(num));\n}\n\nexport default function HornControl({\n disabled,\n icon: Icon,\n onStart,\n onStop,\n keyLabel,\n active,\n heat = 0,\n className = '',\n defaultShowSettings = true,\n showSettingsToggle = false,\n compactSettings = false,\n}) {\n const [showSettings, setShowSettings] = useState(defaultShowSettings);\n const { value: hornSettings, save: saveHornSettings } = useSettingsNamespace(\n 'horn',\n HORN_SETTINGS_DEFAULTS,\n );\n const [waveform, setWaveform] = useState(hornSettings?.waveform || HORN_SETTINGS_DEFAULTS.waveform);\n const settingsRootRef = useRef(null);\n const activePointerIdRef = useRef(null);\n const [freqs, setFreqs] = useState(() => {\n const base = Array.isArray(hornSettings?.freqs) ? hornSettings.freqs : HORN_SETTINGS_DEFAULTS.freqs;\n return [...base, 0, 0, 0, 0].slice(0, 4).map((f) => clampFreq(f));\n });\n\n useEffect(() => {\n setWaveform(hornSettings?.waveform || HORN_SETTINGS_DEFAULTS.waveform);\n if (Array.isArray(hornSettings?.freqs)) {\n setFreqs([...hornSettings.freqs, 0, 0, 0, 0].slice(0, 4).map((f) => clampFreq(f)));\n }\n }, [hornSettings?.freqs, hornSettings?.waveform]);\n\n const isActive = Boolean(active);\n const clampedHeat = Math.max(0, Math.min(1, Number(heat) || 0));\n const buttonClasses = useMemo(() => {\n // The horn can be held for continuous input, which makes it especially prone\n // to long-press selection/callout behavior on mobile browsers.\n const base =\n 'mobile-touch-control group relative flex w-full flex-col gap-0.5 overflow-hidden rounded-xl border-2 px-1 py-1.5 text-xs font-semibold select-none no-touch-select';\n const active = 'border-fuchsia-300/70 bg-fuchsia-700 text-fuchsia-50';\n const inactive = 'border-cyan-300/70 bg-cyan-900 text-cyan-50 hover:bg-cyan-800';\n // This is a role-based held control rather than a native button, so CSS's\n // :disabled pseudo-class can never match it. Reflect disabled state directly\n // while leaving the nested settings button available.\n const disabledClass = disabled ? 'cursor-not-allowed opacity-50' : '';\n return [base, isActive ? active : inactive, disabledClass, className]\n .filter(Boolean)\n .join(' ');\n }, [className, disabled, isActive]);\n\n const formattedWaveform = waveform === 'sine' ? 'sine' : 'saw';\n\n const updateWaveform = useCallback(\n (event) => {\n const next = event.target.value === 'sine' ? 'sine' : 'saw';\n setWaveform(next);\n saveHornSettings((current) => ({ ...(current ?? {}), waveform: next }));\n },\n [saveHornSettings],\n );\n\n const updateFreq = useCallback(\n (index, value) => {\n setFreqs((prev) => {\n const next = [...prev];\n next[index] = clampFreq(value);\n saveHornSettings((current) => ({ ...(current ?? {}), freqs: next }));\n return next;\n });\n },\n [saveHornSettings],\n );\n\n useEffect(() => {\n const root = settingsRootRef.current;\n if (!root) return undefined;\n\n const handleWheel = (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const input = target.closest('input[data-horn-freq-index]');\n if (!input) return;\n const index = Number(input.dataset.hornFreqIndex);\n if (!Number.isInteger(index) || index < 0 || index >= freqs.length) return;\n event.preventDefault();\n event.stopPropagation();\n const direction = event.deltaY < 0 ? 1 : -1;\n const current = Number(freqs[index]) || 0;\n updateFreq(index, current + direction * 25);\n };\n\n root.addEventListener('wheel', handleWheel, { passive: false, capture: true });\n return () => {\n root.removeEventListener('wheel', handleWheel, { capture: true });\n };\n }, [freqs, updateFreq]);\n\n const handlePointerDown = (event) => {\n if (disabled) return;\n if (activePointerIdRef.current !== null) return;\n const tag = event.target?.tagName?.toLowerCase();\n if (tag === 'input' || tag === 'select' || tag === 'option' || tag === 'label' || tag === 'button') return;\n\n /*\n Horn is a hold control, so it should claim exactly the finger that started\n it. Capturing that pointer prevents tiny mobile finger drift or nearby\n controls from making the horn feel delayed or randomly interrupted.\n */\n event.preventDefault();\n activePointerIdRef.current = event.pointerId;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n // Starting the held horn is the meaningful action; release only stops the\n // same action and therefore should not generate a second confirmation.\n triggerTouchHaptic('button');\n onStart?.();\n };\n\n const handlePointerUp = (event) => {\n if (activePointerIdRef.current !== event.pointerId) return;\n const tag = event.target?.tagName?.toLowerCase();\n if (tag === 'input' || tag === 'select' || tag === 'option' || tag === 'label' || tag === 'button') return;\n event.preventDefault();\n activePointerIdRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n onStop?.();\n };\n\n const handlePointerCancel = (event) => {\n if (activePointerIdRef.current !== event.pointerId) return;\n activePointerIdRef.current = null;\n onStop?.();\n };\n\n const handleBlur = () => {\n if (activePointerIdRef.current === null) return;\n activePointerIdRef.current = null;\n onStop?.();\n };\n\n const settingsToggle = showSettingsToggle ? (\n {\n event.preventDefault();\n setShowSettings((prev) => !prev);\n }}\n // The settings toggle is a nested press target, so it gets the same touch\n // suppression as the larger horn surface instead of relying on inheritance.\n className=\"mobile-touch-control rounded bg-black/40 px-1 py-0.5 text-[0.6rem] font-semibold text-white/90 hover:text-white\"\n >\n {showSettings ? 'Hide' : 'Settings'}\n \n ) : null;\n\n return (\n {\n if (activePointerIdRef.current === event.pointerId) {\n activePointerIdRef.current = null;\n onStop?.();\n }\n }}\n onContextMenu={(event) => event.preventDefault()}\n onBlur={handleBlur}\n className={buttonClasses}\n >\n \n \n
\n \n {/* Keep icon ownership with the caller so adding mobile affordance does\n not silently change every existing desktop horn presentation. */}\n {Icon ? : null}\n Horn\n {keyLabel ? (\n \n {keyLabel}\n \n ) : null}\n \n {settingsToggle}\n \n {isActive ? 'Honk' : 'Hold'}\n \n
\n {showSettings ? (\n compactSettings ? (\n
\n \n
\n {freqs.map((freq, idx) => (\n \n ))}\n
\n
\n ) : (\n \n \n {freqs.map((freq, idx) => (\n \n ))}\n
\n )\n ) : null}\n
\n );\n}\n","// Camera Tilt Control\n// Purpose: Defines the Camera Tilt Control module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useRef, useState } from 'react';\n\nfunction formatDegrees(value) {\n if (typeof value !== 'number' || Number.isNaN(value)) return '—';\n return `${value > 0 ? '+' : ''}${value.toFixed(1)}°`;\n}\n\nfunction KeyPill({ label }) {\n if (!label) return null;\n return {label};\n}\n\nexport default function CameraTiltControl({\n value,\n min,\n max,\n step = 0.5,\n label = 'Camera Tilt',\n orientation = 'horizontal',\n onChange,\n onCommit,\n throttleMs = 0,\n disabled = false,\n keyDownLabel,\n keyUpLabel,\n className = '',\n labelRowClass = '',\n labelClass = '',\n valueClass = '',\n sliderClass = '',\n endpointClass = '',\n endpointLabelClass = '',\n accentClass = '',\n showValue = true,\n showEndpoints,\n}) {\n const isVertical = orientation === 'vertical';\n const defaultShowEndpoints = !isVertical;\n const shouldShowEndpoints = typeof showEndpoints === 'boolean' ? showEndpoints : defaultShowEndpoints;\n const [pending, setPending] = useState(value);\n const draggingRef = useRef(false);\n const throttleRef = useRef(null);\n\n useEffect(() => {\n if (!draggingRef.current) {\n setPending(value);\n }\n }, [value]);\n\n useEffect(\n () => () => {\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n }\n },\n [],\n );\n\n const scheduleSend = (next) => {\n if (!onChange) return;\n if (throttleMs > 0) {\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n }\n throttleRef.current = setTimeout(() => {\n onChange(next);\n }, throttleMs);\n return;\n }\n onChange(next);\n };\n\n const handleSlider = (event) => {\n const next = Number.parseFloat(event.target.value);\n if (Number.isNaN(next)) return;\n draggingRef.current = true;\n setPending(next);\n scheduleSend(next);\n };\n\n const commitSlider = () => {\n draggingRef.current = false;\n if (throttleRef.current) {\n clearTimeout(throttleRef.current);\n throttleRef.current = null;\n }\n if (onCommit) {\n onCommit(pending);\n } else if (throttleMs > 0) {\n onChange?.(pending);\n }\n };\n\n if (typeof min !== 'number' || typeof max !== 'number') return null;\n\n const mergedSliderClass = [\n isVertical ? 'h-28 w-5' : 'w-full',\n accentClass,\n sliderClass,\n ]\n .filter(Boolean)\n .join(' ');\n\n const slider = (\n \n );\n\n if (isVertical) {\n return (\n
\n {showValue ? (\n
\n {formatDegrees(value)}\n
\n ) : null}\n
\n {label}\n {slider}\n
\n
\n );\n }\n\n return (\n
\n
\n {label}\n {showValue ? (\n \n {formatDegrees(value)}\n \n ) : null}\n
\n
\n {slider}\n {shouldShowEndpoints ? (\n
\n \n {keyDownLabel ? : null}\n {formatDegrees(min)}\n \n \n {formatDegrees(max)}\n {keyUpLabel ? : null}\n \n
\n ) : null}\n
\n
\n );\n}\n","// Right Pane Tabs\n// Purpose: Defines the Right Pane Tabs module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport RoomCameraPanel from '../../../components/RoomCameraPanel/index.jsx';\nimport HomeAssistantControls from '../../../components/HomeAssistantControls/index.jsx';\nimport ChatPanel from '../../../components/ChatPanel/index.jsx';\nimport { LinkButtonsPanel } from '../../../components/UserListPanel/index.jsx';\nimport ReplaySourcesPanel from '../../../components/ReplaySourcesPanel/index.jsx';\nimport PtzQueueCard from '../../../components/PtzCamera/index.jsx';\nimport Tabs, { Tab, TabList, TabPanel, TabPanels } from '../../../components/Tabs/index.jsx';\nimport TopDownMap from '../../../components/TopDownMap/index.jsx';\nimport DriveDockAction from '../../../components/DriveDockAction/index.jsx';\nimport { useDriveDockState } from '../../../components/DriveDockAction/driveDockState.js';\nimport { useControlActions, useControlSelector } from '../../../controls/index.js';\nimport RoverQueuesPanel from '../../../components/RoverQueuesPanel/index.jsx';\nimport RawUserPilePanel from '../../../components/RawUserPilePanel/index.jsx';\nimport ControlHint from '../../../components/ControlHint/index.jsx';\nimport GPIOToggleControl from '../../../components/GPIOToggleControl/index.jsx';\nimport HornControl from '../../../components/HornControl/index.jsx';\nimport CameraTiltControl from '../../../components/CameraTiltControl/index.jsx';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport OverseerPreferencePanel from '../../../components/OverseerPreferencePanel/index.jsx';\nimport CardFrame from '../../../components/CardFrame/index.jsx';\nimport { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useManualDockAssist } from '../../../features/manualDockAssist/useManualDockAssist.js';\nimport { themeGapClass, themeStackClass } from '../../../themes/index.js';\nimport ActivitiesTab from '../tabs/shared/ActivitiesTab/index.jsx';\nimport VipTab from '../tabs/shared/VipTab/index.jsx';\nimport VipTabButton from '../tabs/shared/VipTabButton/index.jsx';\nimport HelpTab from '../tabs/shared/HelpTab/index.jsx';\nimport SettingsTab from '../tabs/shared/SettingsTab/index.jsx';\n\nconst CHAT_DOCK_INITIAL_HEIGHT = 224;\nconst CHAT_DOCK_MIN_HEIGHT = 144;\nconst CHAT_DOCK_MAX_HEIGHT = 300;\nconst CHAT_DOCK_BOTTOM_INSET = 8;\nconst CAMERA_TILT_STEP_DEGREES = 0.5;\nconst CAMERA_TILT_PRECISION_STEP_DEGREES = 0.1;\n\nfunction TopDownMapPanel() {\n const roverId = useControlSelector((control) => control.state.roverId);\n\n return (\n \n
\n \n
\n \n );\n}\n\nfunction DriveDockPanel() {\n const roverId = useControlSelector((control) => control.state.roverId);\n const roomLightsLockedOn = useSessionSelector((state) => Boolean(state.session?.homeAssistant?.lightPolicy?.lockedOn));\n const camera = useControlSelector((control) => control.state.camera);\n const horn = useControlSelector((control) => control.state.horn);\n const headlight = useControlSelector((control) => control.pipeline?.headlight);\n const headlightState = useControlSelector((control) => control.pipeline?.headlightState);\n const laser = useControlSelector((control) => control.pipeline?.laser);\n const laserState = useControlSelector((control) => control.pipeline?.laserState);\n const pipelineHorn = useControlSelector((control) => control.pipeline?.horn);\n const { setServoAngle, setHeadlight, setLaser, startHorn, stopHorn } = useControlActions();\n const dockAssist = useManualDockAssist();\n const driveDockState = useDriveDockState(roverId);\n const hideInlineControls = driveDockState.docked && !driveDockState.driving;\n\n const config = camera?.config;\n const cameraEnabled = Boolean(roverId && camera?.enabled && config);\n const headlightAvailable = Boolean(roverId && headlight);\n const laserAvailable = Boolean(roverId && laser);\n const hornAvailable = Boolean(roverId && pipelineHorn);\n const hornBlocked = horn?.overheated;\n const min = typeof config?.minAngle === 'number' ? config.minAngle : -30;\n const max = typeof config?.maxAngle === 'number' ? config.maxAngle : 30;\n const value =\n typeof camera?.angle === 'number'\n ? camera.angle\n : typeof config?.homeAngle === 'number'\n ? config.homeAngle\n : (min + max) / 2;\n const headlightLabel = ;\n const laserLabel = ;\n const hornLabel = ;\n const upLabel = ;\n const downLabel = ;\n const cameraDisabled = Boolean(!roverId || dockAssist.cameraLocked);\n /*\n Precision movement mode also tightens the servo slider step. The command\n path still sends ordinary angle targets; only the UI increment changes while\n precision mode is active.\n */\n const cameraTiltStep = camera?.precisionMode\n ? CAMERA_TILT_PRECISION_STEP_DEGREES\n : CAMERA_TILT_STEP_DEGREES;\n const auxControls = useMemo(\n () => ({\n setHeadlight: (nextOn) => {\n setHeadlight(nextOn);\n },\n setLaser: (nextOn) => {\n setLaser(nextOn);\n },\n startHorn: () => {\n return startHorn();\n },\n stopHorn,\n }),\n [setHeadlight, setLaser, startHorn, stopHorn],\n );\n\n return (\n \n \n {!hideInlineControls ? (\n
\n {(headlightAvailable || laserAvailable) && (\n
\n {headlightAvailable && (\n \n )}\n {laserAvailable && (\n \n )}\n
\n )}\n {hornAvailable && (\n \n )}\n {cameraEnabled && (\n \n )}\n
\n ) : null}\n \n );\n}\n\nfunction QueueReplayLinksRow() {\n /*\n Flex ratios match the old grid proportions when the Links panel exists. If\n LinkButtonsPanel returns null because socials are disabled, flex naturally\n removes that item instead of preserving an empty grid column.\n */\n return (\n
\n
\n {/*\n The absolutely positioned queue card is removed from flex cross-size\n calculation. Replay and the links/PTZ stack therefore define the row\n height entirely through normal CSS layout; this relative column then\n stretches to that established height and gives the queue card an exact\n containing block to fill without any JavaScript measurement.\n */}\n
\n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n );\n}\n\nexport default function RightPaneTabs() {\n const [activeTab, setActiveTab] = useState('telemetry');\n const chatDockRef = useRef(null);\n const [chatDockHeight, setChatDockHeight] = useState(CHAT_DOCK_INITIAL_HEIGHT);\n const showOverseerPreferencePanel = useSessionSelector((state) => {\n const vote = state.session?.overseerVote;\n\n // Match the panel's server-owned voting gate so the measured desktop chat\n // dock can give the side-column height to the user pile when voting is\n // unavailable, including disabled service and direct-address mode.\n return Boolean(vote?.votingEnabled);\n });\n const handleTabChange = useCallback(\n (tab) => {\n /*\n Keep the selected desktop panel controlled here so the tab strip and\n panel content always move together.\n */\n setActiveTab(tab);\n },\n [],\n );\n\n useLayoutEffect(() => {\n const chatDock = chatDockRef.current;\n if (!chatDock) return undefined;\n let animationFrame = 0;\n let settledFirstFrame = 0;\n let settledSecondFrame = 0;\n\n const measureChatDock = () => {\n animationFrame = 0;\n const { top } = chatDock.getBoundingClientRect();\n\n /*\n Keep this as pixels because getBoundingClientRect() and innerHeight are\n pixel-based browser measurements. The row stays in normal document flow:\n when its top moves upward during right-column scrolling, the available\n viewport space grows and the chat panel expands until the max height.\n */\n const availableHeight = window.innerHeight - top - CHAT_DOCK_BOTTOM_INSET;\n const nextHeight = Math.round(\n Math.max(CHAT_DOCK_MIN_HEIGHT, Math.min(CHAT_DOCK_MAX_HEIGHT, availableHeight)),\n );\n setChatDockHeight((currentHeight) => (Math.abs(currentHeight - nextHeight) > 1 ? nextHeight : currentHeight));\n };\n\n const scheduleMeasure = () => {\n if (animationFrame) return;\n animationFrame = window.requestAnimationFrame(measureChatDock);\n };\n\n const scheduleSettledMeasure = () => {\n settledFirstFrame = window.requestAnimationFrame(() => {\n settledFirstFrame = 0;\n settledSecondFrame = window.requestAnimationFrame(() => {\n settledSecondFrame = 0;\n measureChatDock();\n });\n });\n };\n\n const resizeObserver =\n typeof ResizeObserver === 'function'\n ? new ResizeObserver(() => {\n /*\n Some panels above chat settle after the first React commit as data,\n images, or intrinsic layout measurements arrive. Watching the\n parent group means those height changes recalculate the chat row\n immediately instead of requiring a user scroll to repair the\n initial bottom alignment.\n */\n scheduleMeasure();\n })\n : null;\n\n scheduleMeasure();\n scheduleSettledMeasure();\n if (resizeObserver && chatDock.parentElement) {\n resizeObserver.observe(chatDock.parentElement);\n }\n window.addEventListener('resize', scheduleMeasure);\n /*\n The desktop layout scrolls inside the right-column pane, not the window.\n Capturing scroll events at the document level keeps the effect small while\n still noticing that nested scroll movement without wiring a dedicated ref\n through App.jsx just for this row.\n */\n document.addEventListener('scroll', scheduleMeasure, { capture: true, passive: true });\n\n return () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (settledFirstFrame) {\n window.cancelAnimationFrame(settledFirstFrame);\n }\n if (settledSecondFrame) {\n window.cancelAnimationFrame(settledSecondFrame);\n }\n resizeObserver?.disconnect();\n window.removeEventListener('resize', scheduleMeasure);\n document.removeEventListener('scroll', scheduleMeasure, { capture: true });\n };\n }, [activeTab]);\n\n return (\n
\n \n \n Controls\n Activities \n \n Help\n Settings\n \n \n \n
\n {/*\n The first desktop telemetry group is intentionally a viewport\n filler instead of a sticky overlay. The rows above chat keep\n their natural height, and the chat row receives only the\n leftover room between those rows and the bottom of the visible\n right column. That keeps the chat composer at the bottom of the\n screen when space is available while still letting later panels\n sit below it in normal scroll flow instead of being covered.\n */}\n
\n
\n \n \n
\n \n {/*\n This row gets an explicit measured height because the target\n behavior depends on the row's live viewport position during\n right-column scrolling. Pure CSS can size against the viewport\n itself, but it cannot calculate the remaining visible distance\n from this particular row's current top edge to the bottom of\n the nested scroll viewport.\n */}\n \n \n \n {/*\n This side column is height-constrained by the measured\n chat dock row. When overseer voting is unavailable on the\n server, the user pile becomes the only child and should\n receive the whole side-column height.\n */}\n {showOverseerPreferencePanel ? : null}\n \n
\n
\n
\n \n \n
\n \n\n \n \n \n \n \n \n \n );\n}\n","// Old Desktop Driver Layout\n// Purpose: Preserves the retired two-pane desktop composition for the explicit /old route.\n// Scope: This is a layout archive only; shared controls, telemetry, and route-level providers stay current.\nimport DriverVideo from '../../../components/DriverVideo/index.jsx';\nimport PiHostStatsCard from '../../../components/PiHostStatsCard/index.jsx';\nimport DriverAdCard from '../../../components/DriverAdCard/index.jsx';\nimport GlobalObjectiveBanner from '../../../components/GlobalObjectiveBanner/index.jsx';\nimport { themeGapClass } from '../../../themes/index.js';\nimport DesktopRightPaneTabs from '../DesktopRightPaneTabs/index.jsx';\nimport { useTelemetryVisualPolicy } from '../../../context/TelemetryContext.jsx';\n\nexport default function OldDesktopLayout() {\n // The archived layout keeps the same desktop telemetry cadence it used before\n // replacement, while mobile policy remains owned by the mobile layout frame.\n useTelemetryVisualPolicy({ mobile: false });\n\n return (\n
\n
\n \n \n {/* The self-gating ad remains pinned to the bottom of the left pane. */}\n \n
\n
\n \n \n
\n
\n );\n}\n","// Mobile Aux Button\n// Purpose: Defines the Mobile Aux Button module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nexport default function MobileAuxButton({ id, label, icon: Icon, values, color, disabled, onPress, onRelease }) {\n return (\n {\n event.preventDefault();\n onPress(id, values);\n }}\n onPointerUp={() => {\n onRelease(id);\n // A completed held action is the semantic confirmation point. Keeping\n // feedback beside release avoids buzzing for cancelled aux gestures.\n triggerTouchHaptic('button');\n }}\n onPointerLeave={() => onRelease(id)}\n onPointerCancel={() => onRelease(id)}\n onContextMenu={(event) => event.preventDefault()}\n // The mobile-touch-control class is applied directly to this button because\n // long-press callouts and text selection are triggered at the pressed node.\n className={`mobile-touch-control flex h-full w-full items-center justify-center gap-1 rounded-xl border-2 px-1 py-0.75 text-center text-sm font-semibold text-white transition select-none no-touch-select ${color} hover:brightness-110 active:brightness-125 active:scale-[0.99] disabled:opacity-30`}\n >\n {/* The icon is optional because this low-level held-action control is also\n useful for labels that do not have a clear visual symbol. */}\n {Icon ? : null}\n {label}\n \n );\n}\n","// Vacuum Controls\n// Purpose: Renders the mobile-only vacuum forward/backward auxiliary motor controls.\n// Scope: Owns only the two vacuum buttons; the parent column owns rover state and aux motor commands.\nimport { FaRedo, FaUndo } from 'react-icons/fa';\nimport MobileAuxButton from './MobileAuxButton.jsx';\nimport { AUX_ALL_BACKWARD, AUX_ALL_FORWARD } from './constants.js';\n\nexport default function VacuumControls({\n disabled,\n onPress,\n onRelease,\n}) {\n return (\n
\n \n \n
\n );\n}\n","// Vertical Camera Tilt\n// Purpose: Provides the mobile-only camera tilt slider that supports simultaneous two-finger mobile driving.\n// Scope: Owns pointer tracking and visual slider state for the compact vertical mobile camera control.\nimport { useCallback, useMemo, useRef } from 'react';\nimport { FaVideo } from 'react-icons/fa';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\n\nconst HAPTIC_MIN_ANGLE_DELTA_DEGREES = 2;\n\nfunction clampCameraAngle(value, min, max) {\n if (!Number.isFinite(value)) return min;\n return Math.max(min, Math.min(max, value));\n}\n\nfunction formatCameraAngle(value) {\n if (typeof value !== 'number' || Number.isNaN(value)) return '—';\n return `${value > 0 ? '+' : ''}${value.toFixed(1)}°`;\n}\n\nexport default function VerticalCameraTilt({\n value,\n min,\n max,\n step = 0.5,\n disabled = false,\n onChange,\n}) {\n const trackRef = useRef(null);\n const pointerIdRef = useRef(null);\n const lastHapticValueRef = useRef(null);\n\n const valuePercent = useMemo(() => {\n if (max === min) return 50;\n return ((clampCameraAngle(value, min, max) - min) / (max - min)) * 100;\n }, [max, min, value]);\n const disabledClass = disabled ? 'cursor-not-allowed opacity-50' : '';\n\n const valueFromPointer = useCallback(\n (event) => {\n const track = trackRef.current;\n if (!track) return value;\n const rect = track.getBoundingClientRect();\n const usableHeight = Math.max(1, rect.height);\n const rawPercent = 1 - (event.clientY - rect.top) / usableHeight;\n const unclamped = min + clampCameraAngle(rawPercent, 0, 1) * (max - min);\n const stepped = Math.round(unclamped / step) * step;\n return clampCameraAngle(stepped, min, max);\n },\n [max, min, step, value],\n );\n\n const sendPointerValue = useCallback(\n (event) => {\n const next = valueFromPointer(event);\n\n /*\n Camera commands must retain the configured 0.5 or 0.1 degree precision,\n but physical feedback does not need to mirror every servo step. Require\n two degrees of accumulated travel so the ticks describe slider position\n without allowing pointer event frequency to control their cadence.\n */\n if (Math.abs(next - lastHapticValueRef.current) >= HAPTIC_MIN_ANGLE_DELTA_DEGREES) {\n triggerTouchHaptic('camera');\n lastHapticValueRef.current = next;\n }\n onChange?.(next);\n },\n [onChange, valueFromPointer],\n );\n\n const handlePointerDown = useCallback(\n (event) => {\n if (disabled) return;\n if (pointerIdRef.current !== null) return;\n\n /*\n Native vertical range inputs are unreliable as a second simultaneous\n touch on mobile Safari while the drive pad owns another active pointer.\n This custom track captures only the camera finger, so the drive thumb can\n continue moving without stealing or cancelling camera tilt updates.\n */\n event.preventDefault();\n pointerIdRef.current = event.pointerId;\n // Seed the slider value so its first position update is not mistaken for\n // two degrees of travel before the finger has actually moved that far.\n lastHapticValueRef.current = value;\n trackRef.current?.setPointerCapture?.(event.pointerId);\n sendPointerValue(event);\n },\n [disabled, sendPointerValue, value],\n );\n\n const handlePointerMove = useCallback(\n (event) => {\n if (pointerIdRef.current !== event.pointerId) return;\n event.preventDefault();\n sendPointerValue(event);\n },\n [sendPointerValue],\n );\n\n const handlePointerEnd = useCallback((event) => {\n if (pointerIdRef.current !== event.pointerId) return;\n event.preventDefault();\n pointerIdRef.current = null;\n trackRef.current?.releasePointerCapture?.(event.pointerId);\n }, []);\n\n return (\n \n {/* This component owns its entire visible card so interaction state, border,\n background, label, and slider always dim as one coherent control. */}\n \n {/* Rotate the icon with the established vertical label so both read as one\n control identity without consuming additional horizontal space. */}\n \n Camera tilt\n \n {\n if (pointerIdRef.current === event.pointerId) pointerIdRef.current = null;\n }}\n onContextMenu={(event) => event.preventDefault()}\n /*\n touchAction stays inline as a second line of defense because this is the\n element that must keep browser panning/zooming out of the multi-touch\n camera gesture.\n */\n style={{ touchAction: 'none' }}\n className=\"mobile-touch-control mobile-drag-control relative h-full w-6 rounded-full border border-emerald-100/80 bg-emerald-950 shadow-inner focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-emerald-200\"\n >\n \n \n
\n
\n );\n}\n","// Aux Column\n// Purpose: Assembles the mobile auxiliary controls column, which is the left column by default.\n// Scope: Owns mobile aux/camera/headlight/laser/horn wiring while reusing desktop variation components where intended.\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { FaBullhorn, FaCrosshairs, FaLightbulb } from 'react-icons/fa';\nimport './mobileControls.css';\nimport { useControlActions, useControlSelector } from '../../controls/index.js';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\nimport { dockTelemetryEqual, selectDockTelemetry } from '../../context/telemetryViews.js';\nimport { useManualDockAssist } from '../../features/manualDockAssist/useManualDockAssist.js';\nimport useCanControlRover from '../../hooks/useCanControlRover.js';\nimport HornControl from '../HornControl/index.jsx';\nimport GPIOToggleControl from '../GPIOToggleControl/index.jsx';\nimport { AUX_ZERO } from './constants.js';\nimport VacuumControls from './VacuumControls.jsx';\nimport VerticalCameraTilt from './VerticalCameraTilt.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport RoverAccessoryControls from '../RoverAccessoryControls/index.jsx';\nimport AccessoriesToggle from '../RoverAccessoryControls/AccessoriesToggle.jsx';\nimport useRoverAccessories from '../RoverAccessoryControls/useRoverAccessories.js';\n\nconst CAMERA_TILT_STEP_DEGREES = 0.5;\nconst CAMERA_TILT_PRECISION_STEP_DEGREES = 0.1;\n\nfunction AuxColumnContent({ accessoriesAvailable, onShowAccessories }) {\n const roverId = useControlSelector((control) => control.state.roverId);\n const roomLightsLockedOn = useSessionSelector((state) => Boolean(state.session?.homeAssistant?.lightPolicy?.lockedOn));\n const camera = useControlSelector((control) => control.state.camera);\n const horn = useControlSelector((control) => control.state.horn);\n const headlight = useControlSelector((control) => control.pipeline?.headlight);\n const headlightState = useControlSelector((control) => control.pipeline?.headlightState);\n const laser = useControlSelector((control) => control.pipeline?.laser);\n const laserState = useControlSelector((control) => control.pipeline?.laserState);\n const pipelineHorn = useControlSelector((control) => control.pipeline?.horn);\n const { setServoAngle, setHeadlight, setLaser, setAuxMotors, startHorn, stopHorn } = useControlActions();\n const dockAssist = useManualDockAssist();\n const dockTelemetry = useTelemetrySelector(roverId, selectDockTelemetry, dockTelemetryEqual);\n const canControl = useCanControlRover(roverId);\n // Turn ownership is the common mutation boundary for every control in this\n // column. Dock and OI state are applied separately only where the hardware\n // command itself depends on the Roomba being able to drive.\n const controlsDisabled = !roverId || !canControl;\n const docked = Boolean(dockTelemetry?.homeBase);\n const drivingMode = String(dockTelemetry?.oiModeLabel || '').toLowerCase() === 'full';\n const vacuumDisabled = controlsDisabled\n || docked\n || (!drivingMode && !dockAssist.active);\n const activeAuxButtonRef = useRef(null);\n const cameraConfig = camera?.config;\n const cameraEnabled = Boolean(roverId && camera?.enabled && cameraConfig);\n const headlightAvailable = Boolean(roverId && headlight);\n const laserAvailable = Boolean(roverId && laser);\n const hornAvailable = Boolean(roverId && pipelineHorn);\n const hornBlocked = horn?.overheated;\n const cameraMin = typeof cameraConfig?.minAngle === 'number' ? cameraConfig.minAngle : -45;\n const cameraMax = typeof cameraConfig?.maxAngle === 'number' ? cameraConfig.maxAngle : 45;\n const cameraValue =\n typeof camera?.angle === 'number'\n ? camera.angle\n : typeof cameraConfig?.homeAngle === 'number'\n ? cameraConfig.homeAngle\n : (cameraMin + cameraMax) / 2;\n const cameraDisabled = Boolean(controlsDisabled || dockAssist.cameraLocked);\n /*\n The mobile tilt track shares the same precision flag as desktop tilt. This\n keeps the servo fine-step behavior tied to the selected movement mode rather\n than inventing a separate mobile-only camera setting.\n */\n const cameraTiltStep = camera?.precisionMode\n ? CAMERA_TILT_PRECISION_STEP_DEGREES\n : CAMERA_TILT_STEP_DEGREES;\n\n const handleHeadlightToggle = useCallback(\n (nextOn) => {\n if (!headlightAvailable || controlsDisabled) return;\n setHeadlight(nextOn);\n },\n [controlsDisabled, headlightAvailable, setHeadlight],\n );\n\n const handleLaserToggle = useCallback(\n (nextOn) => {\n if (!laserAvailable || controlsDisabled) return;\n setLaser(nextOn);\n },\n [controlsDisabled, laserAvailable, setLaser],\n );\n\n const handleHornStart = useCallback(() => {\n if (controlsDisabled) return false;\n return startHorn();\n }, [controlsDisabled, startHorn]);\n\n const handleAuxPress = useCallback(\n (id, values) => {\n if (vacuumDisabled) return;\n activeAuxButtonRef.current = id;\n setAuxMotors(values);\n },\n [setAuxMotors, vacuumDisabled],\n );\n\n const handleAuxRelease = useCallback(\n (id) => {\n if (activeAuxButtonRef.current === id) {\n activeAuxButtonRef.current = null;\n // Neutral commands must remain available after ownership or OI state is\n // lost; otherwise disabling a held control could preserve its last output.\n setAuxMotors(AUX_ZERO);\n }\n },\n [setAuxMotors],\n );\n\n useEffect(() => {\n if (!vacuumDisabled || activeAuxButtonRef.current === null) return;\n // Pointer cancellation is browser-dependent when a held button becomes\n // disabled. Explicitly neutralize the Roomba motors at the state boundary.\n activeAuxButtonRef.current = null;\n setAuxMotors(AUX_ZERO);\n }, [setAuxMotors, vacuumDisabled]);\n\n return (\n
\n
\n \n {accessoriesAvailable ? (\n \n ) : null}\n
\n
\n {cameraEnabled ? (\n \n ) : null}\n {(headlightAvailable || laserAvailable) ? (\n
\n {headlightAvailable ? (\n \n ) : null}\n {laserAvailable ? (\n \n ) : null}\n
\n ) : null}\n
\n
\n {hornAvailable ? (\n \n ) : null}\n
\n
\n );\n}\n\nfunction RoverAuxColumn({ roverId, layout, className }) {\n const [showAccessories, setShowAccessories] = useState(false);\n const { hasAccessories } = useRoverAccessories(roverId);\n\n return (\n
\n {showAccessories && hasAccessories ? (\n
\n setShowAccessories(false)}\n />\n )}\n />\n
\n ) : (\n setShowAccessories(true)}\n />\n )}\n
\n );\n}\n\nexport default function AuxColumn({ layout, className = '' }) {\n const roverId = useControlSelector((control) => control.state.roverId);\n\n // Keying the stateful view by assignment makes every newly selected rover\n // start in the familiar Aux view. It also guarantees that an Accessories\n // view cannot remain open after changing to a rover without accessories.\n return (\n \n );\n}\n","// Movement Column\n// Purpose: Assembles the mobile movement column, which is the right column by default.\n// Scope: Owns movement availability while the in-video DockingHud owns every dock/undock action.\nimport { FaChargingStation } from 'react-icons/fa';\nimport { useControlSelector } from '../../controls/index.js';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\nimport { dockTelemetryEqual, selectDockTelemetry } from '../../context/telemetryViews.js';\nimport { useManualDockAssist } from '../../features/manualDockAssist/useManualDockAssist.js';\nimport useCanControlRover from '../../hooks/useCanControlRover.js';\nimport { triggerTouchHaptic } from '../../lib/touchHaptics.js';\nimport ControlPadPanel from './ControlPadPanel.jsx';\n\nfunction MovementColumnContent({ layout }) {\n const roverId = useControlSelector((control) => control.state.roverId);\n const dockTelemetry = useTelemetrySelector(roverId, selectDockTelemetry, dockTelemetryEqual);\n const dockAssist = useManualDockAssist();\n const canControl = useCanControlRover(roverId);\n const batteryState = useSessionSelector((state) => {\n const rover = (state.session?.roster || []).find((entry) => String(entry.id) === String(roverId));\n return rover?.batteryState || null;\n });\n const batteryUrgent = Boolean(batteryState?.urgentActive);\n const batteryLow = Boolean(batteryState?.warnActive || batteryUrgent);\n const docked = Boolean(dockTelemetry?.homeBase);\n const drivingMode = String(dockTelemetry?.oiModeLabel || '').toLowerCase() === 'full';\n\n /*\n DockingHud is now the only place where a user starts driving or enters docking\n assist. This column only decides whether touch movement is safe. Requiring both\n an undocked rover and full OI mode keeps the pad inert throughout the undock\n macro, including the interval where dock contact and OI mode change separately.\n\n Manual assist is the deliberate exception to the normal OI-mode requirement:\n its entire purpose is to let the user drive onto the dock under the assist speed\n cap. Actual dock contact still disables movement immediately.\n */\n const movementDisabled = !roverId\n || !canControl\n || docked\n || (!drivingMode && !dockAssist.active);\n // Both controls share the same hardware-availability boundary. Dock assist\n // changes their actions, not who is allowed to command the rover.\n const dockActionDisabled = movementDisabled;\n\n const handleDockAction = () => {\n if (dockActionDisabled) return;\n triggerTouchHaptic('button');\n // Mobile deliberately enters assist on the first tap. The centered video HUD\n // provides the resulting instruction, so a confirmation modal would only add\n // friction between intent and the camera-guided docking task.\n if (dockAssist.active) {\n dockAssist.exitAssist();\n } else {\n dockAssist.enterAssist();\n }\n };\n\n return (\n
\n \n \n {/* The mobile column remains the only mobile entry point into dock assist. Battery\n severity makes that existing action more obvious without adding another control. */}\n {dockAssist.active ? 'Exit dock assist' : batteryUrgent ? 'Dock now' : batteryLow ? 'Dock and charge soon' : 'Dock and charge'}\n \n {/* Keeping the pad mounted prevents the mobile columns from changing size while\n the centered video HUD explains and performs dock-related transitions. */}\n \n
\n );\n}\n\nexport default function MovementColumn({ layout, className = '' }) {\n return (\n
\n \n
\n );\n}\n","// Floating Fullscreen Button\n// Purpose: Defines the Floating Fullscreen Button module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport default function FloatingFullscreenButton({ side = 'right', onClick }) {\n const sideClass = side === 'left' ? 'left-2' : 'right-2';\n return (\n \n \n \n \n \n );\n}\n","// Fullscreen Prompt\n// Purpose: Defines the Fullscreen Prompt module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport default function FullscreenPrompt({ visible, mode, onEnterFullscreen, onDismiss }) {\n if (!visible) return null;\n const isIOSMode = mode === 'pwa-hint';\n\n return (\n
\n
\n
\n

Better in fullscreen!

\n {isIOSMode ? (\n

\n For fullscreen on iOS, open Safari's share menu and pick Add to Home Screen. Launching from\n the home screen then makes it fullscreen.\n

\n ) : (\n

\n Enable fullscreen to free up more space for the video feed and controls. You can exit fullscreen at any time\n via the system back or home gesture.\n

\n )}\n

This will only show once just to let you know. There is a fullscreen button in the bottom right for later use.

\n\n
\n \n {!isIOSMode && (\n \n Enter fullscreen\n \n )}\n
\n
\n
\n
\n );\n}\n","// Hook: useFullscreenPrompt\n// Purpose: Manages fullscreen prompt visibility and dismissal logic across screen sizes/devices. Scope: Provides reusable fullscreen UX state and action handlers.\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSettingsNamespace } from '../settings/index.js';\n\nconst MOBILE_LAYOUTS = new Set(['mobile-portrait', 'mobile-landscape']);\n\nconst detectIOS = () => {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent || navigator.platform || '';\n return /iphone|ipad|ipod/i.test(ua);\n};\n\nconst supportsFullscreen = () => {\n if (typeof document === 'undefined') return false;\n const doc = document;\n return Boolean(\n doc.fullscreenEnabled ||\n doc.webkitFullscreenEnabled ||\n doc.mozFullScreenEnabled ||\n doc.msFullscreenEnabled,\n );\n};\n\nexport function useFullscreenPrompt(layout) {\n const { value: pageSettings, save: savePageSettings, status: settingsStatus } = useSettingsNamespace('page', {\n fullscreenPromptShown: false,\n });\n const isMobileLayout = MOBILE_LAYOUTS.has(layout);\n const [visible, setVisible] = useState(false);\n const [mode, setMode] = useState('native');\n const [forceVisible, setForceVisible] = useState(false);\n const hasShownPrompt = Boolean(pageSettings?.fullscreenPromptShown);\n const isIOS = useMemo(() => detectIOS(), []);\n const nativeSupported = useMemo(() => supportsFullscreen(), []);\n const markShown = useCallback(() => {\n if (settingsStatus !== 'ready') return;\n savePageSettings((current) => {\n if (current?.fullscreenPromptShown) return current;\n return { ...(current || {}), fullscreenPromptShown: true };\n });\n }, [savePageSettings, settingsStatus]);\n\n const reevaluate = useCallback(() => {\n if (settingsStatus !== 'ready') {\n setVisible(false);\n return;\n }\n if (!isMobileLayout) {\n setVisible(false);\n setForceVisible(false);\n return;\n }\n if (!forceVisible && hasShownPrompt) {\n setVisible(false);\n return;\n }\n if (isIOS) {\n setMode('pwa-hint');\n setVisible(true);\n return;\n }\n if (!supportsFullscreen()) {\n setVisible(false);\n return;\n }\n if (typeof document !== 'undefined' && document.fullscreenElement) {\n setVisible(false);\n return;\n }\n setMode('native');\n setVisible(true);\n }, [forceVisible, hasShownPrompt, isIOS, isMobileLayout, settingsStatus]);\n\n useEffect(() => {\n reevaluate();\n }, [reevaluate]);\n\n useEffect(() => {\n if (typeof document === 'undefined') return undefined;\n const handler = () => {\n if (document.fullscreenElement) {\n setForceVisible(false);\n setVisible(false);\n return;\n }\n reevaluate();\n };\n document.addEventListener('fullscreenchange', handler);\n document.addEventListener('webkitfullscreenchange', handler);\n return () => {\n document.removeEventListener('fullscreenchange', handler);\n document.removeEventListener('webkitfullscreenchange', handler);\n };\n }, [reevaluate]);\n\n const dismiss = useCallback(() => {\n markShown();\n setForceVisible(false);\n setVisible(false);\n }, [markShown]);\n\n const enterFullscreen = useCallback(async () => {\n if (!isMobileLayout || isIOS) return false;\n if (typeof document === 'undefined') return false;\n if (document.fullscreenElement) return true;\n const element = document.documentElement;\n if (!element) return false;\n const request =\n element.requestFullscreen ||\n element.webkitRequestFullscreen ||\n element.mozRequestFullScreen ||\n element.msRequestFullscreen;\n if (!request) return false;\n try {\n const result = request.call(element);\n if (result && typeof result.then === 'function') {\n await result;\n }\n markShown();\n setForceVisible(false);\n setVisible(false);\n return true;\n } catch (error) {\n console.warn('Failed to enter fullscreen', error);\n return false;\n }\n }, [isIOS, isMobileLayout, markShown]);\n\n const showPrompt = useCallback(() => {\n if (!isMobileLayout) return;\n setForceVisible(true);\n setMode(isIOS ? 'pwa-hint' : 'native');\n setVisible(true);\n }, [isIOS, isMobileLayout]);\n\n useEffect(() => {\n if (!isMobileLayout) {\n setForceVisible(false);\n setVisible(false);\n }\n }, [isMobileLayout]);\n\n return {\n visible,\n mode,\n isIOS,\n nativeSupported,\n enterFullscreen,\n dismiss,\n showPrompt,\n };\n}\n\nexport default useFullscreenPrompt;\n","// Mobile Driver Layout Frame\n// Purpose: Owns behavior and framing shared exclusively by portrait and landscape driver layouts.\n// Scope: Keeps fullscreen, mobile telemetry policy, objective banner, and snap framing out of the shared driver root.\nimport { useCallback } from 'react';\nimport FloatingFullscreenButton from '../../../components/FloatingFullscreenButton/index.jsx';\nimport FullscreenPrompt from '../../../components/FullscreenPrompt/index.jsx';\nimport GlobalObjectiveBanner from '../../../components/GlobalObjectiveBanner/index.jsx';\nimport { useTelemetryVisualPolicy } from '../../../context/TelemetryContext.jsx';\nimport { useFullscreenPrompt } from '../../../hooks/useFullscreenPrompt.js';\nimport { useSettingsNamespace } from '../../../settings/index.js';\nimport { themeGapClass } from '../../../themes/index.js';\nimport { useDriverLayout } from '../DriverLayoutContext.jsx';\nimport './styles.css';\n\nexport default function MobileLayoutFrame({ children }) {\n const layout = useDriverLayout();\n useTelemetryVisualPolicy({ mobile: true });\n const fullscreen = useFullscreenPrompt(layout);\n const { value: pageSettings } = useSettingsNamespace('page', { swapMobileControlColumns: false });\n const buttonSide = pageSettings?.swapMobileControlColumns ? 'left' : 'right';\n const showButton = fullscreen.isIOS || fullscreen.nativeSupported;\n\n const handleFloatingFullscreen = useCallback(async () => {\n if (fullscreen.isIOS) {\n fullscreen.showPrompt();\n return;\n }\n const entered = await fullscreen.enterFullscreen();\n if (!entered) fullscreen.showPrompt();\n }, [fullscreen]);\n\n return (\n
\n {/* The absolute marker creates the literal page-top snap without taking flex space. */}\n
\n \n {children}\n \n {showButton ? : null}\n
\n );\n}\n","// Mobile Chat Tab\n// Purpose: Owns the mobile chat and compact supporting-card composition.\nimport ChatPanel from '../../../../../components/ChatPanel/index.jsx';\nimport SocialButtonsGrid from '../../../../../components/SocialButtonsGrid/index.jsx';\nimport OverseerPreferencePanel from '../../../../../components/OverseerPreferencePanel/index.jsx';\nimport RawUserPilePanel from '../../../../../components/RawUserPilePanel/index.jsx';\nimport { TabPanel } from '../../../../../components/Tabs/index.jsx';\nimport { useSessionSelector } from '../../../../../context/SessionContext.jsx';\nimport { isFeatureEnabled } from '../../../../../lib/features.js';\nimport { themeGapClass, themeStackClass } from '../../../../../themes/index.js';\n\nexport default function MobileChatTab() {\n const showOverseerPreferencePanel = useSessionSelector((state) => Boolean(state.session?.overseerVote?.votingEnabled));\n const showSocialButtons = useSessionSelector((state) => {\n /* Match the card's own gate so its absence cannot reserve an empty column. */\n const socials = Array.isArray(state.session?.socials) ? state.session.socials : [];\n return isFeatureEnabled(state, 'socials') && socials.length > 0;\n });\n\n return (\n \n
\n \n
\n {showSocialButtons ? : null}\n
\n {showOverseerPreferencePanel ? : null}\n \n
\n
\n
\n
\n );\n}\n","// Mobile Room Lights Tab\n// Purpose: Owns the concrete mobile room-controls card order.\nimport { TabPanel } from '../../../../../components/Tabs/index.jsx';\nimport HomeAssistantControls from '../../../../../components/HomeAssistantControls/index.jsx';\nimport RoomCameraPanel from '../../../../../components/RoomCameraPanel/index.jsx';\nimport { themeStackClass } from '../../../../../themes/index.js';\nimport { useDriverLayout } from '../../../DriverLayoutContext.jsx';\n\nexport default function RoomControlsTab() {\n const layout = useDriverLayout();\n const panelId = layout === 'mobile-landscape' ? 'mobile-landscape-room' : 'mobile-portrait-room';\n return (\n \n
\n \n \n
\n
\n );\n}\n","// Mobile Driver Tabs\n// Purpose: Owns the shared mobile tab selector, state, and per-tab modules.\nimport { useCallback, useState } from 'react';\nimport Tabs, { Tab, TabList, TabPanels } from '../../../components/Tabs/index.jsx';\nimport MobileChatTab from '../tabs/mobile/ChatTab/index.jsx';\nimport RoomControlsTab from '../tabs/mobile/RoomControlsTab/index.jsx';\nimport ActivitiesTab from '../tabs/shared/ActivitiesTab/index.jsx';\nimport VipTab from '../tabs/shared/VipTab/index.jsx';\nimport VipTabButton from '../tabs/shared/VipTabButton/index.jsx';\nimport HelpTab from '../tabs/shared/HelpTab/index.jsx';\nimport SettingsTab from '../tabs/shared/SettingsTab/index.jsx';\n\nexport default function MobileTabs() {\n const [activeTab, setActiveTab] = useState('chat');\n const handleTabChange = useCallback((tab) => setActiveTab(tab), []);\n\n return (\n
\n \n \n Chat\n Activities\n \n Room Lights\n Help\n Settings\n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n","// Mobile Driver Secondary Content\n// Purpose: Owns the identical replay, queue, tabs, and terminal-ad composition used by both mobile layouts.\nimport DriverAdCard from '../../../components/DriverAdCard/index.jsx';\nimport PtzQueueCard from '../../../components/PtzCamera/index.jsx';\nimport ReplaySourcesPanel from '../../../components/ReplaySourcesPanel/index.jsx';\nimport RoverQueuesPanel from '../../../components/RoverQueuesPanel/index.jsx';\nimport { themeGapClass } from '../../../themes/index.js';\nimport { useDriverLayout } from '../DriverLayoutContext.jsx';\nimport MobileTabs from '../MobileTabs/index.jsx';\n\nexport default function MobileSecondaryContent() {\n const layout = useDriverLayout();\n const portrait = layout === 'mobile-portrait';\n const replayPanelId = portrait\n ? 'replay-sources-mobile-portrait'\n : 'replay-sources-mobile-landscape';\n\n return (\n
\n
\n
\n \n \n
\n \n
\n \n \n
\n );\n}\n","// Mobile Portrait Driver Layout\n// Purpose: Owns the concrete portrait video, controls, and secondary-card placement.\nimport AuxColumn from '../../../components/MobileControls/AuxColumn.jsx';\nimport MovementColumn from '../../../components/MobileControls/MovementColumn.jsx';\nimport NewDriveVideo from '../../../components/NewDriveVideo/index.jsx';\nimport { useSettingsNamespace } from '../../../settings/index.js';\nimport { themeGapClass } from '../../../themes/index.js';\nimport MobileLayoutFrame from '../MobileLayoutFrame/index.jsx';\nimport MobileSecondaryContent from '../MobileSecondaryContent/index.jsx';\n\nexport default function MobilePortraitLayout() {\n const { value: pageSettings } = useSettingsNamespace('page', { swapMobileControlColumns: false });\n const swap = Boolean(pageSettings?.swapMobileControlColumns);\n const columnHeight = 'h-[min(60svh,24rem)]';\n const firstColumn = swap\n ? \n : ;\n const secondColumn = swap\n ? \n : ;\n\n return (\n \n
\n {/* NewDriveVideo reads the shared layout context and removes only its redundant\n physical-control pods; the established portrait controls below remain unchanged. */}\n \n {/* Preserve the existing two-column portrait control surface exactly. */}\n
\n
\n {firstColumn}\n {secondColumn}\n
\n
\n \n
\n
\n );\n}\n","// Mobile Landscape Driver Layout\n// Purpose: Owns the concrete landscape video, controls, and secondary-card placement.\nimport AuxColumn from '../../../components/MobileControls/AuxColumn.jsx';\nimport MovementColumn from '../../../components/MobileControls/MovementColumn.jsx';\nimport NewDriveVideo from '../../../components/NewDriveVideo/index.jsx';\nimport { useSettingsNamespace } from '../../../settings/index.js';\nimport { themeGapClass } from '../../../themes/index.js';\nimport MobileLayoutFrame from '../MobileLayoutFrame/index.jsx';\nimport MobileSecondaryContent from '../MobileSecondaryContent/index.jsx';\n\nexport default function MobileLandscapeLayout() {\n const { value: pageSettings } = useSettingsNamespace('page', { swapMobileControlColumns: false });\n const swap = Boolean(pageSettings?.swapMobileControlColumns);\n const columnClass = 'self-start h-[min(100svh,32rem)]';\n const firstColumn = swap\n ? \n : ;\n const secondColumn = swap\n ? \n : ;\n\n return (\n \n
\n {/* The center column deliberately contains only the driver video. */}\n
\n {firstColumn}\n
\n {/* The grid owns the 4:3 height constraint so its center track always\n matches the video. Any width the video cannot use is reassigned to\n the control columns instead of becoming empty gutters around it. */}\n \n
\n {secondColumn}\n
\n \n
\n
\n );\n}\n","// Driver Layout Root\n// Purpose: Selects and frames the concrete desktop or mobile driver composition.\n// Scope: Owns layout-only mobile framing so App.jsx does not place page cards.\nimport DesktopLayout from './DesktopLayout/index.jsx';\nimport OldDesktopLayout from './OldDesktopLayout/index.jsx';\nimport MobilePortraitLayout from './MobilePortraitLayout/index.jsx';\nimport MobileLandscapeLayout from './MobileLandscapeLayout/index.jsx';\nimport { useDriverLayout } from './DriverLayoutContext.jsx';\n\nexport default function DriverLayoutRoot({ oldDesktop = false }) {\n const layout = useDriverLayout();\n\n if (layout === 'desktop') {\n // /old changes only the desktop composition. Mobile keeps one canonical\n // portrait/landscape implementation regardless of which desktop URL was opened.\n return oldDesktop ? : ;\n }\n\n return layout === 'mobile-landscape' ? : ;\n}\n","// Undocked Page Exit Guard\n// Purpose: Asks the browser to confirm document-level navigation while the current driver's rover is undocked.\n// Scope: Owns the native beforeunload lifecycle and queues the matching AlertFeed explanation when leaving is attempted.\nimport { useEffect } from 'react';\nimport { useControlSelector } from '../../controls/index.js';\nimport { useSessionActions } from '../../context/SessionContext.jsx';\nimport { useTelemetrySelector } from '../../context/TelemetryContext.jsx';\n\nconst UNDOCKED_EXIT_ALERT_LIFETIME_MS = 15 * 1000;\n\nfunction selectHomeBaseState(frame) {\n const homeBase = frame?.sensors?.chargingSources?.homeBase;\n\n /*\n Missing telemetry must remain distinct from a real \"not on the home base\"\n reading. Treating the initial empty frame as undocked would enable the exit\n warning before the browser has received enough information to justify it.\n */\n return typeof homeBase === 'boolean' ? homeBase : null;\n}\n\nexport default function UndockedPageExitGuard() {\n const roverId = useControlSelector((control) => control.state.roverId);\n const homeBaseState = useTelemetrySelector(roverId, selectHomeBaseState);\n const { pushAlert } = useSessionActions();\n const shouldConfirmExit = Boolean(roverId) && homeBaseState === false;\n\n useEffect(() => {\n if (!shouldConfirmExit) return undefined;\n\n function handleBeforeUnload(event) {\n /*\n Browsers intentionally own the wording and presentation of this dialog.\n preventDefault is the modern signal, while assigning returnValue keeps\n the confirmation working in browsers that still require the legacy part\n of the beforeunload contract.\n */\n event.preventDefault();\n event.returnValue = true;\n\n /*\n If the driver cancels the browser-owned confirmation, React remains\n mounted and AlertFeed presents the actionable reason for the warning.\n A stable id refreshes this one warning lane on another exit attempt\n instead of stacking duplicate cards over the driving interface.\n */\n pushAlert({\n id: 'undocked-page-exit-warning',\n kind: 'undocked-exit-warning',\n lifetimeMs: UNDOCKED_EXIT_ALERT_LIFETIME_MS,\n });\n }\n\n window.addEventListener('beforeunload', handleBeforeUnload);\n return () => {\n /*\n Removing the listener as soon as the rover docks or the assignment ends\n prevents ordinary spectators and completed drivers from seeing a stale\n leave-page confirmation.\n */\n window.removeEventListener('beforeunload', handleBeforeUnload);\n };\n }, [pushAlert, shouldConfirmExit]);\n\n return null;\n}\n","// Main Application Shell\n// Purpose: Composes the primary rover control interface and page-level layout. Scope: Orchestrates high-level panels, overlays, and feature modules for the default route.\nimport { useCallback, useEffect, useState } from 'react';\nimport AlertFeed from '../components/AlertFeed/index.jsx';\nimport {\n ControlSystemProvider,\n KeyboardInputManager,\n GamepadInputManager,\n} from '../controls/index.js';\nimport ModeGateOverlay from '../components/ModeGateOverlay/index.jsx';\nimport TurnAlertListener from '../components/TurnAlertListener/index.jsx';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport HelpOverlay from '../components/HelpOverlay/index.jsx';\nimport QuickstartOverlay from '../components/QuickstartOverlay/index.jsx';\nimport useDefaultNickname from '../hooks/useDefaultNickname.js';\nimport useUserIdentitySync from '../hooks/useUserIdentitySync.js';\nimport useIncomingInterInstanceTransfer from '../hooks/useIncomingInterInstanceTransfer.js';\nimport RewardRunOverlay from '../components/RewardRunOverlay/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport DuplicateIdentityOverlay from '../components/DuplicateIdentityOverlay/index.jsx';\nimport {\n DEFAULT_PAGE_THEME_KEY,\n themeGapClass,\n usePageThemeClass,\n} from '../themes/index.js';\nimport useLayoutMode from '../hooks/useLayoutMode.js';\nimport { DriverLayoutProvider } from '../layouts/driver/DriverLayoutContext.jsx';\nimport DriverLayoutRoot from '../layouts/driver/DriverLayoutRoot.jsx';\nimport UndockedPageExitGuard from '../components/UndockedPageExitGuard/index.jsx';\n\n/* Driver-page compositions live under layouts/driver. App retains only global providers, overlays, and route-level state. */\nfunction DriverPageRoot({ oldDesktop = false }) {\n const layout = useLayoutMode();\n const { value: pageSettings } = useSettingsNamespace('page', {\n backgroundTheme: DEFAULT_PAGE_THEME_KEY,\n });\n // Resolve the cookie value through the shared catalog before painting the page. This prevents\n // an obsolete or hand-edited key from stripping the background class from every exposed seam.\n const pageBackgroundClass = usePageThemeClass(pageSettings?.backgroundTheme);\n\n return (\n
\n \n
\n );\n}\n\nfunction DriverPageContent({ layout, oldDesktop }) {\n useDefaultNickname();\n useIncomingInterInstanceTransfer();\n useUserIdentitySync({ identitySurface: 'driver' });\n\n const {\n value: helpSettings,\n save: saveHelpSettings,\n } = useSettingsNamespace('help', { showOnLoad: true });\n const {\n value: quickstartSettings,\n status: quickstartStatus,\n save: saveQuickstartSettings,\n } = useSettingsNamespace('quickstart', { showOnLoad: true });\n const [helpVisible, setHelpVisible] = useState(false);\n const [quickstartVisible, setQuickstartVisible] = useState(false);\n\n useEffect(() => {\n if (quickstartStatus === 'ready') {\n setQuickstartVisible(quickstartSettings?.showOnLoad !== false);\n }\n }, [quickstartStatus, quickstartSettings?.showOnLoad]);\n\n const openHelp = useCallback(() => {\n setHelpVisible(true);\n }, []);\n const closeHelp = useCallback(() => {\n setHelpVisible(false);\n }, []);\n const closeQuickstart = useCallback(() => {\n setQuickstartVisible(false);\n }, []);\n const setQuickstartShowOnLoad = useCallback(\n (enabled) => {\n const next = Boolean(enabled);\n saveQuickstartSettings((current) => ({ ...(current ?? {}), showOnLoad: next }));\n if (!next) {\n setQuickstartVisible(false);\n }\n },\n [saveQuickstartSettings],\n );\n return (\n \n {/*\n Keep document-exit protection inside the control provider so it follows\n the same assigned-rover identity as every driving command. Mounting it\n only on the driver page leaves spectator and utility routes unchanged.\n */}\n \n \n \n
\n \n {/* Route selection affects only which desktop composition is mounted;\n all providers, overlays, inputs, and mobile layouts remain shared. */}\n \n \n
\n \n \n \n \n \n \n\n saveHelpSettings((current) => ({ ...(current ?? {}), showOnLoad: Boolean(enabled) }))}\n />\n \n
\n );\n}\n\nexport default DriverPageRoot;\n","// Hook: useSpectatorMode\n// Purpose: Encapsulates spectator mode detection and toggle behavior for controls/UI gating. Scope: Derives spectator-specific flags from session and route state.\nimport { useEffect, useState } from 'react';\nimport { useSession } from '../context/SessionContext.jsx';\n\nexport function useSpectatorMode() {\n const { session, setRole, subscribeAll, connected } = useSession();\n const [ready, setReady] = useState(false);\n const canUseSpectatorAccess = session?.bandwidthSavings?.canUseExternalSpectatorAccess !== false;\n\n useEffect(() => {\n let cancelled = false;\n async function ensureSpectator() {\n if (session?.mode === 'lockdown') {\n setReady(false);\n return;\n }\n if (!canUseSpectatorAccess) {\n /*\n The server will reject the role change too, but stopping here prevents\n a blocked external spectator from retrying on every session sync while\n the page is intentionally waiting for an admin grant or config change.\n */\n setReady(false);\n return;\n }\n try {\n if (session?.role !== 'spectator') {\n await setRole('spectator');\n }\n await subscribeAll();\n if (!cancelled) {\n setReady(true);\n }\n } catch (err) {\n console.error('Failed to enter spectator mode', err);\n if (!cancelled) {\n setReady(false);\n }\n }\n }\n ensureSpectator();\n return () => {\n cancelled = true;\n };\n }, [canUseSpectatorAccess, connected, session?.mode, session?.role, setRole, subscribeAll]);\n\n return ready;\n}\n","// use Portrait Layout\n// Purpose: Defines the use Portrait Layout module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useState } from 'react';\n\nexport default function usePortraitLayout() {\n const [isPortrait, setIsPortrait] = useState(() => {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(max-aspect-ratio: 4/3)').matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return undefined;\n const media = window.matchMedia('(max-aspect-ratio: 4/3)');\n const handleChange = (event) => setIsPortrait(event.matches);\n if (media.addEventListener) {\n media.addEventListener('change', handleChange);\n } else {\n media.addListener(handleChange);\n }\n return () => {\n if (media.removeEventListener) {\n media.removeEventListener('change', handleChange);\n } else {\n media.removeListener(handleChange);\n }\n };\n }, []);\n\n return isPortrait;\n}\n","import React from 'react';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { useVisualTelemetrySelector } from '../../../context/TelemetryContext.jsx';\nimport { batteryTelemetryEqual, selectBatteryTelemetry } from '../../../context/telemetryViews.js';\nimport { buildBatteryVisual } from '../../../lib/battery.js';\nimport BatteryBar from '../../BatteryBar/index.jsx';\n\nfunction VerticalBatteryOverlay({ show = false, roverId = null, sensors, batteryConfig, mobileHud = false }) {\n const batteryTelemetry = useVisualTelemetrySelector(roverId, selectBatteryTelemetry, batteryTelemetryEqual);\n const rosterBatteryConfig = useSessionSelector((state) => {\n if (!roverId) return null;\n const roster = state.session?.roster || [];\n const rover = roster.find((entry) => String(entry.id) === String(roverId));\n return rover?.battery ?? null;\n });\n const resolvedBatteryTelemetry = sensors\n ? {\n batteryChargeMah: sensors?.batteryChargeMah ?? null,\n batteryCapacityMah: sensors?.batteryCapacityMah ?? null,\n }\n : batteryTelemetry;\n const resolvedBatteryConfig = batteryConfig ?? rosterBatteryConfig;\n const batteryVisual = buildBatteryVisual({\n charge: resolvedBatteryTelemetry?.batteryChargeMah ?? null,\n config: resolvedBatteryConfig,\n });\n if (!show || !batteryVisual?.available) return null;\n\n return (\n
\n \n
\n );\n}\n\nexport default React.memo(VerticalBatteryOverlay);\n","import RoverMediaPlayer from '../RoverMediaPlayer/index.jsx';\nimport HudOverlay from '../HudOverlays/HudOverlay/index.jsx';\nimport RoverDescriptionOverlay from '../HudOverlays/RoverDescriptionOverlay/index.jsx';\nimport OvercurrentOverlay from '../HudOverlays/OvercurrentOverlay/index.jsx';\nimport LowBatteryOverlay from '../HudOverlays/LowBatteryOverlay/index.jsx';\nimport VerticalBatteryOverlay from '../HudOverlays/VerticalBatteryOverlay/index.jsx';\nimport RoverHelpOverlay from '../RoverHelpOverlay/index.jsx';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\n\nexport default function SpectateVideo({\n roverId = null,\n label,\n fitParent = false,\n layoutFormat = 'desktop',\n needsHelp = false,\n}) {\n const isExternalSpectatorSnapshotOnly = useSessionSelector((state) =>\n state.session?.role === 'spectator' &&\n state.session?.isLocalNetwork === false &&\n state.session?.bandwidthSavings?.externalSpectatorVideo === 'snapshots',\n );\n /*\n Server auth already denies external spectator WHEP when this policy is set,\n but explicitly selecting snapshot mode avoids expected authorization denials\n and keeps analytics focused on actual stream failures.\n */\n const videoMode = isExternalSpectatorSnapshotOnly ? 'snapshot' : null;\n return (\n
\n
\n \n \n \n \n \n \n \n
\n
\n );\n}\n","// Rover Spectator Card\n// Purpose: Defines the Rover Spectator Card module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport SpectateVideo from '../../../components/SpectateVideo/index.jsx';\n\nexport default function RoverSpectatorCard({ rover }) {\n return (\n
\n
\n \n
\n
\n );\n}\n","// PTZ Spectator Card\n// Purpose: Adds the single room PTZ camera to the spectator rover grid.\n// Scope: Uses live WHEP only when the server authorizes this socket; otherwise\n// falls back to the PTZ snapshot feed that remote spectators are allowed to see.\nimport PtzLiveVideo from '../../../components/PtzLiveVideo/index.jsx';\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\nimport { PTZ_CAMERA_ID, usePtzCameraSnapshots } from '../../../hooks/usePtzCameraSnapshot.js';\n\nfunction formatRemaining(deadline) {\n const remaining = Math.max(0, Math.ceil((Number(deadline || 0) - Date.now()) / 1000));\n if (!remaining) return '--';\n const minutes = Math.floor(remaining / 60);\n const seconds = remaining % 60;\n return `${minutes}:${String(seconds).padStart(2, '0')}`;\n}\n\nfunction isSpotlightOn(light = {}) {\n if (typeof light?.on === 'boolean') return light.on;\n const raw = light?.state;\n if (typeof raw === 'string') {\n const normalized = raw.trim().toLowerCase();\n return !['', '0', 'off', 'false'].includes(normalized);\n }\n return Boolean(Number(raw));\n}\n\nfunction normalizeInfraredMode(mode) {\n const normalized = String(mode || '').trim().toLowerCase();\n if (normalized === 'on') return 'On';\n if (normalized === 'off') return 'Off';\n return 'Auto';\n}\n\nfunction InfoRow({ label, value, tone = '' }) {\n return (\n
\n {label}\n {value}\n
\n );\n}\n\nfunction formatPublisherProgress(progress = null) {\n /*\n Keep the spectator card dense, but expose enough ffmpeg progress to tell if\n the PTZ transcoder is running behind when the live feed looks delayed.\n */\n if (!progress) return null;\n return [\n progress.fps ? `fps ${progress.fps}` : null,\n progress.speed ? `speed ${progress.speed}` : null,\n progress.drop_frames ? `drop ${progress.drop_frames}` : null,\n ].filter(Boolean).join(' | ');\n}\n\nfunction PtzSnapshotFallback({ label, source }) {\n const snapshotFeeds = usePtzCameraSnapshots([PTZ_CAMERA_ID], { enabled: true });\n const snapshot = snapshotFeeds[PTZ_CAMERA_ID] || null;\n return (\n
\n {snapshot?.objectUrl ? (\n {label}\n ) : (\n
\n {snapshot?.error || source?.error || 'Waiting for PTZ snapshot...'}\n
\n )}\n {/*\n Keep the PTZ snapshot fallback visually aligned with RoverMediaPlayer:\n the video surface owns only playback health, while the card around it\n owns identity/context. That prevents a second in-frame camera title and\n keeps fallback mode from looking different than live WHEP mode.\n */}\n
\n
\n Status: {snapshot?.status || 'snapshot'}\n
\n
\n
\n );\n}\n\nfunction PtzLiveOrSnapshot({ label }) {\n const isExternalSpectatorSnapshotOnly = useSessionSelector((state) =>\n state.session?.role === 'spectator' &&\n state.session?.isLocalNetwork === false &&\n state.session?.bandwidthSavings?.externalSpectatorVideo === 'snapshots',\n );\n /*\n PTZ live authorization is server-owned, but the spectator page knows when\n the configured outcome is snapshot-only. Rendering the fallback directly\n avoids a guaranteed denied WHEP request for every external spectator card.\n */\n if (isExternalSpectatorSnapshotOnly) {\n return ;\n }\n return (\n }\n />\n );\n}\n\nexport default function PtzSpectatorCard() {\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n if (!ptz?.enabled) return null;\n\n const publisher = ptz?.publisher || {};\n const publisherStatus = publisher.running\n ? 'running'\n : publisher.restartAt\n ? 'restarting'\n : publisher.lastEvent || 'stopped';\n const publisherProgress = formatPublisherProgress(publisher.progress);\n const queueCount = Array.isArray(ptz?.queue) ? ptz.queue.length : 0;\n const label = ptz?.name || 'PTZ Camera';\n\n return (\n
\n \n
\n \n \n \n \n \n \n {publisherProgress ? : null}\n {publisher.lastStderr ? (\n
\n {publisher.lastStderr}\n
\n ) : null}\n
\n
\n );\n}\n","// Rover Row\n// Purpose: Defines the Rover Row module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport RoverSpectatorCard from './RoverSpectatorCard.jsx';\nimport PtzSpectatorCard from './PtzSpectatorCard.jsx';\n\nexport default function RoverRow({ roster, showRovers = true, showPtz = true }) {\n return (\n
\n {showRovers && roster.length === 0 ?

No rovers registered.

: null}\n {showRovers\n ? roster.map((rover) => (\n \n ))\n : null}\n {/*\n PTZ intentionally remains the last grid item. With three rovers it\n therefore occupies the fourth tile, preserving the spectator layout's\n designed visual balance while still allowing independent unmounting.\n */}\n {showPtz ? : null}\n
\n );\n}\n","// Secondary Row\n// Purpose: Defines the Secondary Row module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport RoomCameraPanel from '../../../components/RoomCameraPanel/index.jsx';\n\nexport default function SecondaryRow() {\n return (\n \n );\n}\n","// Log Panel\n// Purpose: Defines the Log Panel module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useEffect, useMemo } from 'react';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport CardFrame from '../CardFrame/index.jsx';\n\nexport default function LogPanel() {\n const socket = useSocket();\n const logs = useSessionSelector((state) => state.logs);\n const rendered = useMemo(() => logs.slice().reverse(), [logs]);\n\n useEffect(() => {\n const subscribe = () => {\n socket.emit('log:subscribe');\n };\n\n /*\n Server logs are noisy enough that receiving them globally can make normal\n driving views pay for a diagnostic tool they are not using. The panel owns\n the subscription because it is the visible consumer: when a route or tab\n unmounts this component, the server can stop sending log traffic to this\n browser entirely instead of merely hiding the rendered rows.\n\n The connect listener matters because Socket.IO rooms are attached to the\n current server-side socket instance. A reconnect gives the browser a fresh\n room membership, so the mounted panel must ask for the log room again.\n */\n subscribe();\n socket.on('connect', subscribe);\n\n return () => {\n /*\n Unsubscribing on unmount keeps inactive tab panels and non-log routes\n from continuing to receive high-volume log entries after the operator\n has navigated away from the diagnostic view.\n */\n socket.off('connect', subscribe);\n socket.emit('log:unsubscribe');\n };\n }, [socket]);\n\n return (\n \n
\n {logs.length === 0 ? (\n

No logs yet.

\n ) : (\n rendered.map((entry) => (\n
\n {entry.timestamp}{' '}\n [{entry.level}]{' '}\n {entry.label && [{entry.label}]}{' '}\n {entry.message}\n
\n ))\n )}\n
\n
\n );\n}\n","// Logs Row\n// Purpose: Defines the Logs Row module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport LogPanel from '../../../components/LogPanel/index.jsx';\n\nexport default function LogsRow({ className = '' }) {\n return (\n
\n \n
\n );\n}\n","// Spectator View Controls\n// Purpose: Lets each spectator choose which major page regions consume space and media bandwidth.\n// Scope: Owns only the fixed gear menu UI; cookie persistence and layout decisions remain in SpectatorContent.\nimport { useEffect, useRef, useState } from 'react';\nimport { FaCog } from 'react-icons/fa';\nimport CardFrame from '../../../components/CardFrame/index.jsx';\n\nconst VIEW_OPTIONS = [\n { key: 'showSidebar', label: 'Sidebar' },\n { key: 'showRovers', label: 'Rovers' },\n { key: 'showPtz', label: 'PTZ camera' },\n { key: 'showRoomCameras', label: 'Room cameras' },\n];\n\nexport default function SpectatorViewControls({ preferences, onToggle }) {\n const [open, setOpen] = useState(false);\n const controlsRef = useRef(null);\n\n useEffect(() => {\n if (!open) return undefined;\n\n const handlePointerDown = (event) => {\n /*\n The popup floats above both the sidebar and camera grid, so clicking\n elsewhere should dismiss it without changing any saved preference.\n Keeping the gear and popup under one ref makes clicks on either safe.\n */\n if (!controlsRef.current?.contains(event.target)) setOpen(false);\n };\n const handleKeyDown = (event) => {\n // Escape mirrors normal dialog/menu behavior without trapping keyboard focus.\n if (event.key === 'Escape') setOpen(false);\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [open]);\n\n return (\n
\n setOpen((current) => !current)}\n >\n \n \n {open ? (\n \n
\n {VIEW_OPTIONS.map((option) => (\n \n onToggle(option.key, event.target.checked)}\n />\n {option.label}\n \n ))}\n
\n \n ) : null}\n
\n );\n}\n","// Spectator Content\n// Purpose: Defines the Spectator Content module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useSession, useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSpectatorMode } from '../../hooks/useSpectatorMode.js';\nimport { useSettingsNamespace } from '../../settings/index.js';\nimport useDefaultNickname from '../../hooks/useDefaultNickname.js';\nimport useUserIdentitySync from '../../hooks/useUserIdentitySync.js';\nimport ChatPanel from '../../components/ChatPanel/index.jsx';\nimport AlertFeed from '../../components/AlertFeed/index.jsx';\nimport GlobalObjectiveBanner from '../../components/GlobalObjectiveBanner/index.jsx';\nimport RoverQueuesPanel from '../../components/RoverQueuesPanel/index.jsx';\nimport RawUserPilePanel from '../../components/RawUserPilePanel/index.jsx';\nimport ButtonBoxPanel from '../../components/ButtonBoxPanel/index.jsx';\nimport RewardRunOverlay from '../../components/RewardRunOverlay/index.jsx';\nimport ReplayReadyPopup from '../../components/ReplaySourcesPanel/ReplayReadyPopup.jsx';\nimport usePortraitLayout from './hooks/usePortraitLayout.js';\nimport RoverRow from './components/RoverRow.jsx';\nimport SecondaryRow from './components/SecondaryRow.jsx';\nimport LogsRow from './components/LogsRow.jsx';\nimport SpectatorViewControls from './components/SpectatorViewControls.jsx';\n\nconst SPECTATOR_VIEW_DEFAULTS = {\n showSidebar: true,\n showRovers: true,\n showPtz: true,\n showRoomCameras: true,\n};\n\nexport default function SpectatorContent() {\n const { session } = useSession();\n const latestReplay = useSessionSelector((state) => state.latestReplay);\n const { clearLatestReplay } = useSessionActions();\n const { value: viewPreferences, save: saveViewPreferences } = useSettingsNamespace(\n 'spectatorPage',\n SPECTATOR_VIEW_DEFAULTS,\n );\n const inLockdown = session?.mode === 'lockdown';\n const canUseSpectatorAccess = session?.bandwidthSavings?.canUseExternalSpectatorAccess !== false;\n const spectatorAccessMode = session?.bandwidthSavings?.externalSpectatorAccess || 'on';\n useDefaultNickname();\n // The spectator route is not rendered through App.jsx, so it must opt into\n // the same persisted identity heartbeat here. That keeps the existing\n // cookie-backed identity and saved nickname behavior active without adding a\n // separate spectator identity path.\n useUserIdentitySync();\n useSpectatorMode();\n const isPortraitLayout = usePortraitLayout();\n const roster = session?.roster ?? [];\n // Treat absent keys as enabled so older settings cookies gain every new view\n // option by default instead of unexpectedly hiding parts of the page.\n const showSidebar = viewPreferences?.showSidebar !== false;\n const showRovers = viewPreferences?.showRovers !== false;\n const showPtz = viewPreferences?.showPtz !== false;\n const showRoomCameras = viewPreferences?.showRoomCameras !== false;\n const updateViewPreference = (key, enabled) => {\n saveViewPreferences((current) => ({ ...(current || {}), [key]: Boolean(enabled) }));\n };\n\n if (inLockdown) {\n return (\n
\n
\n

Spectate disabled during lockdown.

\n

Please wait until the server leaves lockdown to view streams.

\n
\n
\n );\n }\n\n if (session && !canUseSpectatorAccess) {\n /*\n The server keeps this socket in the normal user role when external\n spectating is blocked. Rendering a full-page gate makes that intentional\n state obvious instead of showing an empty spectator shell that repeatedly\n fails to subscribe.\n */\n const message = spectatorAccessMode === 'admin'\n ? 'This external spectator identity needs admin approval before it can view the spectator page.'\n : spectatorAccessMode === 'verifiedOnly'\n ? 'This external spectator identity must be verified before it can view the spectator page.'\n : 'External spectator access is disabled on this server.';\n return (\n
\n
\n

Spectate access required.

\n

{message}

\n
\n
\n );\n }\n\n const mainClass = isPortraitLayout\n ? 'flex min-h-screen flex-col bg-black text-slate-100 md:h-screen md:overflow-hidden'\n : showSidebar\n ? 'grid min-h-screen grid-cols-1 gap-0.5 bg-black text-slate-100 md:h-full md:min-h-0 md:grid-cols-[minmax(0,1fr)_18rem] lg:grid-cols-[minmax(0,1fr)_20rem]'\n : 'grid min-h-screen grid-cols-1 gap-0.5 bg-black text-slate-100 md:h-full md:min-h-0';\n const contentClass = isPortraitLayout\n ? 'order-2 flex min-h-0 min-w-0 flex-1 flex-col gap-0.5 overflow-y-auto'\n : 'order-1 flex min-h-0 min-w-0 flex-col gap-0.5 md:overflow-y-auto';\n const sidebarClass = isPortraitLayout\n ? 'order-1 grid w-full min-h-0 items-stretch gap-0.5 border-b border-slate-800/60 bg-slate-950/90 p-0.5 grid-cols-[minmax(0,1fr)_minmax(0,0.7fr)_minmax(0,1.9fr)_minmax(0,0.7fr)]'\n : 'order-2 flex min-h-0 min-w-0 flex-col gap-0.5 border-l border-slate-800/60 bg-slate-950/90 md:h-full md:overflow-y-auto';\n const topBarItemClass = isPortraitLayout ? '' : '';\n const portraitItemHeight = isPortraitLayout ? 'h-64' : '';\n\n return (\n
\n
\n {showSidebar ?
\n {isPortraitLayout ? (\n
\n \n \n
\n \n
\n
\n ) : (\n
\n \n \n
\n )}\n
\n
\n \n
\n
\n {!isPortraitLayout ? (\n
\n \n
\n ) : null}\n
\n \n
\n
\n \n
\n
: null}\n
\n {/*\n Conditional rendering is deliberate: CSS-only hiding would leave\n WHEP peer connections and snapshot socket subscriptions active.\n Unmounting delegates cleanup to the media components that own them.\n */}\n {showRovers || showPtz ? (\n \n ) : null}\n {showRoomCameras ? : null}\n
\n
\n \n \n \n {/* Spectators do not have the replay request panel that normal web users see, so\n the spectator route presents the shared latestReplay value directly. Every\n spectator should receive the fullscreen replay when completed media becomes\n available, regardless of which browser or transport requested its creation. */}\n \n
\n );\n}\n","// Spectator App Root\n// Purpose: Defines the Spectator App Root module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport SpectatorContent from './SpectatorContent.jsx';\n\nexport default function SpectatorAppRoot() {\n return ;\n}\n","// Fit Viewport Frame\n// Purpose: Defines the Fit Viewport Frame module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport default function FitViewportFrame({ children }) {\n return (\n
\n \n
{children}
\n
\n
\n );\n}\n","// utils\n// Purpose: Defines the utils module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { buildBatteryVisual } from '../../lib/battery.js';\n\nexport function formatDriverLabel({ roverId, session }) {\n const activeDriverId = session?.activeDrivers?.[roverId] || null;\n const user = (session?.users || []).find((entry) => entry.socketId === activeDriverId);\n const label = user?.nickname || (activeDriverId ? activeDriverId.slice(0, 6) : 'No driver');\n const mode = session?.mode;\n const turnInfo = session?.turnQueues?.[roverId];\n return mode === 'turns' && turnInfo?.current ? `${label}` : label;\n}\n\nexport function getBatteryVisual({ rover, frame }) {\n const charge = frame?.sensors?.batteryChargeMah ?? null;\n const config = rover?.battery ?? null;\n return buildBatteryVisual({ batteryState: rover?.batteryState ?? null, charge, config });\n}\n","// Info Column\n// Purpose: Defines the Info Column module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport RoverMediaPlayer from '../../../components/RoverMediaPlayer/index.jsx';\nimport BatteryBar from '../../../components/BatteryBar/index.jsx';\nimport RoverLabel from '../../../components/RoverLabel/index.jsx';\nimport RoverHelpOverlay from '../../../components/RoverHelpOverlay/index.jsx';\nimport AutoFitText from '../../../components/AutoFitText/index.jsx';\nimport { getBatteryVisual } from '../utils.js';\n\nexport default function InfoColumn({\n rover,\n frame,\n driverLabel,\n sessionInfo,\n videoMode = 'snapshot',\n snapshotFeed,\n withDivider = false,\n showPreview = true,\n variant = 'stacked',\n}) {\n const batteryVisual = getBatteryVisual({ rover, frame });\n const batteryPercent = batteryVisual?.available ? batteryVisual.percentDisplay : null;\n const isActiveView = variant === 'active';\n return (\n \n \n {/* In the side-by-side roster this column is the rover's complete tile.\n The active carousel already overlays its video pane, so suppressing a\n second copy here avoids flashing HELP twice for the same rover. */}\n \n {isActiveView ? (\n
\n
\n \n
\n {driverLabel ? (\n
\n \n {driverLabel}\n \n
\n ) : (\n
\n )}\n
\n
\n \n {batteryPercent == null ? '--%' : `${batteryPercent}%`}\n \n
\n
\n
\n ) : (\n <>\n
\n
\n \n
\n {driverLabel ? (\n
\n \n {driverLabel}\n \n
\n ) : null}\n
\n
\n \n {batteryPercent == null ? '--%' : `${batteryPercent}%`}\n \n
\n
\n
\n\n
\n
\n {showPreview ? (\n
\n
\n \n
\n
\n ) : null}\n
\n
\n \n )}\n
\n );\n}\n","// constants\n// Purpose: Defines the constants module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nexport const ROTATE_MS = 20000;\nexport const HARD_REFRESH_MS = 1 * 60 * 60 * 1000;\n","// Mini Summary Content\n// Purpose: Defines the Mini Summary Content module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useSession } from '../../context/SessionContext.jsx';\nimport { useVisualTelemetryFrames } from '../../context/TelemetryContext.jsx';\nimport { useVideoRequests } from '../../hooks/useVideoRequests.js';\nimport { useRoverSnapshots } from '../../hooks/useRoverSnapshots.js';\nimport { useSpectatorMode } from '../../hooks/useSpectatorMode.js';\nimport useDefaultNickname from '../../hooks/useDefaultNickname.js';\nimport useUserIdentitySync from '../../hooks/useUserIdentitySync.js';\nimport PtzLiveVideo from '../../components/PtzLiveVideo/index.jsx';\nimport RoverMediaPlayer from '../../components/RoverMediaPlayer/index.jsx';\nimport RoverHelpOverlay from '../../components/RoverHelpOverlay/index.jsx';\nimport FitViewportFrame from './components/FitViewportFrame.jsx';\nimport InfoColumn from './components/InfoColumn.jsx';\nimport { ROTATE_MS } from './constants.js';\nimport { formatDriverLabel } from './utils.js';\n\nfunction hasRoverAudioCapture(rover) {\n // Mini uses the same media contract as the full rover player: audio exists\n // only when the nested microphone publisher block is enabled and publishable.\n return Boolean(rover?.media?.audioCapture?.enabled && rover?.media?.audioCapture?.publishUrl);\n}\n\nfunction AutoFitBoxText({ children, className = '', maxSize = 1000, minSize = 14 }) {\n const containerRef = useRef(null);\n const textRef = useRef(null);\n const [fontSize, setFontSize] = useState(maxSize);\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n const textEl = textRef.current;\n if (!container || !textEl) return undefined;\n\n let raf = null;\n const fit = () => {\n const width = container.clientWidth;\n const height = container.clientHeight;\n if (!width || !height) {\n scheduleFit();\n return;\n }\n\n /*\n Unlike the shared AutoFitText helper, the PTZ operator label has a real\n second constraint: before rotation, text length must fit the screen\n height and text thickness must fit the blue column width. Binary search\n lets the name use as much of both dimensions as possible without\n clipping either after the 90-degree transform.\n */\n let low = minSize;\n let high = maxSize;\n let best = minSize;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n textEl.style.fontSize = `${mid}px`;\n const fits = textEl.scrollWidth <= width && textEl.scrollHeight <= height;\n if (fits) {\n best = mid;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n setFontSize(best);\n };\n\n const scheduleFit = () => {\n if (raf) cancelAnimationFrame(raf);\n raf = requestAnimationFrame(fit);\n };\n\n scheduleFit();\n const ro = new ResizeObserver(scheduleFit);\n ro.observe(container);\n return () => {\n if (raf) cancelAnimationFrame(raf);\n ro.disconnect();\n };\n }, [children, maxSize, minSize]);\n\n return (\n
\n \n {children}\n
\n
\n );\n}\n\nfunction MiniPtzUserColumn({ label }) {\n const columnRef = useRef(null);\n const [columnSize, setColumnSize] = useState({ width: 0, height: 0 });\n\n useLayoutEffect(() => {\n const column = columnRef.current;\n if (!column) return undefined;\n\n const updateSize = () => {\n /*\n The label box is measured before rotation, so the blue column's screen\n height becomes the label's unrotated width, and the blue column's screen\n width becomes the label's unrotated height. That swapped geometry is the\n key difference from normal horizontal auto-fit text.\n */\n setColumnSize({\n width: column.clientWidth,\n height: column.clientHeight,\n });\n };\n\n updateSize();\n const ro = new ResizeObserver(updateSize);\n ro.observe(column);\n return () => ro.disconnect();\n }, []);\n\n return (\n
\n {/*\n The mini page is intended for glanceable room displays, so the PTZ user\n gets the same right-side identity treatment as rover metadata while\n letting the blue column absorb any extra horizontal room after the\n full-height PTZ video takes the camera-shaped part of the viewport.\n */}\n {columnSize.width > 16 && columnSize.height > 16 ? (\n \n {/*\n This fitter checks both text width and text height before rotation.\n After rotation, that means the username fits both the vertical\n reading length and the visible thickness of the blue column.\n */}\n \n {label}\n \n
\n ) : null}\n
\n );\n}\n\nexport default function MiniSummaryContent() {\n const { session } = useSession();\n const spectatorReady = useSpectatorMode();\n useDefaultNickname();\n // Mini renders outside App.jsx, so it must run the same persisted identity\n // heartbeat itself. This keeps cookie-backed identity and saved nickname\n // metadata current without changing the mini page's layout or controls.\n useUserIdentitySync();\n const inLockdown = session?.mode === 'lockdown';\n const canSpectateVideo = Boolean(session?.isLocalNetwork);\n const frames = useVisualTelemetryFrames();\n const roster = session?.roster ?? [];\n const ptz = session?.ptzCamera || null;\n const ptzOperatorLabel = String(ptz?.operatorLabel || '').trim();\n const hasActivePtzOperator = Boolean(ptz?.enabled && ptzOperatorLabel);\n const [index, setIndex] = useState(0);\n const activeDrivers = session?.activeDrivers || {};\n const driverRoster = useMemo(\n () => roster.filter((rover) => activeDrivers[rover.id]),\n [roster, activeDrivers],\n );\n const mediaRovers = useMemo(\n () => roster.filter((rover) => rover?.id),\n [roster],\n );\n\n const snapshotFeeds = useRoverSnapshots(\n mediaRovers.map((rover) => rover.id),\n { enabled: !inLockdown && !canSpectateVideo, version: session?.mode },\n );\n const videoEntries = useMemo(\n () =>\n canSpectateVideo\n ? mediaRovers.map((rover) => ({ type: 'rover', id: rover.id, key: rover.id }))\n : [],\n [canSpectateVideo, mediaRovers],\n );\n const videoSources = useVideoRequests(videoEntries, {\n enabled: !inLockdown && canSpectateVideo,\n version: session?.mode,\n });\n const audioEntries = useMemo(\n () =>\n driverRoster.flatMap((rover) => {\n if (!rover?.id || !hasRoverAudioCapture(rover)) return [];\n const id = String(rover.id);\n return [{ type: 'rover', id: `${id}-audio`, key: `${id}-audio` }];\n }),\n [driverRoster],\n );\n const audioSources = useVideoRequests(audioEntries, { enabled: !inLockdown, version: session?.mode });\n\n const rotationPool = useMemo(() => {\n /*\n Rotation membership is intentionally based on human-controlled sources,\n not on WHEP response timing. The mounted media players below are a\n separate full-roster list, so a video token refresh, snapshot arrival, or\n active-driver update changes which already-warm layer is visible instead\n of tearing down the player components themselves.\n */\n const entries = driverRoster.map((rover) => ({ type: 'rover', rover }));\n if (hasActivePtzOperator) entries.push({ type: 'ptz' });\n return entries;\n }, [driverRoster, hasActivePtzOperator]);\n\n const rotationKey = useMemo(\n () =>\n rotationPool\n .map((entry) => (entry.type === 'ptz' ? 'p:ptz-camera' : `r:${entry.rover.id}`))\n .join('|'),\n [rotationPool],\n );\n\n useEffect(() => {\n setIndex(0);\n }, [rotationKey]);\n\n useEffect(() => {\n if (!rotationPool.length) return undefined;\n const timer = setInterval(() => {\n setIndex((prev) => (prev + 1) % rotationPool.length);\n }, ROTATE_MS);\n return () => clearInterval(timer);\n }, [rotationPool.length, rotationKey]);\n\n const activeEntry = rotationPool.length ? rotationPool[index % rotationPool.length] : null;\n const activeRover = activeEntry?.type === 'rover' ? activeEntry.rover : null;\n const activePtz = activeEntry?.type === 'ptz';\n\n const activeVideo = canSpectateVideo && activeRover ? videoSources[activeRover.id] || null : null;\n const activeAudio = activeRover ? audioSources[`${activeRover.id}-audio`] || null : null;\n const activeFrame = activeRover ? frames[activeRover.id] || null : null;\n const driverLabel = activeRover ? formatDriverLabel({ roverId: activeRover.id, session }) : null;\n const showSideBySideFallback = !driverRoster.length && !hasActivePtzOperator;\n const hasMountedMediaSources = Boolean(mediaRovers.length || ptz?.enabled);\n\n if (inLockdown) {\n return (\n
\n
\n

Mini spectator is disabled in lockdown.

\n

It will automatically resume once lockdown ends.

\n
\n
\n );\n }\n\n return (\n
\n {showSideBySideFallback ? (\n
\n {roster.length ? (\n roster.map((rover) => (\n \n ))\n ) : (\n
\n No rovers available.\n
\n )}\n
\n ) : null}\n \n {!spectatorReady ? (\n
\n Switching to spectator…\n
\n ) : hasMountedMediaSources ? (\n
\n {/*\n Keep every mini media source mounted while the carousel rotates.\n WHEP negotiation is the expensive part that caused the visible\n blank gap, so inactive sources are hidden with opacity instead of\n being removed from React's tree and forced to reconnect later.\n */}\n {mediaRovers.map((rover) => {\n const isActive = activeRover?.id === rover.id;\n return (\n \n \n {canSpectateVideo ? (\n \n ) : (\n \n )}\n \n \n
\n );\n })}\n {ptz?.enabled ? (\n
\n {/*\n PTZ bypasses FitViewportFrame because that helper intentionally\n enforces the rover camera's 4:3 shape. Keeping this component\n mounted preserves the PTZ WHEP session across rover/PTZ\n rotations while still letting the visible pane resize to 16:9\n when PTZ becomes active.\n */}\n \n
\n ) : null}\n
\n ) : (\n
\n {driverRoster.length ? 'No sources available.' : 'No active drivers.'}\n
\n )}\n \n \n {activePtz ? (\n \n ) : activeRover ? (\n \n ) : (\n
\n No active rover.\n
\n )}\n \n \n );\n}\n","// Mini Summary App Root\n// Purpose: Defines the Mini Summary App Root module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect } from 'react';\nimport AlertFeed from '../../components/AlertFeed/index.jsx';\nimport MiniSummaryContent from './MiniSummaryContent.jsx';\nimport { HARD_REFRESH_MS } from './constants.js';\n\nexport default function MiniSummaryAppRoot() {\n useEffect(() => {\n if (typeof window === 'undefined') return undefined;\n const timer = setTimeout(() => {\n const url = new URL(window.location.href);\n url.searchParams.set('refresh', Date.now().toString());\n window.location.replace(url.toString());\n }, HARD_REFRESH_MS);\n return () => clearTimeout(timer);\n }, []);\n\n return (\n <>\n \n \n \n );\n}\n","// Server Display Utilities\n// Purpose: Supplies small formatting helpers shared by the room display components.\n// Scope: Keeps the display route focused on presentation while still using the same\n// session, roster, and battery data shapes as the rest of the web UI.\nimport { buildBatteryVisual } from '../../lib/battery.js';\n\nexport function formatUserName(user) {\n // The room display is read from a distance, so every user needs a short stable\n // label even when they have not set a nickname. Socket ids are noisy, but the\n // first six characters match existing UI behavior and are enough to distinguish\n // temporary visitors in the room.\n return String(user?.nickname || user?.socketId?.slice(0, 6) || 'unknown').trim();\n}\n\nexport function findDriverForRover({ roverId, session }) {\n const activeDriverId = session?.activeDrivers?.[roverId] || null;\n if (!activeDriverId) return null;\n const user = (session?.users || []).find((entry) => entry.socketId === activeDriverId);\n return {\n socketId: activeDriverId,\n label: formatUserName(user || { socketId: activeDriverId }),\n };\n}\n\nexport function getDisplayBatteryVisual({ rover, frame }) {\n // Roster battery state is the normal fast path because the server already\n // classifies warning/urgent thresholds. Telemetry charge is included as a\n // fallback so the display still gets a useful percentage if the roster state\n // arrives before the richer battery snapshot is populated.\n return buildBatteryVisual({\n batteryState: rover?.batteryState ?? null,\n charge: frame?.sensors?.batteryChargeMah ?? null,\n config: rover?.battery ?? null,\n });\n}\n\nexport function formatBatteryText(visual) {\n if (!visual?.available) return '--';\n if (visual.urgentActive) return `${visual.percentDisplay}% Low`;\n if (visual.warnActive) return `${visual.percentDisplay}% Low`;\n return `${visual.percentDisplay}%`;\n}\n\nexport function buildRoverStateText(rover, visual) {\n const states = [];\n if (rover?.private?.enabled && rover?.private?.open) states.push('Private');\n if (visual?.urgentActive || visual?.warnActive) states.push('Low');\n // Only exceptional state belongs here. The normal driver/id/battery lines\n // already consume the big readable space, and extra routine labels make this\n // utility board harder to scan from across the room.\n return states.join(' · ');\n}\n\nexport function gridClassForRoverCount(count) {\n if (count <= 1) return 'grid-cols-1';\n if (count === 2) return 'grid-cols-2';\n if (count === 4) return 'grid-cols-2';\n return 'grid-cols-3';\n}\n","// Online People Strip\n// Purpose: Renders a one-line, label-free list of online people for the room display.\n// Scope: Owns overflow detection and marquee-style motion without changing shared user-list components.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { formatUserName } from '../utils.js';\n\nfunction classNames(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nexport default function OnlinePeopleStrip({ users = [] }) {\n const viewportRef = useRef(null);\n const trackRef = useRef(null);\n const contentRef = useRef(null);\n const [overflowing, setOverflowing] = useState(false);\n\n const names = useMemo(\n () =>\n users\n // The display page itself enters spectator mode, and other passive\n // spectators are usually not relevant to people physically in the room.\n // Filtering them keeps the top strip focused on active participants.\n .filter((user) => user?.role !== 'spectator')\n .map(formatUserName)\n .filter(Boolean)\n .sort((a, b) => a.localeCompare(b)),\n [users],\n );\n\n useEffect(() => {\n const viewport = viewportRef.current;\n const content = contentRef.current;\n if (!viewport || !content) return undefined;\n\n const updateOverflow = () => {\n // The strip only moves when it needs to. A still row is easier to read\n // when the current online set already fits on the 16:10 display.\n setOverflowing(content.scrollWidth > viewport.clientWidth + 4);\n };\n\n updateOverflow();\n const resizeObserver = new ResizeObserver(updateOverflow);\n resizeObserver.observe(viewport);\n resizeObserver.observe(content);\n return () => resizeObserver.disconnect();\n }, [names]);\n\n useEffect(() => {\n const track = trackRef.current;\n if (!track || !overflowing) return undefined;\n\n // This animation is local to the display route, so it is created directly\n // on the strip element instead of adding route-specific keyframes to the\n // global stylesheet. The duplicated name row means -50% lands exactly at\n // the start of the second copy, producing a continuous readable loop.\n const animation = track.animate(\n [{ transform: 'translateX(0)' }, { transform: 'translateX(-50%)' }],\n { duration: 42000, iterations: Infinity, easing: 'linear' },\n );\n return () => animation.cancel();\n }, [overflowing, names]);\n\n const renderedNames = names.length ? names : ['No one online'];\n const itemNodes = renderedNames.map((name, index) => (\n \n {name}\n \n ));\n\n return (\n \n \n
\n {itemNodes}\n
\n {overflowing ? (\n // The duplicate row makes the loop continuous. It is hidden from assistive\n // tech because it is purely mechanical animation, not extra information.\n
\n {itemNodes}\n
\n ) : null}\n \n \n );\n}\n","// Display Rover Cell\n// Purpose: Shows one rover's room-readable driver and battery status.\n// Scope: Reuses shared rover/battery presentation primitives while avoiding controls, queues, and video.\nimport { useVisualTelemetrySelector } from '../../../context/TelemetryContext.jsx';\nimport { batteryTelemetryEqual, selectBatteryTelemetry } from '../../../context/telemetryViews.js';\nimport BatteryBar from '../../../components/BatteryBar/index.jsx';\nimport RoverLabel from '../../../components/RoverLabel/index.jsx';\nimport AutoFitText from '../../../components/AutoFitText/index.jsx';\nimport RoverHelpOverlay from '../../../components/RoverHelpOverlay/index.jsx';\nimport {\n buildRoverStateText,\n findDriverForRover,\n formatBatteryText,\n getDisplayBatteryVisual,\n} from '../utils.js';\n\nfunction classNames(...values) {\n return values.filter(Boolean).join(' ');\n}\n\nexport default function DisplayRoverCell({ rover, session }) {\n const batteryTelemetry = useVisualTelemetrySelector(rover?.id, selectBatteryTelemetry, batteryTelemetryEqual);\n const frame = { sensors: batteryTelemetry };\n const visual = getDisplayBatteryVisual({ rover, frame });\n const driver = findDriverForRover({ roverId: rover?.id, session });\n const stateText = buildRoverStateText(rover, visual);\n const batteryText = formatBatteryText(visual);\n const batteryVoltage = frame?.sensors.batteryVoltage;\n const batteryCurrent = frame?.sensors.batteryCurrent;\n const active = Boolean(driver);\n const urgent = Boolean(visual?.urgentActive);\n const warn = Boolean(visual?.warnActive);\n const locked = Boolean(rover?.locked);\n // console.log(batteryTelemetry)\n // console.log(batteryVoltage)\n\n return (\n \n \n \n
\n
\n
\n \n
\n {locked ? (\n // Keep the lock warning adjacent to the rover identity so the cell\n // remains readable while still making the locked state impossible\n // to miss at a glance.\n
\n
LOCKED
\n {rover?.lockReason ? (\n
\n {rover.lockReason}\n
\n ) : null}\n
\n ) : null}\n
\n
\n
\n \n {driver?.label || 'Idle'}\n \n
\n
\n \n
{batteryText}
\n
{batteryVoltage}v
\n {/*
{batteryCurrent}mA
*/}\n {(Math.abs(batteryCurrent) > 10) ? (
{batteryCurrent + 'mA'}
) : null}\n \n
\n
\n {stateText ? (\n
\n {stateText}\n
\n ) : (\n
\n )}\n
\n \n );\n}\n","// Display Rover Grid\n// Purpose: Fills the central 16:10 display band with rover driver/battery cells.\n// Scope: Keeps rover status presentation dense and label-free for room readability.\nimport DisplayRoverCell from './DisplayRoverCell.jsx';\nimport { gridClassForRoverCount } from '../utils.js';\n\nexport default function DisplayRoverGrid({ roster = [], session }) {\n if (!roster.length) {\n return (\n
\n No rovers\n
\n );\n }\n\n return (\n
\n {roster.map((rover) => (\n \n ))}\n
\n );\n}\n","// Display Chat Feed\n// Purpose: Shows the existing chat panel scaled for distance viewing.\n// Scope: Uses ChatPanel minimal mode so the display route reuses normal chat behavior without input chrome.\nimport ChatPanel from '../../../components/ChatPanel/index.jsx';\n\nexport default function DisplayChatFeed() {\n const displayChatScale = 4.6;\n\n return (\n
\n \n \n
\n \n );\n}\n","// Display Notice Overlay\n// Purpose: Shows server-side room-control feedback as huge temporary display text.\n// Scope: Listens only on the /display page so normal driver and spectator pages are not interrupted.\nimport { useEffect, useRef, useState } from 'react';\nimport { useSocket } from '../../../context/SocketContext.jsx';\n\nconst DEFAULT_DURATION_MS = 4500;\n\nfunction normalizeNotice(payload = {}) {\n const text = String(payload?.text || '').trim();\n if (!text) return null;\n const durationMs = Number.isFinite(Number(payload?.durationMs))\n ? Math.max(1200, Math.min(15000, Number(payload.durationMs)))\n : DEFAULT_DURATION_MS;\n return {\n id: payload?.id || `display-notice-${Date.now()}`,\n text,\n durationMs,\n };\n}\n\nexport default function DisplayNoticeOverlay() {\n const socket = useSocket();\n const [notice, setNotice] = useState(null);\n const timerRef = useRef(null);\n\n useEffect(() => {\n function clearNoticeTimer() {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }\n\n function handleNotice(payload = {}) {\n const next = normalizeNotice(payload);\n if (!next) return;\n // Home Assistant buttons can be pressed rapidly. The room display should\n // reflect the most recent confirmed action instead of queueing stale room\n // state messages after the action has already changed again.\n clearNoticeTimer();\n setNotice(next);\n timerRef.current = setTimeout(() => {\n setNotice((current) => (current?.id === next.id ? null : current));\n timerRef.current = null;\n }, next.durationMs);\n }\n\n socket.on('display:notice', handleNotice);\n return () => {\n clearNoticeTimer();\n socket.off('display:notice', handleNotice);\n };\n }, [socket]);\n\n if (!notice) return null;\n\n return (\n
\n
\n
\n {notice.text}\n
\n
\n
\n );\n}\n","// Display PTZ Operator Badge\n// Purpose: Gives the physical /display page a simple, always-readable indicator\n// for who currently owns the single PTZ camera turn.\n// Scope: This is intentionally display-only chrome; PTZ ownership, naming, and\n// permission rules stay in the server session state that every client already receives.\nimport { useSessionSelector } from '../../../context/SessionContext.jsx';\n\nexport default function DisplayPtzOperatorBadge() {\n const ptz = useSessionSelector((state) => state.session?.ptzCamera || null);\n const operatorLabel = String(ptz?.operatorLabel || '').trim();\n const visible = Boolean(ptz?.enabled && operatorLabel);\n\n return (\n \n {/*\n This is a flex-row segment instead of a fixed overlay so the online\n people marquee loses width when PTZ is active. That makes the badge feel\n like it enters from the right edge of the top bar while avoiding the\n previous problem where it covered content in the bottom-right corner.\n */}\n
\n {/*\n The user explicitly requested uppercase \"PTZ\" here because the room\n display needs a terse, instantly recognizable camera marker. The name\n remains the larger variable part, and truncation prevents a long\n nickname from resizing the bar or overlapping the scrolling strip.\n */}\n PTZ\n {operatorLabel}\n
\n \n );\n}\n","// Server Display Content\n// Purpose: Composes the passive room display route used as a third spectator-style page.\n// Scope: Shows online names, rover driver/battery status, chat, replay overlays, reward overlays, and hidden audio.\nimport { useSession, useSessionActions, useSessionSelector } from '../../context/SessionContext.jsx';\nimport { useSpectatorMode } from '../../hooks/useSpectatorMode.js';\nimport useDefaultNickname from '../../hooks/useDefaultNickname.js';\nimport useUserIdentitySync from '../../hooks/useUserIdentitySync.js';\nimport ReplayReadyPopup from '../../components/ReplaySourcesPanel/ReplayReadyPopup.jsx';\nimport RewardRunOverlay from '../../components/RewardRunOverlay/index.jsx';\nimport OnlinePeopleStrip from './components/OnlinePeopleStrip.jsx';\nimport DisplayRoverGrid from './components/DisplayRoverGrid.jsx';\nimport DisplayChatFeed from './components/DisplayChatFeed.jsx';\nimport DisplayNoticeOverlay from './components/DisplayNoticeOverlay.jsx';\nimport DisplayPtzOperatorBadge from './components/DisplayPtzOperatorBadge.jsx';\nimport AlertFeed from '../../components/AlertFeed/index.jsx';\n\nexport default function ServerDisplayContent() {\n const { session } = useSession();\n const latestReplay = useSessionSelector((state) => state.latestReplay);\n const { clearLatestReplay } = useSessionActions();\n const inLockdown = session?.mode === 'lockdown';\n\n useDefaultNickname();\n // This page is a passive room endpoint, but it still needs the same identity\n // heartbeat as /spectate and /mini so nickname cookies and spectator role sync\n // stay current when this laptop is left running for a long session.\n useUserIdentitySync();\n useSpectatorMode();\n\n if (inLockdown) {\n return (\n
\n Lockdown\n
\n );\n }\n\n return (\n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n \n \n \n \n
\n );\n}\n","// Server Display App Root\n// Purpose: Defines the route root for the physical-room display page.\n// Scope: Keeps this passive spectator-style surface separate from the main driver UI.\nimport ServerDisplayContent from './ServerDisplayContent.jsx';\n\nexport default function ServerDisplayAppRoot() {\n return ;\n}\n","// Scanner Speech Hook\n// Purpose: Speaks server-provided scan labels on the scanner computer.\n// Scope: Plays server-generated scanner audio when available, with browser TTS as the local fallback output device.\nimport { useEffect, useRef } from 'react';\n\nconst SPEECH_START_TIMEOUT_MS = 1500;\nconst SPEECH_RETRY_DELAY_MS = 700;\nconst SERVER_AUDIO_GRACE_MS = 350;\nexport const SCANNER_VOICE_STORAGE_KEY = 'scanner.preferredVoiceName';\nconst PREFERRED_VOICE_PATTERN = /female|samantha|victoria|allison|zira|karen|moira|serena|ava|susan|hazel|google (us|uk) english/i;\nconst NOVELTY_VOICE_PATTERN = /whisper|bubbles|bells|boing|bad news|bahh|cellos|deranged|good news|hysterical|pipe organ|trinoids|zarvox/i;\n\nfunction isNoveltyVoice(voice) {\n return NOVELTY_VOICE_PATTERN.test(String(voice?.name || ''));\n}\n\nfunction pickScannerVoice(synth) {\n const voices = typeof synth?.getVoices === 'function' ? synth.getVoices() : [];\n if (!voices.length) return null;\n\n const savedVoiceName =\n typeof window !== 'undefined'\n ? String(window.localStorage.getItem(SCANNER_VOICE_STORAGE_KEY) || '').trim()\n : '';\n const savedVoice = savedVoiceName\n ? voices.find((voice) => String(voice?.name || '') === savedVoiceName)\n : null;\n if (savedVoice) return savedVoice;\n\n const usableVoices = voices.filter((voice) => !isNoveltyVoice(voice));\n const defaultVoice = usableVoices.find((voice) => voice?.default) || null;\n const englishVoices = usableVoices.filter((voice) => String(voice?.lang || '').toLowerCase().startsWith('en'));\n // Browser voice lists vary by operating system and installed speech packs, so\n // this is intentionally a preference rather than a requirement. A recognized\n // female-sounding English voice is best for the scanner speaker, but any\n // normal/default voice is better than accidentally choosing a novelty voice\n // like Whisper just because it appears early in the browser's voice list.\n return (\n englishVoices.find((voice) => PREFERRED_VOICE_PATTERN.test(String(voice?.name || ''))) ||\n usableVoices.find((voice) => PREFERRED_VOICE_PATTERN.test(String(voice?.name || ''))) ||\n defaultVoice ||\n englishVoices[0] ||\n usableVoices[0] ||\n null\n );\n}\n\nfunction normalizeAudioBuffer(buffer) {\n if (!buffer) return null;\n if (buffer instanceof ArrayBuffer) return buffer;\n if (ArrayBuffer.isView(buffer)) {\n return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n }\n if (Array.isArray(buffer)) {\n return new Uint8Array(buffer).buffer;\n }\n return null;\n}\n\nfunction playServerAudio(audio) {\n const audioBuffer = normalizeAudioBuffer(audio?.buffer);\n if (!audioBuffer) return null;\n const mime = String(audio?.mime || 'audio/wav').trim() || 'audio/wav';\n const blob = new Blob([audioBuffer], { type: mime });\n const objectUrl = URL.createObjectURL(blob);\n const player = new Audio(objectUrl);\n player.volume = 1;\n\n return {\n play: () =>\n player.play().finally(() => {\n // The generated clip is only needed once per scan. Releasing the object\n // URL after play starts/ends prevents repeated scans from leaking blobs\n // on a long-running scanner page.\n player.onended = () => URL.revokeObjectURL(objectUrl);\n }),\n stop: () => {\n player.pause();\n player.removeAttribute('src');\n player.load();\n URL.revokeObjectURL(objectUrl);\n },\n };\n}\n\nexport default function useScannerSpeech(scan, serverAudioEvent = null) {\n const retryTimerRef = useRef(null);\n const startTimerRef = useRef(null);\n const spokenScanKeyRef = useRef(null);\n const fallbackTimerRef = useRef(null);\n const serverAudioPlayerRef = useRef(null);\n\n useEffect(() => {\n return () => {\n window.clearTimeout(retryTimerRef.current);\n window.clearTimeout(startTimerRef.current);\n window.clearTimeout(fallbackTimerRef.current);\n serverAudioPlayerRef.current?.stop();\n };\n }, []);\n\n useEffect(() => {\n const speechText = String(scan?.speechText || '').trim();\n const scanKey = scan?.scannedAt ? `${scan.scannedAt}:${speechText}` : '';\n if (!speechText || !scanKey || spokenScanKeyRef.current === scanKey) return undefined;\n\n let cancelled = false;\n\n function clearSpeechTimers() {\n window.clearTimeout(retryTimerRef.current);\n window.clearTimeout(startTimerRef.current);\n window.clearTimeout(fallbackTimerRef.current);\n retryTimerRef.current = null;\n startTimerRef.current = null;\n fallbackTimerRef.current = null;\n }\n\n function retryLater() {\n if (cancelled) return;\n clearSpeechTimers();\n retryTimerRef.current = window.setTimeout(() => speakBrowserOnce(), SPEECH_RETRY_DELAY_MS);\n }\n\n function speakWithBrowserFallback() {\n const synth = window.speechSynthesis;\n if (!synth || typeof window.SpeechSynthesisUtterance !== 'function') {\n retryLater();\n return;\n }\n\n clearSpeechTimers();\n // Cancelling before retrying prevents stale utterances from piling up if a\n // browser reports an error or never fires the expected start callback.\n synth.cancel();\n const utterance = new window.SpeechSynthesisUtterance(speechText);\n const preferredVoice = pickScannerVoice(synth);\n if (preferredVoice) {\n utterance.voice = preferredVoice;\n utterance.lang = preferredVoice.lang;\n }\n utterance.rate = 1;\n utterance.pitch = 1;\n utterance.volume = 1;\n utterance.onstart = () => {\n window.clearTimeout(startTimerRef.current);\n startTimerRef.current = null;\n };\n utterance.onend = () => {\n clearSpeechTimers();\n };\n utterance.onerror = () => {\n retryLater();\n };\n synth.speak(utterance);\n\n // Some browser/audio states fail without surfacing onerror. A small start\n // watchdog keeps the required scanner audio from silently dying, while the\n // UI remains clean and rover-readable.\n startTimerRef.current = window.setTimeout(() => {\n synth.cancel();\n retryLater();\n }, SPEECH_START_TIMEOUT_MS);\n }\n\n function markSpoken() {\n spokenScanKeyRef.current = scanKey;\n }\n\n function speakBrowserOnce() {\n if (cancelled) return;\n markSpoken();\n clearSpeechTimers();\n serverAudioPlayerRef.current?.stop();\n speakWithBrowserFallback();\n }\n\n // Server-generated audio is preferred, but it arrives on a separate scanner\n // socket event after the immediate scan state. Waiting briefly lets cached\n // Kokoro clips play without delaying the visual scan result; if the clip is\n // still being generated, the page falls back to Web Speech for this scan.\n fallbackTimerRef.current = window.setTimeout(speakBrowserOnce, SERVER_AUDIO_GRACE_MS);\n\n return () => {\n cancelled = true;\n clearSpeechTimers();\n serverAudioPlayerRef.current?.stop();\n };\n }, [scan]);\n\n useEffect(() => {\n const speechText = String(serverAudioEvent?.scan?.speechText || '').trim();\n const scanKey = serverAudioEvent?.scan?.scannedAt ? `${serverAudioEvent.scan.scannedAt}:${speechText}` : '';\n const currentSpeechText = String(scan?.speechText || '').trim();\n const currentScanKey = scan?.scannedAt ? `${scan.scannedAt}:${currentSpeechText}` : '';\n if (!scanKey || scanKey !== currentScanKey || spokenScanKeyRef.current === scanKey) return;\n\n const player = playServerAudio(serverAudioEvent.audio);\n if (!player) return;\n window.clearTimeout(fallbackTimerRef.current);\n fallbackTimerRef.current = null;\n spokenScanKeyRef.current = scanKey;\n serverAudioPlayerRef.current?.stop();\n serverAudioPlayerRef.current = player;\n player.play().catch(() => {\n // If the generated clip cannot play for any browser reason, fall back to\n // the selected Web Speech voice rather than leaving the scan silent.\n spokenScanKeyRef.current = scanKey;\n const synth = window.speechSynthesis;\n if (!synth || typeof window.SpeechSynthesisUtterance !== 'function') return;\n synth.cancel();\n const utterance = new window.SpeechSynthesisUtterance(currentSpeechText);\n const preferredVoice = pickScannerVoice(synth);\n if (preferredVoice) {\n utterance.voice = preferredVoice;\n utterance.lang = preferredVoice.lang;\n }\n utterance.rate = 1;\n utterance.pitch = 1;\n utterance.volume = 1;\n synth.speak(utterance);\n });\n }, [scan, serverAudioEvent]);\n}\n","// Scanner Content\n// Purpose: Provides the rover-facing IO page for the server-run barcode scanner system.\n// Scope: Captures keyboard-style scanner input, emits raw scans, renders server state, and plays local beep/TTS output.\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { useSocket } from '../../context/SocketContext.jsx';\nimport { useSpectatorMode } from '../../hooks/useSpectatorMode.js';\nimport useDefaultNickname from '../../hooks/useDefaultNickname.js';\nimport useUserIdentitySync from '../../hooks/useUserIdentitySync.js';\nimport SocketConnectionPill from '../../components/SocketConnectionPill/index.jsx';\nimport useBarcodeGameState from '../../barcodeGames/useBarcodeGameState.js';\nimport useScannerSpeech from './useScannerSpeech.js';\n\nconst EMPTY_SCANNER_STATE = {\n beepAllowed: false,\n lastScan: null,\n registryError: null,\n};\nconst SCANNER_STATE_STALE_MS = 10 * 1000;\nconst SCANNER_RESUBSCRIBE_MS = 5 * 1000;\n\nfunction useClock(enabled) {\n const [now, setNow] = useState(() => Date.now());\n\n useEffect(() => {\n if (!enabled) return undefined;\n const timer = window.setInterval(() => {\n setNow(Date.now());\n }, 500);\n return () => window.clearInterval(timer);\n }, [enabled]);\n\n return now;\n}\n\nfunction formatTimer(endsAt, now) {\n if (!Number.isFinite(endsAt)) return '';\n const totalSeconds = Math.max(0, Math.ceil((endsAt - now) / 1000));\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n return minutes > 0 ? `${minutes}:${String(seconds).padStart(2, '0')}` : `${seconds}s`;\n}\n\nfunction getSectionItemText(item) {\n if (typeof item === 'string') return item;\n if (!item || typeof item !== 'object') return '';\n return String(item.label || item.value || item.text || '').trim();\n}\n\nfunction normalizeDisplaySections(sections) {\n if (!Array.isArray(sections)) return [];\n\n // The scanner screen is intentionally a dumb renderer: games describe their\n // own rich status through display.sections, and this page only normalizes the\n // shape enough to avoid crashing on a malformed server payload. That keeps\n // game-specific logic out of the rover-facing IO page.\n return sections\n .map((section) => ({\n title: String(section?.title || '').trim(),\n items: Array.isArray(section?.items)\n ? section.items\n .map((item) => ({\n text: getSectionItemText(item),\n status: typeof item === 'object' && item ? item.status : null,\n }))\n .filter((item) => item.text)\n : [],\n }))\n .filter((section) => section.title || section.items.length)\n .slice(0, 3);\n}\n\nfunction playSubmitBeep() {\n const AudioContextClass = window.AudioContext || window.webkitAudioContext;\n if (!AudioContextClass) return;\n\n const audioContext = new AudioContextClass();\n const oscillator = audioContext.createOscillator();\n const gain = audioContext.createGain();\n const now = audioContext.currentTime;\n\n // The beep is deliberately short and loud because it confirms that the scan\n // computer submitted input. It is not tied to success; success/failure comes\n // back from the server as the large display text and spoken label.\n oscillator.type = 'square';\n oscillator.frequency.setValueAtTime(980, now);\n gain.gain.setValueAtTime(0.0001, now);\n gain.gain.exponentialRampToValueAtTime(0.95, now + 0.015);\n gain.gain.exponentialRampToValueAtTime(0.0001, now + 0.2);\n oscillator.connect(gain);\n gain.connect(audioContext.destination);\n oscillator.start(now);\n oscillator.stop(now + 0.22);\n oscillator.onended = () => {\n audioContext.close().catch(() => {});\n };\n}\n\nexport default function ScannerContent() {\n const socket = useSocket();\n const inputRef = useRef(null);\n const flashTimerRef = useRef(null);\n const scannerReadyTrackedRef = useRef(false);\n const [scannerState, setScannerState] = useState(EMPTY_SCANNER_STATE);\n const [scannerConnectionState, setScannerConnectionState] = useState({\n connected: Boolean(socket.connected),\n stale: true,\n lastReceivedAt: null,\n });\n const [scanAudioEvent, setScanAudioEvent] = useState(null);\n const [flashActive, setFlashActive] = useState(false);\n const { state: barcodeGameState, connectionState: barcodeGameConnectionState } = useBarcodeGameState();\n\n useDefaultNickname();\n useUserIdentitySync();\n useSpectatorMode();\n useScannerSpeech(scannerState.lastScan, scanAudioEvent);\n\n const focusInput = useCallback(() => {\n inputRef.current?.focus();\n }, []);\n\n useEffect(() => {\n focusInput();\n }, [focusInput]);\n\n useEffect(() => {\n return () => {\n window.clearTimeout(flashTimerRef.current);\n };\n }, []);\n\n useEffect(() => {\n let disposed = false;\n let staleTimer = null;\n let retryTimer = null;\n let lastReceivedAt = 0;\n\n function handleScannerState(nextState = {}) {\n if (disposed) return;\n lastReceivedAt = Date.now();\n if (!scannerReadyTrackedRef.current) {\n scannerReadyTrackedRef.current = true;\n }\n setScannerState({\n ...EMPTY_SCANNER_STATE,\n ...(nextState && typeof nextState === 'object' ? nextState : {}),\n });\n setScannerConnectionState({\n connected: Boolean(socket.connected),\n stale: false,\n lastReceivedAt,\n });\n }\n\n function handleScanAudio(payload = null) {\n setScanAudioEvent(payload && typeof payload === 'object' ? payload : null);\n }\n\n function subscribeToScannerState() {\n // The scan input path is intentionally independent from display state, so\n // the page can beep/flash even if it missed a previous status broadcast.\n // This subscribe is idempotent and gives the rover-facing page a way to\n // repair its display after reconnects or quiet periods.\n socket.emit('barcode:subscribe', {}, (response = {}) => {\n if (response.state) {\n handleScannerState(response.state);\n return;\n }\n setScannerConnectionState((previous) => ({\n ...previous,\n connected: Boolean(socket.connected),\n stale: !lastReceivedAt,\n }));\n });\n }\n\n function handleConnect() {\n setScannerConnectionState((previous) => ({\n ...previous,\n connected: true,\n stale: !lastReceivedAt,\n }));\n subscribeToScannerState();\n }\n\n function handleDisconnect() {\n setScannerConnectionState((previous) => ({\n ...previous,\n connected: false,\n stale: true,\n }));\n }\n\n socket.on('barcode:state', handleScannerState);\n socket.on('barcode:scanAudio', handleScanAudio);\n socket.on('connect', handleConnect);\n socket.on('disconnect', handleDisconnect);\n subscribeToScannerState();\n\n staleTimer = window.setInterval(() => {\n const isStale = !lastReceivedAt || Date.now() - lastReceivedAt > SCANNER_STATE_STALE_MS;\n setScannerConnectionState((previous) => ({\n ...previous,\n connected: Boolean(socket.connected),\n stale: isStale,\n }));\n }, 1000);\n\n retryTimer = window.setInterval(() => {\n if (!socket.connected) return;\n if (!lastReceivedAt || Date.now() - lastReceivedAt > SCANNER_STATE_STALE_MS) {\n subscribeToScannerState();\n }\n }, SCANNER_RESUBSCRIBE_MS);\n\n return () => {\n disposed = true;\n window.clearInterval(staleTimer);\n window.clearInterval(retryTimer);\n socket.off('barcode:state', handleScannerState);\n socket.off('barcode:scanAudio', handleScanAudio);\n socket.off('connect', handleConnect);\n socket.off('disconnect', handleDisconnect);\n };\n }, [socket]);\n\n const submitScan = useCallback(() => {\n const code = String(inputRef.current?.value || '').trim();\n if (!code) {\n focusInput();\n return;\n }\n\n if (scannerState.beepAllowed) {\n // The flash is paired with the local submit beep so rovers get an\n // immediate visual confirmation that the scanner computer accepted input.\n // It is intentionally not a success indicator; the server result still\n // arrives separately as the resolved text and spoken label.\n window.clearTimeout(flashTimerRef.current);\n setFlashActive(true);\n flashTimerRef.current = window.setTimeout(() => {\n setFlashActive(false);\n }, 120);\n playSubmitBeep();\n }\n\n // The page intentionally sends only raw scanner text. The server reloads\n // the barcode registry, resolves labels/types, applies access policy, and\n // broadcasts the display state back to every scanner page.\n socket.emit('barcode:scan', { code }, () => {});\n inputRef.current.value = '';\n focusInput();\n }, [focusInput, scannerState.beepAllowed, socket]);\n\n const lastScan = scannerState.lastScan;\n const activeGame = barcodeGameState.activeGame;\n const display = activeGame?.display || {};\n const timerEndsAt = display.timer?.endsAt;\n const now = useClock(Number.isFinite(timerEndsAt));\n const timerText = formatTimer(timerEndsAt, now);\n const showGameDisplay = activeGame?.status && activeGame.status !== 'idle';\n // Idle game state is useful for the Activities panel, but the scanner page's\n // normal job is still showing the resolved barcode text. Only active lifecycle\n // states take over the large rover-facing display.\n const title = showGameDisplay ? display.title || activeGame?.title || 'Barcode games' : lastScan?.label || 'Waiting';\n const label = showGameDisplay ? display.primary || '' : '';\n const secondary = showGameDisplay ? display.secondary || '' : '';\n const displaySections = showGameDisplay ? normalizeDisplaySections(display.sections) : [];\n const participants = Array.isArray(barcodeGameState.participants) ? barcodeGameState.participants : [];\n const syncMessage = !scannerConnectionState.connected\n ? 'scanner offline'\n : scannerConnectionState.stale || barcodeGameConnectionState.stale\n ? 'syncing'\n : '';\n\n return (\n \n {\n if (event.key !== 'Enter') return;\n event.preventDefault();\n submitScan();\n }}\n />\n
\n
\n

\n {title}\n

\n

\n {label}\n

\n {secondary ? (\n

\n {secondary}\n

\n ) : null}\n {displaySections.length ? (\n
\n {displaySections.map((section, sectionIndex) => (\n
\n {section.title ? (\n

\n {section.title}\n

\n ) : null}\n
\n {section.items.slice(0, 8).map((item, itemIndex) => (\n \n {item.text}\n

\n ))}\n
\n
\n ))}\n
\n ) : null}\n {timerText ? (\n

\n {timerText}\n

\n ) : null}\n {participants.length ? (\n

\n {participants.map((participant) => participant.nickname || participant.roverId).filter(Boolean).join(' / ')}\n

\n ) : null}\n
\n
\n {syncMessage ? (\n
\n {syncMessage}\n
\n ) : null}\n \n \n );\n}\n","// Scanner App Root\n// Purpose: Exposes the dedicated scanner route as a separate spectator-style app surface.\n// Scope: Keeps route wiring thin so scanner behavior remains isolated in ScannerContent.\nimport ScannerContent from './ScannerContent.jsx';\n\nexport default function ScannerAppRoot() {\n return ;\n}\n","// Deterrence Chaos\n// Purpose: Defines the Deterrence Chaos module and the local helpers/components used in this file.\n// Scope: Keeps behavior unchanged while isolating this concern into a clear, single-responsibility unit.\nimport { useEffect } from 'react';\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\n\nfunction getRandomElement(elements) {\n if (!elements || !elements.length) return null;\n const idx = Math.floor(Math.random() * elements.length);\n return elements[idx] || null;\n}\n\nfunction corruptDomOnce() {\n if (typeof document === 'undefined' || !document.body) return;\n const elements = document.body.getElementsByTagName('*');\n if (!elements || elements.length < 2) return;\n\n const sourceA = getRandomElement(elements);\n const targetA = getRandomElement(elements);\n const classA = sourceA?.classList?.[0] || null;\n if (classA && targetA?.classList) {\n try {\n targetA.classList.add(classA);\n } catch {\n // Best-effort chaos; ignore invalid class token failures.\n }\n }\n\n const sourceB = getRandomElement(elements);\n const targetB = getRandomElement(elements);\n const classB = sourceB?.classList?.[1] || null;\n if (classB && targetB?.classList) {\n try {\n targetB.classList.add(classB);\n } catch {\n // Best-effort chaos; ignore invalid class token failures.\n }\n }\n}\n\nexport default function DeterrenceChaos() {\n const isDeterred = useSessionSelector((state) => Boolean(state.session?.moderation?.isDeterred));\n\n useEffect(() => {\n if (!isDeterred) return undefined;\n const timer = window.setInterval(() => {\n corruptDomOnce();\n }, 1);\n return () => {\n window.clearInterval(timer);\n };\n }, [isDeterred]);\n\n return null;\n}\n","// Analytics Reporter\n// Purpose: Publishes page/session context to the optional runtime analytics\n// adapter. Scope: observes route, layout, nickname, role, verification, and\n// rover assignment without owning any analytics vendor implementation.\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useSessionSelector } from '../context/SessionContext.jsx';\nimport { useSettingsNamespace } from '../settings/index.js';\nimport { identifyAnalyticsSession } from './index.js';\n\nfunction detectLayout() {\n if (typeof window === 'undefined') return 'desktop';\n if (window.innerWidth >= 1024) return 'desktop';\n return window.innerWidth > window.innerHeight ? 'mobile-landscape' : 'mobile-portrait';\n}\n\nfunction useAnalyticsLayout() {\n const [layout, setLayout] = useState(() => detectLayout());\n\n useEffect(() => {\n function updateLayout() {\n setLayout(detectLayout());\n }\n\n updateLayout();\n window.addEventListener('resize', updateLayout);\n return () => window.removeEventListener('resize', updateLayout);\n }, []);\n\n return layout;\n}\n\nexport default function AnalyticsReporter() {\n const layout = useAnalyticsLayout();\n const { value: profile } = useSettingsNamespace('profile', { nickname: '' });\n const session = useSessionSelector((state) => state.session);\n const previousIdentityRef = useRef('');\n const nickname = String(profile?.nickname || session?.nickname || '').trim();\n const roverId = String(session?.assignment?.roverId || '').trim();\n const role = String(session?.role || '').trim();\n const verified = Boolean(session?.isVerified);\n\n const identity = useMemo(\n () => ({\n layout,\n hasNickname: Boolean(nickname),\n roverId,\n assignedRover: Boolean(roverId),\n role,\n verified,\n }),\n [layout, nickname, role, roverId, verified],\n );\n\n useEffect(() => {\n const serialized = JSON.stringify(identity);\n if (previousIdentityRef.current === serialized) return;\n previousIdentityRef.current = serialized;\n\n /*\n Session properties describe durable segmentation dimensions. Route is\n intentionally absent because Umami attaches the current URL to pageviews\n and events automatically, and nickname is reduced to a non-identifying\n boolean so aggregate analytics does not store user-entered names.\n */\n identifyAnalyticsSession(identity);\n }, [identity]);\n\n return null;\n}\n","// Dedicated PTZ Route Root\n// Purpose: Mounts the PTZ controller as a real page with the same shared input\n// and identity systems used by the driver page.\n// Scope: Owns route-level providers and responsive selection only; camera state,\n// queue policy, and the visible controller remain in the shared PTZ component.\nimport AlertFeed from '../components/AlertFeed/index.jsx';\nimport SocketConnectionPill from '../components/SocketConnectionPill/index.jsx';\nimport { PtzControllerPage } from '../components/PtzCamera/index.jsx';\nimport {\n ControlSystemProvider,\n GamepadInputManager,\n KeyboardInputManager,\n} from '../controls/index.js';\nimport useDefaultNickname from '../hooks/useDefaultNickname.js';\nimport useIncomingInterInstanceTransfer from '../hooks/useIncomingInterInstanceTransfer.js';\nimport useLayoutMode from '../hooks/useLayoutMode.js';\nimport useUserIdentitySync from '../hooks/useUserIdentitySync.js';\n\nfunction PtzRouteContent() {\n const layout = useLayoutMode();\n\n /*\n Navigating away from the driver route unmounts its identity hooks. The PTZ\n route is still an active control surface, so it must keep the same driver\n identity heartbeat alive instead of allowing the session to become passive\n while someone operates or waits for the camera.\n */\n useDefaultNickname();\n useIncomingInterInstanceTransfer();\n useUserIdentitySync({ identitySurface: 'driver' });\n\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport default function PtzAppRoot() {\n return ;\n}\n","export default \"__VITE_ASSET__FdSHdeOr__\"","// Initial Session Overlay\n// Purpose: Hides incomplete driver-page placeholders until the first authoritative session snapshot arrives.\n// Scope: Provides startup presentation only; it deliberately does not delay or alter page initialization underneath.\nimport { useSessionSelector } from '../../context/SessionContext.jsx';\nimport spinnerImage from '../../assets/spinner.png';\nimport './styles.css';\n\nexport default function InitialSessionOverlay() {\n const connected = useSessionSelector((state) => Boolean(state.connected));\n const sessionReady = useSessionSelector((state) => state.session !== null);\n\n if (sessionReady) return null;\n\n return (\n \n
\n {/* The source image is intentionally constrained to a small fixed box;\n its intrinsic pixel dimensions must never determine overlay layout.\n Reduced-motion users still see the identifying image without either\n the rotation or continuously changing color. */}\n
\n \n
\n
\n {connected ? 'Loading session…' : 'Connecting…'}\n
\n
\n \n );\n}\n","// WebUI Bootstrap Entry\n// Purpose: Boots the React application and mounts global providers/router roots. Scope: Defines top-level route wiring and root render lifecycle for the browser app.\nimport { lazy, StrictMode, Suspense } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'\nimport './index.css'\n// Theme artwork is a separate style concern from global component utilities. Loading its dedicated\n// entrypoint here keeps every route consistent without returning theme definitions to index.css.\nimport './themes/styles/index.css'\nimport DriverPageRoot from './driver/DriverPageRoot.jsx'\nimport { SocketProvider } from './context/SocketContext.jsx'\nimport { SessionProvider } from './context/SessionContext.jsx'\nimport { TelemetryProvider } from './context/TelemetryContext.jsx'\nimport { ChatProvider } from './context/ChatContext.jsx'\nimport SpectatorApp from './spectate/SpectatorApp/SpectatorAppRoot.jsx'\nimport MiniSummaryApp from './mini/MiniSummaryApp/MiniSummaryAppRoot.jsx'\nimport ServerDisplayApp from './display/ServerDisplayApp/ServerDisplayAppRoot.jsx'\nimport ScannerApp from './scanner/ScannerApp/ScannerAppRoot.jsx'\nimport { SettingsProvider } from './settings/index.js'\nimport DeterrenceChaos from './components/DeterrenceChaos/index.jsx'\nimport AnalyticsReporter from './analytics/AnalyticsReporter.jsx'\nimport PtzAppRoot from './ptz/PtzAppRoot.jsx'\nimport InitialSessionOverlay from './components/InitialSessionOverlay/index.jsx'\n\n// Reporting and administration carry substantial route-specific libraries.\n// Loading each only on its own route keeps charting and JSON Schema tooling out\n// of ordinary rover-control sessions without changing either application's\n// internal ownership.\nconst FleetReportsApp = lazy(() => import('./reports/FleetReportsApp.jsx'))\nconst AdminApp = lazy(() => import('./admin/AdminApp.jsx'))\nconst SetupApp = lazy(() => import('./admin/SetupApp.jsx'))\n\nfunction lazyRoute(element, label) {\n return (\n Loading {label}…}>\n {element}\n \n )\n}\n\ncreateRoot(document.getElementById('root')).render(\n \n \n \n {/* Every route depends on the first authoritative session snapshot.\n Mounting this opaque layer at the shared provider boundary prevents\n incomplete route-specific placeholders from flashing while still\n allowing every application tree to initialize underneath it. */}\n \n \n \n \n \n \n \n \n } />\n {/* The retired desktop composition remains available for direct comparison\n without duplicating the driver shell or changing canonical mobile layouts. */}\n } />\n } />\n } />\n } />\n } />\n } />\n , 'setup')} />\n , 'administration')} />\n {/*\n PTZ is a separate route so the driver layout and its replay\n panel are not mounted behind the camera controller. This\n also makes orientation changes a PTZ layout concern instead\n of a local overlay-open state owned by the driver page.\n */}\n } />\n , 'fleet reports')}\n />\n \n \n \n \n \n \n \n ,\n)\n"],"file":"index-B0P8L1jr.js"} \ No newline at end of file diff --git a/server/public/assets/index-B4nclofW.js b/server/public/assets/index-B4nclofW.js new file mode 100644 index 00000000..707f710c --- /dev/null +++ b/server/public/assets/index-B4nclofW.js @@ -0,0 +1,2 @@ +function u(i){return class extends i{_playedRanges=[];_currentPlayedRange=null;_RANGE_EPSILON=.5;_seeking=!1;connectedCallback(){super.connectedCallback&&super.connectedCallback(),this.addEventListener("play",()=>this.onPlaybackStart({time:this.currentTime})),this.addEventListener("pause",()=>this.onPlaybackStop({time:this.currentTime})),this.addEventListener("ended",()=>this.onPlaybackStop({time:this.currentTime})),this.addEventListener("seeking",()=>this.onSeeking()),this.addEventListener("seeked",()=>this.onSeeked({time:this.currentTime}))}onPlaybackStart(e={}){this._seeking=!1;const{time:t}=e,n=typeof t=="number"?t:this.currentTime;this._currentPlayedRange||(this._currentPlayedRange={start:n,end:n})}onSeeking(){this._seeking=!0,this._commitCurrentRange()}onSeeked(e={}){this._seeking=!1;const{time:t}=e,n=typeof t=="number"?t:this.currentTime;this._currentPlayedRange={start:n,end:n}}onPlaybackStop(e={}){const{time:t}=e,n=typeof t=="number"?t:this.currentTime;this._commitCurrentRange(n)}_commitCurrentRange(e){if(!this._currentPlayedRange)return;typeof e=="number"&&(this._currentPlayedRange.end=e);const{start:t,end:n}=this._currentPlayedRange;this._currentPlayedRange=null,this.addPlayedRange(t,n)}addPlayedRange(e,t){if(e>=t)return;const n=this._RANGE_EPSILON,c=[...this._playedRanges,{start:e,end:t}];c.sort((a,s)=>a.start-s.start);const r=[];for(const a of c){if(!r.length){r.push({...a});continue}const s=r[r.length-1];a.start<=s.end+n?(s.start=Math.min(s.start,a.start),s.end=Math.max(s.end,a.end)):r.push({...a})}this._playedRanges=r}get played(){const e=this.currentTime;return!this.paused&&!this._currentPlayedRange&&typeof e=="number"&&(this._currentPlayedRange={start:e,end:e}),this._currentPlayedRange&&typeof e=="number"&&(e>this._currentPlayedRange.end&&(this._currentPlayedRange.end=e),this.addPlayedRange(this._currentPlayedRange.start,this._currentPlayedRange.end)),this._playedRanges.length?l(this._playedRanges.map(t=>[t.start,t.end])):l([[0,0]])}}}function l(i){return Object.defineProperties(i,{start:{value:d=>i[d][0]},end:{value:d=>i[d][1]}}),i}export{u as M}; +//# sourceMappingURL=index-B4nclofW.js.map diff --git a/server/public/assets/index-B4nclofW.js.map b/server/public/assets/index-B4nclofW.js.map new file mode 100644 index 00000000..e9268a48 --- /dev/null +++ b/server/public/assets/index-B4nclofW.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-B4nclofW.js","sources":["../../../webui/node_modules/media-played-ranges-mixin/dist/index.js"],"sourcesContent":["function MediaPlayedRangesMixin(Base) {\n return class MediaPlayedRanges extends Base {\n _playedRanges = [];\n _currentPlayedRange = null;\n _RANGE_EPSILON = 0.5;\n _seeking = false;\n connectedCallback() {\n if (super.connectedCallback) super.connectedCallback();\n this.addEventListener(\"play\", () => this.onPlaybackStart({ time: this.currentTime }));\n this.addEventListener(\"pause\", () => this.onPlaybackStop({ time: this.currentTime }));\n this.addEventListener(\"ended\", () => this.onPlaybackStop({ time: this.currentTime }));\n this.addEventListener(\"seeking\", () => this.onSeeking());\n this.addEventListener(\"seeked\", () => this.onSeeked({ time: this.currentTime }));\n }\n onPlaybackStart(param = {}) {\n this._seeking = false;\n const { time } = param;\n const t = typeof time === \"number\" ? time : this.currentTime;\n if (!this._currentPlayedRange) {\n this._currentPlayedRange = { start: t, end: t };\n }\n }\n onSeeking() {\n this._seeking = true;\n this._commitCurrentRange();\n }\n onSeeked(param = {}) {\n this._seeking = false;\n const { time } = param;\n const t = typeof time === \"number\" ? time : this.currentTime;\n this._currentPlayedRange = { start: t, end: t };\n }\n onPlaybackStop(param = {}) {\n const { time } = param;\n const t = typeof time === \"number\" ? time : this.currentTime;\n this._commitCurrentRange(t);\n }\n _commitCurrentRange(time) {\n if (!this._currentPlayedRange) return;\n if (typeof time === \"number\") {\n this._currentPlayedRange.end = time;\n }\n const { start, end } = this._currentPlayedRange;\n this._currentPlayedRange = null;\n this.addPlayedRange(start, end);\n }\n addPlayedRange(start, end) {\n if (start >= end) return;\n const EPS = this._RANGE_EPSILON;\n const allRanges = [...this._playedRanges, { start, end }];\n allRanges.sort((a, b) => a.start - b.start);\n const merged = [];\n for (const range of allRanges) {\n if (!merged.length) {\n merged.push({ ...range });\n continue;\n }\n const last = merged[merged.length - 1];\n if (range.start <= last.end + EPS) {\n last.start = Math.min(last.start, range.start);\n last.end = Math.max(last.end, range.end);\n } else {\n merged.push({ ...range });\n }\n }\n this._playedRanges = merged;\n }\n get played() {\n const time = this.currentTime;\n if (!this.paused && !this._currentPlayedRange && typeof time === \"number\") {\n this._currentPlayedRange = { start: time, end: time };\n }\n if (this._currentPlayedRange && typeof time === \"number\") {\n if (time > this._currentPlayedRange.end) {\n this._currentPlayedRange.end = time;\n }\n this.addPlayedRange(this._currentPlayedRange.start, this._currentPlayedRange.end);\n }\n if (!this._playedRanges.length) {\n return createTimeRangesObj([[0, 0]]);\n }\n return createTimeRangesObj(this._playedRanges.map((r) => [r.start, r.end]));\n }\n };\n}\nfunction createTimeRangesObj(ranges) {\n Object.defineProperties(ranges, {\n start: { value: (i) => ranges[i][0] },\n end: { value: (i) => ranges[i][1] }\n });\n return ranges;\n}\nexport {\n MediaPlayedRangesMixin\n};\n"],"names":["MediaPlayedRangesMixin","Base","param","time","t","start","end","EPS","allRanges","b","merged","range","last","createTimeRangesObj","r","ranges","i"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/server/public/assets/index-CfkQC3hX.css b/server/public/assets/index-CfkQC3hX.css new file mode 100644 index 00000000..f5410bc7 --- /dev/null +++ b/server/public/assets/index-CfkQC3hX.css @@ -0,0 +1 @@ +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-lime-300:oklch(89.7% .196 126.665);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-800:oklch(45.3% .124 130.933);--color-green-100:oklch(96.2% .044 156.743);--color-green-400:oklch(79.2% .209 151.711);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-800:oklch(43.7% .078 188.216);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-800:oklch(45% .085 224.283);--color-cyan-900:oklch(39.8% .07 227.392);--color-cyan-950:oklch(30.2% .056 229.695);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-700:oklch(50% .134 242.749);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-800:oklch(42.4% .199 265.638);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-indigo-800:oklch(39.8% .195 277.366);--color-indigo-900:oklch(35.9% .144 278.697);--color-indigo-950:oklch(25.7% .09 281.288);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-fuchsia-600:oklch(59.1% .293 322.896);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-fuchsia-800:oklch(45.2% .211 324.591);--color-fuchsia-900:oklch(40.1% .17 325.612);--color-pink-200:oklch(89.9% .061 343.231);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-400:oklch(70.7% .022 261.325);--color-zinc-900:oklch(21% .006 285.885);--color-neutral-50:oklch(98.5% 0 none);--color-neutral-100:oklch(97% 0 none);--color-neutral-200:oklch(92.2% 0 none);--color-neutral-300:oklch(87% 0 none);--color-neutral-400:oklch(70.8% 0 none);--color-neutral-500:oklch(55.6% 0 none);--color-neutral-600:oklch(43.9% 0 none);--color-neutral-700:oklch(37.1% 0 none);--color-neutral-800:oklch(26.9% 0 none);--color-neutral-900:oklch(20.5% 0 none);--color-neutral-950:oklch(14.5% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--leading-tight:1.25;--leading-snug:1.375;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-xs:4px;--blur-sm:8px;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:before,:after,::backdrop{border-color:var(--color-gray-200)}::file-selector-button{border-color:var(--color-gray-200)}input::placeholder,textarea::placeholder{color:var(--color-gray-400);opacity:1}button,[role=button]{cursor:pointer}:disabled{cursor:default}}@layer components{.panel{border-radius:var(--radius-md);background-color:var(--color-black);color:var(--color-white);padding:0}.panel-section{border-radius:var(--radius-md);background-color:var(--color-neutral-900);color:var(--color-white);padding:0}.panel-muted{border-radius:var(--radius-md);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-slate-400)}.surface{border-radius:var(--radius-md);background-color:var(--color-neutral-800);padding-inline:calc(var(--spacing) * .5);padding-block:calc(var(--spacing) * .5);color:var(--color-white)}.surface-muted{border-radius:var(--radius-md);background-color:var(--color-neutral-700);padding-inline:calc(var(--spacing) * .5);padding-block:calc(var(--spacing) * .5);color:var(--color-neutral-100)}.field-input{border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-600);background-color:var(--color-neutral-700);padding-inline:calc(var(--spacing) * .5);padding-block:calc(var(--spacing) * .5);color:var(--color-white)}.field-input::placeholder{color:var(--color-slate-400)}.field-input:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-sky-500);--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.field-input:focus{outline-offset:2px;outline:2px solid #0000}}.button-dark{border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-sky-300);background-color:var(--color-sky-600);padding-inline:calc(var(--spacing) * .5);padding-block:calc(var(--spacing) * .5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-white);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.button-dark:hover{border-color:var(--color-sky-500);background-color:var(--color-sky-500)}}.button-danger{border-radius:var(--radius-md);background-color:var(--color-rose-600);padding-inline:calc(var(--spacing) * .5);padding-block:calc(var(--spacing) * .5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-white);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media(hover:hover){.button-danger:hover{background-color:var(--color-rose-500)}}}@layer utilities{.\@container{container-type:inline-size}.\@container-normal{container-type:normal}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-1{inset:var(--spacing)}.inset-x-0{inset-inline:0}.inset-x-1{inset-inline:var(--spacing)}.inset-y-0{inset-block:0}.top-0{top:0}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-6{top:calc(var(--spacing) * 6)}.top-10{top:calc(var(--spacing) * 10)}.top-34{top:calc(var(--spacing) * 34)}.top-\[0\.662rem\]{top:.662rem}.top-\[4\.021rem\]{top:4.021rem}.top-\[58\%\]{top:58%}.top-\[61\%\]{top:61%}.top-\[90\%\]{top:90%}.top-full{top:100%}.right-0{right:0}.right-0\.5{right:calc(var(--spacing) * .5)}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-10{right:calc(var(--spacing) * 10)}.right-34{right:calc(var(--spacing) * 34)}.bottom-0{bottom:0}.bottom-0\.5{bottom:calc(var(--spacing) * .5)}.bottom-1{bottom:var(--spacing)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.bottom-34{bottom:calc(var(--spacing) * 34)}.bottom-40{bottom:calc(var(--spacing) * 40)}.bottom-\[calc\(100\%\+0\.125rem\)\]{bottom:calc(100% + .125rem)}.left-0{left:0}.left-0\.5{left:calc(var(--spacing) * .5)}.left-1{left:var(--spacing)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing) * 2)}.left-4{left:calc(var(--spacing) * 4)}.left-\[1\.979rem\]{left:1.979rem}.left-\[5\.338rem\]{left:5.338rem}.left-\[61\%\]{left:61%}.left-\[90\%\]{left:90%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-25{z-index:25}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-55{z-index:55}.z-60{z-index:60}.z-70{z-index:70}.z-100{z-index:100}.z-110{z-index:110}.z-120{z-index:120}.z-130{z-index:130}.z-1000{z-index:1000}.z-2000{z-index:2000}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.row-span-2{grid-row:span 2/span 2}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.-mx-0\.5{margin-inline:calc(var(--spacing) * -.5)}.mx-auto{margin-inline:auto}.-my-0\.5{margin-block:calc(var(--spacing) * -.5)}.my-0\.5{margin-block:calc(var(--spacing) * .5)}.-mt-0\.5{margin-top:calc(var(--spacing) * -.5)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-0\.25{margin-top:calc(var(--spacing) * .25)}.mt-0\.75{margin-top:calc(var(--spacing) * .75)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-\[0\.35vh\]{margin-top:.35vh}.mt-auto{margin-top:auto}.mr-0{margin-right:0}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-0\.25{margin-left:calc(var(--spacing) * .25)}.ml-1{margin-left:var(--spacing)}.ml-10{margin-left:calc(var(--spacing) * 10)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-4\/3{aspect-ratio:4/3}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-28{height:calc(var(--spacing) * 28)}.h-28\!{height:calc(var(--spacing) * 28)!important}.h-34{height:calc(var(--spacing) * 34)}.h-40{height:calc(var(--spacing) * 40)}.h-44{height:calc(var(--spacing) * 44)}.h-48{height:calc(var(--spacing) * 48)}.h-52{height:calc(var(--spacing) * 52)}.h-64{height:calc(var(--spacing) * 64)}.h-96{height:calc(var(--spacing) * 96)}.h-102{height:calc(var(--spacing) * 102)}.h-\[2px\]{height:2px}.h-\[8vh\]{height:8vh}.h-\[70\%\]{height:70%}.h-\[calc\(100dvh-0\.25rem\)\]{height:calc(100dvh - .25rem)}.h-\[min\(60svh\,24rem\)\]{height:min(60svh,24rem)}.h-\[min\(100svh\,32rem\)\]{height:min(100svh,32rem)}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-52{max-height:calc(var(--spacing) * 52)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-144{max-height:calc(var(--spacing) * 144)}.max-h-\[70vh\]{max-height:70vh}.max-h-\[72vh\]{max-height:72vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:0}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-18{min-height:calc(var(--spacing) * 18)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-48{min-height:calc(var(--spacing) * 48)}.min-h-56{min-height:calc(var(--spacing) * 56)}.min-h-64{min-height:calc(var(--spacing) * 64)}.min-h-72{min-height:calc(var(--spacing) * 72)}.min-h-96{min-height:calc(var(--spacing) * 96)}.min-h-\[calc\(100dvh-0\.25rem\)\]{min-height:calc(100dvh - .25rem)}.min-h-dvh{min-height:100dvh}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/5{width:60%}.w-4{width:calc(var(--spacing) * 4)}.w-4\/5{width:80%}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-13{width:calc(var(--spacing) * 13)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-18{width:calc(var(--spacing) * 18)}.w-20{width:calc(var(--spacing) * 20)}.w-22{width:calc(var(--spacing) * 22)}.w-28{width:calc(var(--spacing) * 28)}.w-34{width:calc(var(--spacing) * 34)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-50{width:calc(var(--spacing) * 50)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-80{width:calc(var(--spacing) * 80)}.w-82{width:calc(var(--spacing) * 82)}.w-88{width:calc(var(--spacing) * 88)}.w-102{width:calc(var(--spacing) * 102)}.w-\[2px\]{width:2px}.w-\[45\%\]{width:45%}.w-\[55\%\]{width:55%}.w-\[min\(20rem\,calc\(100vw-1rem\)\)\]{width:min(20rem,100vw - 1rem)}.w-\[min\(30rem\,80\%\)\]{width:min(30rem,80%)}.w-\[min\(32rem\,80\%\)\]{width:min(32rem,80%)}.w-\[min\(32rem\,calc\(80vw-1\.25rem\)\)\]{width:min(32rem,80vw - 1.25rem)}.w-\[min\(34vw\,34rem\)\]{width:min(34vw,34rem)}.w-\[min\(36rem\,82\%\)\]{width:min(36rem,82%)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-max{width:max-content}.w-px{width:1px}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-96{max-width:calc(var(--spacing) * 96)}.max-w-\[40vw\]{max-width:40vw}.max-w-\[55\%\]{max-width:55%}.max-w-\[70\%\]{max-width:70%}.max-w-\[70vw\]{max-width:70vw}.max-w-\[80vw\]{max-width:80vw}.max-w-\[92\%\]{max-width:92%}.max-w-\[92vw\]{max-width:92vw}.max-w-\[94\%\]{max-width:94%}.max-w-\[100rem\]{max-width:100rem}.max-w-\[120rem\]{max-width:120rem}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.min-w-16{min-width:calc(var(--spacing) * 16)}.min-w-20{min-width:calc(var(--spacing) * 20)}.min-w-22{min-width:calc(var(--spacing) * 22)}.min-w-28{min-width:calc(var(--spacing) * 28)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-\[3\.7rem\]{min-width:3.7rem}.min-w-\[calc\(50\%-0\.125rem\)\]{min-width:calc(50% - .125rem)}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-\[0\.72\]{flex:.72}.flex-\[1\.1\]{flex:1.1}.flex-\[1\.22\]{flex:1.22}.flex-\[1\.28\]{flex:1.28}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-\[0\.9\]{flex-grow:.9}.grow-\[0\.75\]{flex-grow:.75}.basis-0{flex-basis:0}.origin-center{transform-origin:50%}.origin-top-left{transform-origin:0 0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-45{rotate:-45deg}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-135{rotate:135deg}.rotate-180{rotate:180deg}.rotate-\[-135deg\]{rotate:-135deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.list-disc{list-style-type:disc}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[1\.5rem_minmax\(0\,1fr\)_3rem\]{grid-template-columns:1.5rem minmax(0,1fr) 3rem}.grid-cols-\[minmax\(0\,1\.2fr\)_repeat\(4\,minmax\(0\,1fr\)\)\]{grid-template-columns:minmax(0,1.2fr) repeat(4,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1\.3fr\)_minmax\(0\,0\.22fr\)\]{grid-template-columns:minmax(0,1.3fr) minmax(0,.22fr)}.grid-cols-\[minmax\(0\,1\.6fr\)_minmax\(16rem\,0\.7fr\)\]{grid-template-columns:minmax(0,1.6fr) minmax(16rem,.7fr)}.grid-cols-\[minmax\(0\,1\.35fr\)_minmax\(0\,0\.95fr\)\]{grid-template-columns:minmax(0,1.35fr) minmax(0,.95fr)}.grid-cols-\[minmax\(0\,1\.45fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1.45fr) minmax(0,.85fr)}.grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr)}.grid-cols-\[minmax\(0\,1fr\)_2\.5rem\]{grid-template-columns:minmax(0,1fr) 2.5rem}.grid-cols-\[minmax\(0\,1fr\)_2rem\]{grid-template-columns:minmax(0,1fr) 2rem}.grid-cols-\[minmax\(0\,1fr\)_4\.75rem\]{grid-template-columns:minmax(0,1fr) 4.75rem}.grid-cols-\[minmax\(0\,1fr\)_8rem\]{grid-template-columns:minmax(0,1fr) 8rem}.grid-cols-\[minmax\(0\,1fr\)_13rem\]{grid-template-columns:minmax(0,1fr) 13rem}.grid-cols-\[minmax\(0\,1fr\)_14rem\]{grid-template-columns:minmax(0,1fr) 14rem}.grid-cols-\[minmax\(0\,1fr\)_20rem\]{grid-template-columns:minmax(0,1fr) 20rem}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,0\.7fr\)_minmax\(0\,1\.9fr\)_minmax\(0\,0\.7fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.7fr) minmax(0,1.9fr) minmax(0,.7fr)}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.grid-cols-\[minmax\(17rem\,1fr\)_minmax\(0\,133\.333vh\)_minmax\(17rem\,1fr\)\]{grid-template-columns:minmax(17rem,1fr) minmax(0,133.333vh) minmax(17rem,1fr)}.grid-cols-\[repeat\(auto-fit\,minmax\(min\(9rem\,100\%\)\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(min(9rem,100%),1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(min\(22\.5rem\,100\%\)\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(min(22.5rem,100%),1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-\[auto_1fr\]{grid-template-rows:auto 1fr}.grid-rows-\[auto_auto_1fr\]{grid-template-rows:auto auto 1fr}.grid-rows-\[auto_auto_1fr_auto\]{grid-template-rows:auto auto 1fr auto}.grid-rows-\[auto_auto_auto_1fr\]{grid-template-rows:auto auto auto 1fr}.grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.grid-rows-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-rows:auto minmax(0,1fr) auto}.grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.grid-rows-\[minmax\(0\,1fr\)_auto\]{grid-template-rows:minmax(0,1fr) auto}.grid-rows-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)_minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr)}.grid-rows-\[minmax\(0\,1fr\)_minmax\(7rem\,0\.22fr\)\]{grid-template-rows:minmax(0,1fr) minmax(7rem,.22fr)}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-stretch{justify-content:stretch}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-0\.25{gap:calc(var(--spacing) * .25)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-\[0\.4vh\]{gap:.4vh}.gap-\[0\.8vw\]{gap:.8vw}.gap-\[0\.55vh\]{gap:.55vh}.gap-\[1vh\]{gap:1vh}.gap-\[1vw\]{gap:1vw}.gap-\[3vh\]{gap:3vh}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.25>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .25) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .25) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:var(--spacing)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-tl-\[4\.25rem\]{border-top-left-radius:4.25rem}.rounded-tl-lg{border-top-left-radius:var(--radius-lg)}.rounded-r-xl{border-top-right-radius:var(--radius-xl);border-bottom-right-radius:var(--radius-xl)}.rounded-tr-\[4\.25rem\]{border-top-right-radius:4.25rem}.rounded-tr-xl{border-top-right-radius:var(--radius-xl)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-br-\[4\.25rem\]{border-bottom-right-radius:4.25rem}.rounded-br-\[12\.75rem\]{border-bottom-right-radius:12.75rem}.rounded-br-xl{border-bottom-right-radius:var(--radius-xl)}.rounded-bl-\[4\.25rem\]{border-bottom-left-radius:4.25rem}.rounded-bl-xl{border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-\[clamp\(0\.2rem\,1\.2cqw\,1rem\)\]{border-style:var(--tw-border-style);border-width:clamp(.2rem,1.2cqw,1rem)}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/30{border-color:#fee6854d}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/30{border-color:color-mix(in oklab,var(--color-amber-200) 30%,transparent)}}.border-amber-200\/70{border-color:#fee685b3}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/70{border-color:color-mix(in oklab,var(--color-amber-200) 70%,transparent)}}.border-amber-200\/90{border-color:#fee685e6}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/90{border-color:color-mix(in oklab,var(--color-amber-200) 90%,transparent)}}.border-amber-300\/60{border-color:#ffd23699}@supports (color:color-mix(in lab,red,red)){.border-amber-300\/60{border-color:color-mix(in oklab,var(--color-amber-300) 60%,transparent)}}.border-amber-300\/70{border-color:#ffd236b3}@supports (color:color-mix(in lab,red,red)){.border-amber-300\/70{border-color:color-mix(in oklab,var(--color-amber-300) 70%,transparent)}}.border-amber-300\/80{border-color:#ffd236cc}@supports (color:color-mix(in lab,red,red)){.border-amber-300\/80{border-color:color-mix(in oklab,var(--color-amber-300) 80%,transparent)}}.border-amber-400{border-color:var(--color-amber-400)}.border-amber-400\/30{border-color:#fcbb004d}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/30{border-color:color-mix(in oklab,var(--color-amber-400) 30%,transparent)}}.border-amber-400\/60{border-color:#fcbb0099}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/60{border-color:color-mix(in oklab,var(--color-amber-400) 60%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.border-amber-500\/60{border-color:#f99c0099}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/60{border-color:color-mix(in oklab,var(--color-amber-500) 60%,transparent)}}.border-amber-600\/60{border-color:#dd740099}@supports (color:color-mix(in lab,red,red)){.border-amber-600\/60{border-color:color-mix(in oklab,var(--color-amber-600) 60%,transparent)}}.border-amber-700\/60{border-color:#b7500099}@supports (color:color-mix(in lab,red,red)){.border-amber-700\/60{border-color:color-mix(in oklab,var(--color-amber-700) 60%,transparent)}}.border-blue-600{border-color:var(--color-blue-600)}.border-cyan-200{border-color:var(--color-cyan-200)}.border-cyan-200\/90{border-color:#a2f4fde6}@supports (color:color-mix(in lab,red,red)){.border-cyan-200\/90{border-color:color-mix(in oklab,var(--color-cyan-200) 90%,transparent)}}.border-cyan-300{border-color:var(--color-cyan-300)}.border-cyan-300\/60{border-color:#53eafd99}@supports (color:color-mix(in lab,red,red)){.border-cyan-300\/60{border-color:color-mix(in oklab,var(--color-cyan-300) 60%,transparent)}}.border-cyan-300\/70{border-color:#53eafdb3}@supports (color:color-mix(in lab,red,red)){.border-cyan-300\/70{border-color:color-mix(in oklab,var(--color-cyan-300) 70%,transparent)}}.border-cyan-300\/80{border-color:#53eafdcc}@supports (color:color-mix(in lab,red,red)){.border-cyan-300\/80{border-color:color-mix(in oklab,var(--color-cyan-300) 80%,transparent)}}.border-cyan-500\/40{border-color:#00b7d766}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/40{border-color:color-mix(in oklab,var(--color-cyan-500) 40%,transparent)}}.border-emerald-100\/80{border-color:#d0fae5cc}@supports (color:color-mix(in lab,red,red)){.border-emerald-100\/80{border-color:color-mix(in oklab,var(--color-emerald-100) 80%,transparent)}}.border-emerald-200{border-color:var(--color-emerald-200)}.border-emerald-200\/70{border-color:#a4f4cfb3}@supports (color:color-mix(in lab,red,red)){.border-emerald-200\/70{border-color:color-mix(in oklab,var(--color-emerald-200) 70%,transparent)}}.border-emerald-200\/90{border-color:#a4f4cfe6}@supports (color:color-mix(in lab,red,red)){.border-emerald-200\/90{border-color:color-mix(in oklab,var(--color-emerald-200) 90%,transparent)}}.border-emerald-300{border-color:var(--color-emerald-300)}.border-emerald-300\/70{border-color:#5ee9b5b3}@supports (color:color-mix(in lab,red,red)){.border-emerald-300\/70{border-color:color-mix(in oklab,var(--color-emerald-300) 70%,transparent)}}.border-emerald-400\/60{border-color:#00d29499}@supports (color:color-mix(in lab,red,red)){.border-emerald-400\/60{border-color:color-mix(in oklab,var(--color-emerald-400) 60%,transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/40{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.border-emerald-500\/60{border-color:#00bb7f99}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/60{border-color:color-mix(in oklab,var(--color-emerald-500) 60%,transparent)}}.border-emerald-700\/60{border-color:#00795699}@supports (color:color-mix(in lab,red,red)){.border-emerald-700\/60{border-color:color-mix(in oklab,var(--color-emerald-700) 60%,transparent)}}.border-emerald-700\/70{border-color:#007956b3}@supports (color:color-mix(in lab,red,red)){.border-emerald-700\/70{border-color:color-mix(in oklab,var(--color-emerald-700) 70%,transparent)}}.border-emerald-950{border-color:var(--color-emerald-950)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-fuchsia-300\/70{border-color:#f2a9ffb3}@supports (color:color-mix(in lab,red,red)){.border-fuchsia-300\/70{border-color:color-mix(in oklab,var(--color-fuchsia-300) 70%,transparent)}}.border-green-400{border-color:var(--color-green-400)}.border-indigo-200\/70{border-color:#c7d2ffb3}@supports (color:color-mix(in lab,red,red)){.border-indigo-200\/70{border-color:color-mix(in oklab,var(--color-indigo-200) 70%,transparent)}}.border-indigo-200\/95{border-color:#c7d2fff2}@supports (color:color-mix(in lab,red,red)){.border-indigo-200\/95{border-color:color-mix(in oklab,var(--color-indigo-200) 95%,transparent)}}.border-indigo-300\/70{border-color:#a4b3ffb3}@supports (color:color-mix(in lab,red,red)){.border-indigo-300\/70{border-color:color-mix(in oklab,var(--color-indigo-300) 70%,transparent)}}.border-indigo-400\/30{border-color:#7d87ff4d}@supports (color:color-mix(in lab,red,red)){.border-indigo-400\/30{border-color:color-mix(in oklab,var(--color-indigo-400) 30%,transparent)}}.border-indigo-700{border-color:var(--color-indigo-700)}.border-indigo-700\/60{border-color:#432dd799}@supports (color:color-mix(in lab,red,red)){.border-indigo-700\/60{border-color:color-mix(in oklab,var(--color-indigo-700) 60%,transparent)}}.border-neutral-500{border-color:var(--color-neutral-500)}.border-neutral-500\/50{border-color:#73737380}@supports (color:color-mix(in lab,red,red)){.border-neutral-500\/50{border-color:color-mix(in oklab,var(--color-neutral-500) 50%,transparent)}}.border-neutral-500\/60{border-color:#73737399}@supports (color:color-mix(in lab,red,red)){.border-neutral-500\/60{border-color:color-mix(in oklab,var(--color-neutral-500) 60%,transparent)}}.border-neutral-500\/70{border-color:#737373b3}@supports (color:color-mix(in lab,red,red)){.border-neutral-500\/70{border-color:color-mix(in oklab,var(--color-neutral-500) 70%,transparent)}}.border-neutral-600{border-color:var(--color-neutral-600)}.border-neutral-700{border-color:var(--color-neutral-700)}.border-neutral-700\/70{border-color:#404040b3}@supports (color:color-mix(in lab,red,red)){.border-neutral-700\/70{border-color:color-mix(in oklab,var(--color-neutral-700) 70%,transparent)}}.border-pink-200{border-color:var(--color-pink-200)}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-red-300\/80{border-color:#ffa3a3cc}@supports (color:color-mix(in lab,red,red)){.border-red-300\/80{border-color:color-mix(in oklab,var(--color-red-300) 80%,transparent)}}.border-red-300\/90{border-color:#ffa3a3e6}@supports (color:color-mix(in lab,red,red)){.border-red-300\/90{border-color:color-mix(in oklab,var(--color-red-300) 90%,transparent)}}.border-red-400{border-color:var(--color-red-400)}.border-red-400\/60{border-color:#ff656899}@supports (color:color-mix(in lab,red,red)){.border-red-400\/60{border-color:color-mix(in oklab,var(--color-red-400) 60%,transparent)}}.border-red-500\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab,red,red)){.border-red-500\/60{border-color:color-mix(in oklab,var(--color-red-500) 60%,transparent)}}.border-rose-300{border-color:var(--color-rose-300)}.border-sky-200{border-color:var(--color-sky-200)}.border-sky-200\/70{border-color:#b8e6feb3}@supports (color:color-mix(in lab,red,red)){.border-sky-200\/70{border-color:color-mix(in oklab,var(--color-sky-200) 70%,transparent)}}.border-sky-300{border-color:var(--color-sky-300)}.border-sky-300\/70{border-color:#77d4ffb3}@supports (color:color-mix(in lab,red,red)){.border-sky-300\/70{border-color:color-mix(in oklab,var(--color-sky-300) 70%,transparent)}}.border-sky-400\/50{border-color:#00bcfe80}@supports (color:color-mix(in lab,red,red)){.border-sky-400\/50{border-color:color-mix(in oklab,var(--color-sky-400) 50%,transparent)}}.border-sky-400\/70{border-color:#00bcfeb3}@supports (color:color-mix(in lab,red,red)){.border-sky-400\/70{border-color:color-mix(in oklab,var(--color-sky-400) 70%,transparent)}}.border-slate-200\/30{border-color:#e2e8f04d}@supports (color:color-mix(in lab,red,red)){.border-slate-200\/30{border-color:color-mix(in oklab,var(--color-slate-200) 30%,transparent)}}.border-slate-400{border-color:var(--color-slate-400)}.border-slate-400\/60{border-color:#90a1b999}@supports (color:color-mix(in lab,red,red)){.border-slate-400\/60{border-color:color-mix(in oklab,var(--color-slate-400) 60%,transparent)}}.border-slate-500\/70{border-color:#62748eb3}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/70{border-color:color-mix(in oklab,var(--color-slate-500) 70%,transparent)}}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-600\/40{border-color:#45556c66}@supports (color:color-mix(in lab,red,red)){.border-slate-600\/40{border-color:color-mix(in oklab,var(--color-slate-600) 40%,transparent)}}.border-slate-600\/60{border-color:#45556c99}@supports (color:color-mix(in lab,red,red)){.border-slate-600\/60{border-color:color-mix(in oklab,var(--color-slate-600) 60%,transparent)}}.border-slate-600\/70{border-color:#45556cb3}@supports (color:color-mix(in lab,red,red)){.border-slate-600\/70{border-color:color-mix(in oklab,var(--color-slate-600) 70%,transparent)}}.border-slate-600\/80{border-color:#45556ccc}@supports (color:color-mix(in lab,red,red)){.border-slate-600\/80{border-color:color-mix(in oklab,var(--color-slate-600) 80%,transparent)}}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-700\/60{border-color:#31415899}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/60{border-color:color-mix(in oklab,var(--color-slate-700) 60%,transparent)}}.border-slate-700\/70{border-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/70{border-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.border-slate-700\/80{border-color:#314158cc}@supports (color:color-mix(in lab,red,red)){.border-slate-700\/80{border-color:color-mix(in oklab,var(--color-slate-700) 80%,transparent)}}.border-slate-800{border-color:var(--color-slate-800)}.border-slate-800\/60{border-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/60{border-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.border-slate-800\/80{border-color:#1d293dcc}@supports (color:color-mix(in lab,red,red)){.border-slate-800\/80{border-color:color-mix(in oklab,var(--color-slate-800) 80%,transparent)}}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/40{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.border-white\/40{border-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.border-white\/80{border-color:#fffc}@supports (color:color-mix(in lab,red,red)){.border-white\/80{border-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.border-l-neutral-600{border-left-color:var(--color-neutral-600)}.bg-amber-100\/95{background-color:#fef3c6f2}@supports (color:color-mix(in lab,red,red)){.bg-amber-100\/95{background-color:color-mix(in oklab,var(--color-amber-100) 95%,transparent)}}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-400\/80{background-color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.bg-amber-400\/80{background-color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/30{background-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/30{background-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.bg-amber-600{background-color:var(--color-amber-600)}.bg-amber-600\/70{background-color:#dd7400b3}@supports (color:color-mix(in lab,red,red)){.bg-amber-600\/70{background-color:color-mix(in oklab,var(--color-amber-600) 70%,transparent)}}.bg-amber-600\/80{background-color:#dd7400cc}@supports (color:color-mix(in lab,red,red)){.bg-amber-600\/80{background-color:color-mix(in oklab,var(--color-amber-600) 80%,transparent)}}.bg-amber-700\/20{background-color:#b7500033}@supports (color:color-mix(in lab,red,red)){.bg-amber-700\/20{background-color:color-mix(in oklab,var(--color-amber-700) 20%,transparent)}}.bg-amber-700\/30{background-color:#b750004d}@supports (color:color-mix(in lab,red,red)){.bg-amber-700\/30{background-color:color-mix(in oklab,var(--color-amber-700) 30%,transparent)}}.bg-amber-700\/35{background-color:#b7500059}@supports (color:color-mix(in lab,red,red)){.bg-amber-700\/35{background-color:color-mix(in oklab,var(--color-amber-700) 35%,transparent)}}.bg-amber-700\/50{background-color:#b7500080}@supports (color:color-mix(in lab,red,red)){.bg-amber-700\/50{background-color:color-mix(in oklab,var(--color-amber-700) 50%,transparent)}}.bg-amber-700\/80{background-color:#b75000cc}@supports (color:color-mix(in lab,red,red)){.bg-amber-700\/80{background-color:color-mix(in oklab,var(--color-amber-700) 80%,transparent)}}.bg-amber-800{background-color:var(--color-amber-800)}.bg-amber-900{background-color:var(--color-amber-900)}.bg-amber-900\/40{background-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.bg-amber-900\/40{background-color:color-mix(in oklab,var(--color-amber-900) 40%,transparent)}}.bg-amber-900\/60{background-color:#7b330699}@supports (color:color-mix(in lab,red,red)){.bg-amber-900\/60{background-color:color-mix(in oklab,var(--color-amber-900) 60%,transparent)}}.bg-amber-900\/90{background-color:#7b3306e6}@supports (color:color-mix(in lab,red,red)){.bg-amber-900\/90{background-color:color-mix(in oklab,var(--color-amber-900) 90%,transparent)}}.bg-amber-950{background-color:var(--color-amber-950)}.bg-amber-950\/35{background-color:#46190159}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/35{background-color:color-mix(in oklab,var(--color-amber-950) 35%,transparent)}}.bg-amber-950\/40{background-color:#46190166}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/40{background-color:color-mix(in oklab,var(--color-amber-950) 40%,transparent)}}.bg-amber-950\/70{background-color:#461901b3}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/70{background-color:color-mix(in oklab,var(--color-amber-950) 70%,transparent)}}.bg-amber-950\/75{background-color:#461901bf}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/75{background-color:color-mix(in oklab,var(--color-amber-950) 75%,transparent)}}.bg-amber-950\/90{background-color:#461901e6}@supports (color:color-mix(in lab,red,red)){.bg-amber-950\/90{background-color:color-mix(in oklab,var(--color-amber-950) 90%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\!{background-color:var(--color-black)!important}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black) 20%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/55{background-color:#0000008c}@supports (color:color-mix(in lab,red,red)){.bg-black\/55{background-color:color-mix(in oklab,var(--color-black) 55%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-black\/75{background-color:#000000bf}@supports (color:color-mix(in lab,red,red)){.bg-black\/75{background-color:color-mix(in oklab,var(--color-black) 75%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black) 90%,transparent)}}.bg-black\/95{background-color:#000000f2}@supports (color:color-mix(in lab,red,red)){.bg-black\/95{background-color:color-mix(in oklab,var(--color-black) 95%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-cyan-300{background-color:var(--color-cyan-300)}.bg-cyan-300\/20{background-color:#53eafd33}@supports (color:color-mix(in lab,red,red)){.bg-cyan-300\/20{background-color:color-mix(in oklab,var(--color-cyan-300) 20%,transparent)}}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/80{background-color:#00b7d7cc}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/80{background-color:color-mix(in oklab,var(--color-cyan-500) 80%,transparent)}}.bg-cyan-900{background-color:var(--color-cyan-900)}.bg-cyan-900\/45{background-color:#104e6473}@supports (color:color-mix(in lab,red,red)){.bg-cyan-900\/45{background-color:color-mix(in oklab,var(--color-cyan-900) 45%,transparent)}}.bg-cyan-900\/90{background-color:#104e64e6}@supports (color:color-mix(in lab,red,red)){.bg-cyan-900\/90{background-color:color-mix(in oklab,var(--color-cyan-900) 90%,transparent)}}.bg-cyan-950\/60{background-color:#05334599}@supports (color:color-mix(in lab,red,red)){.bg-cyan-950\/60{background-color:color-mix(in oklab,var(--color-cyan-950) 60%,transparent)}}.bg-emerald-200{background-color:var(--color-emerald-200)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/45{background-color:#00bb7f73}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/45{background-color:color-mix(in oklab,var(--color-emerald-500) 45%,transparent)}}.bg-emerald-500\/80{background-color:#00bb7fcc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/80{background-color:color-mix(in oklab,var(--color-emerald-500) 80%,transparent)}}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-emerald-600\/70{background-color:#009767b3}@supports (color:color-mix(in lab,red,red)){.bg-emerald-600\/70{background-color:color-mix(in oklab,var(--color-emerald-600) 70%,transparent)}}.bg-emerald-600\/80{background-color:#009767cc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-600\/80{background-color:color-mix(in oklab,var(--color-emerald-600) 80%,transparent)}}.bg-emerald-700{background-color:var(--color-emerald-700)}.bg-emerald-700\/20{background-color:#00795633}@supports (color:color-mix(in lab,red,red)){.bg-emerald-700\/20{background-color:color-mix(in oklab,var(--color-emerald-700) 20%,transparent)}}.bg-emerald-700\/60{background-color:#00795699}@supports (color:color-mix(in lab,red,red)){.bg-emerald-700\/60{background-color:color-mix(in oklab,var(--color-emerald-700) 60%,transparent)}}.bg-emerald-700\/70{background-color:#007956b3}@supports (color:color-mix(in lab,red,red)){.bg-emerald-700\/70{background-color:color-mix(in oklab,var(--color-emerald-700) 70%,transparent)}}.bg-emerald-800{background-color:var(--color-emerald-800)}.bg-emerald-900{background-color:var(--color-emerald-900)}.bg-emerald-900\/60{background-color:#004e3b99}@supports (color:color-mix(in lab,red,red)){.bg-emerald-900\/60{background-color:color-mix(in oklab,var(--color-emerald-900) 60%,transparent)}}.bg-emerald-900\/90{background-color:#004e3be6}@supports (color:color-mix(in lab,red,red)){.bg-emerald-900\/90{background-color:color-mix(in oklab,var(--color-emerald-900) 90%,transparent)}}.bg-emerald-950{background-color:var(--color-emerald-950)}.bg-emerald-950\/40{background-color:#002c2266}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/40{background-color:color-mix(in oklab,var(--color-emerald-950) 40%,transparent)}}.bg-emerald-950\/50{background-color:#002c2280}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/50{background-color:color-mix(in oklab,var(--color-emerald-950) 50%,transparent)}}.bg-emerald-950\/90{background-color:#002c22e6}@supports (color:color-mix(in lab,red,red)){.bg-emerald-950\/90{background-color:color-mix(in oklab,var(--color-emerald-950) 90%,transparent)}}.bg-fuchsia-200{background-color:var(--color-fuchsia-200)}.bg-fuchsia-600{background-color:var(--color-fuchsia-600)}.bg-fuchsia-700{background-color:var(--color-fuchsia-700)}.bg-fuchsia-800{background-color:var(--color-fuchsia-800)}.bg-fuchsia-900{background-color:var(--color-fuchsia-900)}.bg-fuchsia-900\/45{background-color:#72137873}@supports (color:color-mix(in lab,red,red)){.bg-fuchsia-900\/45{background-color:color-mix(in oklab,var(--color-fuchsia-900) 45%,transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-indigo-600\/70{background-color:#4f39f6b3}@supports (color:color-mix(in lab,red,red)){.bg-indigo-600\/70{background-color:color-mix(in oklab,var(--color-indigo-600) 70%,transparent)}}.bg-indigo-900{background-color:var(--color-indigo-900)}.bg-indigo-900\/60{background-color:#312c8599}@supports (color:color-mix(in lab,red,red)){.bg-indigo-900\/60{background-color:color-mix(in oklab,var(--color-indigo-900) 60%,transparent)}}.bg-indigo-950{background-color:var(--color-indigo-950)}.bg-indigo-950\/60{background-color:#1e1a4d99}@supports (color:color-mix(in lab,red,red)){.bg-indigo-950\/60{background-color:color-mix(in oklab,var(--color-indigo-950) 60%,transparent)}}.bg-indigo-950\/90{background-color:#1e1a4de6}@supports (color:color-mix(in lab,red,red)){.bg-indigo-950\/90{background-color:color-mix(in oklab,var(--color-indigo-950) 90%,transparent)}}.bg-neutral-600{background-color:var(--color-neutral-600)}.bg-neutral-600\/80{background-color:#525252cc}@supports (color:color-mix(in lab,red,red)){.bg-neutral-600\/80{background-color:color-mix(in oklab,var(--color-neutral-600) 80%,transparent)}}.bg-neutral-700{background-color:var(--color-neutral-700)}.bg-neutral-700\/90{background-color:#404040e6}@supports (color:color-mix(in lab,red,red)){.bg-neutral-700\/90{background-color:color-mix(in oklab,var(--color-neutral-700) 90%,transparent)}}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-800\/80{background-color:#262626cc}@supports (color:color-mix(in lab,red,red)){.bg-neutral-800\/80{background-color:color-mix(in oklab,var(--color-neutral-800) 80%,transparent)}}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-neutral-900\/60{background-color:#17171799}@supports (color:color-mix(in lab,red,red)){.bg-neutral-900\/60{background-color:color-mix(in oklab,var(--color-neutral-900) 60%,transparent)}}.bg-neutral-900\/70{background-color:#171717b3}@supports (color:color-mix(in lab,red,red)){.bg-neutral-900\/70{background-color:color-mix(in oklab,var(--color-neutral-900) 70%,transparent)}}.bg-neutral-900\/95{background-color:#171717f2}@supports (color:color-mix(in lab,red,red)){.bg-neutral-900\/95{background-color:color-mix(in oklab,var(--color-neutral-900) 95%,transparent)}}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-neutral-950\/90{background-color:#0a0a0ae6}@supports (color:color-mix(in lab,red,red)){.bg-neutral-950\/90{background-color:color-mix(in oklab,var(--color-neutral-950) 90%,transparent)}}.bg-pink-500{background-color:var(--color-pink-500)}.bg-red-400{background-color:var(--color-red-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/45{background-color:#fb2c3673}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/45{background-color:color-mix(in oklab,var(--color-red-500) 45%,transparent)}}.bg-red-600{background-color:var(--color-red-600)}.bg-red-600\/70{background-color:#e40014b3}@supports (color:color-mix(in lab,red,red)){.bg-red-600\/70{background-color:color-mix(in oklab,var(--color-red-600) 70%,transparent)}}.bg-red-700{background-color:var(--color-red-700)}.bg-red-700\/20{background-color:#bf000f33}@supports (color:color-mix(in lab,red,red)){.bg-red-700\/20{background-color:color-mix(in oklab,var(--color-red-700) 20%,transparent)}}.bg-red-700\/60{background-color:#bf000f99}@supports (color:color-mix(in lab,red,red)){.bg-red-700\/60{background-color:color-mix(in oklab,var(--color-red-700) 60%,transparent)}}.bg-red-700\/80{background-color:#bf000fcc}@supports (color:color-mix(in lab,red,red)){.bg-red-700\/80{background-color:color-mix(in oklab,var(--color-red-700) 80%,transparent)}}.bg-red-800{background-color:var(--color-red-800)}.bg-red-900\/35{background-color:#82181a59}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/35{background-color:color-mix(in oklab,var(--color-red-900) 35%,transparent)}}.bg-red-900\/40{background-color:#82181a66}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/40{background-color:color-mix(in oklab,var(--color-red-900) 40%,transparent)}}.bg-red-900\/45{background-color:#82181a73}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/45{background-color:color-mix(in oklab,var(--color-red-900) 45%,transparent)}}.bg-red-900\/80{background-color:#82181acc}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/80{background-color:color-mix(in oklab,var(--color-red-900) 80%,transparent)}}.bg-red-950{background-color:var(--color-red-950)}.bg-red-950\/40{background-color:#46080966}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/40{background-color:color-mix(in oklab,var(--color-red-950) 40%,transparent)}}.bg-red-950\/70{background-color:#460809b3}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/70{background-color:color-mix(in oklab,var(--color-red-950) 70%,transparent)}}.bg-red-950\/90{background-color:#460809e6}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/90{background-color:color-mix(in oklab,var(--color-red-950) 90%,transparent)}}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-sky-600{background-color:var(--color-sky-600)}.bg-sky-700{background-color:var(--color-sky-700)}.bg-sky-700\/20{background-color:#0069a433}@supports (color:color-mix(in lab,red,red)){.bg-sky-700\/20{background-color:color-mix(in oklab,var(--color-sky-700) 20%,transparent)}}.bg-sky-700\/70{background-color:#0069a4b3}@supports (color:color-mix(in lab,red,red)){.bg-sky-700\/70{background-color:color-mix(in oklab,var(--color-sky-700) 70%,transparent)}}.bg-sky-900{background-color:var(--color-sky-900)}.bg-sky-950{background-color:var(--color-sky-950)}.bg-slate-300{background-color:var(--color-slate-300)}.bg-slate-500{background-color:var(--color-slate-500)}.bg-slate-600{background-color:var(--color-slate-600)}.bg-slate-600\/70{background-color:#45556cb3}@supports (color:color-mix(in lab,red,red)){.bg-slate-600\/70{background-color:color-mix(in oklab,var(--color-slate-600) 70%,transparent)}}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-700\/30{background-color:#3141584d}@supports (color:color-mix(in lab,red,red)){.bg-slate-700\/30{background-color:color-mix(in oklab,var(--color-slate-700) 30%,transparent)}}.bg-slate-700\/60{background-color:#31415899}@supports (color:color-mix(in lab,red,red)){.bg-slate-700\/60{background-color:color-mix(in oklab,var(--color-slate-700) 60%,transparent)}}.bg-slate-700\/70{background-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.bg-slate-700\/70{background-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.bg-slate-700\/80{background-color:#314158cc}@supports (color:color-mix(in lab,red,red)){.bg-slate-700\/80{background-color:color-mix(in oklab,var(--color-slate-700) 80%,transparent)}}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-800\/60{background-color:#1d293d99}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/60{background-color:color-mix(in oklab,var(--color-slate-800) 60%,transparent)}}.bg-slate-800\/70{background-color:#1d293db3}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/70{background-color:color-mix(in oklab,var(--color-slate-800) 70%,transparent)}}.bg-slate-800\/80{background-color:#1d293dcc}@supports (color:color-mix(in lab,red,red)){.bg-slate-800\/80{background-color:color-mix(in oklab,var(--color-slate-800) 80%,transparent)}}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/35{background-color:#0f172b59}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/35{background-color:color-mix(in oklab,var(--color-slate-900) 35%,transparent)}}.bg-slate-900\/40{background-color:#0f172b66}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-900\/70{background-color:#0f172bb3}@supports (color:color-mix(in lab,red,red)){.bg-slate-900\/70{background-color:color-mix(in oklab,var(--color-slate-900) 70%,transparent)}}.bg-slate-950{background-color:var(--color-slate-950)}.bg-slate-950\/35{background-color:#02061859}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/35{background-color:color-mix(in oklab,var(--color-slate-950) 35%,transparent)}}.bg-slate-950\/80{background-color:#020618cc}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/80{background-color:color-mix(in oklab,var(--color-slate-950) 80%,transparent)}}.bg-slate-950\/85{background-color:#020618d9}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/85{background-color:color-mix(in oklab,var(--color-slate-950) 85%,transparent)}}.bg-slate-950\/90{background-color:#020618e6}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/90{background-color:color-mix(in oklab,var(--color-slate-950) 90%,transparent)}}.bg-slate-950\/95{background-color:#020618f2}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/95{background-color:color-mix(in oklab,var(--color-slate-950) 95%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-400{background-color:var(--color-violet-400)}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-900\/90{background-color:#18181be6}@supports (color:color-mix(in lab,red,red)){.bg-zinc-900\/90{background-color:color-mix(in oklab,var(--color-zinc-900) 90%,transparent)}}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab,red,red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.from-lime-800{--tw-gradient-from:var(--color-lime-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-neutral-800{--tw-gradient-from:var(--color-neutral-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-neutral-700{--tw-gradient-via:var(--color-neutral-700);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-neutral-600{--tw-gradient-to:var(--color-neutral-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-teal-800{--tw-gradient-to:var(--color-teal-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.fill-slate-100{fill:var(--color-slate-100)}.fill-slate-200{fill:var(--color-slate-200)}.fill-slate-400{fill:var(--color-slate-400)}.fill-white{fill:var(--color-white)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-0\.25{padding:calc(var(--spacing) * .25)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-\[0\.85vw\]{padding:.85vw}.p-\[clamp\(0\.2rem\,2cqw\,1\.5rem\)\]{padding:clamp(.2rem,2cqw,1.5rem)}.px-0{padding-inline:0}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-0\.25{padding-inline:calc(var(--spacing) * .25)}.px-0\.75{padding-inline:calc(var(--spacing) * .75)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-\[1\.2vw\]{padding-inline:1.2vw}.px-\[1\.6vw\]{padding-inline:1.6vw}.px-\[1vw\]{padding-inline:1vw}.px-\[3vw\]{padding-inline:3vw}.px-\[4vw\]{padding-inline:4vw}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-0\.25{padding-block:calc(var(--spacing) * .25)}.py-0\.75{padding-block:calc(var(--spacing) * .75)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-7{padding-block:calc(var(--spacing) * 7)}.py-\[0\.55vh\]{padding-block:.55vh}.py-\[2\.5vh\]{padding-block:2.5vh}.py-\[2px\]{padding-block:2px}.py-\[4vh\]{padding-block:4vh}.py-px{padding-block:1px}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-0\.25{padding-top:calc(var(--spacing) * .25)}.pt-1{padding-top:var(--spacing)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-0{padding-right:0}.pr-1{padding-right:var(--spacing)}.pb-0{padding-bottom:0}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-0\.25{padding-bottom:calc(var(--spacing) * .25)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.5rem\]{font-size:.5rem}.text-\[0\.6rem\]{font-size:.6rem}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.45rem\]{font-size:.45rem}.text-\[0\.48rem\]{font-size:.48rem}.text-\[0\.52rem\]{font-size:.52rem}.text-\[0\.55em\]{font-size:.55em}.text-\[0\.55rem\]{font-size:.55rem}.text-\[0\.58rem\]{font-size:.58rem}.text-\[0\.62rem\]{font-size:.62rem}.text-\[0\.65em\]{font-size:.65em}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[0\.75rem\]{font-size:.75rem}.text-\[0\.78rem\]{font-size:.78rem}.text-\[0\.82rem\]{font-size:.82rem}.text-\[0\.85rem\]{font-size:.85rem}.text-\[1\.1rem\]{font-size:1.1rem}.text-\[1\.5rem\]{font-size:1.5rem}.text-\[1\.75rem\]{font-size:1.75rem}.text-\[1rem\]{font-size:1rem}.text-\[2\.5vw\]{font-size:2.5vw}.text-\[2\.6vw\]{font-size:2.6vw}.text-\[3\.1vw\]{font-size:3.1vw}.text-\[3\.375rem\]{font-size:3.375rem}.text-\[3vw\]{font-size:3vw}.text-\[4vw\]{font-size:4vw}.text-\[6vw\]{font-size:6vw}.text-\[7vw\]{font-size:7vw}.text-\[17vw\]{font-size:17vw}.text-\[clamp\(1\.2rem\,2\.9vh\,3rem\)\]{font-size:clamp(1.2rem,2.9vh,3rem)}.text-\[clamp\(1\.25rem\,2\.5vh\,2\.6rem\)\]{font-size:clamp(1.25rem,2.5vh,2.6rem)}.text-\[clamp\(2\.1rem\,5\.1vh\,5\.6rem\)\]{font-size:clamp(2.1rem,5.1vh,5.6rem)}.text-\[clamp\(2\.5rem\,5\.3vh\,5\.8rem\)\]{font-size:clamp(2.5rem,5.3vh,5.8rem)}.text-\[clamp\(2\.5rem\,7vh\,7rem\)\]{font-size:clamp(2.5rem,7vh,7rem)}.text-\[clamp\(2\.5rem\,8vh\,8rem\)\]{font-size:clamp(2.5rem,8vh,8rem)}.text-\[clamp\(2rem\,5vh\,5\.2rem\)\]{font-size:clamp(2rem,5vh,5.2rem)}.text-\[clamp\(3\.2rem\,11vh\,11rem\)\]{font-size:clamp(3.2rem,11vh,11rem)}.leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-50{color:var(--color-amber-50)}.text-amber-50\/90{color:#fffbebe6}@supports (color:color-mix(in lab,red,red)){.text-amber-50\/90{color:color-mix(in oklab,var(--color-amber-50) 90%,transparent)}}.text-amber-100{color:var(--color-amber-100)}.text-amber-200{color:var(--color-amber-200)}.text-amber-200\/80{color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/80{color:color-mix(in oklab,var(--color-amber-200) 80%,transparent)}}.text-amber-200\/85{color:#fee685d9}@supports (color:color-mix(in lab,red,red)){.text-amber-200\/85{color:color-mix(in oklab,var(--color-amber-200) 85%,transparent)}}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-950{color:var(--color-amber-950)}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-blue-800{color:var(--color-blue-800)}.text-cyan-50{color:var(--color-cyan-50)}.text-cyan-100{color:var(--color-cyan-100)}.text-cyan-200{color:var(--color-cyan-200)}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-950{color:var(--color-cyan-950)}.text-emerald-50{color:var(--color-emerald-50)}.text-emerald-50\/90{color:#ecfdf5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-50\/90{color:color-mix(in oklab,var(--color-emerald-50) 90%,transparent)}}.text-emerald-100{color:var(--color-emerald-100)}.text-emerald-100\/80{color:#d0fae5cc}@supports (color:color-mix(in lab,red,red)){.text-emerald-100\/80{color:color-mix(in oklab,var(--color-emerald-100) 80%,transparent)}}.text-emerald-200{color:var(--color-emerald-200)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-950{color:var(--color-emerald-950)}.text-fuchsia-50{color:var(--color-fuchsia-50)}.text-fuchsia-900{color:var(--color-fuchsia-900)}.text-indigo-50{color:var(--color-indigo-50)}.text-indigo-50\/90{color:#eef2ffe6}@supports (color:color-mix(in lab,red,red)){.text-indigo-50\/90{color:color-mix(in oklab,var(--color-indigo-50) 90%,transparent)}}.text-indigo-200{color:var(--color-indigo-200)}.text-lime-300{color:var(--color-lime-300)}.text-lime-400{color:var(--color-lime-400)}.text-neutral-50{color:var(--color-neutral-50)}.text-neutral-100{color:var(--color-neutral-100)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-red-50{color:var(--color-red-50)}.text-red-100{color:var(--color-red-100)}.text-red-100\/90{color:#ffe2e2e6}@supports (color:color-mix(in lab,red,red)){.text-red-100\/90{color:color-mix(in oklab,var(--color-red-100) 90%,transparent)}}.text-red-100\/95{color:#ffe2e2f2}@supports (color:color-mix(in lab,red,red)){.text-red-100\/95{color:color-mix(in oklab,var(--color-red-100) 95%,transparent)}}.text-red-200{color:var(--color-red-200)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-700{color:var(--color-red-700)}.text-rose-200{color:var(--color-rose-200)}.text-rose-300{color:var(--color-rose-300)}.text-sky-50{color:var(--color-sky-50)}.text-sky-100{color:var(--color-sky-100)}.text-sky-200{color:var(--color-sky-200)}.text-sky-300{color:var(--color-sky-300)}.text-slate-50{color:var(--color-slate-50)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-400\/60{color:#90a1b999}@supports (color:color-mix(in lab,red,red)){.text-slate-400\/60{color:color-mix(in oklab,var(--color-slate-400) 60%,transparent)}}.text-slate-500{color:var(--color-slate-500)}.text-slate-900{color:var(--color-slate-900)}.text-slate-950{color:var(--color-slate-950)}.text-teal-400{color:var(--color-teal-400)}.text-violet-300{color:var(--color-violet-300)}.text-white{color:var(--color-white)}.text-white\/75{color:#ffffffbf}@supports (color:color-mix(in lab,red,red)){.text-white\/75{color:color-mix(in oklab,var(--color-white) 75%,transparent)}}.text-white\/90{color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.text-white\/90{color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.accent-amber-500{accent-color:var(--color-amber-500)}.accent-cyan-500{accent-color:var(--color-cyan-500)}.accent-emerald-400{accent-color:var(--color-emerald-400)}.accent-emerald-500{accent-color:var(--color-emerald-500)}.accent-red-500{accent-color:var(--color-red-500)}.accent-sky-500{accent-color:var(--color-sky-500)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_1px_0_rgba\(255\,255\,255\,0\.05\)_inset\,0_10px_24px_rgba\(0\,0\,0\,0\.28\)\]{--tw-shadow:0 1px 0 var(--tw-shadow-color,#ffffff0d) inset, 0 10px 24px var(--tw-shadow-color,#00000047);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-8{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab,red,red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-cyan-950\/50{--tw-shadow-color:#05334580}@supports (color:color-mix(in lab,red,red)){.shadow-cyan-950\/50{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-cyan-950) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-amber-200\/60{--tw-ring-color:#fee68599}@supports (color:color-mix(in lab,red,red)){.ring-amber-200\/60{--tw-ring-color:color-mix(in oklab, var(--color-amber-200) 60%, transparent)}}.ring-amber-300{--tw-ring-color:var(--color-amber-300)}.ring-amber-300\/80{--tw-ring-color:#ffd236cc}@supports (color:color-mix(in lab,red,red)){.ring-amber-300\/80{--tw-ring-color:color-mix(in oklab, var(--color-amber-300) 80%, transparent)}}.ring-cyan-200\/90{--tw-ring-color:#a2f4fde6}@supports (color:color-mix(in lab,red,red)){.ring-cyan-200\/90{--tw-ring-color:color-mix(in oklab, var(--color-cyan-200) 90%, transparent)}}.ring-emerald-300\/50{--tw-ring-color:#5ee9b580}@supports (color:color-mix(in lab,red,red)){.ring-emerald-300\/50{--tw-ring-color:color-mix(in oklab, var(--color-emerald-300) 50%, transparent)}}.ring-emerald-300\/70{--tw-ring-color:#5ee9b5b3}@supports (color:color-mix(in lab,red,red)){.ring-emerald-300\/70{--tw-ring-color:color-mix(in oklab, var(--color-emerald-300) 70%, transparent)}}.ring-emerald-300\/80{--tw-ring-color:#5ee9b5cc}@supports (color:color-mix(in lab,red,red)){.ring-emerald-300\/80{--tw-ring-color:color-mix(in oklab, var(--color-emerald-300) 80%, transparent)}}.ring-indigo-300\/70{--tw-ring-color:#a4b3ffb3}@supports (color:color-mix(in lab,red,red)){.ring-indigo-300\/70{--tw-ring-color:color-mix(in oklab, var(--color-indigo-300) 70%, transparent)}}.ring-red-300\/60{--tw-ring-color:#ffa3a399}@supports (color:color-mix(in lab,red,red)){.ring-red-300\/60{--tw-ring-color:color-mix(in oklab, var(--color-red-300) 60%, transparent)}}.ring-red-300\/80{--tw-ring-color:#ffa3a3cc}@supports (color:color-mix(in lab,red,red)){.ring-red-300\/80{--tw-ring-color:color-mix(in oklab, var(--color-red-300) 80%, transparent)}}.ring-red-500\/70{--tw-ring-color:#fb2c36b3}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/70{--tw-ring-color:color-mix(in oklab, var(--color-red-500) 70%, transparent)}}.ring-red-500\/80{--tw-ring-color:#fb2c36cc}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/80{--tw-ring-color:color-mix(in oklab, var(--color-red-500) 80%, transparent)}}.ring-red-500\/90{--tw-ring-color:#fb2c36e6}@supports (color:color-mix(in lab,red,red)){.ring-red-500\/90{--tw-ring-color:color-mix(in oklab, var(--color-red-500) 90%, transparent)}}.ring-sky-300\/50{--tw-ring-color:#77d4ff80}@supports (color:color-mix(in lab,red,red)){.ring-sky-300\/50{--tw-ring-color:color-mix(in oklab, var(--color-sky-300) 50%, transparent)}}.ring-sky-400\/80{--tw-ring-color:#00bcfecc}@supports (color:color-mix(in lab,red,red)){.ring-sky-400\/80{--tw-ring-color:color-mix(in oklab, var(--color-sky-400) 80%, transparent)}}.ring-slate-400\/40{--tw-ring-color:#90a1b966}@supports (color:color-mix(in lab,red,red)){.ring-slate-400\/40{--tw-ring-color:color-mix(in oklab, var(--color-slate-400) 40%, transparent)}}.ring-slate-400\/70{--tw-ring-color:#90a1b9b3}@supports (color:color-mix(in lab,red,red)){.ring-slate-400\/70{--tw-ring-color:color-mix(in oklab, var(--color-slate-400) 70%, transparent)}}.ring-slate-600{--tw-ring-color:var(--color-slate-600)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,border-radius\,background-color\]{transition-property:width,height,border-radius,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\]{transition-property:width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,opacity\]{transition-property:width,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.\[clip-path\:polygon\(0_0\,0_100\%\,100\%_100\%\)\]{clip-path:polygon(0 0,0 100%,100% 100%)}.\[clip-path\:polygon\(0_0\,100\%_0\,0_100\%\)\]{clip-path:polygon(0 0,100% 0,0 100%)}.\[clip-path\:polygon\(0_0\,100\%_0\,100\%_100\%\)\]{clip-path:polygon(0 0,100% 0,100% 100%)}.\[clip-path\:polygon\(100\%_0\,0_100\%\,100\%_100\%\)\]{clip-path:polygon(100% 0,0 100%,100% 100%)}.\[writing-mode\:vertical-rl\]{writing-mode:vertical-rl}.ring-inset{--tw-ring-inset:inset}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-green-100:hover{border-color:var(--color-green-100)}.hover\:border-rose-500:hover{border-color:var(--color-rose-500)}.hover\:border-sky-500:hover{border-color:var(--color-sky-500)}.hover\:border-white:hover{border-color:var(--color-white)}.hover\:border-white\/60:hover{border-color:#fff9}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/60:hover{border-color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.hover\:bg-amber-400:hover{background-color:var(--color-amber-400)}.hover\:bg-amber-600:hover{background-color:var(--color-amber-600)}.hover\:bg-amber-800:hover{background-color:var(--color-amber-800)}.hover\:bg-amber-900:hover{background-color:var(--color-amber-900)}.hover\:bg-amber-900\/95:hover{background-color:#7b3306f2}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-900\/95:hover{background-color:color-mix(in oklab,var(--color-amber-900) 95%,transparent)}}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-black\/80:hover{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/80:hover{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.hover\:bg-cyan-400:hover{background-color:var(--color-cyan-400)}.hover\:bg-cyan-800:hover{background-color:var(--color-cyan-800)}.hover\:bg-emerald-400:hover{background-color:var(--color-emerald-400)}.hover\:bg-emerald-500:hover{background-color:var(--color-emerald-500)}.hover\:bg-emerald-700:hover{background-color:var(--color-emerald-700)}.hover\:bg-emerald-900\/95:hover{background-color:#004e3bf2}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-900\/95:hover{background-color:color-mix(in oklab,var(--color-emerald-900) 95%,transparent)}}.hover\:bg-fuchsia-500:hover{background-color:var(--color-fuchsia-500)}.hover\:bg-green-400:hover{background-color:var(--color-green-400)}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-indigo-800:hover{background-color:var(--color-indigo-800)}.hover\:bg-indigo-900:hover{background-color:var(--color-indigo-900)}.hover\:bg-neutral-700:hover{background-color:var(--color-neutral-700)}.hover\:bg-pink-400:hover{background-color:var(--color-pink-400)}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-900:hover{background-color:var(--color-red-900)}.hover\:bg-rose-500:hover{background-color:var(--color-rose-500)}.hover\:bg-sky-500:hover{background-color:var(--color-sky-500)}.hover\:bg-slate-600:hover{background-color:var(--color-slate-600)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-slate-700\/70:hover{background-color:#314158b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-slate-700\/70:hover{background-color:color-mix(in oklab,var(--color-slate-700) 70%,transparent)}}.hover\:bg-slate-900:hover{background-color:var(--color-slate-900)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-zinc-900:hover{background-color:var(--color-zinc-900)}.hover\:text-white:hover{color:var(--color-white)}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:bg-white\/10:focus{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.focus\:bg-white\/10:focus{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.focus\:text-white:focus{color:var(--color-white)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-emerald-500:focus{--tw-ring-color:var(--color-emerald-500)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-amber-200:focus-visible{--tw-ring-color:var(--color-amber-200)}.focus-visible\:ring-amber-300:focus-visible{--tw-ring-color:var(--color-amber-300)}.focus-visible\:ring-cyan-200:focus-visible{--tw-ring-color:var(--color-cyan-200)}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-color:var(--color-cyan-300)}.focus-visible\:ring-emerald-200:focus-visible{--tw-ring-color:var(--color-emerald-200)}.focus-visible\:ring-emerald-300:focus-visible{--tw-ring-color:var(--color-emerald-300)}.focus-visible\:ring-indigo-200:focus-visible{--tw-ring-color:var(--color-indigo-200)}.focus-visible\:ring-indigo-300:focus-visible{--tw-ring-color:var(--color-indigo-300)}.focus-visible\:ring-red-200:focus-visible{--tw-ring-color:var(--color-red-200)}.focus-visible\:ring-sky-200:focus-visible{--tw-ring-color:var(--color-sky-200)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-slate-500:focus-visible{outline-color:var(--color-slate-500)}.focus-visible\:outline-solid:focus-visible{--tw-outline-style:solid;outline-style:solid}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-\[0\.99\]:active{scale:.99}.active\:brightness-125:active{--tw-brightness:brightness(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:opacity-75:disabled{opacity:.75}@media(prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media not all and (min-width:520px){.max-\[520px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[520px\]\:justify-start{justify-content:flex-start}}@media not all and (min-width:420px){.max-\[420px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[420px\]\:justify-start{justify-content:flex-start}}@media(min-width:40rem){.sm\:block{display:block}.sm\:min-h-72{min-height:calc(var(--spacing) * 72)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-3{grid-column:span 3/span 3}.md\:h-full{height:100%}.md\:h-screen{height:100vh}.md\:min-h-0{min-height:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[0\.9fr_1fr_1\.3fr\]{grid-template-columns:.9fr 1fr 1.3fr}.md\:grid-cols-\[5rem_1fr_1fr_1fr_auto\]{grid-template-columns:5rem 1fr 1fr 1fr auto}.md\:grid-cols-\[10rem_10rem_1fr\]{grid-template-columns:10rem 10rem 1fr}.md\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}.md\:grid-cols-\[minmax\(0\,1fr\)_10rem_auto\]{grid-template-columns:minmax(0,1fr) 10rem auto}.md\:grid-cols-\[minmax\(0\,1fr\)_18rem\]{grid-template-columns:minmax(0,1fr) 18rem}.md\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.md\:grid-cols-\[minmax\(0\,1fr\)_auto_auto\]{grid-template-columns:minmax(0,1fr) auto auto}.md\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,0\.7fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.7fr)}.md\:grid-cols-\[minmax\(16rem\,0\.8fr\)_minmax\(0\,1\.2fr\)\]{grid-template-columns:minmax(16rem,.8fr) minmax(0,1.2fr)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:overflow-hidden{overflow:hidden}.md\:overflow-y-auto{overflow-y:auto}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media(min-width:64rem){.lg\:grid-cols-\[24rem_minmax\(0\,1fr\)\]{grid-template-columns:24rem minmax(0,1fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_20rem\]{grid-template-columns:minmax(0,1fr) 20rem}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}}@media(min-width:80rem){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}}@container not (min-width:15rem){.\@max-\[15rem\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@container (min-width:20rem){.\@xs\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width:24rem){.\@sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\@sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\@sm\:grid-cols-\[minmax\(0\,0\.8fr\)_minmax\(0\,1\.2fr\)\]{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr)}.\@sm\:grid-cols-\[minmax\(0\,1\.4fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}.\@sm\:flex-col{flex-direction:column}.\@sm\:flex-row{flex-direction:row}.\@sm\:gap-0{gap:0}.\@sm\:overflow-hidden{overflow:hidden}.\@sm\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.\@sm\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\@sm\:py-0{padding-block:0}.\@sm\:text-\[0\.55em\]{font-size:.55em}.\@sm\:whitespace-nowrap{white-space:nowrap}}@container (min-width:28rem){.\@\[28rem\]\:col-span-2{grid-column:span 2/span 2}.\@\[28rem\]\:grid{display:grid}.\@\[28rem\]\:h-32{height:calc(var(--spacing) * 32)}.\@\[28rem\]\:min-w-0{min-width:0}.\@\[28rem\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@\[28rem\]\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\@\[28rem\]\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\@\[28rem\]\:grid-cols-\[minmax\(0\,1\.15fr\)_minmax\(0\,0\.85fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr) minmax(0,.85fr)}.\@\[28rem\]\:grid-cols-\[minmax\(0\,1fr\)_9rem_10rem\]{grid-template-columns:minmax(0,1fr) 9rem 10rem}.\@md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\@\[28rem\]\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.\@\[28rem\]\:text-right{text-align:right}}@container (min-width:32rem){.\@\[32rem\]\:col-span-2{grid-column:span 2/span 2}.\@lg\:w-auto{width:auto}.\@lg\:min-w-24{min-width:calc(var(--spacing) * 24)}.\@\[32rem\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@\[32rem\]\:grid-cols-\[minmax\(0\,1\.25fr\)_minmax\(0\,0\.9fr\)\]{grid-template-columns:minmax(0,1.25fr) minmax(0,.9fr)}.\@lg\:flex-row{flex-direction:row}.\@lg\:items-center{align-items:center}.\@lg\:justify-between{justify-content:space-between}}.\[\&_img\]\:object-contain img,.\[\&_video\]\:object-contain video{object-fit:contain}}:root{background-color:var(--color-black);color:var(--color-slate-100);font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}body{background-color:var(--color-black);min-height:100vh;color:var(--color-slate-100);margin:0}html,body,*{scrollbar-width:none}html::-webkit-scrollbar{width:0;height:0;display:none}body::-webkit-scrollbar{width:0;height:0;display:none}::-webkit-scrollbar{width:0;height:0;display:none}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes pulse{50%{opacity:.5}}.page-theme{background-color:#050505;background-attachment:fixed}.page-theme-preview{background-attachment:scroll;background-position:center}.page-theme-black{background-color:#000;background-image:none}.page-theme-green-mode{background-color:#0f0;background-image:none}.page-theme-pride-mix{background-image:repeating-linear-gradient(45deg,#5bcefa 0 48px,#f5a9b8 48px 96px,#fff 96px 144px,#f5a9b8 144px 192px,#5bcefa 192px 240px,#e40303 240px 288px,#ff8c00 288px 336px,#ffed00 336px 384px,#00a651 384px 432px,#06f 432px 480px,#9b2fae 480px 528px)}.page-theme-rainbow{background-image:repeating-linear-gradient(45deg,#e40303 0 48px,#ff8c00 48px 96px,#ffed00 96px 144px,#008026 144px 192px,#004dff 192px 240px,#750787 240px 288px)}.page-theme-progress-pride{background-image:repeating-linear-gradient(45deg,#000 0 48px,#784f17 48px 96px,#5bcefa 96px 144px,#f5a9b8 144px 192px,#fff 192px 240px,#e40303 240px 288px,#ff8c00 288px 336px,#ffed00 336px 384px,#008026 384px 432px,#004dff 432px 480px,#750787 480px 528px)}.page-theme-transgender{background-image:repeating-linear-gradient(45deg,#5bcefa 0 48px,#f5a9b8 48px 96px,#fff 96px 144px,#f5a9b8 144px 192px,#5bcefa 192px 240px)}.page-theme-bisexual{background-image:repeating-linear-gradient(45deg,#d60270 0 48px,#9b4f96 48px 96px,#0038a8 96px 144px)}.page-theme-lesbian{background-image:repeating-linear-gradient(45deg,#d52d00 0 48px,#ef7627 48px 96px,#ff9a56 96px 144px,#fff 144px 192px,#d162a4 192px 240px,#b55690 240px 288px,#a30262 288px 336px)}.page-theme-nonbinary{background-image:repeating-linear-gradient(45deg,#fff430 0 48px,#fff 48px 96px,#9c59d1 96px 144px,#2d2d2d 144px 192px)}.page-theme-pansexual{background-image:repeating-linear-gradient(45deg,#ff218c 0 48px,#ffd800 48px 96px,#21b1ff 96px 144px)}.page-theme-asexual{background-image:repeating-linear-gradient(45deg,#111 0 48px,#a3a3a3 48px 96px,#fff 96px 144px,purple 144px 192px)}.page-theme-aurora{background-color:#03120f;background-image:radial-gradient(circle at 18% 24%,rgba(45,212,191,.95),transparent 34%),radial-gradient(circle at 76% 18%,rgba(168,85,247,.9),transparent 38%),radial-gradient(circle at 56% 82%,rgba(34,197,94,.88),transparent 42%),linear-gradient(125deg,#020617,#0f172a 45%,#082f49);background-size:34rem 28rem,38rem 32rem,42rem 36rem,auto}.page-theme-synthwave-grid{background-color:#090018;background-image:linear-gradient(rgba(34,211,238,.7) 2px,transparent 2px),linear-gradient(90deg,rgba(236,72,153,.72) 2px,transparent 2px),radial-gradient(ellipse at 50% 100%,#7e22ce 0,#1e1b4b 38%,#090018 72%);background-size:54px 54px,54px 54px,auto}.page-theme-neon-checker{background-color:#111827;background-image:conic-gradient(from 45deg,#06b6d4 0 25%,#7c3aed 0 50%,#ec4899 0 75%,#111827 0);background-size:84px 84px}.page-theme-ocean-current{background-color:#082f49;background-image:repeating-linear-gradient(35deg,rgba(103,232,249,.72) 0 12px,transparent 12px 54px),repeating-linear-gradient(-35deg,rgba(14,116,144,.72) 0 21px,transparent 21px 72px),linear-gradient(90deg,#0c4a6e,#0891b2,#164e63)}.page-theme-ember-lattice{background-color:#1c0704;background-image:repeating-linear-gradient(45deg,transparent 0 36px,rgba(251,146,60,.9) 36px 45px),repeating-linear-gradient(-45deg,transparent 0 48px,rgba(239,68,68,.78) 48px 57px),radial-gradient(circle at center,#7c2d12,#1c0704 70%)}.page-theme-starfield{background-color:#020617;background-image:radial-gradient(circle,rgba(255,255,255,.95) 0 2px,transparent 3px),radial-gradient(circle,rgba(125,211,252,.9) 0 3px,transparent 4px),radial-gradient(circle,rgba(216,180,254,.8) 0 2px,transparent 3px),linear-gradient(135deg,#020617,#172554 55%,#3b0764);background-position:0 0,57px 81px,123px 33px,0 0;background-size:111px 111px,183px 183px,237px 237px,auto}.page-theme-vaporwave-sunset{background-color:#2e1065;background-image:repeating-linear-gradient(0deg,transparent 0 24px,rgba(103,232,249,.48) 24px 27px,transparent 27px 54px),radial-gradient(circle at 50% 78%,#fda4af 0 14%,#f97316 14% 25%,transparent 25.5%),linear-gradient(180deg,#172554,#6b21a8 48%,#db2777 72%,#f97316);background-size:auto,48rem 34rem,auto}.page-theme-electric-circuit{background-color:#020617;background-image:repeating-linear-gradient(90deg,transparent 0 48px,rgba(34,211,238,.9) 48px 52px,transparent 52px 96px),repeating-linear-gradient(0deg,transparent 0 68px,rgba(168,85,247,.86) 68px 72px,transparent 72px 124px),radial-gradient(circle at center,#312e81 0,#0f172a 45%,#020617 78%)}.page-theme-lava-flow{background-color:#180503;background-image:radial-gradient(ellipse at 18% 28%,#facc15 0 8%,#f97316 9% 18%,#991b1b 24%,transparent 39%),radial-gradient(ellipse at 76% 64%,#fb923c 0 10%,#dc2626 18%,#7f1d1d 29%,transparent 44%),radial-gradient(ellipse at 48% 92%,#fde047 0 7%,#ea580c 17%,transparent 36%),linear-gradient(135deg,#180503,#450a0a 50%,#1c0704);background-size:42rem 34rem,48rem 39rem,37rem 31rem,auto}.page-theme-deep-space-nebula{background-color:#020617;background-image:radial-gradient(ellipse at 22% 38%,rgba(217,70,239,.92),transparent 34%),radial-gradient(ellipse at 72% 24%,rgba(59,130,246,.9),transparent 38%),radial-gradient(ellipse at 58% 82%,rgba(14,165,233,.72),transparent 36%),radial-gradient(circle,rgba(255,255,255,.9) 0 2px,transparent 3px),linear-gradient(125deg,#020617,#1e1b4b 52%,#3b0764);background-position:center,center,center,17px 31px,center;background-size:42rem 34rem,48rem 38rem,39rem 35rem,173px 173px,auto}.page-theme-holographic-waves{background-color:#164e63;background-image:repeating-linear-gradient(32deg,rgba(255,255,255,.4) 0 14px,transparent 14px 82px),repeating-linear-gradient(-38deg,rgba(216,180,254,.38) 0 18px,transparent 18px 104px),linear-gradient(110deg,#67e8f9,#c4b5fd 32%,#f9a8d4 60%,#86efac)}.page-theme-hazard-stripes{background-color:#111;background-image:repeating-linear-gradient(45deg,#facc15 0 48px,#171717 48px 96px)}.page-theme-mint-mosaic{background-color:#064e3b;background-image:conic-gradient(from 45deg,#a7f3d0 0 25%,#0f766e 0 50%,#fef3c7 0 75%,#164e63 0);background-size:96px 96px}.page-theme-candy-swirl{background-color:#fdf2f8;background-image:repeating-radial-gradient(circle at 28% 34%,#f9a8d4 0 28px,#fef3c7 28px 56px,#93c5fd 56px 84px,#c4b5fd 84px 112px,#f9a8d4 112px 140px)}.inter-instance-overlay-frame{max-width:calc(100vw - .5rem)}.inter-instance-overlay-body{max-height:82vh}@media(min-width:1024px){.inter-instance-overlay-scale{zoom:1.5}.inter-instance-overlay-frame{max-width:calc((100vw - .5rem) / 1.5)}.inter-instance-overlay-body{max-height:54.6667vh}}.chat-composer{container-type:inline-size;display:flex;flex-wrap:wrap;align-items:stretch;gap:.125rem;min-width:0;overflow:hidden}.chat-composer-nickname{flex:1 1 100%;min-width:0;order:1}.chat-composer-input{flex:1 1 0%;min-width:0;order:2}.chat-composer-send{flex:0 0 auto;align-self:stretch;order:3}.chat-composer-tts{display:flex;flex:1 1 100%;align-items:center;gap:.125rem;min-width:0;overflow:hidden;order:4}@container (min-width: 44rem){.chat-composer{flex-wrap:nowrap}.chat-composer-nickname{flex:0 0 7rem;order:1}.chat-composer-input{order:2}.chat-composer-tts{flex:0 1 auto;order:3}.chat-composer-send{order:4}}@keyframes rover-help-flash{0%,49%{opacity:.96}50%,to{opacity:0}}.rover-help-overlay{container-type:size;animation:rover-help-flash 2s steps(1,end) infinite}.mobile-text-entry{font-size:16px;-webkit-text-size-adjust:100%;touch-action:manipulation}.no-touch-select{user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.mobile-touch-control{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;overscroll-behavior:contain}.mobile-drag-control{touch-action:none}.newgen-wheel-drop{pointer-events:none;position:absolute;z-index:20;top:50%;display:flex;width:4rem;height:15rem;align-items:center;justify-content:center;border-radius:.25rem;background:#ef44445c;color:#fff;transform:translateY(-50%)}.newgen-wheel-drop--left{left:1rem}.newgen-wheel-drop--right{right:1rem}.newgen-wheel-drop span{white-space:nowrap;font-size:.9rem;font-weight:700;letter-spacing:.08em;line-height:1;text-shadow:0 1px 2px rgb(0 0 0 / .65)}.newgen-wheel-drop--left span{transform:rotate(-90deg)}.newgen-wheel-drop--right span{transform:rotate(90deg)}.newgen-bumper-path{fill:none;stroke:#ef44447a;stroke-width:26;stroke-linecap:round;vector-effect:non-scaling-stroke}.newgen-bumper-label{fill:#fff;font-family:system-ui,sans-serif;font-size:20px;font-weight:700;letter-spacing:1px;paint-order:stroke;stroke:#000000a6;stroke-width:1.5px}.newgen-ir-proximity-cone{fill:none;stroke-width:6;stroke-linecap:round;vector-effect:non-scaling-stroke;transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.newgen-ir-proximity-cone{transition:none}}.newgen-cliff-path{fill:none;stroke:#f59e0bad;stroke-width:22;stroke-linecap:round;vector-effect:non-scaling-stroke}.newgen-cliff-label{fill:#fff;font-family:system-ui,sans-serif;font-size:15px;font-weight:700;letter-spacing:1px;paint-order:stroke;stroke:#000000a6;stroke-width:1.5px}.newgen-bottom-sensor-hud{pointer-events:none;position:absolute;z-index:20;right:0;bottom:-2.5rem;left:0;width:100%;height:clamp(7rem,18vh,11rem);overflow:visible}@keyframes batteryTickWarn{0%,49%{background-color:#fffffff2}50%,to{background-color:#ef4444f2}}.battery-tick-warn{animation:batteryTickWarn .4s steps(2,end) infinite}@keyframes batteryUrgentFlash{0%,49%{opacity:1}50%,to{opacity:.25}}.battery-urgent-flash{animation:batteryUrgentFlash .4s steps(2,end) infinite}@media(max-width:1023px){.driver-mobile-layout{--mobile-landscape-video-width: min(60vw, 133.333svh)}.driver-mobile-layout:has(>.panel-section){--mobile-landscape-video-width: min(60vw, calc(133.333svh - 3.333rem) )}.driver-mobile-layout .mobile-landscape-driver-grid{grid-template-columns:minmax(0,1fr) minmax(0,var(--mobile-landscape-video-width)) minmax(0,1fr)}html:has(.driver-mobile-layout){scroll-snap-type:y mandatory}.driver-mobile-layout .mobile-top-snap{position:absolute;top:0;left:0;width:1px;height:1px;pointer-events:none;scroll-snap-align:start;scroll-snap-stop:always}.driver-mobile-layout .mobile-content-snap,.driver-mobile-layout .mobile-tabs-snap{scroll-snap-align:start;scroll-snap-stop:always}}@keyframes initial-session-spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes initial-session-spinner-hue{0%{filter:hue-rotate(0deg)}to{filter:hue-rotate(360deg)}}@media(prefers-reduced-motion:no-preference){.initial-session-spinner-rotation{animation:initial-session-spinner-rotate 1.8s linear infinite}.initial-session-spinner-image{animation:initial-session-spinner-hue 2.8s linear infinite}} diff --git a/server/public/assets/index-CsoONCTh.css b/server/public/assets/index-CsoONCTh.css deleted file mode 100644 index f5c662c5..00000000 --- a/server/public/assets/index-CsoONCTh.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.\!panel,.panel{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1));padding:0;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.panel-section{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity, 1));padding:0;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.panel-muted{border-radius:.375rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.surface{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity, 1));padding:.125rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.surface-muted{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity, 1));padding:.125rem;--tw-text-opacity: 1;color:rgb(245 245 245 / var(--tw-text-opacity, 1))}.field-input{border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(82 82 82 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity, 1));padding:.125rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.field-input::-moz-placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.field-input::placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.field-input:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity, 1))}.button-dark{border-radius:.375rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(125 211 252 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1));padding:.125rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.button-dark:hover{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.button-danger{border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1));padding:.125rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.button-danger:hover{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-1{inset:.25rem}.inset-x-0{left:0;right:0}.inset-x-1{left:.25rem;right:.25rem}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.bottom-0\.5{bottom:.125rem}.bottom-1{bottom:.25rem}.bottom-2{bottom:.5rem}.bottom-4{bottom:1rem}.bottom-40{bottom:10rem}.bottom-\[8\.5rem\]{bottom:8.5rem}.bottom-\[calc\(100\%\+0\.125rem\)\]{bottom:calc(100% + .125rem)}.left-0{left:0}.left-0\.5{left:.125rem}.left-1{left:.25rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-4{left:1rem}.left-\[1\.979rem\]{left:1.979rem}.left-\[5\.338rem\]{left:5.338rem}.left-\[61\%\]{left:61%}.left-\[90\%\]{left:90%}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-10{right:2.5rem}.right-2{right:.5rem}.right-\[8\.5rem\]{right:8.5rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-6{top:1.5rem}.top-\[0\.662rem\]{top:.662rem}.top-\[4\.021rem\]{top:4.021rem}.top-\[58\%\]{top:58%}.top-\[61\%\]{top:61%}.top-\[8\.5rem\]{top:8.5rem}.top-\[90\%\]{top:90%}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.z-\[100\]{z-index:100}.z-\[110\]{z-index:110}.z-\[120\]{z-index:120}.z-\[130\]{z-index:130}.z-\[2000\]{z-index:2000}.z-\[25\]{z-index:25}.z-\[55\]{z-index:55}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.order-1{order:1}.order-2{order:2}.col-span-2{grid-column:span 2 / span 2}.col-span-full{grid-column:1 / -1}.row-span-2{grid-row:span 2 / span 2}.m-0{margin:0}.-mx-0\.5{margin-left:-.125rem;margin-right:-.125rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-\[-0\.125rem\]{margin-top:-.125rem;margin-bottom:-.125rem}.-mt-0\.5{margin-top:-.125rem}.mb-0\.5{margin-bottom:.125rem}.mb-2{margin-bottom:.5rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-10{margin-left:2.5rem}.mr-0{margin-right:0}.mr-0\.5{margin-right:.125rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-\[0\.35vh\]{margin-top:.35vh}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[4\/3\]{aspect-ratio:4/3}.aspect-square{aspect-ratio:1 / 1}.aspect-video{aspect-ratio:16 / 9}.\!h-28{height:7rem!important}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-44{height:11rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-52{height:13rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-\[100dvh\]{height:100dvh}.h-\[25\.5rem\]{height:25.5rem}.h-\[2px\]{height:2px}.h-\[3\.5rem\]{height:3.5rem}.h-\[70\%\]{height:70%}.h-\[7rem\]{height:7rem}.h-\[8\.5rem\]{height:8.5rem}.h-\[8vh\]{height:8vh}.h-\[calc\(100dvh-0\.25rem\)\]{height:calc(100dvh - .25rem)}.h-\[calc\(1rem\+0\.25rem\)\]{height:1.25rem}.h-\[min\(100svh\,32rem\)\]{height:min(100svh,32rem)}.h-\[min\(60svh\,24rem\)\]{height:min(60svh,24rem)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-36{max-height:9rem}.max-h-40{max-height:10rem}.max-h-52{max-height:13rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[14rem\]{max-height:14rem}.max-h-\[36rem\]{max-height:36rem}.max-h-\[70vh\]{max-height:70vh}.max-h-\[72vh\]{max-height:72vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-12{min-height:3rem}.min-h-14{min-height:3.5rem}.min-h-5{min-height:1.25rem}.min-h-56{min-height:14rem}.min-h-7{min-height:1.75rem}.min-h-8{min-height:2rem}.min-h-9{min-height:2.25rem}.min-h-\[100dvh\]{min-height:100dvh}.min-h-\[10rem\]{min-height:10rem}.min-h-\[12rem\]{min-height:12rem}.min-h-\[14rem\]{min-height:14rem}.min-h-\[16rem\]{min-height:16rem}.min-h-\[18rem\]{min-height:18rem}.min-h-\[24rem\]{min-height:24rem}.min-h-\[3\.5rem\]{min-height:3.5rem}.min-h-\[4\.5rem\]{min-height:4.5rem}.min-h-\[4rem\]{min-height:4rem}.min-h-\[7rem\]{min-height:7rem}.min-h-\[calc\(100dvh-0\.25rem\)\]{min-height:calc(100dvh - .25rem)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/5{width:60%}.w-4{width:1rem}.w-4\/5{width:80%}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[100vw\]{width:100vw}.w-\[12\.5rem\]{width:12.5rem}.w-\[12rem\]{width:12rem}.w-\[14rem\]{width:14rem}.w-\[20\.5rem\]{width:20.5rem}.w-\[22rem\]{width:22rem}.w-\[25\.5rem\]{width:25.5rem}.w-\[2px\]{width:2px}.w-\[3\.25rem\]{width:3.25rem}.w-\[4\.5rem\]{width:4.5rem}.w-\[45\%\]{width:45%}.w-\[5\.5rem\]{width:5.5rem}.w-\[55\%\]{width:55%}.w-\[5rem\]{width:5rem}.w-\[8\.5rem\]{width:8.5rem}.w-\[9rem\]{width:9rem}.w-\[calc\(1rem\+0\.25rem\)\]{width:1.25rem}.w-\[min\(20rem\,calc\(100vw-1rem\)\)\]{width:min(20rem,calc(100vw - 1rem))}.w-\[min\(30rem\,80\%\)\]{width:min(30rem,80%)}.w-\[min\(32rem\,80\%\)\]{width:min(32rem,80%)}.w-\[min\(32rem\,calc\(80vw-1\.25rem\)\)\]{width:min(32rem,calc(80vw - 1.25rem))}.w-\[min\(34vw\,34rem\)\]{width:min(34vw,34rem)}.w-\[min\(36rem\,82\%\)\]{width:min(36rem,82%)}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0px}.min-w-16{min-width:4rem}.min-w-20{min-width:5rem}.min-w-28{min-width:7rem}.min-w-56{min-width:14rem}.min-w-\[0\]{min-width:0}.min-w-\[3\.7rem\]{min-width:3.7rem}.min-w-\[5\.5rem\]{min-width:5.5rem}.min-w-\[calc\(50\%_-_0\.125rem\)\]{min-width:calc(50% - .125rem)}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-40{max-width:10rem}.max-w-4xl{max-width:56rem}.max-w-64{max-width:16rem}.max-w-7xl{max-width:80rem}.max-w-\[100rem\]{max-width:100rem}.max-w-\[120rem\]{max-width:120rem}.max-w-\[24rem\]{max-width:24rem}.max-w-\[40vw\]{max-width:40vw}.max-w-\[55\%\]{max-width:55%}.max-w-\[70\%\]{max-width:70%}.max-w-\[70vw\]{max-width:70vw}.max-w-\[80vw\]{max-width:80vw}.max-w-\[92\%\]{max-width:92%}.max-w-\[92vw\]{max-width:92vw}.max-w-\[94\%\]{max-width:94%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-\[0\.72\]{flex:.72}.flex-\[1\.1\]{flex:1.1}.flex-\[1\.22\]{flex:1.22}.flex-\[1\.28\]{flex:1.28}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-\[0\.75\]{flex-grow:.75}.grow-\[0\.9\]{flex-grow:.9}.grow-\[1\]{flex-grow:1}.basis-0{flex-basis:0px}.origin-center{transform-origin:center}.origin-top-left{transform-origin:top left}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-45{--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-\[135deg\]{--tw-rotate: -135deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[135deg\]{--tw-rotate: 135deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-disc{list-style-type:disc}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[1\.5rem_minmax\(0\,1fr\)_3rem\]{grid-template-columns:1.5rem minmax(0,1fr) 3rem}.grid-cols-\[minmax\(0\,1\.2fr\)_repeat\(4\,minmax\(0\,1fr\)\)\]{grid-template-columns:minmax(0,1.2fr) repeat(4,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1\.35fr\)_minmax\(0\,0\.95fr\)\]{grid-template-columns:minmax(0,1.35fr) minmax(0,.95fr)}.grid-cols-\[minmax\(0\,1\.3fr\)_minmax\(0\,0\.22fr\)\]{grid-template-columns:minmax(0,1.3fr) minmax(0,.22fr)}.grid-cols-\[minmax\(0\,1\.45fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1.45fr) minmax(0,.85fr)}.grid-cols-\[minmax\(0\,1\.6fr\)_minmax\(16rem\,0\.7fr\)\]{grid-template-columns:minmax(0,1.6fr) minmax(16rem,.7fr)}.grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr)}.grid-cols-\[minmax\(0\,1fr\)_13rem\]{grid-template-columns:minmax(0,1fr) 13rem}.grid-cols-\[minmax\(0\,1fr\)_14rem\]{grid-template-columns:minmax(0,1fr) 14rem}.grid-cols-\[minmax\(0\,1fr\)_2\.5rem\]{grid-template-columns:minmax(0,1fr) 2.5rem}.grid-cols-\[minmax\(0\,1fr\)_20rem\]{grid-template-columns:minmax(0,1fr) 20rem}.grid-cols-\[minmax\(0\,1fr\)_2rem\]{grid-template-columns:minmax(0,1fr) 2rem}.grid-cols-\[minmax\(0\,1fr\)_4\.75rem\]{grid-template-columns:minmax(0,1fr) 4.75rem}.grid-cols-\[minmax\(0\,1fr\)_8rem\]{grid-template-columns:minmax(0,1fr) 8rem}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,0\.7fr\)_minmax\(0\,1\.9fr\)_minmax\(0\,0\.7fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.7fr) minmax(0,1.9fr) minmax(0,.7fr)}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.grid-cols-\[minmax\(17rem\,1fr\)_minmax\(0\,133\.333vh\)_minmax\(17rem\,1fr\)\]{grid-template-columns:minmax(17rem,1fr) minmax(0,133.333vh) minmax(17rem,1fr)}.grid-cols-\[repeat\(auto-fit\,minmax\(min\(22\.5rem\,100\%\)\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(min(22.5rem,100%),1fr))}.grid-cols-\[repeat\(auto-fit\,minmax\(min\(9rem\,100\%\)\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(min(9rem,100%),1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.grid-rows-\[auto_1fr\]{grid-template-rows:auto 1fr}.grid-rows-\[auto_auto_1fr\]{grid-template-rows:auto auto 1fr}.grid-rows-\[auto_auto_1fr_auto\]{grid-template-rows:auto auto 1fr auto}.grid-rows-\[auto_auto_auto_1fr\]{grid-template-rows:auto auto auto 1fr}.grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.grid-rows-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-rows:auto minmax(0,1fr) auto}.grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.grid-rows-\[minmax\(0\,1fr\)_auto\]{grid-template-rows:minmax(0,1fr) auto}.grid-rows-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)_minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr) minmax(0,1fr) minmax(0,1fr)}.grid-rows-\[minmax\(0\,1fr\)_minmax\(7rem\,0\.22fr\)\]{grid-template-rows:minmax(0,1fr) minmax(7rem,.22fr)}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-stretch{justify-content:stretch}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\[0\.4vh\]{gap:.4vh}.gap-\[0\.55vh\]{gap:.55vh}.gap-\[0\.8vw\]{gap:.8vw}.gap-\[1vh\]{gap:1vh}.gap-\[1vw\]{gap:1vw}.gap-\[3vh\]{gap:3vh}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-y-0\.5{row-gap:.125rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overscroll-contain{overscroll-behavior:contain}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-bl-\[4\.25rem\]{border-bottom-left-radius:4.25rem}.rounded-bl-xl{border-bottom-left-radius:.75rem}.rounded-br-\[12\.75rem\]{border-bottom-right-radius:12.75rem}.rounded-br-\[4\.25rem\]{border-bottom-right-radius:4.25rem}.rounded-br-xl{border-bottom-right-radius:.75rem}.rounded-tl-\[4\.25rem\]{border-top-left-radius:4.25rem}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-tr-\[4\.25rem\]{border-top-right-radius:4.25rem}.rounded-tr-xl{border-top-right-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-\[clamp\(0\.2rem\,1\.2cqw\,1rem\)\]{border-width:clamp(.2rem,1.2cqw,1rem)}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-200\/30{border-color:#fde68a4d}.border-amber-200\/70{border-color:#fde68ab3}.border-amber-200\/90{border-color:#fde68ae6}.border-amber-300\/60{border-color:#fcd34d99}.border-amber-300\/70{border-color:#fcd34db3}.border-amber-300\/80{border-color:#fcd34dcc}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-400\/30{border-color:#fbbf244d}.border-amber-400\/60{border-color:#fbbf2499}.border-amber-500\/50{border-color:#f59e0b80}.border-amber-500\/60{border-color:#f59e0b99}.border-amber-600\/60{border-color:#d9770699}.border-amber-700\/60{border-color:#b4530999}.border-blue-600{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-cyan-200\/90{border-color:#a5f3fce6}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-300\/60{border-color:#67e8f999}.border-cyan-300\/70{border-color:#67e8f9b3}.border-cyan-300\/80{border-color:#67e8f9cc}.border-cyan-500\/40{border-color:#06b6d466}.border-emerald-100\/80{border-color:#d1fae5cc}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-emerald-200\/70{border-color:#a7f3d0b3}.border-emerald-200\/90{border-color:#a7f3d0e6}.border-emerald-300{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.border-emerald-300\/70{border-color:#6ee7b7b3}.border-emerald-400\/60{border-color:#34d39999}.border-emerald-500\/40{border-color:#10b98166}.border-emerald-500\/60{border-color:#10b98199}.border-emerald-700\/60{border-color:#04785799}.border-emerald-700\/70{border-color:#047857b3}.border-emerald-950{--tw-border-opacity: 1;border-color:rgb(2 44 34 / var(--tw-border-opacity, 1))}.border-fuchsia-200{--tw-border-opacity: 1;border-color:rgb(245 208 254 / var(--tw-border-opacity, 1))}.border-fuchsia-300\/70{border-color:#f0abfcb3}.border-green-400{--tw-border-opacity: 1;border-color:rgb(74 222 128 / var(--tw-border-opacity, 1))}.border-indigo-200\/70{border-color:#c7d2feb3}.border-indigo-200\/95{border-color:#c7d2fef2}.border-indigo-300\/70{border-color:#a5b4fcb3}.border-indigo-400\/30{border-color:#818cf84d}.border-indigo-700{--tw-border-opacity: 1;border-color:rgb(67 56 202 / var(--tw-border-opacity, 1))}.border-indigo-700\/60{border-color:#4338ca99}.border-neutral-500{--tw-border-opacity: 1;border-color:rgb(115 115 115 / var(--tw-border-opacity, 1))}.border-neutral-500\/50{border-color:#73737380}.border-neutral-500\/60{border-color:#73737399}.border-neutral-500\/70{border-color:#737373b3}.border-neutral-600{--tw-border-opacity: 1;border-color:rgb(82 82 82 / var(--tw-border-opacity, 1))}.border-neutral-700{--tw-border-opacity: 1;border-color:rgb(64 64 64 / var(--tw-border-opacity, 1))}.border-neutral-700\/70{border-color:#404040b3}.border-pink-200{--tw-border-opacity: 1;border-color:rgb(251 207 232 / var(--tw-border-opacity, 1))}.border-red-100{--tw-border-opacity: 1;border-color:rgb(254 226 226 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300\/80{border-color:#fca5a5cc}.border-red-300\/90{border-color:#fca5a5e6}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-red-400\/60{border-color:#f8717199}.border-red-500\/60{border-color:#ef444499}.border-rose-300{--tw-border-opacity: 1;border-color:rgb(253 164 175 / var(--tw-border-opacity, 1))}.border-sky-200{--tw-border-opacity: 1;border-color:rgb(186 230 253 / var(--tw-border-opacity, 1))}.border-sky-200\/70{border-color:#bae6fdb3}.border-sky-300{--tw-border-opacity: 1;border-color:rgb(125 211 252 / var(--tw-border-opacity, 1))}.border-sky-300\/70{border-color:#7dd3fcb3}.border-sky-400\/50{border-color:#38bdf880}.border-sky-400\/70{border-color:#38bdf8b3}.border-slate-200\/30{border-color:#e2e8f04d}.border-slate-400{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.border-slate-400\/60{border-color:#94a3b899}.border-slate-500\/70{border-color:#64748bb3}.border-slate-600{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.border-slate-600\/40{border-color:#47556966}.border-slate-600\/60{border-color:#47556999}.border-slate-600\/70{border-color:#475569b3}.border-slate-600\/80{border-color:#475569cc}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-700\/60{border-color:#33415599}.border-slate-700\/70{border-color:#334155b3}.border-slate-700\/80{border-color:#334155cc}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/60{border-color:#1e293b99}.border-slate-800\/80{border-color:#1e293bcc}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-white\/10{border-color:#ffffff1a}.border-white\/40{border-color:#fff6}.border-white\/80{border-color:#fffc}.border-l-neutral-600{--tw-border-opacity: 1;border-left-color:rgb(82 82 82 / var(--tw-border-opacity, 1))}.\!bg-black{--tw-bg-opacity: 1 !important;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))!important}.bg-amber-100\/95{background-color:#fef3c7f2}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-400\/80{background-color:#fbbf24cc}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/30{background-color:#f59e0b4d}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-amber-600\/70{background-color:#d97706b3}.bg-amber-600\/80{background-color:#d97706cc}.bg-amber-700\/20{background-color:#b4530933}.bg-amber-700\/30{background-color:#b453094d}.bg-amber-700\/35{background-color:#b4530959}.bg-amber-700\/50{background-color:#b4530980}.bg-amber-700\/80{background-color:#b45309cc}.bg-amber-800{--tw-bg-opacity: 1;background-color:rgb(146 64 14 / var(--tw-bg-opacity, 1))}.bg-amber-900{--tw-bg-opacity: 1;background-color:rgb(120 53 15 / var(--tw-bg-opacity, 1))}.bg-amber-900\/40{background-color:#78350f66}.bg-amber-900\/60{background-color:#78350f99}.bg-amber-900\/90{background-color:#78350fe6}.bg-amber-950{--tw-bg-opacity: 1;background-color:rgb(69 26 3 / var(--tw-bg-opacity, 1))}.bg-amber-950\/35{background-color:#451a0359}.bg-amber-950\/40{background-color:#451a0366}.bg-amber-950\/70{background-color:#451a03b3}.bg-amber-950\/75{background-color:#451a03bf}.bg-amber-950\/90{background-color:#451a03e6}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/20{background-color:#0003}.bg-black\/30{background-color:#0000004d}.bg-black\/40{background-color:#0006}.bg-black\/45{background-color:#00000073}.bg-black\/50{background-color:#00000080}.bg-black\/55{background-color:#0000008c}.bg-black\/60{background-color:#0009}.bg-black\/70{background-color:#000000b3}.bg-black\/75{background-color:#000000bf}.bg-black\/80{background-color:#000c}.bg-black\/90{background-color:#000000e6}.bg-black\/95{background-color:#000000f2}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-300\/20{background-color:#67e8f933}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))}.bg-cyan-500\/80{background-color:#06b6d4cc}.bg-cyan-900{--tw-bg-opacity: 1;background-color:rgb(22 78 99 / var(--tw-bg-opacity, 1))}.bg-cyan-900\/45{background-color:#164e6373}.bg-cyan-900\/90{background-color:#164e63e6}.bg-cyan-950\/60{background-color:#08334499}.bg-emerald-200{--tw-bg-opacity: 1;background-color:rgb(167 243 208 / var(--tw-bg-opacity, 1))}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/45{background-color:#10b98173}.bg-emerald-500\/80{background-color:#10b981cc}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-emerald-600\/70{background-color:#059669b3}.bg-emerald-600\/80{background-color:#059669cc}.bg-emerald-700{--tw-bg-opacity: 1;background-color:rgb(4 120 87 / var(--tw-bg-opacity, 1))}.bg-emerald-700\/20{background-color:#04785733}.bg-emerald-700\/60{background-color:#04785799}.bg-emerald-700\/70{background-color:#047857b3}.bg-emerald-800{--tw-bg-opacity: 1;background-color:rgb(6 95 70 / var(--tw-bg-opacity, 1))}.bg-emerald-900{--tw-bg-opacity: 1;background-color:rgb(6 78 59 / var(--tw-bg-opacity, 1))}.bg-emerald-900\/60{background-color:#064e3b99}.bg-emerald-900\/90{background-color:#064e3be6}.bg-emerald-950{--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.bg-emerald-950\/40{background-color:#022c2266}.bg-emerald-950\/50{background-color:#022c2280}.bg-emerald-950\/90{background-color:#022c22e6}.bg-fuchsia-200{--tw-bg-opacity: 1;background-color:rgb(245 208 254 / var(--tw-bg-opacity, 1))}.bg-fuchsia-600{--tw-bg-opacity: 1;background-color:rgb(192 38 211 / var(--tw-bg-opacity, 1))}.bg-fuchsia-700{--tw-bg-opacity: 1;background-color:rgb(162 28 175 / var(--tw-bg-opacity, 1))}.bg-fuchsia-800{--tw-bg-opacity: 1;background-color:rgb(134 25 143 / var(--tw-bg-opacity, 1))}.bg-fuchsia-900{--tw-bg-opacity: 1;background-color:rgb(112 26 117 / var(--tw-bg-opacity, 1))}.bg-fuchsia-900\/45{background-color:#701a7573}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-indigo-600\/70{background-color:#4f46e5b3}.bg-indigo-900{--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.bg-indigo-900\/60{background-color:#312e8199}.bg-indigo-950{--tw-bg-opacity: 1;background-color:rgb(30 27 75 / var(--tw-bg-opacity, 1))}.bg-indigo-950\/60{background-color:#1e1b4b99}.bg-indigo-950\/90{background-color:#1e1b4be6}.bg-neutral-600{--tw-bg-opacity: 1;background-color:rgb(82 82 82 / var(--tw-bg-opacity, 1))}.bg-neutral-600\/80{background-color:#525252cc}.bg-neutral-700{--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity, 1))}.bg-neutral-700\/90{background-color:#404040e6}.bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity, 1))}.bg-neutral-800\/80{background-color:#262626cc}.bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity, 1))}.bg-neutral-900\/100{background-color:#171717}.bg-neutral-900\/60{background-color:#17171799}.bg-neutral-900\/70{background-color:#171717b3}.bg-neutral-900\/95{background-color:#171717f2}.bg-neutral-950{--tw-bg-opacity: 1;background-color:rgb(10 10 10 / var(--tw-bg-opacity, 1))}.bg-neutral-950\/90{background-color:#0a0a0ae6}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/45{background-color:#ef444473}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-600\/70{background-color:#dc2626b3}.bg-red-700{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.bg-red-700\/20{background-color:#b91c1c33}.bg-red-700\/60{background-color:#b91c1c99}.bg-red-700\/80{background-color:#b91c1ccc}.bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity, 1))}.bg-red-900\/35{background-color:#7f1d1d59}.bg-red-900\/40{background-color:#7f1d1d66}.bg-red-900\/45{background-color:#7f1d1d73}.bg-red-900\/80{background-color:#7f1d1dcc}.bg-red-950{--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.bg-red-950\/40{background-color:#450a0a66}.bg-red-950\/70{background-color:#450a0ab3}.bg-red-950\/90{background-color:#450a0ae6}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-600{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-sky-600{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.bg-sky-700{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.bg-sky-700\/20{background-color:#0369a133}.bg-sky-700\/70{background-color:#0369a1b3}.bg-sky-900{--tw-bg-opacity: 1;background-color:rgb(12 74 110 / var(--tw-bg-opacity, 1))}.bg-sky-950{--tw-bg-opacity: 1;background-color:rgb(8 47 73 / var(--tw-bg-opacity, 1))}.bg-slate-300{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.bg-slate-600\/70{background-color:#475569b3}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-slate-700\/30{background-color:#3341554d}.bg-slate-700\/60{background-color:#33415599}.bg-slate-700\/70{background-color:#334155b3}.bg-slate-700\/80{background-color:#334155cc}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/60{background-color:#1e293b99}.bg-slate-800\/70{background-color:#1e293bb3}.bg-slate-800\/80{background-color:#1e293bcc}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/35{background-color:#0f172a59}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/70{background-color:#0f172ab3}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/35{background-color:#02061759}.bg-slate-950\/80{background-color:#020617cc}.bg-slate-950\/85{background-color:#020617d9}.bg-slate-950\/90{background-color:#020617e6}.bg-slate-950\/95{background-color:#020617f2}.bg-transparent{background-color:transparent}.bg-violet-400{--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-zinc-900{--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.bg-zinc-900\/90{background-color:#18181be6}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-lime-800{--tw-gradient-from: #3f6212 var(--tw-gradient-from-position);--tw-gradient-to: rgb(63 98 18 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-neutral-800{--tw-gradient-from: #262626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(38 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-neutral-700{--tw-gradient-to: rgb(64 64 64 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #404040 var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-neutral-600{--tw-gradient-to: #525252 var(--tw-gradient-to-position)}.to-teal-800{--tw-gradient-to: #115e59 var(--tw-gradient-to-position)}.bg-cover{background-size:cover}.bg-center{background-position:center}.bg-no-repeat{background-repeat:no-repeat}.fill-slate-100{fill:#f1f5f9}.fill-slate-200{fill:#e2e8f0}.fill-slate-400{fill:#94a3b8}.fill-white{fill:#fff}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\[0\.85vw\]{padding:.85vw}.p-\[clamp\(0\.2rem\,2cqw\,1\.5rem\)\]{padding:clamp(.2rem,2cqw,1.5rem)}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[1\.2vw\]{padding-left:1.2vw;padding-right:1.2vw}.px-\[1\.6vw\]{padding-left:1.6vw;padding-right:1.6vw}.px-\[1vw\]{padding-left:1vw;padding-right:1vw}.px-\[3vw\]{padding-left:3vw;padding-right:3vw}.px-\[4vw\]{padding-left:4vw;padding-right:4vw}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-7{padding-top:1.75rem;padding-bottom:1.75rem}.py-\[0\.55vh\]{padding-top:.55vh;padding-bottom:.55vh}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-\[2\.5vh\]{padding-top:2.5vh;padding-bottom:2.5vh}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.py-\[4vh\]{padding-top:4vh;padding-bottom:4vh}.pb-0{padding-bottom:0}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-4{padding-left:1rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.text-\[0\.45rem\]{font-size:.45rem}.text-\[0\.48rem\]{font-size:.48rem}.text-\[0\.52rem\]{font-size:.52rem}.text-\[0\.55em\]{font-size:.55em}.text-\[0\.55rem\]{font-size:.55rem}.text-\[0\.58rem\]{font-size:.58rem}.text-\[0\.5rem\]{font-size:.5rem}.text-\[0\.62rem\]{font-size:.62rem}.text-\[0\.65em\]{font-size:.65em}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.6rem\]{font-size:.6rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[0\.75rem\]{font-size:.75rem}.text-\[0\.78rem\]{font-size:.78rem}.text-\[0\.7rem\]{font-size:.7rem}.text-\[0\.82rem\]{font-size:.82rem}.text-\[0\.85rem\]{font-size:.85rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[1\.1rem\]{font-size:1.1rem}.text-\[1\.5rem\]{font-size:1.5rem}.text-\[1\.75rem\]{font-size:1.75rem}.text-\[17vw\]{font-size:17vw}.text-\[1rem\]{font-size:1rem}.text-\[2\.5vw\]{font-size:2.5vw}.text-\[2\.6vw\]{font-size:2.6vw}.text-\[3\.1vw\]{font-size:3.1vw}.text-\[3\.375rem\]{font-size:3.375rem}.text-\[3vw\]{font-size:3vw}.text-\[4vw\]{font-size:4vw}.text-\[6vw\]{font-size:6vw}.text-\[7vw\]{font-size:7vw}.text-\[clamp\(1\.25rem\,2\.5vh\,2\.6rem\)\]{font-size:clamp(1.25rem,2.5vh,2.6rem)}.text-\[clamp\(1\.2rem\,2\.9vh\,3rem\)\]{font-size:clamp(1.2rem,2.9vh,3rem)}.text-\[clamp\(2\.1rem\,5\.1vh\,5\.6rem\)\]{font-size:clamp(2.1rem,5.1vh,5.6rem)}.text-\[clamp\(2\.5rem\,5\.3vh\,5\.8rem\)\]{font-size:clamp(2.5rem,5.3vh,5.8rem)}.text-\[clamp\(2\.5rem\,7vh\,7rem\)\]{font-size:clamp(2.5rem,7vh,7rem)}.text-\[clamp\(2\.5rem\,8vh\,8rem\)\]{font-size:clamp(2.5rem,8vh,8rem)}.text-\[clamp\(2rem\,5vh\,5\.2rem\)\]{font-size:clamp(2rem,5vh,5.2rem)}.text-\[clamp\(3\.2rem\,11vh\,11rem\)\]{font-size:clamp(3.2rem,11vh,11rem)}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-\[0\.95\]{line-height:.95}.leading-none{line-height:1}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-normal{letter-spacing:0em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-amber-100{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.text-amber-200\/80{color:#fde68acc}.text-amber-200\/85{color:#fde68ad9}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-50{--tw-text-opacity: 1;color:rgb(255 251 235 / var(--tw-text-opacity, 1))}.text-amber-50\/90{color:#fffbebe6}.text-amber-950{--tw-text-opacity: 1;color:rgb(69 26 3 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-cyan-100{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.text-cyan-200{--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-50{--tw-text-opacity: 1;color:rgb(236 254 255 / var(--tw-text-opacity, 1))}.text-cyan-950{--tw-text-opacity: 1;color:rgb(8 51 68 / var(--tw-text-opacity, 1))}.text-emerald-100{--tw-text-opacity: 1;color:rgb(209 250 229 / var(--tw-text-opacity, 1))}.text-emerald-100\/80{color:#d1fae5cc}.text-emerald-200{--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-50{--tw-text-opacity: 1;color:rgb(236 253 245 / var(--tw-text-opacity, 1))}.text-emerald-50\/90{color:#ecfdf5e6}.text-emerald-950{--tw-text-opacity: 1;color:rgb(2 44 34 / var(--tw-text-opacity, 1))}.text-fuchsia-50{--tw-text-opacity: 1;color:rgb(253 244 255 / var(--tw-text-opacity, 1))}.text-fuchsia-900{--tw-text-opacity: 1;color:rgb(112 26 117 / var(--tw-text-opacity, 1))}.text-indigo-200{--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.text-indigo-50{--tw-text-opacity: 1;color:rgb(238 242 255 / var(--tw-text-opacity, 1))}.text-indigo-50\/90{color:#eef2ffe6}.text-lime-300{--tw-text-opacity: 1;color:rgb(190 242 100 / var(--tw-text-opacity, 1))}.text-lime-400{--tw-text-opacity: 1;color:rgb(163 230 53 / var(--tw-text-opacity, 1))}.text-neutral-100{--tw-text-opacity: 1;color:rgb(245 245 245 / var(--tw-text-opacity, 1))}.text-neutral-200{--tw-text-opacity: 1;color:rgb(229 229 229 / var(--tw-text-opacity, 1))}.text-neutral-300{--tw-text-opacity: 1;color:rgb(212 212 212 / var(--tw-text-opacity, 1))}.text-neutral-400{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.text-neutral-50{--tw-text-opacity: 1;color:rgb(250 250 250 / var(--tw-text-opacity, 1))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.text-red-100{--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.text-red-100\/90{color:#fee2e2e6}.text-red-100\/95{color:#fee2e2f2}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-50{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-rose-200{--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-200{--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.text-sky-300{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.text-sky-50{--tw-text-opacity: 1;color:rgb(240 249 255 / var(--tw-text-opacity, 1))}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-400\/60{color:#94a3b899}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/75{color:#ffffffbf}.text-white\/90{color:#ffffffe6}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.accent-amber-500{accent-color:#f59e0b}.accent-cyan-500{accent-color:#06b6d4}.accent-emerald-400{accent-color:#34d399}.accent-emerald-500{accent-color:#10b981}.accent-red-500{accent-color:#ef4444}.accent-sky-500{accent-color:#0ea5e9}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_1px_0_rgba\(255\,255\,255\,0\.05\)_inset\,0_10px_24px_rgba\(0\,0\,0\,0\.28\)\]{--tw-shadow: 0 1px 0 rgba(255,255,255,.05) inset,0 10px 24px rgba(0,0,0,.28);--tw-shadow-colored: inset 0 1px 0 var(--tw-shadow-color), 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/40{--tw-shadow-color: rgb(0 0 0 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-cyan-950\/50{--tw-shadow-color: rgb(8 51 68 / .5);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-8{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-amber-200\/60{--tw-ring-color: rgb(253 230 138 / .6)}.ring-amber-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(252 211 77 / var(--tw-ring-opacity, 1))}.ring-amber-300\/80{--tw-ring-color: rgb(252 211 77 / .8)}.ring-cyan-200\/90{--tw-ring-color: rgb(165 243 252 / .9)}.ring-emerald-300\/50{--tw-ring-color: rgb(110 231 183 / .5)}.ring-emerald-300\/70{--tw-ring-color: rgb(110 231 183 / .7)}.ring-emerald-300\/80{--tw-ring-color: rgb(110 231 183 / .8)}.ring-indigo-300\/70{--tw-ring-color: rgb(165 180 252 / .7)}.ring-red-300\/60{--tw-ring-color: rgb(252 165 165 / .6)}.ring-red-300\/80{--tw-ring-color: rgb(252 165 165 / .8)}.ring-red-500\/70{--tw-ring-color: rgb(239 68 68 / .7)}.ring-red-500\/80{--tw-ring-color: rgb(239 68 68 / .8)}.ring-red-500\/90{--tw-ring-color: rgb(239 68 68 / .9)}.ring-sky-300\/50{--tw-ring-color: rgb(125 211 252 / .5)}.ring-sky-400\/80{--tw-ring-color: rgb(56 189 248 / .8)}.ring-slate-400\/40{--tw-ring-color: rgb(148 163 184 / .4)}.ring-slate-400\/70{--tw-ring-color: rgb(148 163 184 / .7)}.ring-slate-600{--tw-ring-opacity: 1;--tw-ring-color: rgb(71 85 105 / var(--tw-ring-opacity, 1))}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.sepia{--tw-sepia: sepia(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\,border-radius\,background-color\]{transition-property:width,height,border-radius,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,height\]{transition-property:width,height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\,opacity\]{transition-property:width,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\@container{container-type:inline-size}.\[clip-path\:polygon\(0_0\,0_100\%\,100\%_100\%\)\]{clip-path:polygon(0 0,0 100%,100% 100%)}.\[clip-path\:polygon\(0_0\,100\%_0\,0_100\%\)\]{clip-path:polygon(0 0,100% 0,0 100%)}.\[clip-path\:polygon\(0_0\,100\%_0\,100\%_100\%\)\]{clip-path:polygon(0 0,100% 0,100% 100%)}.\[clip-path\:polygon\(100\%_0\,0_100\%\,100\%_100\%\)\]{clip-path:polygon(100% 0,0 100%,100% 100%)}.\[container-type\:normal\]{container-type:normal}.\[writing-mode\:vertical-rl\]{writing-mode:vertical-rl}:root{font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}body{margin:0;min-height:100vh;--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}html,body,*{scrollbar-width:none}html::-webkit-scrollbar,body::-webkit-scrollbar,*::-webkit-scrollbar{display:none;width:0;height:0}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-width:0px}.hover\:-translate-y-0\.5:hover{--tw-translate-y: -.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-green-100:hover{--tw-border-opacity: 1;border-color:rgb(220 252 231 / var(--tw-border-opacity, 1))}.hover\:border-rose-500:hover{--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.hover\:border-sky-500:hover{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.hover\:border-white:hover{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.hover\:border-white\/60:hover{border-color:#fff9}.hover\:bg-amber-400:hover{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-600:hover{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-800:hover{--tw-bg-opacity: 1;background-color:rgb(146 64 14 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-900:hover{--tw-bg-opacity: 1;background-color:rgb(120 53 15 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-900\/95:hover{background-color:#78350ff2}.hover\:bg-black:hover{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.hover\:bg-black\/80:hover{background-color:#000c}.hover\:bg-cyan-400:hover{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-800:hover{--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-400:hover{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-500:hover{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-700:hover{--tw-bg-opacity: 1;background-color:rgb(4 120 87 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-900\/95:hover{background-color:#064e3bf2}.hover\:bg-fuchsia-500:hover{--tw-bg-opacity: 1;background-color:rgb(217 70 239 / var(--tw-bg-opacity, 1))}.hover\:bg-green-400:hover{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-500:hover{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-800:hover{--tw-bg-opacity: 1;background-color:rgb(55 48 163 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-900:hover{--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.hover\:bg-neutral-700:hover{--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity, 1))}.hover\:bg-pink-400:hover{--tw-bg-opacity: 1;background-color:rgb(244 114 182 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-900:hover{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-500:hover{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.hover\:bg-sky-500:hover{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-600:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700\/70:hover{background-color:#334155b3}.hover\:bg-slate-900:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-zinc-900:hover{--tw-bg-opacity: 1;background-color:rgb(24 24 27 / var(--tw-bg-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:bg-white\/10:focus{background-color:#ffffff1a}.focus\:text-white:focus{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-emerald-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(16 185 129 / var(--tw-ring-opacity, 1))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-slate-500:focus-visible{outline-color:#64748b}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-4:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-amber-200:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(253 230 138 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-amber-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(252 211 77 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-cyan-200:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(165 243 252 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-cyan-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-emerald-200:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(167 243 208 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-emerald-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(110 231 183 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-indigo-200:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-indigo-300:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(165 180 252 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-red-200:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(254 202 202 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-sky-200:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(186 230 253 / var(--tw-ring-opacity, 1))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:scale-\[0\.99\]:active{--tw-scale-x: .99;--tw-scale-y: .99;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.active\:brightness-125:active{--tw-brightness: brightness(1.25);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-45:disabled{opacity:.45}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}.disabled\:opacity-75:disabled{opacity:.75}@container (min-width: 20rem){.\@xs\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 24rem){.\@sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\@sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\@sm\:grid-cols-\[minmax\(0\,0\.8fr\)_minmax\(0\,1\.2fr\)\]{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr)}.\@sm\:grid-cols-\[minmax\(0\,1\.4fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr)}.\@sm\:flex-row{flex-direction:row}.\@sm\:flex-col{flex-direction:column}.\@sm\:gap-0{gap:0px}.\@sm\:overflow-hidden{overflow:hidden}.\@sm\:whitespace-nowrap{white-space:nowrap}.\@sm\:border-b-0{border-bottom-width:0px}.\@sm\:border-r{border-right-width:1px}.\@sm\:py-0{padding-top:0;padding-bottom:0}.\@sm\:text-\[0\.55em\]{font-size:.55em}}@container (min-width: 28rem){.\@md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\@\[28rem\]\:col-span-2{grid-column:span 2 / span 2}.\@\[28rem\]\:grid{display:grid}.\@\[28rem\]\:h-32{height:8rem}.\@\[28rem\]\:min-w-0{min-width:0px}.\@\[28rem\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@\[28rem\]\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.\@\[28rem\]\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.\@\[28rem\]\:grid-cols-\[minmax\(0\,1\.15fr\)_minmax\(0\,0\.85fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr) minmax(0,.85fr)}.\@\[28rem\]\:grid-cols-\[minmax\(0\,1fr\)_9rem_10rem\]{grid-template-columns:minmax(0,1fr) 9rem 10rem}.\@\[28rem\]\:grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.\@\[28rem\]\:text-right{text-align:right}}@container (min-width: 32rem){.\@lg\:w-auto{width:auto}.\@lg\:min-w-24{min-width:6rem}.\@lg\:flex-row{flex-direction:row}.\@lg\:items-center{align-items:center}.\@lg\:justify-between{justify-content:space-between}.\@\[32rem\]\:col-span-2{grid-column:span 2 / span 2}.\@\[32rem\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@\[32rem\]\:grid-cols-\[minmax\(0\,1\.25fr\)_minmax\(0\,0\.9fr\)\]{grid-template-columns:minmax(0,1.25fr) minmax(0,.9fr)}}@media(prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media(max-width:520px){.max-\[520px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[520px\]\:justify-start{justify-content:flex-start}}@media(max-width:420px){.max-\[420px\]\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-\[420px\]\:justify-start{justify-content:flex-start}}@media(min-width:640px){.sm\:block{display:block}.sm\:min-h-\[18rem\]{min-height:18rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}}@media(min-width:768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:h-full{height:100%}.md\:h-screen{height:100vh}.md\:min-h-0{min-height:0px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[0\.9fr_1fr_1\.3fr\]{grid-template-columns:.9fr 1fr 1.3fr}.md\:grid-cols-\[10rem_10rem_1fr\]{grid-template-columns:10rem 10rem 1fr}.md\:grid-cols-\[5rem_1fr_1fr_1fr_auto\]{grid-template-columns:5rem 1fr 1fr 1fr auto}.md\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}.md\:grid-cols-\[minmax\(0\,1fr\)_10rem_auto\]{grid-template-columns:minmax(0,1fr) 10rem auto}.md\:grid-cols-\[minmax\(0\,1fr\)_18rem\]{grid-template-columns:minmax(0,1fr) 18rem}.md\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.md\:grid-cols-\[minmax\(0\,1fr\)_auto_auto\]{grid-template-columns:minmax(0,1fr) auto auto}.md\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,0\.7fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.7fr)}.md\:grid-cols-\[minmax\(16rem\,0\.8fr\)_minmax\(0\,1\.2fr\)\]{grid-template-columns:minmax(16rem,.8fr) minmax(0,1.2fr)}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:overflow-hidden{overflow:hidden}.md\:overflow-y-auto{overflow-y:auto}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media(min-width:1024px){.lg\:grid-cols-\[24rem_minmax\(0\,1fr\)\]{grid-template-columns:24rem minmax(0,1fr)}.lg\:grid-cols-\[minmax\(0\,1fr\)_20rem\]{grid-template-columns:minmax(0,1fr) 20rem}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}}@media(min-width:1280px){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}}.\[\&_img\]\:object-contain img{-o-object-fit:contain;object-fit:contain}.\[\&_video\]\:object-contain video{-o-object-fit:contain;object-fit:contain}.page-theme{background-color:#050505;background-attachment:fixed}.page-theme-preview{background-attachment:scroll;background-position:center}.page-theme-black{background-color:#000;background-image:none}.page-theme-green-mode{background-color:#0f0;background-image:none}.page-theme-pride-mix{background-image:repeating-linear-gradient(45deg,#5bcefa 0 48px,#f5a9b8 48px 96px,#fff 96px 144px,#f5a9b8 144px 192px,#5bcefa 192px 240px,#e40303 240px 288px,#ff8c00 288px 336px,#ffed00 336px 384px,#00a651 384px 432px,#06f 432px 480px,#9b2fae 480px 528px)}.page-theme-rainbow{background-image:repeating-linear-gradient(45deg,#e40303 0 48px,#ff8c00 48px 96px,#ffed00 96px 144px,#008026 144px 192px,#004dff 192px 240px,#750787 240px 288px)}.page-theme-progress-pride{background-image:repeating-linear-gradient(45deg,#000 0 48px,#784f17 48px 96px,#5bcefa 96px 144px,#f5a9b8 144px 192px,#fff 192px 240px,#e40303 240px 288px,#ff8c00 288px 336px,#ffed00 336px 384px,#008026 384px 432px,#004dff 432px 480px,#750787 480px 528px)}.page-theme-transgender{background-image:repeating-linear-gradient(45deg,#5bcefa 0 48px,#f5a9b8 48px 96px,#fff 96px 144px,#f5a9b8 144px 192px,#5bcefa 192px 240px)}.page-theme-bisexual{background-image:repeating-linear-gradient(45deg,#d60270 0 48px,#9b4f96 48px 96px,#0038a8 96px 144px)}.page-theme-lesbian{background-image:repeating-linear-gradient(45deg,#d52d00 0 48px,#ef7627 48px 96px,#ff9a56 96px 144px,#fff 144px 192px,#d162a4 192px 240px,#b55690 240px 288px,#a30262 288px 336px)}.page-theme-nonbinary{background-image:repeating-linear-gradient(45deg,#fff430 0 48px,#fff 48px 96px,#9c59d1 96px 144px,#2d2d2d 144px 192px)}.page-theme-pansexual{background-image:repeating-linear-gradient(45deg,#ff218c 0 48px,#ffd800 48px 96px,#21b1ff 96px 144px)}.page-theme-asexual{background-image:repeating-linear-gradient(45deg,#111 0 48px,#a3a3a3 48px 96px,#fff 96px 144px,purple 144px 192px)}.page-theme-aurora{background-color:#03120f;background-image:radial-gradient(circle at 18% 24%,rgba(45,212,191,.95),transparent 34%),radial-gradient(circle at 76% 18%,rgba(168,85,247,.9),transparent 38%),radial-gradient(circle at 56% 82%,rgba(34,197,94,.88),transparent 42%),linear-gradient(125deg,#020617,#0f172a 45%,#082f49);background-size:34rem 28rem,38rem 32rem,42rem 36rem,auto}.page-theme-synthwave-grid{background-color:#090018;background-image:linear-gradient(rgba(34,211,238,.7) 2px,transparent 2px),linear-gradient(90deg,rgba(236,72,153,.72) 2px,transparent 2px),radial-gradient(ellipse at 50% 100%,#7e22ce 0,#1e1b4b 38%,#090018 72%);background-size:54px 54px,54px 54px,auto}.page-theme-neon-checker{background-color:#111827;background-image:conic-gradient(from 45deg,#06b6d4 0 25%,#7c3aed 0 50%,#ec4899 0 75%,#111827 0);background-size:84px 84px}.page-theme-ocean-current{background-color:#082f49;background-image:repeating-linear-gradient(35deg,rgba(103,232,249,.72) 0 12px,transparent 12px 54px),repeating-linear-gradient(-35deg,rgba(14,116,144,.72) 0 21px,transparent 21px 72px),linear-gradient(90deg,#0c4a6e,#0891b2,#164e63)}.page-theme-ember-lattice{background-color:#1c0704;background-image:repeating-linear-gradient(45deg,transparent 0 36px,rgba(251,146,60,.9) 36px 45px),repeating-linear-gradient(-45deg,transparent 0 48px,rgba(239,68,68,.78) 48px 57px),radial-gradient(circle at center,#7c2d12,#1c0704 70%)}.page-theme-starfield{background-color:#020617;background-image:radial-gradient(circle,rgba(255,255,255,.95) 0 2px,transparent 3px),radial-gradient(circle,rgba(125,211,252,.9) 0 3px,transparent 4px),radial-gradient(circle,rgba(216,180,254,.8) 0 2px,transparent 3px),linear-gradient(135deg,#020617,#172554 55%,#3b0764);background-position:0 0,57px 81px,123px 33px,0 0;background-size:111px 111px,183px 183px,237px 237px,auto}.page-theme-vaporwave-sunset{background-color:#2e1065;background-image:repeating-linear-gradient(0deg,transparent 0 24px,rgba(103,232,249,.48) 24px 27px,transparent 27px 54px),radial-gradient(circle at 50% 78%,#fda4af 0 14%,#f97316 14% 25%,transparent 25.5%),linear-gradient(180deg,#172554,#6b21a8 48%,#db2777 72%,#f97316);background-size:auto,48rem 34rem,auto}.page-theme-electric-circuit{background-color:#020617;background-image:repeating-linear-gradient(90deg,transparent 0 48px,rgba(34,211,238,.9) 48px 52px,transparent 52px 96px),repeating-linear-gradient(0deg,transparent 0 68px,rgba(168,85,247,.86) 68px 72px,transparent 72px 124px),radial-gradient(circle at center,#312e81 0,#0f172a 45%,#020617 78%)}.page-theme-lava-flow{background-color:#180503;background-image:radial-gradient(ellipse at 18% 28%,#facc15 0 8%,#f97316 9% 18%,#991b1b 24%,transparent 39%),radial-gradient(ellipse at 76% 64%,#fb923c 0 10%,#dc2626 18%,#7f1d1d 29%,transparent 44%),radial-gradient(ellipse at 48% 92%,#fde047 0 7%,#ea580c 17%,transparent 36%),linear-gradient(135deg,#180503,#450a0a 50%,#1c0704);background-size:42rem 34rem,48rem 39rem,37rem 31rem,auto}.page-theme-deep-space-nebula{background-color:#020617;background-image:radial-gradient(ellipse at 22% 38%,rgba(217,70,239,.92),transparent 34%),radial-gradient(ellipse at 72% 24%,rgba(59,130,246,.9),transparent 38%),radial-gradient(ellipse at 58% 82%,rgba(14,165,233,.72),transparent 36%),radial-gradient(circle,rgba(255,255,255,.9) 0 2px,transparent 3px),linear-gradient(125deg,#020617,#1e1b4b 52%,#3b0764);background-position:center,center,center,17px 31px,center;background-size:42rem 34rem,48rem 38rem,39rem 35rem,173px 173px,auto}.page-theme-holographic-waves{background-color:#164e63;background-image:repeating-linear-gradient(32deg,rgba(255,255,255,.4) 0 14px,transparent 14px 82px),repeating-linear-gradient(-38deg,rgba(216,180,254,.38) 0 18px,transparent 18px 104px),linear-gradient(110deg,#67e8f9,#c4b5fd 32%,#f9a8d4 60%,#86efac)}.page-theme-hazard-stripes{background-color:#111;background-image:repeating-linear-gradient(45deg,#facc15 0 48px,#171717 48px 96px)}.page-theme-mint-mosaic{background-color:#064e3b;background-image:conic-gradient(from 45deg,#a7f3d0 0 25%,#0f766e 0 50%,#fef3c7 0 75%,#164e63 0);background-size:96px 96px}.page-theme-candy-swirl{background-color:#fdf2f8;background-image:repeating-radial-gradient(circle at 28% 34%,#f9a8d4 0 28px,#fef3c7 28px 56px,#93c5fd 56px 84px,#c4b5fd 84px 112px,#f9a8d4 112px 140px)}.inter-instance-overlay-frame{max-width:calc(100vw - .5rem)}.inter-instance-overlay-body{max-height:82vh}@media(min-width:1024px){.inter-instance-overlay-scale{zoom:1.5}.inter-instance-overlay-frame{max-width:calc((100vw - .5rem) / 1.5)}.inter-instance-overlay-body{max-height:54.6667vh}}.chat-composer{container-type:inline-size;display:flex;flex-wrap:wrap;align-items:stretch;gap:.125rem;min-width:0;overflow:hidden}.chat-composer-nickname{flex:1 1 100%;min-width:0;order:1}.chat-composer-input{flex:1 1 0%;min-width:0;order:2}.chat-composer-send{flex:0 0 auto;align-self:stretch;order:3}.chat-composer-tts{display:flex;flex:1 1 100%;align-items:center;gap:.125rem;min-width:0;overflow:hidden;order:4}@container (min-width: 44rem){.chat-composer{flex-wrap:nowrap}.chat-composer-nickname{flex:0 0 7rem;order:1}.chat-composer-input{order:2}.chat-composer-tts{flex:0 1 auto;order:3}.chat-composer-send{order:4}}@keyframes rover-help-flash{0%,49%{opacity:.96}50%,to{opacity:0}}.rover-help-overlay{container-type:size;animation:rover-help-flash 2s steps(1,end) infinite}.mobile-text-entry{font-size:16px;-webkit-text-size-adjust:100%;touch-action:manipulation}.no-touch-select{-moz-user-select:none;user-select:none;-webkit-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.mobile-touch-control{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;overscroll-behavior:contain}.mobile-drag-control{touch-action:none}.newgen-wheel-drop{pointer-events:none;position:absolute;z-index:20;top:50%;display:flex;width:4rem;height:15rem;align-items:center;justify-content:center;border-radius:.25rem;background:#ef44445c;color:#fff;transform:translateY(-50%)}.newgen-wheel-drop--left{left:1rem}.newgen-wheel-drop--right{right:1rem}.newgen-wheel-drop span{white-space:nowrap;font-size:.9rem;font-weight:700;letter-spacing:.08em;line-height:1;text-shadow:0 1px 2px rgb(0 0 0 / .65)}.newgen-wheel-drop--left span{transform:rotate(-90deg)}.newgen-wheel-drop--right span{transform:rotate(90deg)}.newgen-bumper-path{fill:none;stroke:#ef44447a;stroke-width:26;stroke-linecap:round;vector-effect:non-scaling-stroke}.newgen-bumper-label{fill:#fff;font-family:system-ui,sans-serif;font-size:20px;font-weight:700;letter-spacing:1px;paint-order:stroke;stroke:#000000a6;stroke-width:1.5px}.newgen-ir-proximity-cone{fill:none;stroke-width:6;stroke-linecap:round;vector-effect:non-scaling-stroke;transition:opacity .15s linear}@media(prefers-reduced-motion:reduce){.newgen-ir-proximity-cone{transition:none}}.newgen-cliff-path{fill:none;stroke:#f59e0bad;stroke-width:22;stroke-linecap:round;vector-effect:non-scaling-stroke}.newgen-cliff-label{fill:#fff;font-family:system-ui,sans-serif;font-size:15px;font-weight:700;letter-spacing:1px;paint-order:stroke;stroke:#000000a6;stroke-width:1.5px}.newgen-bottom-sensor-hud{pointer-events:none;position:absolute;z-index:20;right:0;bottom:-2.5rem;left:0;width:100%;height:clamp(7rem,18vh,11rem);overflow:visible}@keyframes batteryTickWarn{0%,49%{background-color:#fffffff2}50%,to{background-color:#ef4444f2}}.battery-tick-warn{animation:batteryTickWarn .4s steps(2,end) infinite}@keyframes batteryUrgentFlash{0%,49%{opacity:1}50%,to{opacity:.25}}.battery-urgent-flash{animation:batteryUrgentFlash .4s steps(2,end) infinite}@media(max-width:1023px){.driver-mobile-layout{--mobile-landscape-video-width: min(60vw, 133.333svh)}.driver-mobile-layout:has(>.panel-section){--mobile-landscape-video-width: min(60vw, calc(133.333svh - 3.333rem) )}.driver-mobile-layout .mobile-landscape-driver-grid{grid-template-columns:minmax(0,1fr) minmax(0,var(--mobile-landscape-video-width)) minmax(0,1fr)}html:has(.driver-mobile-layout){scroll-snap-type:y mandatory}.driver-mobile-layout .mobile-top-snap{position:absolute;top:0;left:0;width:1px;height:1px;pointer-events:none;scroll-snap-align:start;scroll-snap-stop:always}.driver-mobile-layout .mobile-content-snap,.driver-mobile-layout .mobile-tabs-snap{scroll-snap-align:start;scroll-snap-stop:always}}@keyframes initial-session-spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes initial-session-spinner-hue{0%{filter:hue-rotate(0deg)}to{filter:hue-rotate(360deg)}}@media(prefers-reduced-motion:no-preference){.initial-session-spinner-rotation{animation:initial-session-spinner-rotate 1.8s linear infinite}.initial-session-spinner-image{animation:initial-session-spinner-hue 2.8s linear infinite}} diff --git a/server/public/assets/index-DCtVfg7-.js b/server/public/assets/index-DCtVfg7-.js new file mode 100644 index 00000000..7fa6c724 --- /dev/null +++ b/server/public/assets/index-DCtVfg7-.js @@ -0,0 +1,150 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/react-DPJCMV8d.js","assets/mixin-BY5xW4uI.js","assets/hls-DIl42XrH.js","assets/react-BBapMaLq.js","assets/index-Dzl_xRdK.js","assets/react-NA7hlPp1.js","assets/index-B4nclofW.js","assets/react-BOaU9Q5g.js","assets/OrbitControls-BJ-UXxdt.js","assets/three.module--MGUDD-H.js","assets/AdminApp-B_XqBka7.js","assets/api-B8GGCEeo.js","assets/AdminApp-C3AkcekK.css","assets/SetupApp-CFFNNLJ4.js"])))=>i.map(i=>d[i]); +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))l(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const h of o.addedNodes)h.tagName==="LINK"&&h.rel==="modulepreload"&&l(h)}).observe(document,{childList:!0,subtree:!0});function c(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function l(s){if(s.ep)return;s.ep=!0;const o=c(s);fetch(s.href,o)}})();const nz="modulepreload",cz=function(t){return"/"+t},yd={},o4=function(e,c,l){let s=Promise.resolve();if(c&&c.length>0){let v=function(g){return Promise.all(g.map(p=>Promise.resolve(p).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const h=document.querySelector("meta[property=csp-nonce]"),m=h?.nonce||h?.getAttribute("nonce");s=v(c.map(g=>{if(g=cz(g),g in yd)return;yd[g]=!0;const p=g.endsWith(".css"),b=p?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${g}"]${b}`))return;const w=document.createElement("link");if(w.rel=p?"stylesheet":nz,p||(w.as="script"),w.crossOrigin="",w.href=g,m&&w.setAttribute("nonce",m),document.head.appendChild(w),p)return new Promise((y,S)=>{w.addEventListener("load",y),w.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${g}`)))})}))}function o(h){const m=new Event("vite:preloadError",{cancelable:!0});if(m.payload=h,window.dispatchEvent(m),!m.defaultPrevented)throw h}return s.then(h=>{for(const m of h||[])m.status==="rejected"&&o(m.reason);return e().catch(o)})};function sf(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var l9={exports:{}},Me={};var wd;function az(){if(wd)return Me;wd=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function c(l,s,o){var h=null;if(o!==void 0&&(h=""+o),s.key!==void 0&&(h=""+s.key),"key"in s){o={};for(var m in s)m!=="key"&&(o[m]=s[m])}else o=s;return s=o.ref,{$$typeof:t,type:l,key:h,ref:s!==void 0?s:null,props:o}}return Me.Fragment=e,Me.jsx=c,Me.jsxs=c,Me}var Md;function rz(){return Md||(Md=1,l9.exports=az()),l9.exports}var r=rz(),i9={exports:{}},Y1={};var Cd;function lz(){if(Cd)return Y1;Cd=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),c=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),h=Symbol.for("react.context"),m=Symbol.for("react.forward_ref"),v=Symbol.for("react.suspense"),g=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),b=Symbol.for("react.activity"),w=Symbol.iterator;function y(O){return O===null||typeof O!="object"?null:(O=w&&O[w]||O["@@iterator"],typeof O=="function"?O:null)}var S={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},A=Object.assign,M={};function V(O,U,n1){this.props=O,this.context=U,this.refs=M,this.updater=n1||S}V.prototype.isReactComponent={},V.prototype.setState=function(O,U){if(typeof O!="object"&&typeof O!="function"&&O!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,O,U,"setState")},V.prototype.forceUpdate=function(O){this.updater.enqueueForceUpdate(this,O,"forceUpdate")};function L(){}L.prototype=V.prototype;function C(O,U,n1){this.props=O,this.context=U,this.refs=M,this.updater=n1||S}var N=C.prototype=new L;N.constructor=C,A(N,V.prototype),N.isPureReactComponent=!0;var k=Array.isArray;function E(){}var R={H:null,A:null,T:null,S:null},j=Object.prototype.hasOwnProperty;function B(O,U,n1){var J=n1.ref;return{$$typeof:t,type:O,key:U,ref:J!==void 0?J:null,props:n1}}function T(O,U){return B(O.type,U,O.props)}function D(O){return typeof O=="object"&&O!==null&&O.$$typeof===t}function q(O){var U={"=":"=0",":":"=2"};return"$"+O.replace(/[=:]/g,function(n1){return U[n1]})}var e1=/\/+/g;function Q(O,U){return typeof O=="object"&&O!==null&&O.key!=null?q(""+O.key):U.toString(36)}function Z(O){switch(O.status){case"fulfilled":return O.value;case"rejected":throw O.reason;default:switch(typeof O.status=="string"?O.then(E,E):(O.status="pending",O.then(function(U){O.status==="pending"&&(O.status="fulfilled",O.value=U)},function(U){O.status==="pending"&&(O.status="rejected",O.reason=U)})),O.status){case"fulfilled":return O.value;case"rejected":throw O.reason}}throw O}function _(O,U,n1,J,K){var G=typeof O;(G==="undefined"||G==="boolean")&&(O=null);var d1=!1;if(O===null)d1=!0;else switch(G){case"bigint":case"string":case"number":d1=!0;break;case"object":switch(O.$$typeof){case t:case e:d1=!0;break;case p:return d1=O._init,_(d1(O._payload),U,n1,J,K)}}if(d1)return K=K(O),d1=J===""?"."+Q(O,0):J,k(K)?(n1="",d1!=null&&(n1=d1.replace(e1,"$&/")+"/"),_(K,U,n1,"",function(k1){return k1})):K!=null&&(D(K)&&(K=T(K,n1+(K.key==null||O&&O.key===K.key?"":(""+K.key).replace(e1,"$&/")+"/")+d1)),U.push(K)),1;d1=0;var M1=J===""?".":J+":";if(k(O))for(var L1=0;L1>>1,p1=_[o1];if(0>>1;o1s(n1,X))Js(K,n1)?(_[o1]=K,_[J]=X,o1=J):(_[o1]=n1,_[U]=X,o1=U);else if(Js(K,X))_[o1]=K,_[J]=X,o1=J;else break t}}return I}function s(_,I){var X=_.sortIndex-I.sortIndex;return X!==0?X:_.id-I.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;t.unstable_now=function(){return o.now()}}else{var h=Date,m=h.now();t.unstable_now=function(){return h.now()-m}}var v=[],g=[],p=1,b=null,w=3,y=!1,S=!1,A=!1,M=!1,V=typeof setTimeout=="function"?setTimeout:null,L=typeof clearTimeout=="function"?clearTimeout:null,C=typeof setImmediate<"u"?setImmediate:null;function N(_){for(var I=c(g);I!==null;){if(I.callback===null)l(g);else if(I.startTime<=_)l(g),I.sortIndex=I.expirationTime,e(v,I);else break;I=c(g)}}function k(_){if(A=!1,N(_),!S)if(c(v)!==null)S=!0,E||(E=!0,q());else{var I=c(g);I!==null&&Z(k,I.startTime-_)}}var E=!1,R=-1,j=5,B=-1;function T(){return M?!0:!(t.unstable_now()-B_&&T());){var o1=b.callback;if(typeof o1=="function"){b.callback=null,w=b.priorityLevel;var p1=o1(b.expirationTime<=_);if(_=t.unstable_now(),typeof p1=="function"){b.callback=p1,N(_),I=!0;break e}b===c(v)&&l(v),N(_)}else l(v);b=c(v)}if(b!==null)I=!0;else{var O=c(g);O!==null&&Z(k,O.startTime-_),I=!1}}break t}finally{b=null,w=X,y=!1}I=void 0}}finally{I?q():E=!1}}}var q;if(typeof C=="function")q=function(){C(D)};else if(typeof MessageChannel<"u"){var e1=new MessageChannel,Q=e1.port2;e1.port1.onmessage=D,q=function(){Q.postMessage(null)}}else q=function(){V(D,0)};function Z(_,I){R=V(function(){_(t.unstable_now())},I)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(_){_.callback=null},t.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):j=0<_?Math.floor(1e3/_):5},t.unstable_getCurrentPriorityLevel=function(){return w},t.unstable_next=function(_){switch(w){case 1:case 2:case 3:var I=3;break;default:I=w}var X=w;w=I;try{return _()}finally{w=X}},t.unstable_requestPaint=function(){M=!0},t.unstable_runWithPriority=function(_,I){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var X=w;w=_;try{return I()}finally{w=X}},t.unstable_scheduleCallback=function(_,I,X){var o1=t.unstable_now();switch(typeof X=="object"&&X!==null?(X=X.delay,X=typeof X=="number"&&0o1?(_.sortIndex=X,e(g,_),c(v)===null&&_===c(g)&&(A?(L(R),R=-1):A=!0,Z(k,X-o1))):(_.sortIndex=p1,e(v,_),S||y||(S=!0,E||(E=!0,q()))),_},t.unstable_shouldYield=T,t.unstable_wrapCallback=function(_){var I=w;return function(){var X=w;w=I;try{return _.apply(this,arguments)}finally{w=X}}}})(u9)),u9}var Ld;function sz(){return Ld||(Ld=1,o9.exports=iz()),o9.exports}var d9={exports:{}},c4={};var Hd;function oz(){if(Hd)return c4;Hd=1;var t=dl();function e(v){var g="https://react.dev/errors/"+v;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),d9.exports=oz(),d9.exports}var Nd;function uz(){if(Nd)return Ce;Nd=1;var t=sz(),e=dl(),c=of();function l(n){var a="https://react.dev/errors/"+n;if(1p1||(n.current=o1[p1],o1[p1]=null,p1--)}function n1(n,a){p1++,o1[p1]=n.current,n.current=a}var J=O(null),K=O(null),G=O(null),d1=O(null);function M1(n,a){switch(n1(G,a),n1(K,n),n1(J,null),a.nodeType){case 9:case 11:n=(n=a.documentElement)&&(n=n.namespaceURI)?Iu(n):0;break;default:if(n=a.tagName,a=a.namespaceURI)a=Iu(a),n=$u(a,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}U(J),n1(J,n)}function L1(){U(J),U(K),U(G)}function k1(n){n.memoizedState!==null&&n1(d1,n);var a=J.current,i=$u(a,n.type);a!==i&&(n1(K,n),n1(J,i))}function s1(n){K.current===n&&(U(J),U(K)),d1.current===n&&(U(d1),be._currentValue=X)}var V1,q1;function G1(n){if(V1===void 0)try{throw Error()}catch(i){var a=i.stack.trim().match(/\n( *(at )?)/);V1=a&&a[1]||"",q1=-1)":-1x||P[d]!==a1[x]){var h1=` +`+P[d].replace(" at new "," at ");return n.displayName&&h1.includes("")&&(h1=h1.replace("",n.displayName)),h1}while(1<=d&&0<=x);break}}}finally{E1=!1,Error.prepareStackTrace=i}return(i=n?n.displayName||n.name:"")?G1(i):""}function x1(n,a){switch(n.tag){case 26:case 27:case 5:return G1(n.type);case 16:return G1("Lazy");case 13:return n.child!==a&&a!==null?G1("Suspense Fallback"):G1("Suspense");case 19:return G1("SuspenseList");case 0:case 15:return C1(n.type,!1);case 11:return C1(n.type.render,!1);case 1:return C1(n.type,!0);case 31:return G1("Activity");default:return""}}function F1(n){try{var a="",i=null;do a+=x1(n,i),i=n,n=n.return;while(n);return a}catch(d){return` +Error generating stack: `+d.message+` +`+d.stack}}var S1=Object.prototype.hasOwnProperty,R1=t.unstable_scheduleCallback,Z1=t.unstable_cancelCallback,g1=t.unstable_shouldYield,f1=t.unstable_requestPaint,r1=t.unstable_now,z1=t.unstable_getCurrentPriorityLevel,w1=t.unstable_ImmediatePriority,j1=t.unstable_UserBlockingPriority,$1=t.unstable_NormalPriority,K1=t.unstable_LowPriority,t1=t.unstable_IdlePriority,H1=t.log,O1=t.unstable_setDisableYieldValue,u1=null,y1=null;function b1(n){if(typeof H1=="function"&&O1(n),y1&&typeof y1.setStrictMode=="function")try{y1.setStrictMode(u1,n)}catch{}}var c2=Math.clz32?Math.clz32:Q3,G2=Math.log,k4=Math.LN2;function Q3(n){return n>>>=0,n===0?32:31-(G2(n)/k4|0)|0}var e4=256,n4=262144,h6=4194304;function D1(n){var a=n&42;if(a!==0)return a;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function f2(n,a,i){var d=n.pendingLanes;if(d===0)return 0;var x=0,z=n.suspendedLanes,H=n.pingedLanes;n=n.warmLanes;var F=d&134217727;return F!==0?(d=F&~z,d!==0?x=D1(d):(H&=F,H!==0?x=D1(H):i||(i=F&~n,i!==0&&(x=D1(i))))):(F=d&~z,F!==0?x=D1(F):H!==0?x=D1(H):i||(i=d&~n,i!==0&&(x=D1(i)))),x===0?0:a!==0&&a!==x&&(a&z)===0&&(z=x&-x,i=a&-a,z>=i||z===32&&(i&4194048)!==0)?a:x}function d2(n,a){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&a)===0}function i2(n,a){switch(n){case 1:case 2:case 4:case 8:case 64:return a+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function b2(){var n=h6;return h6<<=1,(h6&62914560)===0&&(h6=4194304),n}function z4(n){for(var a=[],i=0;31>i;i++)a.push(n);return a}function t3(n,a){n.pendingLanes|=a,a!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function m6(n,a,i,d,x,z){var H=n.pendingLanes;n.pendingLanes=i,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=i,n.entangledLanes&=i,n.errorRecoveryDisabledLanes&=i,n.shellSuspendCounter=0;var F=n.entanglements,P=n.expirationTimes,a1=n.hiddenUpdates;for(i=H&~i;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var Wg=/[\n"\\]/g;function E4(n){return n.replace(Wg,function(a){return"\\"+a.charCodeAt(0).toString(16)+" "})}function tc(n,a,i,d,x,z,H,F){n.name="",H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"?n.type=H:n.removeAttribute("type"),a!=null?H==="number"?(a===0&&n.value===""||n.value!=a)&&(n.value=""+R4(a)):n.value!==""+R4(a)&&(n.value=""+R4(a)):H!=="submit"&&H!=="reset"||n.removeAttribute("value"),a!=null?ec(n,H,R4(a)):i!=null?ec(n,H,R4(i)):d!=null&&n.removeAttribute("value"),x==null&&z!=null&&(n.defaultChecked=!!z),x!=null&&(n.checked=x&&typeof x!="function"&&typeof x!="symbol"),F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?n.name=""+R4(F):n.removeAttribute("name")}function Ti(n,a,i,d,x,z,H,F){if(z!=null&&typeof z!="function"&&typeof z!="symbol"&&typeof z!="boolean"&&(n.type=z),a!=null||i!=null){if(!(z!=="submit"&&z!=="reset"||a!=null)){Jn(n);return}i=i!=null?""+R4(i):"",a=a!=null?""+R4(a):i,F||a===n.value||(n.value=a),n.defaultValue=a}d=d??x,d=typeof d!="function"&&typeof d!="symbol"&&!!d,n.checked=F?n.checked:!!d,n.defaultChecked=!!d,H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"&&(n.name=H),Jn(n)}function ec(n,a,i){a==="number"&&V8(n.ownerDocument)===n||n.defaultValue===""+i||(n.defaultValue=""+i)}function b6(n,a,i,d){if(n=n.options,a){a={};for(var x=0;x"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),lc=!1;if(A3)try{var Tt={};Object.defineProperty(Tt,"passive",{get:function(){lc=!0}}),window.addEventListener("test",Tt,Tt),window.removeEventListener("test",Tt,Tt)}catch{lc=!1}var e0=null,ic=null,k8=null;function Ii(){if(k8)return k8;var n,a=ic,i=a.length,d,x="value"in e0?e0.value:e0.textContent,z=x.length;for(n=0;n=_t),Wi=" ",Xi=!1;function Qi(n,a){switch(n){case"keyup":return Cx.indexOf(a.keyCode)!==-1;case"keydown":return a.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ji(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var M6=!1;function Ax(n,a){switch(n){case"compositionend":return Ji(a);case"keypress":return a.which!==32?null:(Xi=!0,Wi);case"textInput":return n=a.data,n===Wi&&Xi?null:n;default:return null}}function Lx(n,a){if(M6)return n==="compositionend"||!hc&&Qi(n,a)?(n=Ii(),k8=ic=e0=null,M6=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(a.ctrlKey||a.altKey||a.metaKey)||a.ctrlKey&&a.altKey){if(a.char&&1=a)return{node:i,offset:a-n};n=d}t:{for(;i;){if(i.nextSibling){i=i.nextSibling;break t}i=i.parentNode}i=void 0}i=is(i)}}function os(n,a){return n&&a?n===a?!0:n&&n.nodeType===3?!1:a&&a.nodeType===3?os(n,a.parentNode):"contains"in n?n.contains(a):n.compareDocumentPosition?!!(n.compareDocumentPosition(a)&16):!1:!1}function us(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var a=V8(n.document);a instanceof n.HTMLIFrameElement;){try{var i=typeof a.contentWindow.location.href=="string"}catch{i=!1}if(i)n=a.contentWindow;else break;a=V8(n.document)}return a}function vc(n){var a=n&&n.nodeName&&n.nodeName.toLowerCase();return a&&(a==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||a==="textarea"||n.contentEditable==="true")}var Ex=A3&&"documentMode"in document&&11>=document.documentMode,C6=null,pc=null,It=null,gc=!1;function ds(n,a,i){var d=i.window===i?i.document:i.nodeType===9?i:i.ownerDocument;gc||C6==null||C6!==V8(d)||(d=C6,"selectionStart"in d&&vc(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),It&&Ut(It,d)||(It=d,d=A5(pc,"onSelect"),0>=H,x-=H,d3=1<<32-c2(a)+x|i<X1?(r2=T1,T1=null):r2=T1.sibling;var o2=l1(W,T1,c1[X1],m1);if(o2===null){T1===null&&(T1=r2);break}n&&T1&&o2.alternate===null&&a(W,T1),$=z(o2,$,X1),s2===null?P1=o2:s2.sibling=o2,s2=o2,T1=r2}if(X1===c1.length)return i(W,T1),l2&&H3(W,X1),P1;if(T1===null){for(;X1X1?(r2=T1,T1=null):r2=T1.sibling;var M0=l1(W,T1,o2.value,m1);if(M0===null){T1===null&&(T1=r2);break}n&&T1&&M0.alternate===null&&a(W,T1),$=z(M0,$,X1),s2===null?P1=M0:s2.sibling=M0,s2=M0,T1=r2}if(o2.done)return i(W,T1),l2&&H3(W,X1),P1;if(T1===null){for(;!o2.done;X1++,o2=c1.next())o2=v1(W,o2.value,m1),o2!==null&&($=z(o2,$,X1),s2===null?P1=o2:s2.sibling=o2,s2=o2);return l2&&H3(W,X1),P1}for(T1=d(T1);!o2.done;X1++,o2=c1.next())o2=i1(T1,W,X1,o2.value,m1),o2!==null&&(n&&o2.alternate!==null&&T1.delete(o2.key===null?X1:o2.key),$=z(o2,$,X1),s2===null?P1=o2:s2.sibling=o2,s2=o2);return n&&T1.forEach(function(ez){return a(W,ez)}),l2&&H3(W,X1),P1}function g2(W,$,c1,m1){if(typeof c1=="object"&&c1!==null&&c1.type===A&&c1.key===null&&(c1=c1.props.children),typeof c1=="object"&&c1!==null){switch(c1.$$typeof){case y:t:{for(var P1=c1.key;$!==null;){if($.key===P1){if(P1=c1.type,P1===A){if($.tag===7){i(W,$.sibling),m1=x($,c1.props.children),m1.return=W,W=m1;break t}}else if($.elementType===P1||typeof P1=="object"&&P1!==null&&P1.$$typeof===j&&Z0(P1)===$.type){i(W,$.sibling),m1=x($,c1.props),Wt(m1,c1),m1.return=W,W=m1;break t}i(W,$);break}else a(W,$);$=$.sibling}c1.type===A?(m1=q0(c1.props.children,W.mode,m1,c1.key),m1.return=W,W=m1):(m1=U8(c1.type,c1.key,c1.props,null,W.mode,m1),Wt(m1,c1),m1.return=W,W=m1)}return H(W);case S:t:{for(P1=c1.key;$!==null;){if($.key===P1)if($.tag===4&&$.stateNode.containerInfo===c1.containerInfo&&$.stateNode.implementation===c1.implementation){i(W,$.sibling),m1=x($,c1.children||[]),m1.return=W,W=m1;break t}else{i(W,$);break}else a(W,$);$=$.sibling}m1=Cc(c1,W.mode,m1),m1.return=W,W=m1}return H(W);case j:return c1=Z0(c1),g2(W,$,c1,m1)}if(Z(c1))return B1(W,$,c1,m1);if(q(c1)){if(P1=q(c1),typeof P1!="function")throw Error(l(150));return c1=P1.call(c1),I1(W,$,c1,m1)}if(typeof c1.then=="function")return g2(W,$,W8(c1),m1);if(c1.$$typeof===C)return g2(W,$,Z8(W,c1),m1);X8(W,c1)}return typeof c1=="string"&&c1!==""||typeof c1=="number"||typeof c1=="bigint"?(c1=""+c1,$!==null&&$.tag===6?(i(W,$.sibling),m1=x($,c1),m1.return=W,W=m1):(i(W,$),m1=Mc(c1,W.mode,m1),m1.return=W,W=m1),H(W)):i(W,$)}return function(W,$,c1,m1){try{Kt=0;var P1=g2(W,$,c1,m1);return E6=null,P1}catch(T1){if(T1===R6||T1===Y8)throw T1;var s2=w4(29,T1,null,W.mode);return s2.lanes=m1,s2.return=W,s2}finally{}}}var Y0=Rs(!0),Es=Rs(!1),l0=!1;function Fc(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Tc(n,a){n=n.updateQueue,a.updateQueue===n&&(a.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function i0(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function s0(n,a,i){var d=n.updateQueue;if(d===null)return null;if(d=d.shared,(u2&2)!==0){var x=d.pending;return x===null?a.next=a:(a.next=x.next,x.next=a),d.pending=a,a=P8(n),xs(n,null,i),a}return q8(n,d,a,i),P8(n)}function Xt(n,a,i){if(a=a.updateQueue,a!==null&&(a=a.shared,(i&4194048)!==0)){var d=a.lanes;d&=n.pendingLanes,i|=d,a.lanes=i,J3(n,i)}}function Dc(n,a){var i=n.updateQueue,d=n.alternate;if(d!==null&&(d=d.updateQueue,i===d)){var x=null,z=null;if(i=i.firstBaseUpdate,i!==null){do{var H={lane:i.lane,tag:i.tag,payload:i.payload,callback:null,next:null};z===null?x=z=H:z=z.next=H,i=i.next}while(i!==null);z===null?x=z=a:z=z.next=a}else x=z=a;i={baseState:d.baseState,firstBaseUpdate:x,lastBaseUpdate:z,shared:d.shared,callbacks:d.callbacks},n.updateQueue=i;return}n=i.lastBaseUpdate,n===null?i.firstBaseUpdate=a:n.next=a,i.lastBaseUpdate=a}var Oc=!1;function Qt(){if(Oc){var n=k6;if(n!==null)throw n}}function Jt(n,a,i,d){Oc=!1;var x=n.updateQueue;l0=!1;var z=x.firstBaseUpdate,H=x.lastBaseUpdate,F=x.shared.pending;if(F!==null){x.shared.pending=null;var P=F,a1=P.next;P.next=null,H===null?z=a1:H.next=a1,H=P;var h1=n.alternate;h1!==null&&(h1=h1.updateQueue,F=h1.lastBaseUpdate,F!==H&&(F===null?h1.firstBaseUpdate=a1:F.next=a1,h1.lastBaseUpdate=P))}if(z!==null){var v1=x.baseState;H=0,h1=a1=P=null,F=z;do{var l1=F.lane&-536870913,i1=l1!==F.lane;if(i1?(a2&l1)===l1:(d&l1)===l1){l1!==0&&l1===B6&&(Oc=!0),h1!==null&&(h1=h1.next={lane:0,tag:F.tag,payload:F.payload,callback:null,next:null});t:{var B1=n,I1=F;l1=a;var g2=i;switch(I1.tag){case 1:if(B1=I1.payload,typeof B1=="function"){v1=B1.call(g2,v1,l1);break t}v1=B1;break t;case 3:B1.flags=B1.flags&-65537|128;case 0:if(B1=I1.payload,l1=typeof B1=="function"?B1.call(g2,v1,l1):B1,l1==null)break t;v1=b({},v1,l1);break t;case 2:l0=!0}}l1=F.callback,l1!==null&&(n.flags|=64,i1&&(n.flags|=8192),i1=x.callbacks,i1===null?x.callbacks=[l1]:i1.push(l1))}else i1={lane:l1,tag:F.tag,payload:F.payload,callback:F.callback,next:null},h1===null?(a1=h1=i1,P=v1):h1=h1.next=i1,H|=l1;if(F=F.next,F===null){if(F=x.shared.pending,F===null)break;i1=F,F=i1.next,i1.next=null,x.lastBaseUpdate=i1,x.shared.pending=null}}while(!0);h1===null&&(P=v1),x.baseState=P,x.firstBaseUpdate=a1,x.lastBaseUpdate=h1,z===null&&(x.shared.lanes=0),m0|=H,n.lanes=H,n.memoizedState=v1}}function Fs(n,a){if(typeof n!="function")throw Error(l(191,n));n.call(a)}function Ts(n,a){var i=n.callbacks;if(i!==null)for(n.callbacks=null,n=0;nz?z:8;var H=_.T,F={};_.T=F,aa(n,!1,a,i);try{var P=x(),a1=_.S;if(a1!==null&&a1(F,P),P!==null&&typeof P=="object"&&typeof P.then=="function"){var h1=Ix(P,d);ne(n,a,h1,L4(n))}else ne(n,a,d,L4(n))}catch(v1){ne(n,a,{then:function(){},status:"rejected",reason:v1},L4())}finally{I.p=z,H!==null&&F.types!==null&&(H.types=F.types),_.T=H}}function Wx(){}function na(n,a,i,d){if(n.tag!==5)throw Error(l(476));var x=po(n).queue;vo(n,x,a,X,i===null?Wx:function(){return go(n),i(d)})}function po(n){var a=n.memoizedState;if(a!==null)return a;a={memoizedState:X,baseState:X,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:B3,lastRenderedState:X},next:null};var i={};return a.next={memoizedState:i,baseState:i,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:B3,lastRenderedState:i},next:null},n.memoizedState=a,n=n.alternate,n!==null&&(n.memoizedState=a),a}function go(n){var a=po(n);a.next===null&&(a=n.alternate.memoizedState),ne(n,a.next.queue,{},L4())}function ca(){return Q2(be)}function xo(){return R2().memoizedState}function bo(){return R2().memoizedState}function Xx(n){for(var a=n.return;a!==null;){switch(a.tag){case 24:case 3:var i=L4();n=i0(i);var d=s0(a,n,i);d!==null&&(g4(d,a,i),Xt(d,a,i)),a={cache:Bc()},n.payload=a;return}a=a.return}}function Qx(n,a,i){var d=L4();i={lane:d,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},i5(n)?yo(a,i):(i=yc(n,a,i,d),i!==null&&(g4(i,n,d),wo(i,a,d)))}function zo(n,a,i){var d=L4();ne(n,a,i,d)}function ne(n,a,i,d){var x={lane:d,revertLane:0,gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null};if(i5(n))yo(a,x);else{var z=n.alternate;if(n.lanes===0&&(z===null||z.lanes===0)&&(z=a.lastRenderedReducer,z!==null))try{var H=a.lastRenderedState,F=z(H,i);if(x.hasEagerState=!0,x.eagerState=F,y4(F,H))return q8(n,a,x,0),z2===null&&_8(),!1}catch{}finally{}if(i=yc(n,a,x,d),i!==null)return g4(i,n,d),wo(i,a,d),!0}return!1}function aa(n,a,i,d){if(d={lane:2,revertLane:Fa(),gesture:null,action:d,hasEagerState:!1,eagerState:null,next:null},i5(n)){if(a)throw Error(l(479))}else a=yc(n,i,d,2),a!==null&&g4(a,n,2)}function i5(n){var a=n.alternate;return n===W1||a!==null&&a===W1}function yo(n,a){T6=t5=!0;var i=n.pending;i===null?a.next=a:(a.next=i.next,i.next=a),n.pending=a}function wo(n,a,i){if((i&4194048)!==0){var d=a.lanes;d&=n.pendingLanes,i|=d,a.lanes=i,J3(n,i)}}var ce={readContext:Q2,use:c5,useCallback:H2,useContext:H2,useEffect:H2,useImperativeHandle:H2,useLayoutEffect:H2,useInsertionEffect:H2,useMemo:H2,useReducer:H2,useRef:H2,useState:H2,useDebugValue:H2,useDeferredValue:H2,useTransition:H2,useSyncExternalStore:H2,useId:H2,useHostTransitionStatus:H2,useFormState:H2,useActionState:H2,useOptimistic:H2,useMemoCache:H2,useCacheRefresh:H2};ce.useEffectEvent=H2;var Mo={readContext:Q2,use:c5,useCallback:function(n,a){return i4().memoizedState=[n,a===void 0?null:a],n},useContext:Q2,useEffect:ro,useImperativeHandle:function(n,a,i){i=i!=null?i.concat([n]):null,r5(4194308,4,oo.bind(null,a,n),i)},useLayoutEffect:function(n,a){return r5(4194308,4,n,a)},useInsertionEffect:function(n,a){r5(4,2,n,a)},useMemo:function(n,a){var i=i4();a=a===void 0?null:a;var d=n();if(K0){b1(!0);try{n()}finally{b1(!1)}}return i.memoizedState=[d,a],d},useReducer:function(n,a,i){var d=i4();if(i!==void 0){var x=i(a);if(K0){b1(!0);try{i(a)}finally{b1(!1)}}}else x=a;return d.memoizedState=d.baseState=x,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:x},d.queue=n,n=n.dispatch=Qx.bind(null,W1,n),[d.memoizedState,n]},useRef:function(n){var a=i4();return n={current:n},a.memoizedState=n},useState:function(n){n=Xc(n);var a=n.queue,i=zo.bind(null,W1,a);return a.dispatch=i,[n.memoizedState,i]},useDebugValue:ta,useDeferredValue:function(n,a){var i=i4();return ea(i,n,a)},useTransition:function(){var n=Xc(!1);return n=vo.bind(null,W1,n.queue,!0,!1),i4().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,a,i){var d=W1,x=i4();if(l2){if(i===void 0)throw Error(l(407));i=i()}else{if(i=a(),z2===null)throw Error(l(349));(a2&127)!==0||Us(d,a,i)}x.memoizedState=i;var z={value:i,getSnapshot:a};return x.queue=z,ro($s.bind(null,d,z,n),[n]),d.flags|=2048,O6(9,{destroy:void 0},Is.bind(null,d,z,i,a),null),i},useId:function(){var n=i4(),a=z2.identifierPrefix;if(l2){var i=h3,d=d3;i=(d&~(1<<32-c2(d)-1)).toString(32)+i,a="_"+a+"R_"+i,i=e5++,0<\/script>",z=z.removeChild(z.firstChild);break;case"select":z=typeof d.is=="string"?H.createElement("select",{is:d.is}):H.createElement("select"),d.multiple?z.multiple=!0:d.size&&(z.size=d.size);break;default:z=typeof d.is=="string"?H.createElement(x,{is:d.is}):H.createElement(x)}}z[W2]=a,z[d4]=d;t:for(H=a.child;H!==null;){if(H.tag===5||H.tag===6)z.appendChild(H.stateNode);else if(H.tag!==4&&H.tag!==27&&H.child!==null){H.child.return=H,H=H.child;continue}if(H===a)break t;for(;H.sibling===null;){if(H.return===null||H.return===a)break t;H=H.return}H.sibling.return=H.return,H=H.sibling}a.stateNode=z;t:switch(t4(z,x,d),x){case"button":case"input":case"select":case"textarea":d=!!d.autoFocus;break t;case"img":d=!0;break t;default:d=!1}d&&R3(a)}}return w2(a),xa(a,a.type,n===null?null:n.memoizedProps,a.pendingProps,i),null;case 6:if(n&&a.stateNode!=null)n.memoizedProps!==d&&R3(a);else{if(typeof d!="string"&&a.stateNode===null)throw Error(l(166));if(n=G.current,N6(a)){if(n=a.stateNode,i=a.memoizedProps,d=null,x=X2,x!==null)switch(x.tag){case 27:case 5:d=x.memoizedProps}n[W2]=a,n=!!(n.nodeValue===i||d!==null&&d.suppressHydrationWarning===!0||Pu(n.nodeValue,i)),n||a0(a,!0)}else n=L5(n).createTextNode(d),n[W2]=a,a.stateNode=n}return w2(a),null;case 31:if(i=a.memoizedState,n===null||n.memoizedState!==null){if(d=N6(a),i!==null){if(n===null){if(!d)throw Error(l(318));if(n=a.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(l(557));n[W2]=a}else P0(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;w2(a),n=!1}else i=Hc(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=i),n=!0;if(!n)return a.flags&256?(C4(a),a):(C4(a),null);if((a.flags&128)!==0)throw Error(l(558))}return w2(a),null;case 13:if(d=a.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(x=N6(a),d!==null&&d.dehydrated!==null){if(n===null){if(!x)throw Error(l(318));if(x=a.memoizedState,x=x!==null?x.dehydrated:null,!x)throw Error(l(317));x[W2]=a}else P0(),(a.flags&128)===0&&(a.memoizedState=null),a.flags|=4;w2(a),x=!1}else x=Hc(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=x),x=!0;if(!x)return a.flags&256?(C4(a),a):(C4(a),null)}return C4(a),(a.flags&128)!==0?(a.lanes=i,a):(i=d!==null,n=n!==null&&n.memoizedState!==null,i&&(d=a.child,x=null,d.alternate!==null&&d.alternate.memoizedState!==null&&d.alternate.memoizedState.cachePool!==null&&(x=d.alternate.memoizedState.cachePool.pool),z=null,d.memoizedState!==null&&d.memoizedState.cachePool!==null&&(z=d.memoizedState.cachePool.pool),z!==x&&(d.flags|=2048)),i!==n&&i&&(a.child.flags|=8192),h5(a,a.updateQueue),w2(a),null);case 4:return L1(),n===null&&_a(a.stateNode.containerInfo),w2(a),null;case 10:return N3(a.type),w2(a),null;case 19:if(U(k2),d=a.memoizedState,d===null)return w2(a),null;if(x=(a.flags&128)!==0,z=d.rendering,z===null)if(x)re(d,!1);else{if(j2!==0||n!==null&&(n.flags&128)!==0)for(n=a.child;n!==null;){if(z=J8(n),z!==null){for(a.flags|=128,re(d,!1),n=z.updateQueue,a.updateQueue=n,h5(a,n),a.subtreeFlags=0,n=i,i=a.child;i!==null;)bs(i,n),i=i.sibling;return n1(k2,k2.current&1|2),l2&&H3(a,d.treeForkCount),a.child}n=n.sibling}d.tail!==null&&r1()>g5&&(a.flags|=128,x=!0,re(d,!1),a.lanes=4194304)}else{if(!x)if(n=J8(z),n!==null){if(a.flags|=128,x=!0,n=n.updateQueue,a.updateQueue=n,h5(a,n),re(d,!0),d.tail===null&&d.tailMode==="hidden"&&!z.alternate&&!l2)return w2(a),null}else 2*r1()-d.renderingStartTime>g5&&i!==536870912&&(a.flags|=128,x=!0,re(d,!1),a.lanes=4194304);d.isBackwards?(z.sibling=a.child,a.child=z):(n=d.last,n!==null?n.sibling=z:a.child=z,d.last=z)}return d.tail!==null?(n=d.tail,d.rendering=n,d.tail=n.sibling,d.renderingStartTime=r1(),n.sibling=null,i=k2.current,n1(k2,x?i&1|2:i&1),l2&&H3(a,d.treeForkCount),n):(w2(a),null);case 22:case 23:return C4(a),qc(),d=a.memoizedState!==null,n!==null?n.memoizedState!==null!==d&&(a.flags|=8192):d&&(a.flags|=8192),d?(i&536870912)!==0&&(a.flags&128)===0&&(w2(a),a.subtreeFlags&6&&(a.flags|=8192)):w2(a),i=a.updateQueue,i!==null&&h5(a,i.retryQueue),i=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(i=n.memoizedState.cachePool.pool),d=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(d=a.memoizedState.cachePool.pool),d!==i&&(a.flags|=2048),n!==null&&U($0),null;case 24:return i=null,n!==null&&(i=n.memoizedState.cache),a.memoizedState.cache!==i&&(a.flags|=2048),N3(D2),w2(a),null;case 25:return null;case 30:return null}throw Error(l(156,a.tag))}function cb(n,a){switch(Ac(a),a.tag){case 1:return n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 3:return N3(D2),L1(),n=a.flags,(n&65536)!==0&&(n&128)===0?(a.flags=n&-65537|128,a):null;case 26:case 27:case 5:return s1(a),null;case 31:if(a.memoizedState!==null){if(C4(a),a.alternate===null)throw Error(l(340));P0()}return n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 13:if(C4(a),n=a.memoizedState,n!==null&&n.dehydrated!==null){if(a.alternate===null)throw Error(l(340));P0()}return n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 19:return U(k2),null;case 4:return L1(),null;case 10:return N3(a.type),null;case 22:case 23:return C4(a),qc(),n!==null&&U($0),n=a.flags,n&65536?(a.flags=n&-65537|128,a):null;case 24:return N3(D2),null;case 25:return null;default:return null}}function Go(n,a){switch(Ac(a),a.tag){case 3:N3(D2),L1();break;case 26:case 27:case 5:s1(a);break;case 4:L1();break;case 31:a.memoizedState!==null&&C4(a);break;case 13:C4(a);break;case 19:U(k2);break;case 10:N3(a.type);break;case 22:case 23:C4(a),qc(),n!==null&&U($0);break;case 24:N3(D2)}}function le(n,a){try{var i=a.updateQueue,d=i!==null?i.lastEffect:null;if(d!==null){var x=d.next;i=x;do{if((i.tag&n)===n){d=void 0;var z=i.create,H=i.inst;d=z(),H.destroy=d}i=i.next}while(i!==x)}}catch(F){m2(a,a.return,F)}}function d0(n,a,i){try{var d=a.updateQueue,x=d!==null?d.lastEffect:null;if(x!==null){var z=x.next;d=z;do{if((d.tag&n)===n){var H=d.inst,F=H.destroy;if(F!==void 0){H.destroy=void 0,x=a;var P=i,a1=F;try{a1()}catch(h1){m2(x,P,h1)}}}d=d.next}while(d!==z)}}catch(h1){m2(a,a.return,h1)}}function Yo(n){var a=n.updateQueue;if(a!==null){var i=n.stateNode;try{Ts(a,i)}catch(d){m2(n,n.return,d)}}}function Ko(n,a,i){i.props=W0(n.type,n.memoizedProps),i.state=n.memoizedState;try{i.componentWillUnmount()}catch(d){m2(n,a,d)}}function ie(n,a){try{var i=n.ref;if(i!==null){switch(n.tag){case 26:case 27:case 5:var d=n.stateNode;break;case 30:d=n.stateNode;break;default:d=n.stateNode}typeof i=="function"?n.refCleanup=i(d):i.current=d}}catch(x){m2(n,a,x)}}function m3(n,a){var i=n.ref,d=n.refCleanup;if(i!==null)if(typeof d=="function")try{d()}catch(x){m2(n,a,x)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof i=="function")try{i(null)}catch(x){m2(n,a,x)}else i.current=null}function Wo(n){var a=n.type,i=n.memoizedProps,d=n.stateNode;try{t:switch(a){case"button":case"input":case"select":case"textarea":i.autoFocus&&d.focus();break t;case"img":i.src?d.src=i.src:i.srcSet&&(d.srcset=i.srcSet)}}catch(x){m2(n,n.return,x)}}function ba(n,a,i){try{var d=n.stateNode;Sb(d,n.type,i,a),d[d4]=a}catch(x){m2(n,n.return,x)}}function Xo(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&x0(n.type)||n.tag===4}function za(n){t:for(;;){for(;n.sibling===null;){if(n.return===null||Xo(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&x0(n.type)||n.flags&2||n.child===null||n.tag===4)continue t;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function ya(n,a,i){var d=n.tag;if(d===5||d===6)n=n.stateNode,a?(i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i).insertBefore(n,a):(a=i.nodeType===9?i.body:i.nodeName==="HTML"?i.ownerDocument.body:i,a.appendChild(n),i=i._reactRootContainer,i!=null||a.onclick!==null||(a.onclick=S3));else if(d!==4&&(d===27&&x0(n.type)&&(i=n.stateNode,a=null),n=n.child,n!==null))for(ya(n,a,i),n=n.sibling;n!==null;)ya(n,a,i),n=n.sibling}function m5(n,a,i){var d=n.tag;if(d===5||d===6)n=n.stateNode,a?i.insertBefore(n,a):i.appendChild(n);else if(d!==4&&(d===27&&x0(n.type)&&(i=n.stateNode),n=n.child,n!==null))for(m5(n,a,i),n=n.sibling;n!==null;)m5(n,a,i),n=n.sibling}function Qo(n){var a=n.stateNode,i=n.memoizedProps;try{for(var d=n.type,x=a.attributes;x.length;)a.removeAttributeNode(x[0]);t4(a,d,i),a[W2]=n,a[d4]=i}catch(z){m2(n,n.return,z)}}var E3=!1,q2=!1,wa=!1,Jo=typeof WeakSet=="function"?WeakSet:Set,K2=null;function ab(n,a){if(n=n.containerInfo,Ua=R5,n=us(n),vc(n)){if("selectionStart"in n)var i={start:n.selectionStart,end:n.selectionEnd};else t:{i=(i=n.ownerDocument)&&i.defaultView||window;var d=i.getSelection&&i.getSelection();if(d&&d.rangeCount!==0){i=d.anchorNode;var x=d.anchorOffset,z=d.focusNode;d=d.focusOffset;try{i.nodeType,z.nodeType}catch{i=null;break t}var H=0,F=-1,P=-1,a1=0,h1=0,v1=n,l1=null;e:for(;;){for(var i1;v1!==i||x!==0&&v1.nodeType!==3||(F=H+x),v1!==z||d!==0&&v1.nodeType!==3||(P=H+d),v1.nodeType===3&&(H+=v1.nodeValue.length),(i1=v1.firstChild)!==null;)l1=v1,v1=i1;for(;;){if(v1===n)break e;if(l1===i&&++a1===x&&(F=H),l1===z&&++h1===d&&(P=H),(i1=v1.nextSibling)!==null)break;v1=l1,l1=v1.parentNode}v1=i1}i=F===-1||P===-1?null:{start:F,end:P}}else i=null}i=i||{start:0,end:0}}else i=null;for(Ia={focusedElem:n,selectionRange:i},R5=!1,K2=a;K2!==null;)if(a=K2,n=a.child,(a.subtreeFlags&1028)!==0&&n!==null)n.return=a,K2=n;else for(;K2!==null;){switch(a=K2,z=a.alternate,n=a.flags,a.tag){case 0:if((n&4)!==0&&(n=a.updateQueue,n=n!==null?n.events:null,n!==null))for(i=0;i title"))),t4(z,d,i),z[W2]=n,Y2(z),d=z;break t;case"link":var H=rd("link","href",x).get(d+(i.href||""));if(H){for(var F=0;Fg2&&(H=g2,g2=I1,I1=H);var W=ss(F,I1),$=ss(F,g2);if(W&&$&&(i1.rangeCount!==1||i1.anchorNode!==W.node||i1.anchorOffset!==W.offset||i1.focusNode!==$.node||i1.focusOffset!==$.offset)){var c1=v1.createRange();c1.setStart(W.node,W.offset),i1.removeAllRanges(),I1>g2?(i1.addRange(c1),i1.extend($.node,$.offset)):(c1.setEnd($.node,$.offset),i1.addRange(c1))}}}}for(v1=[],i1=F;i1=i1.parentNode;)i1.nodeType===1&&v1.push({element:i1,left:i1.scrollLeft,top:i1.scrollTop});for(typeof F.focus=="function"&&F.focus(),F=0;Fi?32:i,_.T=null,i=ja,ja=null;var z=v0,H=_3;if($2=0,I6=v0=null,_3=0,(u2&6)!==0)throw Error(l(331));var F=u2;if(u2|=4,uu(z.current),iu(z,z.current,H,i),u2=F,me(0,!1),y1&&typeof y1.onPostCommitFiberRoot=="function")try{y1.onPostCommitFiberRoot(u1,z)}catch{}return!0}finally{I.p=x,_.T=d,Hu(n,a)}}function Nu(n,a,i){a=T4(i,a),a=sa(n.stateNode,a,2),n=s0(n,a,2),n!==null&&(t3(n,2),f3(n))}function m2(n,a,i){if(n.tag===3)Nu(n,n,i);else for(;a!==null;){if(a.tag===3){Nu(a,n,i);break}else if(a.tag===1){var d=a.stateNode;if(typeof a.type.getDerivedStateFromError=="function"||typeof d.componentDidCatch=="function"&&(f0===null||!f0.has(d))){n=T4(i,n),i=Vo(2),d=s0(a,i,2),d!==null&&(Bo(i,d,a,n),t3(d,2),f3(d));break}}a=a.return}}function ka(n,a,i){var d=n.pingCache;if(d===null){d=n.pingCache=new ib;var x=new Set;d.set(a,x)}else x=d.get(a),x===void 0&&(x=new Set,d.set(a,x));x.has(i)||(Sa=!0,x.add(i),n=hb.bind(null,n,a,i),a.then(n,n))}function hb(n,a,i){var d=n.pingCache;d!==null&&d.delete(a),n.pingedLanes|=n.suspendedLanes&i,n.warmLanes&=~i,z2===n&&(a2&i)===i&&(j2===4||j2===3&&(a2&62914560)===a2&&300>r1()-p5?(u2&2)===0&&$6(n,0):Aa|=i,U6===a2&&(U6=0)),f3(n)}function Vu(n,a){a===0&&(a=b2()),n=_0(n,a),n!==null&&(t3(n,a),f3(n))}function mb(n){var a=n.memoizedState,i=0;a!==null&&(i=a.retryLane),Vu(n,i)}function fb(n,a){var i=0;switch(n.tag){case 31:case 13:var d=n.stateNode,x=n.memoizedState;x!==null&&(i=x.retryLane);break;case 19:d=n.stateNode;break;case 22:d=n.stateNode._retryCache;break;default:throw Error(l(314))}d!==null&&d.delete(a),Vu(n,i)}function vb(n,a){return R1(n,a)}var M5=null,G6=null,Ra=!1,C5=!1,Ea=!1,g0=0;function f3(n){n!==G6&&n.next===null&&(G6===null?M5=G6=n:G6=G6.next=n),C5=!0,Ra||(Ra=!0,gb())}function me(n,a){if(!Ea&&C5){Ea=!0;do for(var i=!1,d=M5;d!==null;){if(n!==0){var x=d.pendingLanes;if(x===0)var z=0;else{var H=d.suspendedLanes,F=d.pingedLanes;z=(1<<31-c2(42|n)+1)-1,z&=x&~(H&~F),z=z&201326741?z&201326741|1:z?z|2:0}z!==0&&(i=!0,Eu(d,z))}else z=a2,z=f2(d,d===z2?z:0,d.cancelPendingCommit!==null||d.timeoutHandle!==-1),(z&3)===0||d2(d,z)||(i=!0,Eu(d,z));d=d.next}while(i);Ea=!1}}function pb(){Bu()}function Bu(){C5=Ra=!1;var n=0;g0!==0&&Lb()&&(n=g0);for(var a=r1(),i=null,d=M5;d!==null;){var x=d.next,z=ku(d,a);z===0?(d.next=null,i===null?M5=x:i.next=x,x===null&&(G6=i)):(i=d,(n!==0||(z&3)!==0)&&(C5=!0)),d=x}$2!==0&&$2!==5||me(n),g0!==0&&(g0=0)}function ku(n,a){for(var i=n.suspendedLanes,d=n.pingedLanes,x=n.expirationTimes,z=n.pendingLanes&-62914561;0F)break;var h1=P.transferSize,v1=P.initiatorType;h1&&Uu(v1)&&(P=P.responseEnd,H+=h1*(P"u"?null:document;function ed(n,a,i){var d=Y6;if(d&&typeof a=="string"&&a){var x=E4(a);x='link[rel="'+n+'"][href="'+x+'"]',typeof i=="string"&&(x+='[crossorigin="'+i+'"]'),td.has(x)||(td.add(x),n={rel:n,crossOrigin:i,href:a},d.querySelector(x)===null&&(a=d.createElement("link"),t4(a,"link",n),Y2(a),d.head.appendChild(a)))}}function Fb(n){q3.D(n),ed("dns-prefetch",n,null)}function Tb(n,a){q3.C(n,a),ed("preconnect",n,a)}function Db(n,a,i){q3.L(n,a,i);var d=Y6;if(d&&n&&a){var x='link[rel="preload"][as="'+E4(a)+'"]';a==="image"&&i&&i.imageSrcSet?(x+='[imagesrcset="'+E4(i.imageSrcSet)+'"]',typeof i.imageSizes=="string"&&(x+='[imagesizes="'+E4(i.imageSizes)+'"]')):x+='[href="'+E4(n)+'"]';var z=x;switch(a){case"style":z=K6(n);break;case"script":z=W6(n)}U4.has(z)||(n=b({rel:"preload",href:a==="image"&&i&&i.imageSrcSet?void 0:n,as:a},i),U4.set(z,n),d.querySelector(x)!==null||a==="style"&&d.querySelector(ge(z))||a==="script"&&d.querySelector(xe(z))||(a=d.createElement("link"),t4(a,"link",n),Y2(a),d.head.appendChild(a)))}}function Ob(n,a){q3.m(n,a);var i=Y6;if(i&&n){var d=a&&typeof a.as=="string"?a.as:"script",x='link[rel="modulepreload"][as="'+E4(d)+'"][href="'+E4(n)+'"]',z=x;switch(d){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":z=W6(n)}if(!U4.has(z)&&(n=b({rel:"modulepreload",href:n},a),U4.set(z,n),i.querySelector(x)===null)){switch(d){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(i.querySelector(xe(z)))return}d=i.createElement("link"),t4(d,"link",n),Y2(d),i.head.appendChild(d)}}}function _b(n,a,i){q3.S(n,a,i);var d=Y6;if(d&&n){var x=g6(d).hoistableStyles,z=K6(n);a=a||"default";var H=x.get(z);if(!H){var F={loading:0,preload:null};if(H=d.querySelector(ge(z)))F.loading=5;else{n=b({rel:"stylesheet",href:n,"data-precedence":a},i),(i=U4.get(z))&&Xa(n,i);var P=H=d.createElement("link");Y2(P),t4(P,"link",n),P._p=new Promise(function(a1,h1){P.onload=a1,P.onerror=h1}),P.addEventListener("load",function(){F.loading|=1}),P.addEventListener("error",function(){F.loading|=2}),F.loading|=4,j5(H,a,d)}H={type:"stylesheet",instance:H,count:1,state:F},x.set(z,H)}}}function qb(n,a){q3.X(n,a);var i=Y6;if(i&&n){var d=g6(i).hoistableScripts,x=W6(n),z=d.get(x);z||(z=i.querySelector(xe(x)),z||(n=b({src:n,async:!0},a),(a=U4.get(x))&&Qa(n,a),z=i.createElement("script"),Y2(z),t4(z,"link",n),i.head.appendChild(z)),z={type:"script",instance:z,count:1,state:null},d.set(x,z))}}function Pb(n,a){q3.M(n,a);var i=Y6;if(i&&n){var d=g6(i).hoistableScripts,x=W6(n),z=d.get(x);z||(z=i.querySelector(xe(x)),z||(n=b({src:n,async:!0,type:"module"},a),(a=U4.get(x))&&Qa(n,a),z=i.createElement("script"),Y2(z),t4(z,"link",n),i.head.appendChild(z)),z={type:"script",instance:z,count:1,state:null},d.set(x,z))}}function nd(n,a,i,d){var x=(x=G.current)?H5(x):null;if(!x)throw Error(l(446));switch(n){case"meta":case"title":return null;case"style":return typeof i.precedence=="string"&&typeof i.href=="string"?(a=K6(i.href),i=g6(x).hoistableStyles,d=i.get(a),d||(d={type:"style",instance:null,count:0,state:null},i.set(a,d)),d):{type:"void",instance:null,count:0,state:null};case"link":if(i.rel==="stylesheet"&&typeof i.href=="string"&&typeof i.precedence=="string"){n=K6(i.href);var z=g6(x).hoistableStyles,H=z.get(n);if(H||(x=x.ownerDocument||x,H={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},z.set(n,H),(z=x.querySelector(ge(n)))&&!z._p&&(H.instance=z,H.state.loading=5),U4.has(n)||(i={rel:"preload",as:"style",href:i.href,crossOrigin:i.crossOrigin,integrity:i.integrity,media:i.media,hrefLang:i.hrefLang,referrerPolicy:i.referrerPolicy},U4.set(n,i),z||Ub(x,n,i,H.state))),a&&d===null)throw Error(l(528,""));return H}if(a&&d!==null)throw Error(l(529,""));return null;case"script":return a=i.async,i=i.src,typeof i=="string"&&a&&typeof a!="function"&&typeof a!="symbol"?(a=W6(i),i=g6(x).hoistableScripts,d=i.get(a),d||(d={type:"script",instance:null,count:0,state:null},i.set(a,d)),d):{type:"void",instance:null,count:0,state:null};default:throw Error(l(444,n))}}function K6(n){return'href="'+E4(n)+'"'}function ge(n){return'link[rel="stylesheet"]['+n+"]"}function cd(n){return b({},n,{"data-precedence":n.precedence,precedence:null})}function Ub(n,a,i,d){n.querySelector('link[rel="preload"][as="style"]['+a+"]")?d.loading=1:(a=n.createElement("link"),d.preload=a,a.addEventListener("load",function(){return d.loading|=1}),a.addEventListener("error",function(){return d.loading|=2}),t4(a,"link",i),Y2(a),n.head.appendChild(a))}function W6(n){return'[src="'+E4(n)+'"]'}function xe(n){return"script[async]"+n}function ad(n,a,i){if(a.count++,a.instance===null)switch(a.type){case"style":var d=n.querySelector('style[data-href~="'+E4(i.href)+'"]');if(d)return a.instance=d,Y2(d),d;var x=b({},i,{"data-href":i.href,"data-precedence":i.precedence,href:null,precedence:null});return d=(n.ownerDocument||n).createElement("style"),Y2(d),t4(d,"style",x),j5(d,i.precedence,n),a.instance=d;case"stylesheet":x=K6(i.href);var z=n.querySelector(ge(x));if(z)return a.state.loading|=4,a.instance=z,Y2(z),z;d=cd(i),(x=U4.get(x))&&Xa(d,x),z=(n.ownerDocument||n).createElement("link"),Y2(z);var H=z;return H._p=new Promise(function(F,P){H.onload=F,H.onerror=P}),t4(z,"link",d),a.state.loading|=4,j5(z,i.precedence,n),a.instance=z;case"script":return z=W6(i.src),(x=n.querySelector(xe(z)))?(a.instance=x,Y2(x),x):(d=i,(x=U4.get(z))&&(d=b({},i),Qa(d,x)),n=n.ownerDocument||n,x=n.createElement("script"),Y2(x),t4(x,"link",d),n.head.appendChild(x),a.instance=x);case"void":return null;default:throw Error(l(443,a.type))}else a.type==="stylesheet"&&(a.state.loading&4)===0&&(d=a.instance,a.state.loading|=4,j5(d,i.precedence,n));return a.instance}function j5(n,a,i){for(var d=i.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),x=d.length?d[d.length-1]:null,z=x,H=0;H title"):null)}function Ib(n,a,i){if(i===1||a.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof a.precedence!="string"||typeof a.href!="string"||a.href==="")break;return!0;case"link":if(typeof a.rel!="string"||typeof a.href!="string"||a.href===""||a.onLoad||a.onError)break;switch(a.rel){case"stylesheet":return n=a.disabled,typeof a.precedence=="string"&&n==null;default:return!0}case"script":if(a.async&&typeof a.async!="function"&&typeof a.async!="symbol"&&!a.onLoad&&!a.onError&&a.src&&typeof a.src=="string")return!0}return!1}function id(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function $b(n,a,i,d){if(i.type==="stylesheet"&&(typeof d.media!="string"||matchMedia(d.media).matches!==!1)&&(i.state.loading&4)===0){if(i.instance===null){var x=K6(d.href),z=a.querySelector(ge(x));if(z){a=z._p,a!==null&&typeof a=="object"&&typeof a.then=="function"&&(n.count++,n=V5.bind(n),a.then(n,n)),i.state.loading|=4,i.instance=z,Y2(z);return}z=a.ownerDocument||a,d=cd(d),(x=U4.get(x))&&Xa(d,x),z=z.createElement("link"),Y2(z);var H=z;H._p=new Promise(function(F,P){H.onload=F,H.onerror=P}),t4(z,"link",d),i.instance=z}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(i,a),(a=i.state.preload)&&(i.state.loading&3)===0&&(n.count++,i=V5.bind(n),a.addEventListener("load",i),a.addEventListener("error",i))}}var Ja=0;function Zb(n,a){return n.stylesheets&&n.count===0&&k5(n,n.stylesheets),0Ja?50:800)+a);return n.unsuspend=i,function(){n.unsuspend=null,clearTimeout(d),clearTimeout(x)}}:null}function V5(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)k5(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var B5=null;function k5(n,a){n.stylesheets=null,n.unsuspend!==null&&(n.count++,B5=new Map,a.forEach(Gb,n),B5=null,V5.call(n))}function Gb(n,a){if(!(a.state.loading&4)){var i=B5.get(n);if(i)var d=i.get(null);else{i=new Map,B5.set(n,i);for(var x=n.querySelectorAll("link[data-precedence],style[data-precedence]"),z=0;z"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),s9.exports=uz(),s9.exports}var hz=dz();var Bd="popstate";function mz(t={}){function e(l,s){let{pathname:o,search:h,hash:m}=l.location;return dr("",{pathname:o,search:h,hash:m},s.state&&s.state.usr||null,s.state&&s.state.key||"default")}function c(l,s){return typeof s=="string"?s:t8(s)}return vz(e,c,null,t)}function S2(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function N4(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function fz(){return Math.random().toString(36).substring(2,10)}function kd(t,e){return{usr:t.state,key:t.key,idx:e}}function dr(t,e,c=null,l){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?wt(e):e,state:c,key:e&&e.key||l||fz()}}function t8({pathname:t="/",search:e="",hash:c=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),c&&c!=="#"&&(t+=c.charAt(0)==="#"?c:"#"+c),t}function wt(t){let e={};if(t){let c=t.indexOf("#");c>=0&&(e.hash=t.substring(c),t=t.substring(0,c));let l=t.indexOf("?");l>=0&&(e.search=t.substring(l),t=t.substring(0,l)),t&&(e.pathname=t)}return e}function vz(t,e,c,l={}){let{window:s=document.defaultView,v5Compat:o=!1}=l,h=s.history,m="POP",v=null,g=p();g==null&&(g=0,h.replaceState({...h.state,idx:g},""));function p(){return(h.state||{idx:null}).idx}function b(){m="POP";let M=p(),V=M==null?null:M-g;g=M,v&&v({action:m,location:A.location,delta:V})}function w(M,V){m="PUSH";let L=dr(A.location,M,V);g=p()+1;let C=kd(L,g),N=A.createHref(L);try{h.pushState(C,"",N)}catch(k){if(k instanceof DOMException&&k.name==="DataCloneError")throw k;s.location.assign(N)}o&&v&&v({action:m,location:A.location,delta:1})}function y(M,V){m="REPLACE";let L=dr(A.location,M,V);g=p();let C=kd(L,g),N=A.createHref(L);h.replaceState(C,"",N),o&&v&&v({action:m,location:A.location,delta:0})}function S(M){return pz(M)}let A={get action(){return m},get location(){return t(s,h)},listen(M){if(v)throw new Error("A history only accepts one active listener");return s.addEventListener(Bd,b),v=M,()=>{s.removeEventListener(Bd,b),v=null}},createHref(M){return e(s,M)},createURL:S,encodeLocation(M){let V=S(M);return{pathname:V.pathname,search:V.search,hash:V.hash}},push:w,replace:y,go(M){return h.go(M)}};return A}function pz(t,e=!1){let c="http://localhost";typeof window<"u"&&(c=window.location.origin!=="null"?window.location.origin:window.location.href),S2(c,"No window.location.(origin|href) available to create URL");let l=typeof t=="string"?t:t8(t);return l=l.replace(/ $/,"%20"),!e&&l.startsWith("//")&&(l=c+l),new URL(l,c)}function uf(t,e,c="/"){return gz(t,e,c,!1)}function gz(t,e,c,l){let s=typeof e=="string"?wt(e):e,o=Y3(s.pathname||"/",c);if(o==null)return null;let h=df(t);xz(h);let m=null;for(let v=0;m==null&&v{let p={relativePath:g===void 0?h.path||"":g,caseSensitive:h.caseSensitive===!0,childrenIndex:m,route:h};if(p.relativePath.startsWith("/")){if(!p.relativePath.startsWith(l)&&v)return;S2(p.relativePath.startsWith(l),`Absolute route path "${p.relativePath}" nested under path "${l}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),p.relativePath=p.relativePath.slice(l.length)}let b=G3([l,p.relativePath]),w=c.concat(p);h.children&&h.children.length>0&&(S2(h.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${b}".`),df(h.children,e,w,b,v)),!(h.path==null&&!h.index)&&e.push({path:b,score:Sz(b,h.index),routesMeta:w})};return t.forEach((h,m)=>{if(h.path===""||!h.path?.includes("?"))o(h,m);else for(let v of hf(h.path))o(h,m,!0,v)}),e}function hf(t){let e=t.split("/");if(e.length===0)return[];let[c,...l]=e,s=c.endsWith("?"),o=c.replace(/\?$/,"");if(l.length===0)return s?[o,""]:[o];let h=hf(l.join("/")),m=[];return m.push(...h.map(v=>v===""?o:[o,v].join("/"))),s&&m.push(...h),m.map(v=>t.startsWith("/")&&v===""?"/":v)}function xz(t){t.sort((e,c)=>e.score!==c.score?c.score-e.score:Az(e.routesMeta.map(l=>l.childrenIndex),c.routesMeta.map(l=>l.childrenIndex)))}var bz=/^:[\w-]+$/,zz=3,yz=2,wz=1,Mz=10,Cz=-2,Rd=t=>t==="*";function Sz(t,e){let c=t.split("/"),l=c.length;return c.some(Rd)&&(l+=Cz),e&&(l+=yz),c.filter(s=>!Rd(s)).reduce((s,o)=>s+(bz.test(o)?zz:o===""?wz:Mz),l)}function Az(t,e){return t.length===e.length&&t.slice(0,-1).every((l,s)=>l===e[s])?t[t.length-1]-e[e.length-1]:0}function Lz(t,e,c=!1){let{routesMeta:l}=t,s={},o="/",h=[];for(let m=0;m{if(p==="*"){let S=m[w]||"";h=o.slice(0,o.length-S.length).replace(/(.)\/+$/,"$1")}const y=m[w];return b&&!y?g[p]=void 0:g[p]=(y||"").replace(/%2F/g,"/"),g},{}),pathname:o,pathnameBase:h,pattern:t}}function Hz(t,e=!1,c=!0){N4(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let l=[],s="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(h,m,v)=>(l.push({paramName:m,isOptional:v!=null}),v?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(l.push({paramName:"*"}),s+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):c?s+="\\/*$":t!==""&&t!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,e?void 0:"i"),l]}function jz(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return N4(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function Y3(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let c=e.endsWith("/")?e.length-1:e.length,l=t.charAt(c);return l&&l!=="/"?null:t.slice(c)||"/"}var Nz=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Vz=t=>Nz.test(t);function Bz(t,e="/"){let{pathname:c,search:l="",hash:s=""}=typeof t=="string"?wt(t):t,o;if(c)if(Vz(c))o=c;else{if(c.includes("//")){let h=c;c=c.replace(/\/\/+/g,"/"),N4(!1,`Pathnames cannot have embedded double slashes - normalizing ${h} -> ${c}`)}c.startsWith("/")?o=Ed(c.substring(1),"/"):o=Ed(c,e)}else o=e;return{pathname:o,search:Ez(l),hash:Fz(s)}}function Ed(t,e){let c=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(s=>{s===".."?c.length>1&&c.pop():s!=="."&&c.push(s)}),c.length>1?c.join("/"):"/"}function h9(t,e,c,l){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(l)}]. Please separate it out to the \`to.${c}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function kz(t){return t.filter((e,c)=>c===0||e.route.path&&e.route.path.length>0)}function hl(t){let e=kz(t);return e.map((c,l)=>l===e.length-1?c.pathname:c.pathnameBase)}function ml(t,e,c,l=!1){let s;typeof t=="string"?s=wt(t):(s={...t},S2(!s.pathname||!s.pathname.includes("?"),h9("?","pathname","search",s)),S2(!s.pathname||!s.pathname.includes("#"),h9("#","pathname","hash",s)),S2(!s.search||!s.search.includes("#"),h9("#","search","hash",s)));let o=t===""||s.pathname==="",h=o?"/":s.pathname,m;if(h==null)m=c;else{let b=e.length-1;if(!l&&h.startsWith("..")){let w=h.split("/");for(;w[0]==="..";)w.shift(),b-=1;s.pathname=w.join("/")}m=b>=0?e[b]:"/"}let v=Bz(s,m),g=h&&h!=="/"&&h.endsWith("/"),p=(o||h===".")&&c.endsWith("/");return!v.pathname.endsWith("/")&&(g||p)&&(v.pathname+="/"),v}var G3=t=>t.join("/").replace(/\/\/+/g,"/"),Rz=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),Ez=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,Fz=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function Tz(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var mf=["POST","PUT","PATCH","DELETE"];new Set(mf);var Dz=["GET",...mf];new Set(Dz);var Mt=f.createContext(null);Mt.displayName="DataRouter";var Ln=f.createContext(null);Ln.displayName="DataRouterState";f.createContext(!1);var ff=f.createContext({isTransitioning:!1});ff.displayName="ViewTransition";var Oz=f.createContext(new Map);Oz.displayName="Fetchers";var _z=f.createContext(null);_z.displayName="Await";var o3=f.createContext(null);o3.displayName="Navigation";var p8=f.createContext(null);p8.displayName="Location";var M3=f.createContext({outlet:null,matches:[],isDataRoute:!1});M3.displayName="Route";var fl=f.createContext(null);fl.displayName="RouteError";function qz(t,{relative:e}={}){S2(Ct(),"useHref() may be used only in the context of a component.");let{basename:c,navigator:l}=f.useContext(o3),{hash:s,pathname:o,search:h}=x8(t,{relative:e}),m=o;return c!=="/"&&(m=o==="/"?c:G3([c,o])),l.createHref({pathname:m,search:h,hash:s})}function Ct(){return f.useContext(p8)!=null}function W3(){return S2(Ct(),"useLocation() may be used only in the context of a component."),f.useContext(p8).location}var vf="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function pf(t){f.useContext(o3).static||f.useLayoutEffect(t)}function g8(){let{isDataRoute:t}=f.useContext(M3);return t?ty():Pz()}function Pz(){S2(Ct(),"useNavigate() may be used only in the context of a component.");let t=f.useContext(Mt),{basename:e,navigator:c}=f.useContext(o3),{matches:l}=f.useContext(M3),{pathname:s}=W3(),o=JSON.stringify(hl(l)),h=f.useRef(!1);return pf(()=>{h.current=!0}),f.useCallback((v,g={})=>{if(N4(h.current,vf),!h.current)return;if(typeof v=="number"){c.go(v);return}let p=ml(v,JSON.parse(o),s,g.relative==="path");t==null&&e!=="/"&&(p.pathname=p.pathname==="/"?e:G3([e,p.pathname])),(g.replace?c.replace:c.push)(p,g.state,g)},[e,c,o,s,t])}f.createContext(null);function x8(t,{relative:e}={}){let{matches:c}=f.useContext(M3),{pathname:l}=W3(),s=JSON.stringify(hl(c));return f.useMemo(()=>ml(t,JSON.parse(s),l,e==="path"),[t,s,l,e])}function Uz(t,e){return gf(t,e)}function gf(t,e,c,l,s){S2(Ct(),"useRoutes() may be used only in the context of a component.");let{navigator:o}=f.useContext(o3),{matches:h}=f.useContext(M3),m=h[h.length-1],v=m?m.params:{},g=m?m.pathname:"/",p=m?m.pathnameBase:"/",b=m&&m.route;{let L=b&&b.path||"";xf(g,!b||L.endsWith("*")||L.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${g}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let w=W3(),y;if(e){let L=typeof e=="string"?wt(e):e;S2(p==="/"||L.pathname?.startsWith(p),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${p}" but pathname "${L.pathname}" was given in the \`location\` prop.`),y=L}else y=w;let S=y.pathname||"/",A=S;if(p!=="/"){let L=p.replace(/^\//,"").split("/");A="/"+S.replace(/^\//,"").split("/").slice(L.length).join("/")}let M=uf(t,{pathname:A});N4(b||M!=null,`No routes matched location "${y.pathname}${y.search}${y.hash}" `),N4(M==null||M[M.length-1].route.element!==void 0||M[M.length-1].route.Component!==void 0||M[M.length-1].route.lazy!==void 0,`Matched leaf route at location "${y.pathname}${y.search}${y.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let V=Yz(M&&M.map(L=>Object.assign({},L,{params:Object.assign({},v,L.params),pathname:G3([p,o.encodeLocation?o.encodeLocation(L.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:L.pathname]),pathnameBase:L.pathnameBase==="/"?p:G3([p,o.encodeLocation?o.encodeLocation(L.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:L.pathnameBase])})),h,c,l,s);return e&&V?f.createElement(p8.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...y},navigationType:"POP"}},V):V}function Iz(){let t=Jz(),e=Tz(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),c=t instanceof Error?t.stack:null,l="rgba(200,200,200, 0.5)",s={padding:"0.5rem",backgroundColor:l},o={padding:"2px 4px",backgroundColor:l},h=null;return console.error("Error handled by React Router default ErrorBoundary:",t),h=f.createElement(f.Fragment,null,f.createElement("p",null,"💿 Hey developer 👋"),f.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",f.createElement("code",{style:o},"ErrorBoundary")," or"," ",f.createElement("code",{style:o},"errorElement")," prop on your route.")),f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},e),c?f.createElement("pre",{style:s},c):null,h)}var $z=f.createElement(Iz,null),Zz=class extends f.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||e.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){this.props.onError?this.props.onError(t,e):console.error("React Router caught the following error during render",t)}render(){return this.state.error!==void 0?f.createElement(M3.Provider,{value:this.props.routeContext},f.createElement(fl.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function Gz({routeContext:t,match:e,children:c}){let l=f.useContext(Mt);return l&&l.static&&l.staticContext&&(e.route.errorElement||e.route.ErrorBoundary)&&(l.staticContext._deepestRenderedBoundaryId=e.route.id),f.createElement(M3.Provider,{value:t},c)}function Yz(t,e=[],c=null,l=null,s=null){if(t==null){if(!c)return null;if(c.errors)t=c.matches;else if(e.length===0&&!c.initialized&&c.matches.length>0)t=c.matches;else return null}let o=t,h=c?.errors;if(h!=null){let p=o.findIndex(b=>b.route.id&&h?.[b.route.id]!==void 0);S2(p>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(h).join(",")}`),o=o.slice(0,Math.min(o.length,p+1))}let m=!1,v=-1;if(c)for(let p=0;p=0?o=o.slice(0,v+1):o=[o[0]];break}}}let g=c&&l?(p,b)=>{l(p,{location:c.location,params:c.matches?.[0]?.params??{},errorInfo:b})}:void 0;return o.reduceRight((p,b,w)=>{let y,S=!1,A=null,M=null;c&&(y=h&&b.route.id?h[b.route.id]:void 0,A=b.route.errorElement||$z,m&&(v<0&&w===0?(xf("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),S=!0,M=null):v===w&&(S=!0,M=b.route.hydrateFallbackElement||null)));let V=e.concat(o.slice(0,w+1)),L=()=>{let C;return y?C=A:S?C=M:b.route.Component?C=f.createElement(b.route.Component,null):b.route.element?C=b.route.element:C=p,f.createElement(Gz,{match:b,routeContext:{outlet:p,matches:V,isDataRoute:c!=null},children:C})};return c&&(b.route.ErrorBoundary||b.route.errorElement||w===0)?f.createElement(Zz,{location:c.location,revalidation:c.revalidation,component:A,error:y,children:L(),routeContext:{outlet:null,matches:V,isDataRoute:!0},onError:g}):L()},null)}function vl(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function Kz(t){let e=f.useContext(Mt);return S2(e,vl(t)),e}function Wz(t){let e=f.useContext(Ln);return S2(e,vl(t)),e}function Xz(t){let e=f.useContext(M3);return S2(e,vl(t)),e}function pl(t){let e=Xz(t),c=e.matches[e.matches.length-1];return S2(c.route.id,`${t} can only be used on routes that contain a unique "id"`),c.route.id}function Qz(){return pl("useRouteId")}function Jz(){let t=f.useContext(fl),e=Wz("useRouteError"),c=pl("useRouteError");return t!==void 0?t:e.errors?.[c]}function ty(){let{router:t}=Kz("useNavigate"),e=pl("useNavigate"),c=f.useRef(!1);return pf(()=>{c.current=!0}),f.useCallback(async(s,o={})=>{N4(c.current,vf),c.current&&(typeof s=="number"?t.navigate(s):await t.navigate(s,{fromRouteId:e,...o}))},[t,e])}var Fd={};function xf(t,e,c){!e&&!Fd[t]&&(Fd[t]=!0,N4(!1,c))}f.memo(ey);function ey({routes:t,future:e,state:c,unstable_onError:l}){return gf(t,void 0,c,l,e)}function ny({to:t,replace:e,state:c,relative:l}){S2(Ct()," may be used only in the context of a component.");let{static:s}=f.useContext(o3);N4(!s," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:o}=f.useContext(M3),{pathname:h}=W3(),m=g8(),v=ml(t,hl(o),h,l==="path"),g=JSON.stringify(v);return f.useEffect(()=>{m(JSON.parse(g),{replace:e,state:c,relative:l})},[m,g,l,e,c]),null}function Y4(t){S2(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function cy({basename:t="/",children:e=null,location:c,navigationType:l="POP",navigator:s,static:o=!1}){S2(!Ct(),"You cannot render a inside another . You should never have more than one in your app.");let h=t.replace(/^\/*/,"/"),m=f.useMemo(()=>({basename:h,navigator:s,static:o,future:{}}),[h,s,o]);typeof c=="string"&&(c=wt(c));let{pathname:v="/",search:g="",hash:p="",state:b=null,key:w="default"}=c,y=f.useMemo(()=>{let S=Y3(v,h);return S==null?null:{location:{pathname:S,search:g,hash:p,state:b,key:w},navigationType:l}},[h,v,g,p,b,w,l]);return N4(y!=null,` is not able to match the URL "${v}${g}${p}" because it does not start with the basename, so the won't render anything.`),y==null?null:f.createElement(o3.Provider,{value:m},f.createElement(p8.Provider,{children:e,value:y}))}function ay({children:t,location:e}){return Uz(hr(t),e)}function hr(t,e=[]){let c=[];return f.Children.forEach(t,(l,s)=>{if(!f.isValidElement(l))return;let o=[...e,s];if(l.type===f.Fragment){c.push.apply(c,hr(l.props.children,o));return}S2(l.type===Y4,`[${typeof l.type=="string"?l.type:l.type.name}] is not a component. All component children of must be a or `),S2(!l.props.index||!l.props.children,"An index route cannot have child routes.");let h={id:l.props.id||o.join("-"),caseSensitive:l.props.caseSensitive,element:l.props.element,Component:l.props.Component,index:l.props.index,path:l.props.path,middleware:l.props.middleware,loader:l.props.loader,action:l.props.action,hydrateFallbackElement:l.props.hydrateFallbackElement,HydrateFallback:l.props.HydrateFallback,errorElement:l.props.errorElement,ErrorBoundary:l.props.ErrorBoundary,hasErrorBoundary:l.props.hasErrorBoundary===!0||l.props.ErrorBoundary!=null||l.props.errorElement!=null,shouldRevalidate:l.props.shouldRevalidate,handle:l.props.handle,lazy:l.props.lazy};l.props.children&&(h.children=hr(l.props.children,o)),c.push(h)}),c}var x7="get",b7="application/x-www-form-urlencoded";function Hn(t){return t!=null&&typeof t.tagName=="string"}function ry(t){return Hn(t)&&t.tagName.toLowerCase()==="button"}function ly(t){return Hn(t)&&t.tagName.toLowerCase()==="form"}function iy(t){return Hn(t)&&t.tagName.toLowerCase()==="input"}function sy(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function oy(t,e){return t.button===0&&(!e||e==="_self")&&!sy(t)}function mr(t=""){return new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((e,c)=>{let l=t[c];return e.concat(Array.isArray(l)?l.map(s=>[c,s]):[[c,l]])},[]))}function uy(t,e){let c=mr(t);return e&&e.forEach((l,s)=>{c.has(s)||e.getAll(s).forEach(o=>{c.append(s,o)})}),c}var q5=null;function dy(){if(q5===null)try{new FormData(document.createElement("form"),0),q5=!1}catch{q5=!0}return q5}var hy=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function m9(t){return t!=null&&!hy.has(t)?(N4(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${b7}"`),null):t}function my(t,e){let c,l,s,o,h;if(ly(t)){let m=t.getAttribute("action");l=m?Y3(m,e):null,c=t.getAttribute("method")||x7,s=m9(t.getAttribute("enctype"))||b7,o=new FormData(t)}else if(ry(t)||iy(t)&&(t.type==="submit"||t.type==="image")){let m=t.form;if(m==null)throw new Error('Cannot submit a {rover?.private?.enabled ? ( -
+
Private safety
{errors.message ? ( -
Error: {errors.message}
+
Error: {errors.message}
) : null} {errors.details ? (
Failure details -
+          
             {JSON.stringify(errors.details, null, 2)}
           
) : null} {output.generated ? ( -
Generated: {output.generated}
+
Generated: {output.generated}
) : null} {output.posted ? ( -
Posted: {output.posted}
+
Posted: {output.posted}
) : null}
@@ -120,7 +120,7 @@ export default function LlmCommentaryPanel({ state, onClearHistory, clearingHist
Full Monitor Payload -
+        
           {JSON.stringify(state, null, 2)}
         
@@ -154,7 +154,7 @@ export default function LlmCommentaryPanel({ state, onClearHistory, clearingHist {selectedRun ? (
Run #{selectedRun.runId} details -
+          
             {JSON.stringify(selectedRun, null, 2)}
           
diff --git a/webui/src/components/AdminPanel/OverseerControlPanel.jsx b/webui/src/components/AdminPanel/OverseerControlPanel.jsx index 30872909..638553ef 100644 --- a/webui/src/components/AdminPanel/OverseerControlPanel.jsx +++ b/webui/src/components/AdminPanel/OverseerControlPanel.jsx @@ -58,49 +58,49 @@ export default function OverseerControlPanel({ state, onClearHistory, clearingHi
Latest Context -
+        
           {input.stateUpdate || ''}
         
Exact Model Input (messages[]) -
+        
           {renderModelMessages()}
         
Exact System Prompt -
+        
           {input.systemPrompt || ''}
         
Exact Transcript Rows -
+        
           {JSON.stringify(input.transcript || [], null, 2)}
         
Tool Availability -
+        
           {JSON.stringify({ available: input.availableTools, blocked: input.blockedTools }, null, 2)}
         
Exact Model Output -
+        
           {output.raw || ''}
         
Live Tool Calls -
+        
           {JSON.stringify(output.liveToolCalls || [], null, 2)}
         
@@ -115,7 +115,7 @@ export default function OverseerControlPanel({ state, onClearHistory, clearingHi
Recent Runs -
+        
           {JSON.stringify(state.history || [], null, 2)}
         
@@ -124,7 +124,7 @@ export default function OverseerControlPanel({ state, onClearHistory, clearingHi {showPayload ? 'Hide Full Payload' : 'Show Full Payload'} {showPayload ? ( -
{JSON.stringify(state, null, 2)}
+
{JSON.stringify(state, null, 2)}
) : null}
); diff --git a/webui/src/components/AlertFeed/index.jsx b/webui/src/components/AlertFeed/index.jsx index 4b68fdcb..5ad87a88 100644 --- a/webui/src/components/AlertFeed/index.jsx +++ b/webui/src/components/AlertFeed/index.jsx @@ -384,7 +384,7 @@ function AlertToastShell({ toast, onDismiss, onPause, onResume }) { const genericBackgroundColor = rgb ? `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, 0.5)` : 'rgba(33, 150, 243, 0.18)'; const genericBorderColor = rgb ? `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, 1)` : 'rgba(33, 150, 243, 0.45)'; const shellClass = [ - 'pointer-events-auto w-fit max-w-[80vw] overflow-hidden rounded-md shadow-sm shadow-black/40', + 'pointer-events-auto w-fit max-w-[80vw] overflow-hidden rounded-md shadow-xs shadow-black/40', generic ? '' : 'border border-white/10 bg-black/75', ].join(' '); @@ -429,7 +429,7 @@ function AlertToastShell({ toast, onDismiss, onPause, onResume }) { > {!isIOSMode && ( diff --git a/webui/src/components/GamepadMappingSettings/GamepadMappingSettingsContent.jsx b/webui/src/components/GamepadMappingSettings/GamepadMappingSettingsContent.jsx index 2cf27ca3..eb97f026 100644 --- a/webui/src/components/GamepadMappingSettings/GamepadMappingSettingsContent.jsx +++ b/webui/src/components/GamepadMappingSettings/GamepadMappingSettingsContent.jsx @@ -48,13 +48,13 @@ function actionDriveMode(actionId) { function CurveField({ label, value, onChange }) { return ( -