PageSourceSearch

https://solarintelligence.ai/assets/GroovePlantParametersSheet-BRpjMw6q.js

js solarintelligence.ai collected 2026-10-05 12:51:14 UTC 16,786 bytes, 1 lines download raw bytes

1import{j as e}from"./state-DKBP_IF5.js";import{r as j}from"./react-vendor-Unhn4PzF.js";import{A as T,n as S,o as I}from"./VistaArtifact-gyiM6fL1.js";import{c as z,d as M,y as $}from"./index-Br3_ARw7.js";import{S as W}from"./sun-DOUPKHL9.js";import{L as O}from"./layers-pEN8yBPR.js";import{C as N}from"./cpu-BteiylvZ.js";import{a as L,C as R}from"./ChatPage-CfpyKI6o.js";import{B as q}from"./building-2-CaI-KLWC.js";import{M as B}from"./map-pin-WJOwG4Ma.js";import{B as F}from"./briefcase-BmcIeygU.js";import{P as D}from"./play-DTj7KN0y.js";import{C as V}from"./chevron-right-BTFtdlbc.js";import{C as H}from"./circle-question-mark-DFjMnrXa.js";import"./ui-Dw3dkPmY.js";/* empty css                */import"./charts-D5dg506X.js";import"./forms-GD8l5aEM.js";import"./useAccessibleAgents-e8A-ferf.js";import"./agentService-CPyDPIkE.js";import"./AgentDetailsModal-CbEfF627.js";import"./user-plus-DCW8OCSS.js";import"./sparkles-D7NTekMs.js";import"./markdown-DHncH_pN.js";import"./activity-BM_sYnFs.js";window.CESIUM_BASE_URL="/cesium/";const U=[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]],Y=z("wallet",U),G={polimi_default:"default",wizard:"wizard",user:"user"};function X({source:t}){const n=S();if(!t)return null;const u=G[t]??t,p=I(n.prov,t)||n.text3;return e.jsx("span",{style:{fontSize:9.5,fontWeight:600,color:p,background:`${p}14`,padding:"2px 6px",borderRadius:4,textTransform:"uppercase",letterSpacing:"0.04em",whiteSpace:"nowrap"},children:u})}function Q(t,n){if(t==null||t==="")return"—";if(typeof t=="boolean")return t?"yes":"no";if(typeof t=="number"){if(!isFinite(t))return"—";if(Number.isInteger(t)||Math.abs(t)>=100){const p=t.toLocaleString("en-US",{maximumFractionDigits:2});return n?`${p} ${n}`:p}const u=t.toLocaleString("en-US",{maximumFractionDigits:4});return n?`${u} ${n}`:u}return n?`${String(t)} ${n}`:String(t)}function J({spec:t,params:n,provenance:u,editValue:p,onEdit:o,onAskHelp:x}){const a=S(),_=n[t.key],d=p,c=u[t.key],i=p!==void 0,f=!!t.options,h=!f&&typeof _=="number",b=!(!t.enabledWhen||n[t.enabledWhen.key]===t.enabledWhen.equals);return e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 80px",alignItems:"center",gap:12,padding:"8px 4px",borderBottom:`1px solid ${a.divider}`,fontSize:13,color:a.text1,background:i?a.editedRowBg:"transparent",opacity:b?.5:1},children:[e.jsxs("span",{style:{color:a.text2,display:"inline-flex",alignItems:"center",gap:6},children:[t.label,x&&e.jsx("button",{onClick:()=>x(t,_),"aria-label":`Ask Groove for guidance on ${t.label}`,title:`Ask Groove — what's a sensible ${t.label.toLowerCase()}?`,onMouseEnter:s=>{s.currentTarget.style.color=a.primary},onMouseLeave:s=>{s.currentTarget.style.color=a.text3},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",padding:0,width:16,height:16,background:"transparent",border:"none",color:a.text3,cursor:"pointer",transition:"color 120ms linear",borderRadius:"50%"},children:e.jsx(H,{size:13,strokeWidth:1.8})})]}),f?e.jsx("select",{defaultValue:String(d??_??""),onChange:s=>o(t.key,s.target.value,!1),style:{width:160,padding:"4px 8px",border:`1px solid ${i?a.gold:a.outline}`,borderRadius:6,fontSize:13,fontFamily:"inherit",color:i?a.editedText:a.text1,background:a.card,outline:"none"},children:t.options.map(s=>e.jsx("option",{value:s.value,children:s.label},s.value))},`${t.key}-${String(_??"")}`):h?e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[e.jsx("input",{type:"number",step:"any",defaultValue:String(d!==void 0?d:_),onChange:s=>o(t.key,s.target.value,!0),style:{width:110,padding:"4px 8px",border:`1px solid ${i?a.gold:a.outline}`,borderRadius:6,fontSize:13,fontFamily:"inherit",color:i?a.editedText:a.text1,fontVariantNumeric:"tabular-nums",background:a.card,outline:"none"}},`${t.key}-${_}`),t.unit&&e.jsx("span",{style:{fontSize:11,color:a.text3},children:t.unit})]}):e.jsx("span",{style:{fontVariantNumeric:"tabular-nums",color:c==="user"?a.primary:a.text1,fontWeight:c==="user"?500:400},children:Q(_,t.unit)}),i?e.jsx("span",{style:{fontSize:9.5,fontWeight:600,color:a.editedText,background:a.editedPillBg,padding:"2px 6px",borderRadius:4,textTransform:"uppercase",letterSpacing:"0.04em"},children:"edited"}):e.jsx(X,{source:c})]})}function m({title:t,icon:n,headline:u,fields:p,params:o,provenance:x,edits:a,onEdit:_,onAskHelp:d,defaultOpen:c=!0}
1){const i=S(),[f,h]=j.useState(c),v=p.filter(b=>o[b.key]!==void 0);return v.length===0?null:e.jsxs("section",{style:{background:i.card,border:`1px solid ${i.outline}`,borderRadius:12,padding:"14px 20px"},children:[e.jsxs("button",{onClick:()=>h(b=>!b),style:{display:"flex",alignItems:"center",gap:10,width:"100%",background:"transparent",border:"none",padding:0,margin:0,cursor:"pointer",fontFamily:"inherit",marginBottom:f?10:0},children:[e.jsx("span",{style:{display:"inline-flex",color:i.text2},children:f?e.jsx($,{size:14,strokeWidth:2.2}):e.jsx(V,{size:14,strokeWidth:2.2})}),e.jsx("span",{style:{display:"inline-flex",color:i.primary},children:n}),e.jsx("span",{style:{fontSize:13,fontWeight:500,color:i.text1,flex:1,textAlign:"left"},children:t}),u&&e.jsx("span",{style:{fontSize:12,color:i.text3,fontVariantNumeric:"tabular-nums"},children:u})]}),f&&e.jsx("div",{children:v.map(b=>e.jsx(J,{spec:b,params:o,provenance:x,editValue:a[b.key],onEdit:_,onAskHelp:d},b.key))})]})}const C=[{value:"fixed_tilt",label:"Fixed tilt"},{value:"tracker",label:"Single-axis tracker"},{value:"backtracker",label:"Backtracker"}],E=[{value:"maximize_irr",label:"Maximise IRR"},{value:"maximize_npv",label:"Maximise NPV"},{value:"maximize_fee",label:"Maximise developer fee"}],K=[{value:"portrait",label:"Portrait"},{value:"landscape",label:"Landscape"}],Z=[{value:"pvsyst",label:"PVsyst"},{value:"faiman",label:"Faiman"},{value:"sapmodel",label:"SAPM"}],ee=[{value:"fixed",label:"Fixed price"},{value:"yearly_curve",label:"Yearly curve"},{value:"hourly_curve",label:"Hourly curve (8760)"}],te=[{value:"detailed",label:"Detailed CAPEX"},{value:"simplified",label:"Simplified (EPC lump sum)"}],ie=[{value:"purchase",label:"Purchase"},{value:"actualised_lease",label:"Actualised lease"},{value:"lease",label:"Annual lease"}],ae=[{value:"false",label:"No"},{value:"true",label:"Yes"}],y={system_and_search:[{key:"system_type",label:"Mounting system",options:C},{key:"target",label:"Optimisation target",options:E},{key:"tilt_min",label:"Tilt — min",unit:"°"},{key:"tilt_max",label:"Tilt — max",unit:"°"},{key:"tilt_step",label:"Tilt — step",unit:"°"},{key:"spacing_min",label:"Row spacing — min",unit:"m"},{key:"spacing_max",label:"Row spacing — max",unit:"m"},{key:"spacing_step",label:"Row spacing — step",unit:"m"},{key:"max_rotation_angle",label:"Tracker max rotation",unit:"°"}],module:[{key:"module_power_wp",label:"Module Pmax",unit:"Wp"},{key:"module_length_m",label:"Length",unit:"m"},{key:"module_width_m",label:"Width",unit:"m"},{key:"module_efficiency",label:"Efficiency"},{key:"power_coeff",label:"Temperature power coeff",unit:"1/°C"}],inverter_and_array:[{key:"inverter_efficiency",label:"Inverter η"},{key:"max_ac_power_kw",label:"Max AC connection",unit:"kW"},{key:"orientation",label:"Orientation",options:K},{key:"modules_per_column",label:"Modules per column"},{key:"azimuth_deg",label:"Azimuth",unit:"°"},{key:"ground_albedo",label:"Ground albedo"}],bifaciality:[{key:"bifacial_enabled",label:"Bifacial",options:ae},{key:"bifaciality_factor",label:"Bifaciality factor",enabledWhen:{key:"bifacial_enabled",equals:!0}},{key:"bifacial_structure_shading_pct",label:"Structure shading",unit:"%",enabledWhen:{key:"bifacial_enabled",equals:!0}},{key:"bifacial_back_mismatch_pct",label:"Back mismatch",unit:"%",enabledWhen:{key:"bifacial_enabled",equals:!0}}],losses_dc:[{key:"loss_dc_pct",label:"DC ohmic",unit:"%"},{key:"module_quality_pct",label:"Module quality (gain is negative)",unit:"%"},{key:"module_mismatch_pct",label:"Module mismatch",unit:"%"},{key:"string_voltage_mismatch_pct",label:"String voltage mismatch",unit:"%"},{key:"lid_pct",label:"LID",unit:"%"},{key:"soiling_pct",label:"Soiling",unit:"%"}],losses_ac:[{key:"loss_ac_pct",label:"AC ohmic",unit:"%"},{key:"loss_mv_pct",label:"MV transformer",unit:"%"},{key:"auxiliaries_w_per_kw",label:"Auxiliary consumption",unit:"W/kW"},{key:"availability_pct",label:"Availability",unit:"%"},{key:"aging_losses_pct_per_year",label:"Annual degradation",unit:"%/yr"}],temperature_model:[{key:"temperature_model",label:"Cell temperature model",options:Z},{key:"pvsyst_uc",label:"PVsyst Uc",unit:"W/(m²·°C)",enabledWhe
1n:{key:"temperature_model",equals:"pvsyst"}},{key:"pvsyst_uv",label:"PVsyst Uv",unit:"W/(m²·°C)/(m/s)",enabledWhen:{key:"temperature_model",equals:"pvsyst"}}],pricing_and_lifetime:[{key:"electricity_pricing_type",label:"Pricing type",options:ee},{key:"electricity_price",label:"Electricity price",unit:"€/MWh",enabledWhen:{key:"electricity_pricing_type",equals:"fixed"}},{key:"energy_price_escalator_pct",label:"Price escalator",unit:"%/yr"},{key:"plant_lifetime",label:"Plant lifetime",unit:"yr"}],capex_detailed:[{key:"analysis_type",label:"CAPEX analysis",options:te},{key:"module_cost_eur_kwp",label:"Modules",unit:"€/kWp",enabledWhen:{key:"analysis_type",equals:"detailed"}},{key:"inverter_cost_eur_kwac",label:"Inverter",unit:"€/kWac",enabledWhen:{key:"analysis_type",equals:"detailed"}},{key:"structure_cost_eur_kwp",label:"Structure",unit:"€/kWp",enabledWhen:{key:"analysis_type",equals:"detailed"}},{key:"bop_cost_eur_kwp",label:"BoP",unit:"€/kWp",enabledWhen:{key:"analysis_type",equals:"detailed"}},{key:"epc_cost_eur_kwp",label:"EPC lump sum",unit:"€/kWp",enabledWhen:{key:"analysis_type",equals:"simplified"}},{key:"interconnection_cost_eur_mwac",label:"Interconnection",unit:"€/MWac"},{key:"development_fee",label:"Development fee",unit:"€"}],capex_land:[{key:"land_acquisition_type",label:"Land acquisition",options:ie},{key:"land_cost_eur_ha",label:"Land cost",unit:"€/ha",enabledWhen:{key:"land_acquisition_type",equals:"purchase"}},{key:"indirect_taxes_on_land_pct",label:"Indirect taxes on land",unit:"%"}],opex:[{key:"om_cost_eur_mw_year",label:"O&M",unit:"€/MW/yr"},{key:"insurance_eur_mw_year",label:"Insurance",unit:"€/MW/yr"},{key:"security_eur_year",label:"Security / monitoring",unit:"€/yr"},{key:"land_lease_eur_ha_year",label:"Land lease",unit:"€/ha/yr",enabledWhen:{key:"land_acquisition_type",equals:"lease"}},{key:"om_escalator_pct",label:"O&M escalator",unit:"%/yr"},{key:"insurance_escalator_pct",label:"Insurance escalator",unit:"%/yr"},{key:"land_lease_escalator_pct",label:"Lease escalator",unit:"%/yr",enabledWhen:{key:"land_acquisition_type",equals:"lease"}}],financial_assumptions:[{key:"wacc_pct",label:"WACC (discount rate)",unit:"%"},{key:"income_tax_pct",label:"Income tax",unit:"%"},{key:"amortization_rate_pct",label:"Depreciation rate",unit:"%/yr"},{key:"target_irr",label:"Target IRR (for fee maximisation)",unit:"%",enabledWhen:{key:"target",equals:"maximize_fee"}},{key:"compensation_to_municipality_pct",label:"Compensation to municipality",unit:"%"},{key:"actualization_coeff_pct",label:"Compensation actualisation",unit:"%"},{key:"imu_pct",label:"IMU (property tax)",unit:"%"}]};function Ae(t){return e.jsx(T,{children:e.jsx(le,{...t})})}function le({parameters:t,provenance:n,onRunOptimization:u,onAskFieldHelp:p}){const o=S(),x=M(l=>l.closeArtifact),[a,_]=j.useState({}),d=(l,r,k)=>{_(A=>{const g={...A},w=t[l];if(k){const P=parseFloat(r);r===""||Number.isNaN(P)||typeof w=="number"&&P===w?delete g[l]:g[l]=P}else r===""||r===String(w??"")?delete g[l]:g[l]=r;return g})},c=Object.keys(a).length;j.useEffect(()=>{if(c===0)return;const l=r=>{r.preventDefault(),r.returnValue=""};return window.addEventListener("beforeunload",l),()=>window.removeEventListener("beforeunload",l)},[c]);const i=j.useMemo(()=>{const l={...t};for(const[r,k]of Object.entries(a))k==="true"?l[r]=!0:k==="false"?l[r]=!1:l[r]=k;return l},[t,a]),f=j.useMemo(()=>{const l={user:0,wizard:0,polimi_default:0};for(const r of Object.values(n))l[r]!==void 0&&l[r]++;return l},[n]),h=()=>{if(!u)return;const l={};for(const[r,k]of Object.entries(a))k==="true"?l[r]=!0:k==="false"?l[r]=!1:l[r]=k;x(),u(l)},v=C.find(l=>l.value===i.system_type)?.label??"—",b=E.find(l=>l.value===i.target)?.label??"—",s=p?(l,r)=>p(l.key,l.label,l.unit,r):void 0;return e.jsxs("div",{className:"app-scrollbar",style:{padding:24,display:"flex",flexDirection:"column",gap:14,height:"100%",overflowY:"auto",background:o.body,fontFamily:"'Inter', system-ui, -apple-system, sans-serif"},children:[e.jsx("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",padding:"4px 4px 12px",borderBottom:`1px solid ${o.divider}`},children:e.jsxs("div",{children:[e.jsxs("h2",{style:{margin:0,fontSize:16,fontWeight:600,color:o.text1,letterSpacing:"-0.01em"},children:["Plant parameters — ",v," · ",b]}),e.jsxs("div",{style:{fontSize:11,color:o.text2,marginTop:4},children:[f.user," user · ",f.wizard," wizard · ",f.polimi_default," Polimi default",e.jsx("span",{style:{color:o.text3},children:" · all defaults from the Polimi reference workbook"})]})]})}),e.jsx(m,{title:"System & search ranges",icon:e.jsx(W,{size:14,strokeWidth:2}),headline:i.system_type==="fixed_tilt"?`${i.tilt_min}–${i.tilt_max}° tilt · ${i.spacing_min}–${i.spacing_max} m spacing`:`${i.spacing_min}–${i.spacing_max} m spacing`,fields:y.system_and_search,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"Module",icon:e.jsx(O,{size:14,strokeWidth:2}),headline:`${i.module_power_wp??"—"} Wp`,fields:y.module,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"Inverter & array",icon:e.jsx(N,{size:14,strokeWidth:2}),headline:`${i.max_ac_power_kw??"—"} kW AC`,fields:y.inverter_and_array,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"Bifaciality",icon:e.jsx(W,{size:14,strokeWidth:2}),headline:i.bifacial_enabled?"enabled":"disabled",fields:y.bifaciality,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"DC-side losses",icon:e.jsx(W,{size:14,strokeWidth:2}),fields:y.losses_dc,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"AC-side losses & long-term",icon:e.jsx(W,{size:14,strokeWidth:2}),fields:y.losses_ac,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"Temperature model",icon:e.jsx(L,{size:14,strokeWidth:2}),fields:y.temperature_model,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"Pricing & lifetime",icon:e.jsx(R,{size:14,strokeWidth:2}),fields:y.pricing_and_lifetime,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"CAPEX",icon:e.jsx(q,{size:14,strokeWidth:2}),headline:i.analysis_type==="simplified"?`EPC €${i.epc_cost_eur_kwp}/kWp`:`€${(Number(i.module_cost_eur_kwp??0)+Number(i.structure_cost_eur_kwp??0)+Number(i.bop_cost_eur_kwp??0)).toFixed(0)}/kWp + inv`,fields:y.capex_detailed,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"CAPEX — Land",icon:e.jsx(B,{size:14,strokeWidth:2}),fields:y.capex_land,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"OPEX",icon:e.jsx(Y,{size:14,strokeWidth:2}),headline:`O&M €${i.om_cost_eur_mw_year??"—"}/MW/yr`,fields:y.opex,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsx(m,{title:"Financial assumptions",icon:e.jsx(F,{size:14,strokeWidth:2}),headline:`WACC ${i.wacc_pct??"—"}%`,fields:y.financial_assumptions,params:i,provenance:n,edits:a,onEdit:d,onAskHelp:s}),e.jsxs("div",{style:{position:"sticky",bottom:-24,marginTop:8,marginBottom:-24,marginLeft:-24,marginRight:-24,padding:"16px 24px",background:o.card,borderTop:`1px solid ${o.outline}
1`,display:"flex",alignItems:"center",justifyContent:"space-between",gap:16},children:[e.jsx("span",{style:{fontSize:12,color:o.text2,lineHeight:1.4},children:c>0?e.jsxs("span",{style:{color:o.editedText,fontWeight:500},children:[c," field",c===1?"":"s"," edited — Run to apply."]}):e.jsx(e.Fragment,{children:"Edit any field above and click Run, or accept the Polimi defaults."})}),u&&e.jsxs("button",{onClick:h,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"8px 16px",background:o.ctaBg,color:o.ctaFg,border:"none",borderRadius:8,fontSize:13,fontWeight:500,cursor:"pointer",fontFamily:"inherit",transition:"background 120ms linear",whiteSpace:"nowrap"},onMouseEnter:l=>{l.currentTarget.style.background=o.ctaHover},onMouseLeave:l=>{l.currentTarget.style.background=o.ctaBg},children:[e.jsx(D,{size:13,strokeWidth:2.5}),c>0?`Run with ${c} edit${c===1?"":"s"}`:"Run optimisation"]})]})]})}export{Ae as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.