{"version":3,"file":"PeriodicTable-CzmHOnAM.cjs","sources":["../app/components/periodic/PeriodicTable.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, useCallback } from \"react\";\nimport periodicTableData from \"@/lib/data/periodic-table\";\n\ntype PeriodicElement = {\n  name: string;\n  appearance: string | null;\n  atomic_mass: number | null;\n  boil: number | null;\n  category: string;\n  density: number | null;\n  discovered_by: string | null;\n  melt: number | null;\n  molar_heat: number | null;\n  named_by: string | null;\n  number: number; // atomic number\n  period: number; // row\n  group: number | null; // column group may be null for some\n  phase: string | null;\n  source: string | null;\n  bohr_model_image?: string | null;\n  bohr_model_3d?: string | null;\n  spectral_img?: string | null;\n  summary: string;\n  symbol: string;\n  xpos: number; // visual column 1..18\n  ypos: number; // visual row\n  wxpos?: number | null;\n  wypos?: number | null;\n  shells?: number[];\n  electron_configuration?: string | null;\n  electron_configuration_semantic?: string | null;\n  electron_affinity?: number | null;\n  electronegativity_pauling?: number | null;\n  ionization_energies?: number[];\n  [key: string]: unknown;\n};\n\ntype PeriodicData = {\n  elements: PeriodicElement[];\n};\n\ntype ElectronRingsProps = {\n  shells: number[];\n  className?: string;\n};\n\nfunction ElectronRings({ shells, className }: ElectronRingsProps) {\n  // Guard: nothing to render\n  if (!shells || shells.length === 0) return null;\n\n  // Use a normalized 100x100 viewBox to keep sizing ratio-based\n  const size = 100;\n  const center = 50;\n  const maxRadius = 46; // leave padding inside viewBox\n  const minRadius = 12; // nucleus padding\n  const ringCount = shells.length;\n  const step = ringCount > 1 ? (maxRadius - minRadius) / (ringCount - 1) : 0;\n\n  return (\n    <div className={className} aria-label=\"Electron shells visualization\">\n      <svg\n        viewBox={`0 0 ${size} ${size}`}\n        role=\"img\"\n        aria-hidden=\"false\"\n        className=\"w-full h-auto\"\n      >\n        {/* Nucleus */}\n        <circle cx={center} cy={center} r={8} className=\"fill-accent/20\" />\n\n        {shells.map((electronCount, shellIndex) => {\n          const radius = minRadius + step * shellIndex;\n          const durationSeconds = 12 + shellIndex * 6; // slower for outer shells\n          const electrons = Math.max(0, electronCount | 0);\n          const angleStep = electrons > 0 ? (Math.PI * 2) / electrons : 0;\n          return (\n            <g\n              key={`shell-${shellIndex}`}\n              // Rotate the whole ring group; respect reduced motion\n              className=\"motion-safe:animate-spin motion-reduce:animate-none\"\n              style={{\n                animationDuration: `${durationSeconds}s`,\n                transformOrigin: \"50% 50%\",\n                transformBox: \"fill-box\",\n              }}\n            >\n              {/* Ring */}\n              <circle\n                cx={center}\n                cy={center}\n                r={radius}\n                className=\"fill-none stroke-border/70\"\n                strokeWidth={0.6}\n              />\n              {/* Electrons */}\n              {Array.from({ length: electrons }).map((_, electronIndex) => {\n                const angle = electronIndex * angleStep;\n                const x = center + radius * Math.cos(angle);\n                const y = center + radius * Math.sin(angle);\n                return (\n                  <circle\n                    key={`e-${shellIndex}-${electronIndex}`}\n                    cx={x}\n                    cy={y}\n                    r={1.8}\n                    className=\"fill-foreground/80\"\n                  />\n                );\n              })}\n            </g>\n          );\n        })}\n        <title>Electron shells and electrons per shell</title>\n      </svg>\n    </div>\n  );\n}\n\nfunction usePeriodicData() {\n  const [data, setData] = useState<PeriodicData | null>(null);\n  const [loading, setLoading] = useState<boolean>(true);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    // Use imported data instead of fetching to avoid path issues in npm package\n    try {\n      setData(periodicTableData as PeriodicData);\n      setLoading(false);\n    } catch (e) {\n      const message = e instanceof Error ? e.message : \"Unknown error\";\n      setError(message);\n      setLoading(false);\n    }\n  }, []);\n\n  return { data, loading, error };\n}\n\nfunction normalizeCategory(category: string | null): string {\n  if (!category) return \"unknown\";\n  return category.toLowerCase();\n}\n\nconst CATEGORY_BG: Record<string, string> = {\n  \"alkali metal\": \"bg-(--color-pt-alkali)\",\n  \"alkaline earth metal\": \"bg-(--color-pt-alkaline)\",\n  \"transition metal\": \"bg-(--color-pt-transition)\",\n  \"post-transition metal\": \"bg-(--color-pt-post)\",\n  metalloid: \"bg-(--color-pt-metalloid)\",\n  \"diatomic nonmetal\": \"bg-(--color-pt-diatomic)\",\n  \"polyatomic nonmetal\": \"bg-(--color-pt-polyatomic)\",\n  \"noble gas\": \"bg-(--color-pt-noble)\",\n  lanthanide: \"bg-(--color-pt-lanthanide)\",\n  actinide: \"bg-(--color-pt-actinide)\",\n  unknown: \"bg-(--color-pt-unknown)\",\n};\n\nexport default function PeriodicTable() {\n  const { data, loading, error } = usePeriodicData();\n  const [query, setQuery] = useState<string>(\"\");\n  const [selectedNumber, setSelectedNumber] = useState<number | null>(null);\n  const gridRef = useRef<HTMLDivElement | null>(null);\n  const liveRef = useRef<HTMLDivElement | null>(null);\n\n  const allElements = useMemo(() => data?.elements ?? [], [data]);\n\n  const filtered = useMemo(() => {\n    const q = query.trim().toLowerCase();\n    if (!q) return allElements;\n    return allElements.filter((el) => {\n      return (\n        el.name.toLowerCase().includes(q) ||\n        el.symbol.toLowerCase().includes(q) ||\n        String(el.number).includes(q) ||\n        normalizeCategory(el.category).includes(q)\n      );\n    });\n  }, [allElements, query]);\n\n  // Build a lookup by (y,x) for grid placement\n  const { maxX, maxY, gridMap } = useMemo(() => {\n    let maxXLocal = 18;\n    let maxYLocal = 10; // allow lanthanides/actinides rows\n    const map = new Map<string, PeriodicElement>();\n    for (const el of allElements) {\n      const x = el.xpos ?? el.group ?? 1;\n      const y = el.ypos ?? el.period ?? 1;\n      const key = `${y}:${x}`;\n      map.set(key, el);\n      if (x > maxXLocal) maxXLocal = x;\n      if (y > maxYLocal) maxYLocal = y;\n    }\n    return { maxX: maxXLocal, maxY: maxYLocal, gridMap: map };\n  }, [allElements]);\n\n  const selected = useMemo(() => {\n    if (selectedNumber == null) return null;\n    return allElements.find((e) => e.number === selectedNumber) ?? null;\n  }, [allElements, selectedNumber]);\n\n  useEffect(() => {\n    if (selected && liveRef.current) {\n      liveRef.current.textContent = `${selected.name} selected`;\n    }\n  }, [selected]);\n\n  const onKeyNav = useCallback(\n    (event: React.KeyboardEvent<HTMLButtonElement>, el: PeriodicElement) => {\n      const key = event.key;\n      const currentX = el.xpos ?? el.group ?? 1;\n      const currentY = el.ypos ?? el.period ?? 1;\n      let nextX = currentX;\n      let nextY = currentY;\n      if (key === \"ArrowRight\") nextX = Math.min(currentX + 1, maxX);\n      else if (key === \"ArrowLeft\") nextX = Math.max(currentX - 1, 1);\n      else if (key === \"ArrowDown\") nextY = Math.min(currentY + 1, maxY);\n      else if (key === \"ArrowUp\") nextY = Math.max(currentY - 1, 1);\n      else return;\n      event.preventDefault();\n      const nextKey = `${nextY}:${nextX}`;\n      const nextEl = gridMap.get(nextKey);\n      if (!nextEl) return;\n      const btn = gridRef.current?.querySelector<HTMLButtonElement>(\n        `button[data-ax=\"${nextEl.number}\"]`\n      );\n      btn?.focus();\n    },\n    [gridMap, maxX, maxY]\n  );\n\n  return (\n    <div\n      className=\"flex flex-col md:flex-row gap-3 h-full\"\n      aria-label=\"Periodic table tool\"\n    >\n      <div className=\"md:w-2/3 lg:w-3/4 flex flex-col gap-2\">\n        <div className=\"flex items-center gap-2\">\n          <label htmlFor=\"pt-search\" className=\"text-sm font-medium\">\n            Search\n          </label>\n          <input\n            id=\"pt-search\"\n            type=\"search\"\n            value={query}\n            onChange={(e) => setQuery(e.target.value)}\n            placeholder=\"Name, symbol, number, category\"\n            className=\"w-full md:w-80 h-9 rounded-md border border-border bg-background px-3 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n            aria-describedby=\"pt-search-help\"\n          />\n        </div>\n        <div id=\"pt-search-help\" className=\"sr-only\">\n          Type to filter by element name, symbol, atomic number, or category.\n        </div>\n\n        {loading && (\n          <div role=\"status\" aria-live=\"polite\" className=\"text-sm opacity-80\">\n            Loading periodic data...\n          </div>\n        )}\n        {error && (\n          <div role=\"alert\" className=\"text-sm text-red-600\">\n            {error}\n          </div>\n        )}\n\n        <div\n          ref={gridRef}\n          role=\"grid\"\n          aria-label=\"Periodic table grid\"\n          className=\"grid gap-1\"\n          style={{ gridTemplateColumns: `repeat(18, minmax(2rem, 1fr))` }}\n        >\n          {Array.from({ length: maxY }).map((_, rowIdx) => {\n            const row = rowIdx + 1;\n            return (\n              <div key={`row-${row}`} role=\"row\" className=\"contents\">\n                {Array.from({ length: 18 }).map((__, colIdx) => {\n                  const col = colIdx + 1;\n                  const element = gridMap.get(`${row}:${col}`) ?? null;\n                  const isHiddenByFilter =\n                    element &&\n                    !filtered.some((f) => f.number === element.number);\n                  if (!element) {\n                    return (\n                      <div\n                        key={`cell-${row}-${col}`}\n                        role=\"gridcell\"\n                        aria-disabled=\"true\"\n                        className=\"h-12\"\n                      />\n                    );\n                  }\n                  const selectedState = selected?.number === element.number;\n                  const cat = normalizeCategory(element.category);\n                  const color = CATEGORY_BG[cat] ?? CATEGORY_BG[\"unknown\"];\n                  return (\n                    <button\n                      key={`cell-${row}-${col}`}\n                      role=\"gridcell\"\n                      aria-selected={selectedState}\n                      data-ax={element.number}\n                      onClick={() => setSelectedNumber(element.number)}\n                      onKeyDown={(e) => onKeyNav(e, element)}\n                      className={`h-12 rounded-md border text-left px-2 py-1 overflow-hidden border-border ${color} ${\n                        isHiddenByFilter ? \"opacity-30\" : \"\"\n                      } focus:outline-none focus-visible:ring-2 focus-visible:ring-accent`}\n                      title={`${element.name} (${element.symbol})`}\n                    >\n                      <div className=\"text-[10px] leading-none opacity-70\">\n                        {element.number}\n                      </div>\n                      <div className=\"text-sm font-semibold leading-tight\">\n                        {element.symbol}\n                      </div>\n                    </button>\n                  );\n                })}\n              </div>\n            );\n          })}\n        </div>\n        <div ref={liveRef} aria-live=\"polite\" className=\"sr-only\" />\n      </div>\n\n      <div\n        className=\"md:w-1/3 lg:w-1/4 border rounded-md border-border p-3 overflow-auto\"\n        aria-label=\"Element details\"\n        role=\"region\"\n      >\n        {!selected && (\n          <div className=\"text-sm opacity-80\">\n            Select an element to see details.\n          </div>\n        )}\n        {selected && (\n          <div className=\"space-y-2\">\n            <div className=\"flex items-center justify-between\">\n              <div>\n                <div className=\"text-xs opacity-70\">\n                  Atomic #{selected.number}\n                </div>\n                <div className=\"text-lg font-semibold\">{selected.name}</div>\n              </div>\n              <div className=\"text-2xl font-bold\" aria-label=\"Symbol\">\n                {selected.symbol}\n              </div>\n            </div>\n            {/* Electron shells visualization */}\n            {Array.isArray(selected.shells) && selected.shells.length > 0 && (\n              <ElectronRings\n                shells={selected.shells}\n                className=\"w-full mx-auto\"\n              />\n            )}\n            <div className=\"text-sm opacity-80\">{selected.summary}</div>\n            <dl className=\"grid grid-cols-2 gap-x-3 gap-y-1 text-sm\">\n              <dt className=\"opacity-70\">Category</dt>\n              <dd>{selected.category}</dd>\n              <dt className=\"opacity-70\">Phase</dt>\n              <dd>{selected.phase ?? \"—\"}</dd>\n              <dt className=\"opacity-70\">Atomic mass</dt>\n              <dd>{selected.atomic_mass ?? \"—\"}</dd>\n              <dt className=\"opacity-70\">Density</dt>\n              <dd>{selected.density ?? \"—\"}</dd>\n              <dt className=\"opacity-70\">Melt</dt>\n              <dd>{selected.melt ?? \"—\"}</dd>\n              <dt className=\"opacity-70\">Boil</dt>\n              <dd>{selected.boil ?? \"—\"}</dd>\n              <dt className=\"opacity-70\">Electronegativity</dt>\n              <dd>{selected.electronegativity_pauling ?? \"—\"}</dd>\n              <dt className=\"opacity-70\">Electron affinity</dt>\n              <dd>{selected.electron_affinity ?? \"—\"}</dd>\n              <dt className=\"opacity-70\">Configuration</dt>\n              <dd\n                className=\"truncate\"\n                title={selected.electron_configuration ?? undefined}\n              >\n                {selected.electron_configuration ?? \"—\"}\n              </dd>\n            </dl>\n            {selected.source && (\n              <a\n                href={selected.source}\n                target=\"_blank\"\n                rel=\"noreferrer\"\n                className=\"inline-block text-accent underline text-sm\"\n              >\n                Learn more\n              </a>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n"],"names":["ElectronRings","shells","className","size","center","maxRadius","minRadius","ringCount","step","jsx","jsxs","electronCount","shellIndex","radius","durationSeconds","electrons","angleStep","_","electronIndex","angle","x","y","usePeriodicData","data","setData","useState","loading","setLoading","error","setError","useEffect","periodicTableData","e","message","normalizeCategory","category","CATEGORY_BG","PeriodicTable","query","setQuery","selectedNumber","setSelectedNumber","gridRef","useRef","liveRef","allElements","useMemo","filtered","q","el","maxX","maxY","gridMap","maxXLocal","maxYLocal","map","key","selected","onKeyNav","useCallback","event","currentX","currentY","nextX","nextY","nextKey","nextEl","rowIdx","row","__","colIdx","col","element","isHiddenByFilter","f","selectedState","cat","color"],"mappings":"gmhLAgDA,SAASA,EAAc,CAAE,OAAAC,EAAQ,UAAAC,GAAiC,CAEhE,GAAI,CAACD,GAAUA,EAAO,SAAW,EAAG,OAAO,KAG3C,MAAME,EAAO,IACPC,EAAS,GACTC,EAAY,GACZC,EAAY,GACZC,EAAYN,EAAO,OACnBO,EAAOD,EAAY,GAAKF,EAAYC,IAAcC,EAAY,GAAK,EAEzE,OACEE,EAAAA,IAAC,MAAA,CAAI,UAAAP,EAAsB,aAAW,gCACpC,SAAAQ,EAAAA,KAAC,MAAA,CACC,QAAS,OAAOP,CAAI,IAAIA,CAAI,GAC5B,KAAK,MACL,cAAY,QACZ,UAAU,gBAGV,SAAA,CAAAM,EAAAA,IAAC,SAAA,CAAO,GAAIL,EAAQ,GAAIA,EAAQ,EAAG,EAAG,UAAU,gBAAA,CAAiB,EAEhEH,EAAO,IAAI,CAACU,EAAeC,IAAe,CACzC,MAAMC,EAASP,EAAYE,EAAOI,EAC5BE,EAAkB,GAAKF,EAAa,EACpCG,EAAY,KAAK,IAAI,EAAGJ,EAAgB,CAAC,EACzCK,EAAYD,EAAY,EAAK,KAAK,GAAK,EAAKA,EAAY,EAC9D,OACEL,EAAAA,KAAC,IAAA,CAGC,UAAU,sDACV,MAAO,CACL,kBAAmB,GAAGI,CAAe,IACrC,gBAAiB,UACjB,aAAc,UAAA,EAIhB,SAAA,CAAAL,EAAAA,IAAC,SAAA,CACC,GAAIL,EACJ,GAAIA,EACJ,EAAGS,EACH,UAAU,6BACV,YAAa,EAAA,CAAA,EAGd,MAAM,KAAK,CAAE,OAAQE,CAAA,CAAW,EAAE,IAAI,CAACE,EAAGC,IAAkB,CAC3D,MAAMC,EAAQD,EAAgBF,EACxBI,EAAIhB,EAASS,EAAS,KAAK,IAAIM,CAAK,EACpCE,EAAIjB,EAASS,EAAS,KAAK,IAAIM,CAAK,EAC1C,OACEV,EAAAA,IAAC,SAAA,CAEC,GAAIW,EACJ,GAAIC,EACJ,EAAG,IACH,UAAU,oBAAA,EAJL,KAAKT,CAAU,IAAIM,CAAa,EAAA,CAO3C,CAAC,CAAA,CAAA,EA/BI,SAASN,CAAU,EAAA,CAkC9B,CAAC,EACDH,EAAAA,IAAC,SAAM,SAAA,yCAAA,CAAuC,CAAA,CAAA,CAAA,EAElD,CAEJ,CAEA,SAASa,GAAkB,CACzB,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAA8B,IAAI,EACpD,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAkB,EAAI,EAC9C,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAwB,IAAI,EAEtDK,OAAAA,EAAAA,UAAU,IAAM,CAEd,GAAI,CACFN,EAAQO,CAAiC,EACzCJ,EAAW,EAAK,CAClB,OAASK,EAAG,CACV,MAAMC,EAAUD,aAAa,MAAQA,EAAE,QAAU,gBACjDH,EAASI,CAAO,EAChBN,EAAW,EAAK,CAClB,CACF,EAAG,CAAA,CAAE,EAEE,CAAE,KAAAJ,EAAM,QAAAG,EAAS,MAAAE,CAAA,CAC1B,CAEA,SAASM,EAAkBC,EAAiC,CAC1D,OAAKA,EACEA,EAAS,YAAA,EADM,SAExB,CAEA,MAAMC,EAAsC,CAC1C,eAAgB,yBAChB,uBAAwB,2BACxB,mBAAoB,6BACpB,wBAAyB,uBACzB,UAAW,4BACX,oBAAqB,2BACrB,sBAAuB,6BACvB,YAAa,wBACb,WAAY,6BACZ,SAAU,2BACV,QAAS,yBACX,EAEA,SAAwBC,GAAgB,CACtC,KAAM,CAAE,KAAAd,EAAM,QAAAG,EAAS,MAAAE,CAAA,EAAUN,EAAA,EAC3B,CAACgB,EAAOC,CAAQ,EAAId,EAAAA,SAAiB,EAAE,EACvC,CAACe,EAAgBC,CAAiB,EAAIhB,EAAAA,SAAwB,IAAI,EAClEiB,EAAUC,EAAAA,OAA8B,IAAI,EAC5CC,EAAUD,EAAAA,OAA8B,IAAI,EAE5CE,EAAcC,EAAAA,QAAQ,IAAMvB,GAAM,UAAY,CAAA,EAAI,CAACA,CAAI,CAAC,EAExDwB,EAAWD,EAAAA,QAAQ,IAAM,CAC7B,MAAME,EAAIV,EAAM,KAAA,EAAO,YAAA,EACvB,OAAKU,EACEH,EAAY,OAAQI,GAEvBA,EAAG,KAAK,YAAA,EAAc,SAASD,CAAC,GAChCC,EAAG,OAAO,YAAA,EAAc,SAASD,CAAC,GAClC,OAAOC,EAAG,MAAM,EAAE,SAASD,CAAC,GAC5Bd,EAAkBe,EAAG,QAAQ,EAAE,SAASD,CAAC,CAE5C,EARcH,CASjB,EAAG,CAACA,EAAaP,CAAK,CAAC,EAGjB,CAAE,KAAAY,EAAM,KAAAC,EAAM,QAAAC,CAAA,EAAYN,EAAAA,QAAQ,IAAM,CAC5C,IAAIO,EAAY,GACZC,EAAY,GAChB,MAAMC,MAAU,IAChB,UAAWN,KAAMJ,EAAa,CAC5B,MAAMzB,EAAI6B,EAAG,MAAQA,EAAG,OAAS,EAC3B5B,EAAI4B,EAAG,MAAQA,EAAG,QAAU,EAC5BO,EAAM,GAAGnC,CAAC,IAAID,CAAC,GACrBmC,EAAI,IAAIC,EAAKP,CAAE,EACX7B,EAAIiC,IAAWA,EAAYjC,GAC3BC,EAAIiC,IAAWA,EAAYjC,EACjC,CACA,MAAO,CAAE,KAAMgC,EAAW,KAAMC,EAAW,QAASC,CAAA,CACtD,EAAG,CAACV,CAAW,CAAC,EAEVY,EAAWX,EAAAA,QAAQ,IACnBN,GAAkB,KAAa,KAC5BK,EAAY,KAAMb,GAAMA,EAAE,SAAWQ,CAAc,GAAK,KAC9D,CAACK,EAAaL,CAAc,CAAC,EAEhCV,EAAAA,UAAU,IAAM,CACV2B,GAAYb,EAAQ,UACtBA,EAAQ,QAAQ,YAAc,GAAGa,EAAS,IAAI,YAElD,EAAG,CAACA,CAAQ,CAAC,EAEb,MAAMC,EAAWC,EAAAA,YACf,CAACC,EAA+CX,IAAwB,CACtE,MAAMO,EAAMI,EAAM,IACZC,EAAWZ,EAAG,MAAQA,EAAG,OAAS,EAClCa,EAAWb,EAAG,MAAQA,EAAG,QAAU,EACzC,IAAIc,EAAQF,EACRG,EAAQF,EACZ,GAAIN,IAAQ,aAAcO,EAAQ,KAAK,IAAIF,EAAW,EAAGX,CAAI,UACpDM,IAAQ,YAAaO,EAAQ,KAAK,IAAIF,EAAW,EAAG,CAAC,UACrDL,IAAQ,YAAaQ,EAAQ,KAAK,IAAIF,EAAW,EAAGX,CAAI,UACxDK,IAAQ,UAAWQ,EAAQ,KAAK,IAAIF,EAAW,EAAG,CAAC,MACvD,QACLF,EAAM,eAAA,EACN,MAAMK,EAAU,GAAGD,CAAK,IAAID,CAAK,GAC3BG,EAASd,EAAQ,IAAIa,CAAO,EAClC,GAAI,CAACC,EAAQ,OACDxB,EAAQ,SAAS,cAC3B,mBAAmBwB,EAAO,MAAM,IAAA,GAE7B,MAAA,CACP,EACA,CAACd,EAASF,EAAMC,CAAI,CAAA,EAGtB,OACEzC,EAAAA,KAAC,MAAA,CACC,UAAU,yCACV,aAAW,sBAEX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAD,MAAC,QAAA,CAAM,QAAQ,YAAY,UAAU,sBAAsB,SAAA,SAE3D,EACAA,EAAAA,IAAC,QAAA,CACC,GAAG,YACH,KAAK,SACL,MAAO6B,EACP,SAAWN,GAAMO,EAASP,EAAE,OAAO,KAAK,EACxC,YAAY,iCACZ,UAAU,kJACV,mBAAiB,gBAAA,CAAA,CACnB,EACF,QACC,MAAA,CAAI,GAAG,iBAAiB,UAAU,UAAU,SAAA,sEAE7C,EAECN,SACE,MAAA,CAAI,KAAK,SAAS,YAAU,SAAS,UAAU,qBAAqB,SAAA,0BAAA,CAErE,EAEDE,GACCnB,EAAAA,IAAC,MAAA,CAAI,KAAK,QAAQ,UAAU,uBACzB,SAAAmB,EACH,EAGFnB,EAAAA,IAAC,MAAA,CACC,IAAKiC,EACL,KAAK,OACL,aAAW,sBACX,UAAU,aACV,MAAO,CAAE,oBAAqB,+BAAA,EAE7B,SAAA,MAAM,KAAK,CAAE,OAAQS,CAAA,CAAM,EAAE,IAAI,CAAClC,EAAGkD,IAAW,CAC/C,MAAMC,EAAMD,EAAS,EACrB,aACG,MAAA,CAAuB,KAAK,MAAM,UAAU,WAC1C,SAAA,MAAM,KAAK,CAAE,OAAQ,GAAI,EAAE,IAAI,CAACE,EAAIC,IAAW,CAC9C,MAAMC,EAAMD,EAAS,EACfE,EAAUpB,EAAQ,IAAI,GAAGgB,CAAG,IAAIG,CAAG,EAAE,GAAK,KAC1CE,EACJD,GACA,CAACzB,EAAS,KAAM2B,GAAMA,EAAE,SAAWF,EAAQ,MAAM,EACnD,GAAI,CAACA,EACH,OACE/D,EAAAA,IAAC,MAAA,CAEC,KAAK,WACL,gBAAc,OACd,UAAU,MAAA,EAHL,QAAQ2D,CAAG,IAAIG,CAAG,EAAA,EAO7B,MAAMI,EAAgBlB,GAAU,SAAWe,EAAQ,OAC7CI,EAAM1C,EAAkBsC,EAAQ,QAAQ,EACxCK,EAAQzC,EAAYwC,CAAG,GAAKxC,EAAY,QAC9C,OACE1B,EAAAA,KAAC,SAAA,CAEC,KAAK,WACL,gBAAeiE,EACf,UAASH,EAAQ,OACjB,QAAS,IAAM/B,EAAkB+B,EAAQ,MAAM,EAC/C,UAAYxC,GAAM0B,EAAS1B,EAAGwC,CAAO,EACrC,UAAW,4EAA4EK,CAAK,IAC1FJ,EAAmB,aAAe,EACpC,qEACA,MAAO,GAAGD,EAAQ,IAAI,KAAKA,EAAQ,MAAM,IAEzC,SAAA,CAAA/D,EAAAA,IAAC,MAAA,CAAI,UAAU,sCACZ,SAAA+D,EAAQ,OACX,EACA/D,EAAAA,IAAC,MAAA,CAAI,UAAU,sCACZ,WAAQ,MAAA,CACX,CAAA,CAAA,EAhBK,QAAQ2D,CAAG,IAAIG,CAAG,EAAA,CAmB7B,CAAC,CAAA,EAzCO,OAAOH,CAAG,EA0CpB,CAEJ,CAAC,CAAA,CAAA,QAEF,MAAA,CAAI,IAAKxB,EAAS,YAAU,SAAS,UAAU,SAAA,CAAU,CAAA,EAC5D,EAEAlC,EAAAA,KAAC,MAAA,CACC,UAAU,sEACV,aAAW,kBACX,KAAK,SAEJ,SAAA,CAAA,CAAC+C,GACAhD,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAqB,SAAA,oCAEpC,EAEDgD,GACC/C,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,qBAAqB,SAAA,CAAA,WACzB+C,EAAS,MAAA,EACpB,EACAhD,EAAAA,IAAC,MAAA,CAAI,UAAU,wBAAyB,WAAS,IAAA,CAAK,CAAA,EACxD,QACC,MAAA,CAAI,UAAU,qBAAqB,aAAW,SAC5C,WAAS,MAAA,CACZ,CAAA,EACF,EAEC,MAAM,QAAQgD,EAAS,MAAM,GAAKA,EAAS,OAAO,OAAS,GAC1DhD,EAAAA,IAACT,EAAA,CACC,OAAQyD,EAAS,OACjB,UAAU,gBAAA,CAAA,EAGdhD,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAsB,WAAS,QAAQ,EACtDC,EAAAA,KAAC,KAAA,CAAG,UAAU,2CACZ,SAAA,CAAAD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,WAAQ,EACnCA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,QAAA,CAAS,EACvBhD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,QAAK,EAChCA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,OAAS,IAAI,EAC3BhD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,cAAW,EACtCA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,aAAe,IAAI,EACjChD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,UAAO,EAClCA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,SAAW,IAAI,EAC7BhD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,OAAI,EAC/BA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,MAAQ,IAAI,EAC1BhD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,OAAI,EAC/BA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,MAAQ,IAAI,EAC1BhD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,oBAAiB,EAC5CA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,2BAA6B,IAAI,EAC/ChD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,oBAAiB,EAC5CA,EAAAA,IAAC,KAAA,CAAI,SAAAgD,EAAS,mBAAqB,IAAI,EACvChD,EAAAA,IAAC,KAAA,CAAG,UAAU,aAAa,SAAA,gBAAa,EACxCA,EAAAA,IAAC,KAAA,CACC,UAAU,WACV,MAAOgD,EAAS,wBAA0B,OAEzC,WAAS,wBAA0B,GAAA,CAAA,CACtC,EACF,EACCA,EAAS,QACRhD,EAAAA,IAAC,IAAA,CACC,KAAMgD,EAAS,OACf,OAAO,SACP,IAAI,aACJ,UAAU,6CACX,SAAA,YAAA,CAAA,CAED,CAAA,CAEJ,CAAA,CAAA,CAAA,CAEJ,CAAA,CAAA,CAGN"}