mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-07-04 08:52:28 +02:00
1 line
8.6 KiB
JavaScript
1 line
8.6 KiB
JavaScript
import{N as e,T as t,U as n,X as r,_t as i,c as a,h as o,l as s,m as c,o as l,s as u,u as d}from"./runtime-core.esm-bundler-CINEgm0a.js";import{l as f,t as p}from"./runtime-dom.esm-bundler-B3VeUO8l.js";import{v as m}from"./api-DSaJA91r.js";import{t as h}from"./createLucideIcon-D-_sbJKW.js";var g=h(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),_=m(`setup`,()=>{let e=n(1),t=n(6),r=n(`pyRpt${Math.floor(Math.random()*1e4).toString().padStart(4,`0`)}`),i=n(null),a=n(null),o=n(null),s=n(``),c=n(``),u=n(`/dev/ttyACM0`),d=n(``),f=n(5055),p=n(``),m=n(!1),h=n({frequency:`915.0`,spreading_factor:`7`,bandwidth:`125`,coding_rate:`5`,tx_power:`14`}),g=n([]),_=n([]),v=n(!1),y=n(!1),b=n(null),x=l(()=>{switch(e.value){case 1:return!0;case 2:return r.value.trim().length>0;case 3:return a.value!==null;case 4:{if(!i.value)return!1;let e=i.value.key.toLowerCase();return e===`kiss`||e===`pymc_usb`?u.value.trim().length>0:e===`pymc_tcp`?d.value.trim().length>0:!0}case 5:return m.value?h.value.frequency&&h.value.spreading_factor&&h.value.bandwidth&&h.value.coding_rate&&h.value.tx_power:o.value!==null;case 6:return s.value.length>=6&&s.value===c.value;default:return!1}}),S=l(()=>e.value>1),C=l(()=>e.value===t.value);async function w(){v.value=!0,b.value=null;try{let e=await(await fetch(`/api/hardware_options`)).json();if(e.error)throw Error(e.error);g.value=e.hardware||[]}catch(e){b.value=e instanceof Error?e.message:`Failed to load hardware options`,console.error(`Error fetching hardware options:`,e)}finally{v.value=!1}}let T=e=>({title:String(e.title??``),description:String(e.description??``),frequency:String(e.frequency??``),spreading_factor:String(e.spreading_factor??``),bandwidth:String(e.bandwidth??``),coding_rate:String(e.coding_rate??``),tx_power:String(e.tx_power??`14`)});async function E(){v.value=!0,b.value=null;try{try{let e=new AbortController,t=setTimeout(()=>e.abort(),4e3);try{let t=await fetch(`https://api.meshcore.nz/api/v1/config`,{signal:e.signal});if(t.ok){let e=(await t.json())?.config?.suggested_radio_settings?.entries??[];if(e.length>0){_.value=e.map(e=>T(e));return}}}finally{clearTimeout(t)}}catch{}let e=await(await fetch(`/api/radio_presets`)).json();if(e.error)throw Error(e.error);_.value=(e.presets??[]).map(e=>T(e))}catch(e){b.value=e instanceof Error?e.message:`Failed to load radio presets`,console.error(`Error fetching radio presets:`,e)}finally{v.value=!1}}async function D(){if(!x.value)return{success:!1,error:`Please complete all required fields`};y.value=!0,b.value=null;try{let e=m.value?{title:`Custom Configuration`,description:`Custom radio settings`,frequency:h.value.frequency,spreading_factor:h.value.spreading_factor,bandwidth:h.value.bandwidth,coding_rate:h.value.coding_rate,tx_power:h.value.tx_power}:{...o.value},t=i.value?.config?.tx_power;t!=null&&t!==``&&(e.tx_power=String(t));let n=Number(e.tx_power??14);if(!Number.isFinite(n)||n<-9||n>22)throw Error(`TX power must be between -9 and +22 dBm`);let a=await(await fetch(`/api/setup_wizard`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({node_name:r.value.trim(),hardware_key:i.value?.key,radio_preset:e,admin_password:s.value,...i.value&&(()=>{let e=i.value.key.toLowerCase();return e===`kiss`?{kiss_port:u.value.trim()||`/dev/ttyUSB0`,kiss_baud_rate:115200}:e===`pymc_usb`?{pymc_usb_port:u.value.trim()||`/dev/ttyACM0`,pymc_usb_baudrate:921600}:e===`pymc_tcp`?{pymc_tcp_host:d.value.trim(),pymc_tcp_port:f.value,pymc_tcp_token:p.value.trim()}:{}})()})})).json();if(!a.success)throw Error(a.error||`Setup failed`);return{success:!0,data:a}}catch(e){let t=e instanceof Error?e.message:`Failed to complete setup`;return b.value=t,{success:!1,error:t}}finally{y.value=!1}}function O(){x.value&&e.value<t.value&&e.value++}function k(){S.value&&e.value--}function A(n){n>=1&&n<=t.value&&(e.value=n)}function j(){e.value=1,r.value=`pyRpt${Math.floor(Math.random()*1e4).toString().padStart(4,`0`)}`,i.value=null,a.value=null,o.value=null,m.value=!1,h.value={frequency:`915.0`,spreading_factor:`7`,bandwidth:`125`,coding_rate:`5`,tx_power:`14`},s.value=``,c.value=``,u.value=`/dev/ttyACM0`,d.value=``,f.value=5055,p.value=``,b.value=null}return{currentStep:e,totalSteps:t,nodeName:r,selectedHardware:i,selectedHardwareConnection:a,selectedRadioPreset:o,useCustomRadio:m,usbPort:u,tcpHost:d,tcpPort:f,tcpToken:p,customRadio:h,adminPassword:s,confirmPassword:c,hardwareOptions:g,radioPresets:_,isLoading:v,isSubmitting:y,error:b,canGoNext:x,canGoBack:S,isLastStep:C,fetchHardwareOptions:w,fetchRadioPresets:E,completeSetup:D,nextStep:O,previousStep:k,goToStep:A,reset:j}}),v={class:`w-full max-w-2xl rounded-3xl border border-amber-300/70 dark:border-amber-400/30 bg-white dark:bg-surface-elevated shadow-[0_20px_80px_color-mix(in_srgb,var(--color-shadow-strong)_35%,transparent)] overflow-hidden`},y={class:`p-5 border-b border-amber-200/70 dark:border-amber-400/20 bg-amber-50/70 dark:bg-amber-500/10`},b={class:`flex items-start gap-3`},x={class:`rounded-full bg-amber-500/15 text-amber-700 dark:text-amber-300 p-2`},S={key:0,class:`text-xs text-content-secondary dark:text-content-muted mt-1`},C={key:1,class:`text-xs text-content-secondary dark:text-content-muted mt-1`},w={class:`p-5 space-y-3 text-sm text-content-secondary dark:text-content-muted max-h-[60vh] overflow-y-auto`},T={class:`flex items-start gap-2 pt-1`},E=[`checked`],D={class:`p-5 border-t border-stroke-subtle dark:border-white/10 flex items-center justify-end gap-2`},O=[`disabled`],k=o({__name:`TxPowerNoticeModal`,props:{show:{type:Boolean},confirmed:{type:Boolean},selectedTxPower:{default:null},actionLabel:{default:`I Understand, Continue`},busy:{type:Boolean,default:!1}},emits:[`update:show`,`update:confirmed`,`confirm`],setup(n,{emit:o}){let l=n,m=o;function h(){m(`update:show`,!1)}function _(){!l.confirmed||l.busy||m(`confirm`)}return(o,l)=>(t(),a(p,{name:`fade`},{default:e(()=>[n.show?(t(),d(`div`,{key:0,class:`fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/40 backdrop-blur-sm`,onClick:f(h,[`self`])},[u(`div`,v,[u(`div`,y,[u(`div`,b,[u(`div`,x,[c(r(g),{class:`w-5 h-5`})]),u(`div`,null,[l[1]||=u(`h4`,{class:`text-content-primary dark:text-content-primary text-base font-semibold`},` TX Power & PA Configuration Notice `,-1),n.selectedTxPower===null?(t(),d(`p`,C,` Review this safety notice before applying TX power changes. `)):(t(),d(`p`,S,` Selected TX power: `+i(n.selectedTxPower)+` dBm `,1))])])]),u(`div`,w,[l[3]||=u(`p`,{class:`leading-relaxed`},` Always ensure your configured TX power complies with local country and regional radio regulations before transmitting. `,-1),l[4]||=u(`p`,{class:`leading-relaxed`},` Before changing TX power settings, research your specific LoRa board/module design carefully. Many SX1262-based boards include an external Power Amplifier (PA) and RF switching circuitry, which may require different configuration values, TX paths, or firmware settings than a standard SX1262 reference design. `,-1),l[5]||=u(`p`,{class:`leading-relaxed`},` Do not assume all boards support the same maximum power levels or PA configuration methods. `,-1),l[6]||=u(`div`,{class:`rounded-xl border border-stroke-subtle dark:border-white/10 bg-background-mute/60 dark:bg-white/5 p-3`},[u(`p`,{class:`text-content-primary dark:text-content-primary font-medium mb-2`},`Recommended checks before applying changes:`),u(`ul`,{class:`list-disc pl-5 space-y-1`},[u(`li`,null,`Verify whether your board includes an external PA/LNA stage`),u(`li`,null,`Confirm the manufacturer’s recommended TX power limits`),u(`li`,null,`Check required RXen/TXen or RF switch pin configuration`),u(`li`,null,`Use board-specific library settings where available`),u(`li`,null,`Ensure thermal limits and duty cycle recommendations are respected`),u(`li`,null,`Never transmit without a correctly connected antenna or suitable load`)])],-1),l[7]||=u(`p`,{class:`leading-relaxed text-amber-700 dark:text-amber-300 font-medium`},` Incorrect PA configuration can damage hardware, lock the radio into a busy state, or cause illegal RF output levels. `,-1),u(`label`,T,[u(`input`,{checked:n.confirmed,type:`checkbox`,class:`mt-0.5`,onChange:l[0]||=e=>m(`update:confirmed`,e.target.checked)},null,40,E),l[2]||=u(`span`,{class:`text-content-primary dark:text-content-primary`},`I have read and understood this warning.`,-1)])]),u(`div`,D,[u(`button`,{type:`button`,class:`cfg-btn-secondary`,onClick:h},` Cancel `),u(`button`,{type:`button`,class:`cfg-btn-primary`,disabled:!n.confirmed||n.busy,onClick:_},i(n.actionLabel),9,O)])])])):s(``,!0)]),_:1}))}});export{_ as n,k as t}; |