@aglyn/aglyn-transfer-ui 1.0.0-beta.231 → 1.0.0-beta.232

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aglyn/aglyn-transfer-ui",
3
- "version": "1.0.0-beta.231",
3
+ "version": "1.0.0-beta.232",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://aglyn.com",
6
6
  "repository": {
@@ -25,8 +25,8 @@
25
25
  "./package.json": "./package.json"
26
26
  },
27
27
  "dependencies": {
28
- "@aglyn/aglyn": "1.0.0-beta.231",
29
- "@aglyn/shared-ui-jsx": "1.0.0-beta.231",
28
+ "@aglyn/aglyn": "1.0.0-beta.232",
29
+ "@aglyn/shared-ui-jsx": "1.0.0-beta.232",
30
30
  "@swc/helpers": "0.5.23"
31
31
  },
32
32
  "peerDependencies": {
@@ -387,6 +387,7 @@ export function PackageImportWizard(props) {
387
387
  spacing: 2,
388
388
  children: [
389
389
  /*#__PURE__*/ _jsxs(Stack, {
390
+ useFlexGap: true,
390
391
  direction: "row",
391
392
  spacing: 2,
392
393
  sx: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../libs/aglyn-transfer-ui/src/lib/package-import-wizard.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\n/**\n * The site package import wizard (AGL-3534): nothing about an item is\n * decided silently.\n *\n * Upload → Items → Missing items → Changes → Review → Import\n *\n * Items are grouped by kind with their status (new, differs, already on\n * this site, needs something); each takes a decision — add, replace, keep\n * both, skip, or merge for settings and the theme — from the person's own\n * choice, the default they set for its kind of change, or the plan's\n * proposal. A dependency the import would leave pointing at nothing is\n * imported from the file, pointed at an item the site has, removed, or left.\n * Each changed item is shown against this site's copy, rendered side by side\n * and value by value, and a merged item is chosen key by key. The review\n * re-plans with every decision, says whether a plan limit refuses it, and\n * waits for each warning class to be acknowledged. An applied import can be\n * undone from its last step.\n */\n\nimport type { PackageItemDecision } from '@aglyn/aglyn/data-transfer'\nimport { ScrollTable } from '@aglyn/shared-ui-jsx/components/scroll-table.component'\nimport {\n Alert,\n Autocomplete,\n Box,\n Button,\n Chip,\n CircularProgress,\n List,\n ListItemButton,\n ListItemText,\n Stack,\n Step,\n StepButton,\n StepLabel,\n Stepper,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from '@mui/material'\nimport { type ChangeEvent, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { PackageImportUndo } from './package-import-undo.component'\nimport {\n PackageItemDiff,\n type PackageItemRenderers,\n type PackagePreviewHref,\n} from './package-item-diff.component'\nimport type {\n SitePackageApplyAnswer,\n SitePackageCatalog,\n SitePackageClient,\n SitePackageComparison,\n SitePackageDependencyChoice,\n SitePackageMergeChoice,\n SitePackagePlanAnswer,\n SitePackagePlanItem,\n SitePackageUndoAnswer,\n} from './site-package-client'\nimport {\n INITIAL_PACKAGE_BULK_DEFAULTS,\n PACKAGE_BULK_CHOICES,\n PACKAGE_DECISION_WORDS,\n PACKAGE_STATUS_WORDS,\n type PackageBulkDefaults,\n type PackageDependencyPrompt,\n packageAcknowledgements,\n packageDecided,\n packageDecisionCounts,\n packageDecisionOptions,\n packageDecisions,\n packageDependencyAnswer,\n packageDependencyOptions,\n packageDependencyPrompts,\n packageDependencyProblems,\n packageItemTitle,\n} from './site-package-import-state'\nimport { TransferAcknowledgementList } from './transfer-acknowledgement-list.component'\nimport { TransferChoiceSelect } from './transfer-choice-select.component'\nimport { TransferWizardNav } from './transfer-wizard-nav.component'\nimport { countOf } from './transfer-words'\n\nexport type PackageImportStep = 'upload' | 'items' | 'dependencies' | 'changes' | 'review' | 'results'\n\nconst STEPS: ReadonlyArray<{ id: PackageImportStep; label: string }> = [\n { id: 'upload', label: 'Upload' },\n { id: 'items', label: 'Items' },\n { id: 'dependencies', label: 'Missing items' },\n { id: 'changes', label: 'Changes' },\n { id: 'review', label: 'Review' },\n { id: 'results', label: 'Import' },\n]\n\n/** Rows shown per kind before \"Show more\". */\nconst GROUP_PAGE = 50\n\nexport interface PackageImportWizardProps {\n client: SitePackageClient\n /** A URL rendering one side of one item, or `null`; omitted, no rendered diff. */\n previewHref?: PackagePreviewHref\n /**\n * A component per kind that draws one side of an item in place; a kind it\n * names is drawn by it instead of through `previewHref`.\n */\n renderers?: PackageItemRenderers\n /** A file already read: the wizard plans it and opens on Items. */\n initialFile?: { name: string; content: unknown }\n /** Told the import's id once it is applied, so the surface can offer undo later. */\n onImported?(answer: SitePackageApplyAnswer): void\n /** Told when the import is undone from the last step. */\n onUndone?(answer: SitePackageUndoAnswer): void\n /** Called from the last step's Done. */\n onDone?(): void\n}\n\nconst message = (error: unknown) =>\n error instanceof SyntaxError\n ? 'That file is not a site package or backup.'\n : error instanceof Error && error.message\n ? error.message\n : 'Something went wrong. Try again.'\n\nfunction readFileText(file: File): Promise<string> {\n if (typeof file.text === 'function') return file.text()\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => resolve(String(reader.result ?? ''))\n reader.onerror = () => reject(reader.error)\n reader.readAsText(file)\n })\n}\n\nconst MATCHED_BY_WORDS: Record<NonNullable<SitePackagePlanItem['matchedBy']>, string> = {\n id: 'by ID',\n slug: 'by address',\n name: 'by name',\n}\n\nexport function PackageImportWizard(props: PackageImportWizardProps) {\n const { client, previewHref, renderers, initialFile, onImported, onUndone, onDone } = props\n const [step, setStep] = useState<PackageImportStep>('upload')\n const [file, setFile] = useState<{ name: string; content: unknown } | null>(null)\n const [answer, setAnswer] = useState<SitePackagePlanAnswer | null>(null)\n const [review, setReview] = useState<SitePackagePlanAnswer | null>(null)\n const [overrides, setOverrides] = useState<Record<string, PackageItemDecision>>({})\n const [bulk, setBulk] = useState<PackageBulkDefaults>(INITIAL_PACKAGE_BULK_DEFAULTS)\n const [dependencyChoices, setDependencyChoices] = useState<Record<string, SitePackageDependencyChoice>>({})\n const [mergeChoices, setMergeChoices] = useState<Record<string, Record<string, SitePackageMergeChoice>>>({})\n const [comparisons, setComparisons] = useState<Record<string, SitePackageComparison>>({})\n const [selected, setSelected] = useState<string | null>(null)\n const [acknowledged, setAcknowledged] = useState<string[]>([])\n const [catalog, setCatalog] = useState<SitePackageCatalog | null>(null)\n const [result, setResult] = useState<SitePackageApplyAnswer | null>(null)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const run = useCallback(async (work: () => Promise<void>) => {\n setBusy(true)\n setError(null)\n try {\n await work()\n } catch (caught) {\n setError(message(caught))\n } finally {\n setBusy(false)\n }\n }, [])\n\n const plan = answer?.plan ?? null\n const byKey = useMemo(() => new Map((plan?.items ?? []).map((item) => [item.key, item])), [plan])\n const titleOf = useCallback((key: string) => {\n const item = byKey.get(key)\n return item ? packageItemTitle(item) : key\n }, [byKey])\n const kindLabel = useCallback(\n (kind: string) => plan?.kinds.find((one) => one.kind === kind)?.label ?? kind,\n [plan],\n )\n\n const { decisions, undecided } = useMemo(\n () => (plan ? packageDecisions(plan, overrides, bulk) : { decisions: {}, undecided: [] }),\n [plan, overrides, bulk],\n )\n const prompts = useMemo(() => (plan ? packageDependencyPrompts(plan, decisions) : []), [plan, decisions])\n // A dependency the file carries is imported from it unless the person says otherwise.\n const effectiveDependencyChoices = useMemo(() => {\n const out: Record<string, SitePackageDependencyChoice> = {}\n for (const prompt of prompts) {\n const choice = dependencyChoices[prompt.key] ?? (prompt.inPackage ? 'import' : undefined)\n if (choice) out[prompt.key] = choice\n }\n return out\n }, [prompts, dependencyChoices])\n const decided = useMemo(\n () => packageDecided(decisions, prompts, effectiveDependencyChoices, mergeChoices),\n [decisions, prompts, effectiveDependencyChoices, mergeChoices],\n )\n\n const planFile = useCallback(\n (next: { name: string; content: unknown }) =>\n run(async () => {\n const planned = await client.plan(next.content)\n setFile(next)\n setAnswer(planned)\n setOverrides({})\n setBulk(INITIAL_PACKAGE_BULK_DEFAULTS)\n setDependencyChoices({})\n setMergeChoices({})\n setComparisons({})\n setSelected(null)\n setStep('items')\n }),\n [client, run],\n )\n\n const started = useRef(false)\n useEffect(() => {\n if (!initialFile || started.current) return\n started.current = true\n void planFile(initialFile)\n }, [initialFile, planFile])\n\n const onFile = async (event: ChangeEvent<HTMLInputElement>) => {\n const chosen = event.target.files?.[0]\n event.target.value = ''\n if (!chosen) return\n await run(async () => {\n const content = JSON.parse(await readFileText(chosen))\n await planFile({ name: chosen.name, content })\n })\n }\n\n const compare = useCallback(\n async (key: string) => {\n if (!file || comparisons[key]) return\n await run(async () => {\n const answered = await client.compare(file.content, [key])\n setComparisons((current) => ({\n ...current,\n ...Object.fromEntries(answered.map((one) => [one.key, one])),\n }))\n })\n },\n [client, file, comparisons, run],\n )\n\n const loadCatalog = useCallback(async () => {\n if (catalog) return\n await run(async () => setCatalog(await client.catalog()))\n }, [catalog, client, run])\n\n const toReview = () =>\n run(async () => {\n if (!file) return\n setReview(await client.plan(file.content, decided))\n setAcknowledged([])\n setStep('review')\n })\n\n const apply = () =>\n run(async () => {\n if (!file) return\n const applied = await client.apply(file.content, decided)\n setResult(applied)\n setStep('results')\n onImported?.(applied)\n })\n\n const changed = useMemo(\n () =>\n (plan?.items ?? []).filter((item) => {\n if (!item.existing) return false\n const decision = decisions[item.key]\n return item.comparison === 'differs' || (decision !== undefined && decision !== 'skip')\n }),\n [plan, decisions],\n )\n\n const goChanges = (key?: string) => {\n const first = key ?? selected ?? changed[0]?.key ?? null\n setSelected(first)\n setStep('changes')\n if (first) void compare(first)\n }\n\n const stepIndex = STEPS.findIndex((one) => one.id === step)\n const locked = step === 'results'\n\n let body: ReactNode = null\n if (step === 'upload') {\n body = (\n <Stack spacing={2}>\n <Typography variant=\"body2\">\n Choose a site package, or a backup downloaded from any of your sites. Nothing is written until you\n import on the last step.\n </Typography>\n <Box>\n <Button variant=\"outlined\" disabled={busy} onClick={() => inputRef.current?.click()}>\n Choose a file\n </Button>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"application/json,.json\"\n hidden\n aria-label=\"Package file\"\n onChange={(event) => void onFile(event)}\n />\n </Box>\n {file ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {file.name}\n </Typography>\n ) : null}\n {answer ? <TransferWizardNav onNext={() => setStep('items')} busy={busy} /> : null}\n </Stack>\n )\n } else if (step === 'items' && plan && answer) {\n body = (\n <ItemsStep\n fileName={file?.name ?? ''}\n answer={answer}\n decisions={decisions}\n overrides={overrides}\n bulk={bulk}\n busy={busy}\n onBulk={(comparison, decision) => setBulk((current) => ({ ...current, [comparison]: decision }))}\n onDecision={(key, decision) => setOverrides((current) => ({ ...current, [key]: decision }))}\n onCompare={(key) => goChanges(key)}\n blockers={\n undecided.length\n ? [\n `Choose what to do with ${countOf(undecided.length, 'changed item')}: set a default for changed items, or choose for each.`,\n ]\n : []\n }\n onBack={() => setStep('upload')}\n onNext={() => setStep('dependencies')}\n />\n )\n } else if (step === 'dependencies' && plan) {\n body = (\n <DependenciesStep\n prompts={prompts}\n choices={effectiveDependencyChoices}\n catalog={catalog}\n busy={busy}\n titleOf={titleOf}\n kindLabel={kindLabel}\n onNeedCatalog={() => void loadCatalog()}\n onChoice={(key, choice) => setDependencyChoices((current) => ({ ...current, [key]: choice }))}\n onBack={() => setStep('items')}\n onNext={() => goChanges()}\n />\n )\n } else if (step === 'changes' && plan) {\n const item = selected ? byKey.get(selected) : undefined\n const comparison = selected ? comparisons[selected] : undefined\n const decision = item ? (decisions[item.key] ?? null) : null\n body = (\n <Stack spacing={2}>\n {changed.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Nothing this site holds is changed by the import.\n </Typography>\n ) : (\n <Stack direction={{ xs: 'column', md: 'row' }} spacing={2}>\n <Box sx={{ width: { md: 280 }, flexShrink: 0 }}>\n <List dense aria-label=\"Changed items\" sx={{ maxHeight: 520, overflowY: 'auto' }}>\n {changed.map((one) => {\n const chosen = decisions[one.key]\n return (\n <ListItemButton\n key={one.key}\n selected={one.key === selected}\n onClick={() => {\n setSelected(one.key)\n void compare(one.key)\n }}\n >\n <ListItemText\n primary={packageItemTitle(one)}\n secondary={`${kindLabel(one.kind)} · ${chosen ? PACKAGE_DECISION_WORDS[chosen].label : 'Not chosen'}`}\n />\n </ListItemButton>\n )\n })}\n </List>\n </Box>\n <Box sx={{ flex: 1, minWidth: 0 }}>\n {item ? (\n <Stack spacing={2}>\n <Stack direction=\"row\" spacing={2} sx={{ alignItems: 'center', flexWrap: 'wrap' }}>\n <Typography variant=\"h6\" component=\"h3\">\n {packageItemTitle(item)}\n </Typography>\n <TransferChoiceSelect<PackageItemDecision>\n label=\"Decision\"\n value={decision ?? ''}\n placeholder=\"Choose…\"\n options={packageDecisionOptions(item.choices)}\n onChange={(next) => setOverrides((current) => ({ ...current, [item.key]: next }))}\n />\n </Stack>\n {comparison ? (\n <PackageItemDiff\n item={item}\n comparison={comparison}\n decision={decision}\n {...(previewHref ? { previewHref } : {})}\n {...(renderers ? { renderers } : {})}\n mergeChoices={mergeChoices[item.key] ?? {}}\n onMergeChoice={(key, choice) =>\n setMergeChoices((current) => ({\n ...current,\n [item.key]: { ...(current[item.key] ?? {}), [key]: choice },\n }))\n }\n />\n ) : (\n <CircularProgress size={24} aria-label=\"Comparing\" />\n )}\n </Stack>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Choose an item to see what changes.\n </Typography>\n )}\n </Box>\n </Stack>\n )}\n <TransferWizardNav\n busy={busy}\n blockers={\n undecided.length\n ? [`Choose what to do with ${countOf(undecided.length, 'changed item')}.`]\n : []\n }\n onBack={() => setStep('dependencies')}\n onNext={() => void toReview()}\n nextLabel=\"Review\"\n />\n </Stack>\n )\n } else if (step === 'review' && review) {\n const acknowledgements = packageAcknowledgements(review, decisions, titleOf)\n const unacknowledged = acknowledgements.filter(\n (one) => one.required && !acknowledged.includes(one.id),\n ).length\n const counts = packageDecisionCounts(decisions)\n body = (\n <Stack spacing={2}>\n <Box component=\"ul\" sx={{ m: 0, pl: 2.5 }} aria-label=\"What the import does\">\n {counts.map(({ decision, count }) => (\n <Typography component=\"li\" variant=\"body2\" key={decision}>\n {`${PACKAGE_DECISION_WORDS[decision].label}: ${countOf(count, 'item')}`}\n </Typography>\n ))}\n </Box>\n {review.capRefusal ? <Alert severity=\"error\">{review.capRefusal}</Alert> : null}\n <TransferAcknowledgementList\n items={acknowledgements}\n acknowledged={acknowledged}\n disabled={busy}\n onChange={(id, done) =>\n setAcknowledged((current) => (done ? [...current, id] : current.filter((one) => one !== id)))\n }\n />\n <TransferWizardNav\n busy={busy}\n blockers={[\n ...(review.capRefusal ? ['A plan limit refuses this import. Skip some new items, or upgrade.'] : []),\n ...(unacknowledged ? [`Acknowledge ${countOf(unacknowledged, 'warning')} to import.`] : []),\n ]}\n onBack={() => goChanges()}\n onNext={() => void apply()}\n nextLabel=\"Import\"\n />\n </Stack>\n )\n } else if (step === 'results' && result) {\n const counts = Object.entries(result.counts).filter(([, count]) => count > 0)\n body = (\n <Stack spacing={2}>\n <Alert severity=\"success\">\n {`Imported: ${counts\n .map(([decision, count]) =>\n `${PACKAGE_DECISION_WORDS[decision as PackageItemDecision]?.label ?? decision} ${count.toLocaleString()}`,\n )\n .join(', ')} (${countOf(result.written, 'document')} written).`}\n </Alert>\n <PackageImportUndo client={client} importId={result.importId} {...(onUndone ? { onUndone } : {})} />\n <TransferWizardNav onNext={onDone} nextLabel=\"Done\" />\n </Stack>\n )\n }\n\n return (\n <Stack spacing={3}>\n <Box component=\"nav\" aria-label=\"Import steps\" sx={{ overflowX: 'auto' }}>\n <Stepper nonLinear activeStep={stepIndex} alternativeLabel>\n {STEPS.map((one, index) => {\n const reachable = index < stepIndex && !locked && Boolean(answer)\n return (\n <Step key={one.id} completed={index < stepIndex}>\n {reachable ? (\n <StepButton\n onClick={() => (one.id === 'changes' ? goChanges() : setStep(one.id))}\n >\n {one.label}\n </StepButton>\n ) : (\n <StepLabel aria-current={index === stepIndex ? 'step' : undefined}>{one.label}</StepLabel>\n )}\n </Step>\n )\n })}\n </Stepper>\n </Box>\n {error ? (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n ) : null}\n {busy && step !== 'changes' ? <CircularProgress size={24} aria-label=\"Working\" /> : null}\n <Box>{body}</Box>\n </Stack>\n )\n}\n\n/*==========================================\n * ITEMS\n *=========================================*/\n\ninterface ItemsStepProps {\n fileName: string\n answer: SitePackagePlanAnswer\n decisions: Readonly<Record<string, PackageItemDecision>>\n overrides: Readonly<Record<string, PackageItemDecision>>\n bulk: PackageBulkDefaults\n busy: boolean\n blockers: string[]\n onBulk(comparison: keyof PackageBulkDefaults, decision: PackageItemDecision): void\n onDecision(key: string, decision: PackageItemDecision): void\n onCompare(key: string): void\n onBack(): void\n onNext(): void\n}\n\nconst BULK_LABELS: Record<keyof PackageBulkDefaults, string> = {\n new: 'New items',\n differs: 'Changed items',\n identical: 'Items already on this site',\n}\n\nfunction ItemsStep(props: ItemsStepProps) {\n const { answer, decisions, overrides, bulk } = props\n const { plan } = answer\n const [status, setStatus] = useState('all')\n const [kind, setKind] = useState('all')\n const [search, setSearch] = useState('')\n const [shown, setShown] = useState<Record<string, number>>({})\n const needle = search.trim().toLowerCase()\n const visible = plan.items.filter(\n (item) =>\n (status === 'all' || item.status === status) &&\n (kind === 'all' || item.kind === kind) &&\n (!needle ||\n [item.name, item.slug, item.id].some((value) => value?.toLowerCase().includes(needle))),\n )\n const comparisons = (Object.keys(BULK_LABELS) as Array<keyof PackageBulkDefaults>).filter((one) =>\n plan.items.some((item) => item.comparison === one),\n )\n const counts = plan.counts\n\n return (\n <Stack spacing={2}>\n <Typography variant=\"body2\">\n {`${props.fileName ? `${props.fileName}: ` : ''}${countOf(counts.new, 'new item')}, ` +\n `${countOf(counts.differs, 'item')} that differ from this site’s copy, ` +\n `${countOf(counts.identical, 'item')} already on this site` +\n (counts.missingDependency\n ? `, ${countOf(counts.missingDependency, 'item')} that need something neither the file nor this site holds.`\n : '.')}\n </Typography>\n <Stack spacing={1}>\n <Typography variant=\"subtitle2\" component=\"h3\">\n Defaults\n </Typography>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1.5}>\n {comparisons.map((one) => (\n <TransferChoiceSelect<PackageItemDecision>\n key={one}\n label={BULK_LABELS[one]}\n value={bulk[one]}\n placeholder=\"Choose…\"\n options={packageDecisionOptions(PACKAGE_BULK_CHOICES[one])}\n onChange={(decision) => props.onBulk(one, decision)}\n />\n ))}\n </Stack>\n <Typography variant=\"caption\" color=\"text.secondary\">\n A default applies to every item of that kind you have not chosen for, where the item can take it.\n </Typography>\n </Stack>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1.5}>\n <TransferChoiceSelect\n label=\"Show\"\n value={status}\n onChange={setStatus}\n options={[\n { value: 'all', label: `All (${plan.items.length.toLocaleString()})` },\n ...(Object.keys(PACKAGE_STATUS_WORDS) as Array<keyof typeof PACKAGE_STATUS_WORDS>).map((one) => ({\n value: one,\n label: `${PACKAGE_STATUS_WORDS[one].label} (${counts[one].toLocaleString()})`,\n disabled: counts[one] === 0,\n })),\n ]}\n />\n <TransferChoiceSelect\n label=\"Kind\"\n value={kind}\n onChange={setKind}\n options={[\n { value: 'all', label: 'Every kind' },\n ...plan.kinds.map((one) => ({ value: one.kind, label: `${one.label} (${one.count.toLocaleString()})` })),\n ]}\n />\n <TextField\n size=\"small\"\n label=\"Search\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </Stack>\n {visible.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n No item matches.\n </Typography>\n ) : null}\n {plan.kinds.map((group) => {\n const items = visible.filter((item) => item.kind === group.kind)\n if (!items.length) return null\n const limit = shown[group.kind] ?? GROUP_PAGE\n return (\n <Stack spacing={1} key={group.kind}>\n <Typography variant=\"subtitle1\" component=\"h3\">\n {`${group.label} (${items.length.toLocaleString()})`}\n </Typography>\n <ScrollTable size=\"small\" aria-label={group.label}>\n <TableHead>\n <TableRow>\n <TableCell>Item</TableCell>\n <TableCell>Status</TableCell>\n <TableCell>On this site</TableCell>\n <TableCell>Decision</TableCell>\n <TableCell />\n </TableRow>\n </TableHead>\n <TableBody>\n {items.slice(0, limit).map((item) => {\n const title = packageItemTitle(item)\n const words = PACKAGE_STATUS_WORDS[item.status]\n return (\n <TableRow key={item.key}>\n <TableCell>\n <Typography variant=\"body2\">{title}</Typography>\n {item.slug && item.slug !== title ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {item.slug}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n <Chip size=\"small\" variant=\"outlined\" label={words.label} color={words.color} />\n {item.missing.length ? (\n <Typography variant=\"caption\" color=\"text.secondary\" component=\"div\">\n {`Needs ${item.missing.map((dep) => `${dep.kind} ${dep.id}`).join(', ')}`}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n {item.existing ? (\n <>\n <Typography variant=\"body2\">{packageItemTitle(item.existing)}</Typography>\n {item.matchedBy ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {`Matched ${MATCHED_BY_WORDS[item.matchedBy]}`}\n </Typography>\n ) : null}\n </>\n ) : (\n '—'\n )}\n </TableCell>\n <TableCell>\n <TransferChoiceSelect<PackageItemDecision>\n label={`Decision for ${title}`}\n hideLabel\n value={decisions[item.key] ?? ''}\n placeholder=\"Choose…\"\n options={packageDecisionOptions(item.choices)}\n onChange={(decision) => props.onDecision(item.key, decision)}\n {...(overrides[item.key] ? { helperText: 'Your choice' } : {})}\n />\n </TableCell>\n <TableCell>\n {item.existing && item.comparison === 'differs' ? (\n <Button size=\"small\" onClick={() => props.onCompare(item.key)}>\n {`Compare ${title}`}\n </Button>\n ) : null}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </ScrollTable>\n {items.length > limit ? (\n <Box>\n <Button\n size=\"small\"\n onClick={() => setShown((current) => ({ ...current, [group.kind]: limit + GROUP_PAGE }))}\n >\n {`Show ${Math.min(GROUP_PAGE, items.length - limit).toLocaleString()} more ${group.label.toLowerCase()}`}\n </Button>\n </Box>\n ) : null}\n </Stack>\n )\n })}\n <TransferWizardNav busy={props.busy} blockers={props.blockers} onBack={props.onBack} onNext={props.onNext} />\n </Stack>\n )\n}\n\n/*==========================================\n * MISSING ITEMS\n *=========================================*/\n\ninterface DependenciesStepProps {\n prompts: readonly PackageDependencyPrompt[]\n choices: Readonly<Record<string, SitePackageDependencyChoice>>\n catalog: SitePackageCatalog | null\n busy: boolean\n titleOf(key: string): string\n kindLabel(kind: string): string\n onNeedCatalog(): void\n onChoice(key: string, choice: SitePackageDependencyChoice): void\n onBack(): void\n onNext(): void\n}\n\nfunction DependenciesStep(props: DependenciesStepProps) {\n const { prompts, choices, catalog, onNeedCatalog } = props\n const mapping = prompts.some((prompt) => typeof choices[prompt.key] === 'object')\n useEffect(() => {\n if (mapping && !catalog) onNeedCatalog()\n }, [mapping, catalog, onNeedCatalog])\n\n return (\n <Stack spacing={2}>\n {prompts.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Every item you are importing has what it needs.\n </Typography>\n ) : (\n <>\n <Typography variant=\"body2\">\n These items are named by what you are importing, and this site will not hold them. Choose what to\n do about each.\n </Typography>\n <ScrollTable size=\"small\" aria-label=\"Missing items\">\n <TableHead>\n <TableRow>\n <TableCell>Missing item</TableCell>\n <TableCell>Needed by</TableCell>\n <TableCell>What to do</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {prompts.map((prompt) => {\n const name = prompt.inPackage\n ? packageItemTitle(prompt.inPackage)\n : `${props.kindLabel(prompt.kind)}: ${prompt.id}`\n const choice = choices[prompt.key]\n const answer = packageDependencyAnswer(choice)\n const options = (catalog?.manifest.items ?? []).filter((one) => one.kind === prompt.kind)\n const picked =\n typeof choice === 'object' ? (options.find((one) => one.$id === choice.mapTo) ?? null) : null\n return (\n <TableRow key={prompt.key}>\n <TableCell>\n <Typography variant=\"body2\">{name}</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {prompt.inPackage ? 'In the file, set to skip' : 'Neither in the file nor on this site'}\n </Typography>\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\">\n {prompt.neededBy.slice(0, 3).map(props.titleOf).join(', ')}\n {prompt.neededBy.length > 3 ? ` and ${(prompt.neededBy.length - 3).toLocaleString()} more` : ''}\n </Typography>\n </TableCell>\n <TableCell>\n <Stack spacing={1}>\n <TransferChoiceSelect\n label={`What to do about ${name}`}\n hideLabel\n value={answer}\n placeholder=\"Choose…\"\n options={packageDependencyOptions(prompt)}\n onChange={(next) => props.onChoice(prompt.key, next === 'mapTo' ? { mapTo: '' } : next)}\n {...(answer === 'drop'\n ? { helperText: `Removed from ${countOf(prompt.neededBy.length, 'item')}.` }\n : {})}\n />\n {answer === 'mapTo' ? (\n <Autocomplete\n size=\"small\"\n options={options}\n loading={!catalog}\n value={picked}\n getOptionLabel={(option) => option.name || option.slug || option.$id}\n isOptionEqualToValue={(option, value) => option.$id === value.$id}\n onChange={(_event, value) => props.onChoice(prompt.key, { mapTo: value?.$id ?? '' })}\n renderInput={(params) => (\n <TextField {...params} label={`Use instead of ${name}`} />\n )}\n />\n ) : null}\n </Stack>\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </ScrollTable>\n </>\n )}\n <TransferWizardNav\n busy={props.busy}\n blockers={packageDependencyProblems(prompts, choices)}\n onBack={props.onBack}\n onNext={props.onNext}\n />\n </Stack>\n )\n}\n\nexport default PackageImportWizard\n"],"names":["ScrollTable","Alert","Autocomplete","Box","Button","Chip","CircularProgress","List","ListItemButton","ListItemText","Stack","Step","StepButton","StepLabel","Stepper","TableBody","TableCell","TableHead","TableRow","TextField","Typography","useCallback","useEffect","useMemo","useRef","useState","PackageImportUndo","PackageItemDiff","INITIAL_PACKAGE_BULK_DEFAULTS","PACKAGE_BULK_CHOICES","PACKAGE_DECISION_WORDS","PACKAGE_STATUS_WORDS","packageAcknowledgements","packageDecided","packageDecisionCounts","packageDecisionOptions","packageDecisions","packageDependencyAnswer","packageDependencyOptions","packageDependencyPrompts","packageDependencyProblems","packageItemTitle","TransferAcknowledgementList","TransferChoiceSelect","TransferWizardNav","countOf","STEPS","id","label","GROUP_PAGE","message","error","SyntaxError","Error","readFileText","file","text","Promise","resolve","reject","reader","FileReader","onload","String","result","onerror","readAsText","MATCHED_BY_WORDS","slug","name","PackageImportWizard","props","client","previewHref","renderers","initialFile","onImported","onUndone","onDone","step","setStep","setFile","answer","setAnswer","review","setReview","overrides","setOverrides","bulk","setBulk","dependencyChoices","setDependencyChoices","mergeChoices","setMergeChoices","comparisons","setComparisons","selected","setSelected","acknowledged","setAcknowledged","catalog","setCatalog","setResult","busy","setBusy","setError","inputRef","run","work","caught","plan","byKey","Map","items","map","item","key","titleOf","get","kindLabel","kind","kinds","find","one","decisions","undecided","prompts","effectiveDependencyChoices","out","prompt","choice","inPackage","undefined","decided","planFile","next","planned","content","started","current","onFile","event","chosen","target","files","value","JSON","parse","compare","answered","Object","fromEntries","loadCatalog","toReview","apply","applied","changed","filter","existing","decision","comparison","goChanges","first","stepIndex","findIndex","locked","body","spacing","variant","disabled","onClick","click","input","ref","type","accept","hidden","aria-label","onChange","color","onNext","ItemsStep","fileName","onBulk","onDecision","onCompare","blockers","length","onBack","DependenciesStep","choices","onNeedCatalog","onChoice","direction","xs","md","sx","width","flexShrink","dense","maxHeight","overflowY","primary","secondary","flex","minWidth","alignItems","flexWrap","component","placeholder","options","onMergeChoice","size","nextLabel","acknowledgements","unacknowledged","required","includes","counts","m","pl","count","capRefusal","severity","done","entries","toLocaleString","join","written","importId","overflowX","nonLinear","activeStep","alternativeLabel","index","reachable","Boolean","completed","aria-current","onClose","BULK_LABELS","new","differs","identical","status","setStatus","setKind","search","setSearch","shown","setShown","needle","trim","toLowerCase","visible","some","keys","missingDependency","sm","group","limit","slice","title","words","missing","dep","matchedBy","hideLabel","helperText","Math","min","mapping","manifest","picked","$id","mapTo","neededBy","loading","getOptionLabel","option","isOptionEqualToValue","_event","renderInput","params"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../libs/aglyn-transfer-ui/src/lib/package-import-wizard.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n'use client'\n\n/**\n * The site package import wizard (AGL-3534): nothing about an item is\n * decided silently.\n *\n * Upload → Items → Missing items → Changes → Review → Import\n *\n * Items are grouped by kind with their status (new, differs, already on\n * this site, needs something); each takes a decision — add, replace, keep\n * both, skip, or merge for settings and the theme — from the person's own\n * choice, the default they set for its kind of change, or the plan's\n * proposal. A dependency the import would leave pointing at nothing is\n * imported from the file, pointed at an item the site has, removed, or left.\n * Each changed item is shown against this site's copy, rendered side by side\n * and value by value, and a merged item is chosen key by key. The review\n * re-plans with every decision, says whether a plan limit refuses it, and\n * waits for each warning class to be acknowledged. An applied import can be\n * undone from its last step.\n */\n\nimport type { PackageItemDecision } from '@aglyn/aglyn/data-transfer'\nimport { ScrollTable } from '@aglyn/shared-ui-jsx/components/scroll-table.component'\nimport {\n Alert,\n Autocomplete,\n Box,\n Button,\n Chip,\n CircularProgress,\n List,\n ListItemButton,\n ListItemText,\n Stack,\n Step,\n StepButton,\n StepLabel,\n Stepper,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n TextField,\n Typography,\n} from '@mui/material'\nimport { type ChangeEvent, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport { PackageImportUndo } from './package-import-undo.component'\nimport {\n PackageItemDiff,\n type PackageItemRenderers,\n type PackagePreviewHref,\n} from './package-item-diff.component'\nimport type {\n SitePackageApplyAnswer,\n SitePackageCatalog,\n SitePackageClient,\n SitePackageComparison,\n SitePackageDependencyChoice,\n SitePackageMergeChoice,\n SitePackagePlanAnswer,\n SitePackagePlanItem,\n SitePackageUndoAnswer,\n} from './site-package-client'\nimport {\n INITIAL_PACKAGE_BULK_DEFAULTS,\n PACKAGE_BULK_CHOICES,\n PACKAGE_DECISION_WORDS,\n PACKAGE_STATUS_WORDS,\n type PackageBulkDefaults,\n type PackageDependencyPrompt,\n packageAcknowledgements,\n packageDecided,\n packageDecisionCounts,\n packageDecisionOptions,\n packageDecisions,\n packageDependencyAnswer,\n packageDependencyOptions,\n packageDependencyPrompts,\n packageDependencyProblems,\n packageItemTitle,\n} from './site-package-import-state'\nimport { TransferAcknowledgementList } from './transfer-acknowledgement-list.component'\nimport { TransferChoiceSelect } from './transfer-choice-select.component'\nimport { TransferWizardNav } from './transfer-wizard-nav.component'\nimport { countOf } from './transfer-words'\n\nexport type PackageImportStep = 'upload' | 'items' | 'dependencies' | 'changes' | 'review' | 'results'\n\nconst STEPS: ReadonlyArray<{ id: PackageImportStep; label: string }> = [\n { id: 'upload', label: 'Upload' },\n { id: 'items', label: 'Items' },\n { id: 'dependencies', label: 'Missing items' },\n { id: 'changes', label: 'Changes' },\n { id: 'review', label: 'Review' },\n { id: 'results', label: 'Import' },\n]\n\n/** Rows shown per kind before \"Show more\". */\nconst GROUP_PAGE = 50\n\nexport interface PackageImportWizardProps {\n client: SitePackageClient\n /** A URL rendering one side of one item, or `null`; omitted, no rendered diff. */\n previewHref?: PackagePreviewHref\n /**\n * A component per kind that draws one side of an item in place; a kind it\n * names is drawn by it instead of through `previewHref`.\n */\n renderers?: PackageItemRenderers\n /** A file already read: the wizard plans it and opens on Items. */\n initialFile?: { name: string; content: unknown }\n /** Told the import's id once it is applied, so the surface can offer undo later. */\n onImported?(answer: SitePackageApplyAnswer): void\n /** Told when the import is undone from the last step. */\n onUndone?(answer: SitePackageUndoAnswer): void\n /** Called from the last step's Done. */\n onDone?(): void\n}\n\nconst message = (error: unknown) =>\n error instanceof SyntaxError\n ? 'That file is not a site package or backup.'\n : error instanceof Error && error.message\n ? error.message\n : 'Something went wrong. Try again.'\n\nfunction readFileText(file: File): Promise<string> {\n if (typeof file.text === 'function') return file.text()\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.onload = () => resolve(String(reader.result ?? ''))\n reader.onerror = () => reject(reader.error)\n reader.readAsText(file)\n })\n}\n\nconst MATCHED_BY_WORDS: Record<NonNullable<SitePackagePlanItem['matchedBy']>, string> = {\n id: 'by ID',\n slug: 'by address',\n name: 'by name',\n}\n\nexport function PackageImportWizard(props: PackageImportWizardProps) {\n const { client, previewHref, renderers, initialFile, onImported, onUndone, onDone } = props\n const [step, setStep] = useState<PackageImportStep>('upload')\n const [file, setFile] = useState<{ name: string; content: unknown } | null>(null)\n const [answer, setAnswer] = useState<SitePackagePlanAnswer | null>(null)\n const [review, setReview] = useState<SitePackagePlanAnswer | null>(null)\n const [overrides, setOverrides] = useState<Record<string, PackageItemDecision>>({})\n const [bulk, setBulk] = useState<PackageBulkDefaults>(INITIAL_PACKAGE_BULK_DEFAULTS)\n const [dependencyChoices, setDependencyChoices] = useState<Record<string, SitePackageDependencyChoice>>({})\n const [mergeChoices, setMergeChoices] = useState<Record<string, Record<string, SitePackageMergeChoice>>>({})\n const [comparisons, setComparisons] = useState<Record<string, SitePackageComparison>>({})\n const [selected, setSelected] = useState<string | null>(null)\n const [acknowledged, setAcknowledged] = useState<string[]>([])\n const [catalog, setCatalog] = useState<SitePackageCatalog | null>(null)\n const [result, setResult] = useState<SitePackageApplyAnswer | null>(null)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const run = useCallback(async (work: () => Promise<void>) => {\n setBusy(true)\n setError(null)\n try {\n await work()\n } catch (caught) {\n setError(message(caught))\n } finally {\n setBusy(false)\n }\n }, [])\n\n const plan = answer?.plan ?? null\n const byKey = useMemo(() => new Map((plan?.items ?? []).map((item) => [item.key, item])), [plan])\n const titleOf = useCallback((key: string) => {\n const item = byKey.get(key)\n return item ? packageItemTitle(item) : key\n }, [byKey])\n const kindLabel = useCallback(\n (kind: string) => plan?.kinds.find((one) => one.kind === kind)?.label ?? kind,\n [plan],\n )\n\n const { decisions, undecided } = useMemo(\n () => (plan ? packageDecisions(plan, overrides, bulk) : { decisions: {}, undecided: [] }),\n [plan, overrides, bulk],\n )\n const prompts = useMemo(() => (plan ? packageDependencyPrompts(plan, decisions) : []), [plan, decisions])\n // A dependency the file carries is imported from it unless the person says otherwise.\n const effectiveDependencyChoices = useMemo(() => {\n const out: Record<string, SitePackageDependencyChoice> = {}\n for (const prompt of prompts) {\n const choice = dependencyChoices[prompt.key] ?? (prompt.inPackage ? 'import' : undefined)\n if (choice) out[prompt.key] = choice\n }\n return out\n }, [prompts, dependencyChoices])\n const decided = useMemo(\n () => packageDecided(decisions, prompts, effectiveDependencyChoices, mergeChoices),\n [decisions, prompts, effectiveDependencyChoices, mergeChoices],\n )\n\n const planFile = useCallback(\n (next: { name: string; content: unknown }) =>\n run(async () => {\n const planned = await client.plan(next.content)\n setFile(next)\n setAnswer(planned)\n setOverrides({})\n setBulk(INITIAL_PACKAGE_BULK_DEFAULTS)\n setDependencyChoices({})\n setMergeChoices({})\n setComparisons({})\n setSelected(null)\n setStep('items')\n }),\n [client, run],\n )\n\n const started = useRef(false)\n useEffect(() => {\n if (!initialFile || started.current) return\n started.current = true\n void planFile(initialFile)\n }, [initialFile, planFile])\n\n const onFile = async (event: ChangeEvent<HTMLInputElement>) => {\n const chosen = event.target.files?.[0]\n event.target.value = ''\n if (!chosen) return\n await run(async () => {\n const content = JSON.parse(await readFileText(chosen))\n await planFile({ name: chosen.name, content })\n })\n }\n\n const compare = useCallback(\n async (key: string) => {\n if (!file || comparisons[key]) return\n await run(async () => {\n const answered = await client.compare(file.content, [key])\n setComparisons((current) => ({\n ...current,\n ...Object.fromEntries(answered.map((one) => [one.key, one])),\n }))\n })\n },\n [client, file, comparisons, run],\n )\n\n const loadCatalog = useCallback(async () => {\n if (catalog) return\n await run(async () => setCatalog(await client.catalog()))\n }, [catalog, client, run])\n\n const toReview = () =>\n run(async () => {\n if (!file) return\n setReview(await client.plan(file.content, decided))\n setAcknowledged([])\n setStep('review')\n })\n\n const apply = () =>\n run(async () => {\n if (!file) return\n const applied = await client.apply(file.content, decided)\n setResult(applied)\n setStep('results')\n onImported?.(applied)\n })\n\n const changed = useMemo(\n () =>\n (plan?.items ?? []).filter((item) => {\n if (!item.existing) return false\n const decision = decisions[item.key]\n return item.comparison === 'differs' || (decision !== undefined && decision !== 'skip')\n }),\n [plan, decisions],\n )\n\n const goChanges = (key?: string) => {\n const first = key ?? selected ?? changed[0]?.key ?? null\n setSelected(first)\n setStep('changes')\n if (first) void compare(first)\n }\n\n const stepIndex = STEPS.findIndex((one) => one.id === step)\n const locked = step === 'results'\n\n let body: ReactNode = null\n if (step === 'upload') {\n body = (\n <Stack spacing={2}>\n <Typography variant=\"body2\">\n Choose a site package, or a backup downloaded from any of your sites. Nothing is written until you\n import on the last step.\n </Typography>\n <Box>\n <Button variant=\"outlined\" disabled={busy} onClick={() => inputRef.current?.click()}>\n Choose a file\n </Button>\n <input\n ref={inputRef}\n type=\"file\"\n accept=\"application/json,.json\"\n hidden\n aria-label=\"Package file\"\n onChange={(event) => void onFile(event)}\n />\n </Box>\n {file ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {file.name}\n </Typography>\n ) : null}\n {answer ? <TransferWizardNav onNext={() => setStep('items')} busy={busy} /> : null}\n </Stack>\n )\n } else if (step === 'items' && plan && answer) {\n body = (\n <ItemsStep\n fileName={file?.name ?? ''}\n answer={answer}\n decisions={decisions}\n overrides={overrides}\n bulk={bulk}\n busy={busy}\n onBulk={(comparison, decision) => setBulk((current) => ({ ...current, [comparison]: decision }))}\n onDecision={(key, decision) => setOverrides((current) => ({ ...current, [key]: decision }))}\n onCompare={(key) => goChanges(key)}\n blockers={\n undecided.length\n ? [\n `Choose what to do with ${countOf(undecided.length, 'changed item')}: set a default for changed items, or choose for each.`,\n ]\n : []\n }\n onBack={() => setStep('upload')}\n onNext={() => setStep('dependencies')}\n />\n )\n } else if (step === 'dependencies' && plan) {\n body = (\n <DependenciesStep\n prompts={prompts}\n choices={effectiveDependencyChoices}\n catalog={catalog}\n busy={busy}\n titleOf={titleOf}\n kindLabel={kindLabel}\n onNeedCatalog={() => void loadCatalog()}\n onChoice={(key, choice) => setDependencyChoices((current) => ({ ...current, [key]: choice }))}\n onBack={() => setStep('items')}\n onNext={() => goChanges()}\n />\n )\n } else if (step === 'changes' && plan) {\n const item = selected ? byKey.get(selected) : undefined\n const comparison = selected ? comparisons[selected] : undefined\n const decision = item ? (decisions[item.key] ?? null) : null\n body = (\n <Stack spacing={2}>\n {changed.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Nothing this site holds is changed by the import.\n </Typography>\n ) : (\n <Stack direction={{ xs: 'column', md: 'row' }} spacing={2}>\n <Box sx={{ width: { md: 280 }, flexShrink: 0 }}>\n <List dense aria-label=\"Changed items\" sx={{ maxHeight: 520, overflowY: 'auto' }}>\n {changed.map((one) => {\n const chosen = decisions[one.key]\n return (\n <ListItemButton\n key={one.key}\n selected={one.key === selected}\n onClick={() => {\n setSelected(one.key)\n void compare(one.key)\n }}\n >\n <ListItemText\n primary={packageItemTitle(one)}\n secondary={`${kindLabel(one.kind)} · ${chosen ? PACKAGE_DECISION_WORDS[chosen].label : 'Not chosen'}`}\n />\n </ListItemButton>\n )\n })}\n </List>\n </Box>\n <Box sx={{ flex: 1, minWidth: 0 }}>\n {item ? (\n <Stack spacing={2}>\n <Stack useFlexGap direction=\"row\" spacing={2} sx={{ alignItems: 'center', flexWrap: 'wrap' }}>\n <Typography variant=\"h6\" component=\"h3\">\n {packageItemTitle(item)}\n </Typography>\n <TransferChoiceSelect<PackageItemDecision>\n label=\"Decision\"\n value={decision ?? ''}\n placeholder=\"Choose…\"\n options={packageDecisionOptions(item.choices)}\n onChange={(next) => setOverrides((current) => ({ ...current, [item.key]: next }))}\n />\n </Stack>\n {comparison ? (\n <PackageItemDiff\n item={item}\n comparison={comparison}\n decision={decision}\n {...(previewHref ? { previewHref } : {})}\n {...(renderers ? { renderers } : {})}\n mergeChoices={mergeChoices[item.key] ?? {}}\n onMergeChoice={(key, choice) =>\n setMergeChoices((current) => ({\n ...current,\n [item.key]: { ...(current[item.key] ?? {}), [key]: choice },\n }))\n }\n />\n ) : (\n <CircularProgress size={24} aria-label=\"Comparing\" />\n )}\n </Stack>\n ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Choose an item to see what changes.\n </Typography>\n )}\n </Box>\n </Stack>\n )}\n <TransferWizardNav\n busy={busy}\n blockers={\n undecided.length\n ? [`Choose what to do with ${countOf(undecided.length, 'changed item')}.`]\n : []\n }\n onBack={() => setStep('dependencies')}\n onNext={() => void toReview()}\n nextLabel=\"Review\"\n />\n </Stack>\n )\n } else if (step === 'review' && review) {\n const acknowledgements = packageAcknowledgements(review, decisions, titleOf)\n const unacknowledged = acknowledgements.filter(\n (one) => one.required && !acknowledged.includes(one.id),\n ).length\n const counts = packageDecisionCounts(decisions)\n body = (\n <Stack spacing={2}>\n <Box component=\"ul\" sx={{ m: 0, pl: 2.5 }} aria-label=\"What the import does\">\n {counts.map(({ decision, count }) => (\n <Typography component=\"li\" variant=\"body2\" key={decision}>\n {`${PACKAGE_DECISION_WORDS[decision].label}: ${countOf(count, 'item')}`}\n </Typography>\n ))}\n </Box>\n {review.capRefusal ? <Alert severity=\"error\">{review.capRefusal}</Alert> : null}\n <TransferAcknowledgementList\n items={acknowledgements}\n acknowledged={acknowledged}\n disabled={busy}\n onChange={(id, done) =>\n setAcknowledged((current) => (done ? [...current, id] : current.filter((one) => one !== id)))\n }\n />\n <TransferWizardNav\n busy={busy}\n blockers={[\n ...(review.capRefusal ? ['A plan limit refuses this import. Skip some new items, or upgrade.'] : []),\n ...(unacknowledged ? [`Acknowledge ${countOf(unacknowledged, 'warning')} to import.`] : []),\n ]}\n onBack={() => goChanges()}\n onNext={() => void apply()}\n nextLabel=\"Import\"\n />\n </Stack>\n )\n } else if (step === 'results' && result) {\n const counts = Object.entries(result.counts).filter(([, count]) => count > 0)\n body = (\n <Stack spacing={2}>\n <Alert severity=\"success\">\n {`Imported: ${counts\n .map(([decision, count]) =>\n `${PACKAGE_DECISION_WORDS[decision as PackageItemDecision]?.label ?? decision} ${count.toLocaleString()}`,\n )\n .join(', ')} (${countOf(result.written, 'document')} written).`}\n </Alert>\n <PackageImportUndo client={client} importId={result.importId} {...(onUndone ? { onUndone } : {})} />\n <TransferWizardNav onNext={onDone} nextLabel=\"Done\" />\n </Stack>\n )\n }\n\n return (\n <Stack spacing={3}>\n <Box component=\"nav\" aria-label=\"Import steps\" sx={{ overflowX: 'auto' }}>\n <Stepper nonLinear activeStep={stepIndex} alternativeLabel>\n {STEPS.map((one, index) => {\n const reachable = index < stepIndex && !locked && Boolean(answer)\n return (\n <Step key={one.id} completed={index < stepIndex}>\n {reachable ? (\n <StepButton\n onClick={() => (one.id === 'changes' ? goChanges() : setStep(one.id))}\n >\n {one.label}\n </StepButton>\n ) : (\n <StepLabel aria-current={index === stepIndex ? 'step' : undefined}>{one.label}</StepLabel>\n )}\n </Step>\n )\n })}\n </Stepper>\n </Box>\n {error ? (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n ) : null}\n {busy && step !== 'changes' ? <CircularProgress size={24} aria-label=\"Working\" /> : null}\n <Box>{body}</Box>\n </Stack>\n )\n}\n\n/*==========================================\n * ITEMS\n *=========================================*/\n\ninterface ItemsStepProps {\n fileName: string\n answer: SitePackagePlanAnswer\n decisions: Readonly<Record<string, PackageItemDecision>>\n overrides: Readonly<Record<string, PackageItemDecision>>\n bulk: PackageBulkDefaults\n busy: boolean\n blockers: string[]\n onBulk(comparison: keyof PackageBulkDefaults, decision: PackageItemDecision): void\n onDecision(key: string, decision: PackageItemDecision): void\n onCompare(key: string): void\n onBack(): void\n onNext(): void\n}\n\nconst BULK_LABELS: Record<keyof PackageBulkDefaults, string> = {\n new: 'New items',\n differs: 'Changed items',\n identical: 'Items already on this site',\n}\n\nfunction ItemsStep(props: ItemsStepProps) {\n const { answer, decisions, overrides, bulk } = props\n const { plan } = answer\n const [status, setStatus] = useState('all')\n const [kind, setKind] = useState('all')\n const [search, setSearch] = useState('')\n const [shown, setShown] = useState<Record<string, number>>({})\n const needle = search.trim().toLowerCase()\n const visible = plan.items.filter(\n (item) =>\n (status === 'all' || item.status === status) &&\n (kind === 'all' || item.kind === kind) &&\n (!needle ||\n [item.name, item.slug, item.id].some((value) => value?.toLowerCase().includes(needle))),\n )\n const comparisons = (Object.keys(BULK_LABELS) as Array<keyof PackageBulkDefaults>).filter((one) =>\n plan.items.some((item) => item.comparison === one),\n )\n const counts = plan.counts\n\n return (\n <Stack spacing={2}>\n <Typography variant=\"body2\">\n {`${props.fileName ? `${props.fileName}: ` : ''}${countOf(counts.new, 'new item')}, ` +\n `${countOf(counts.differs, 'item')} that differ from this site’s copy, ` +\n `${countOf(counts.identical, 'item')} already on this site` +\n (counts.missingDependency\n ? `, ${countOf(counts.missingDependency, 'item')} that need something neither the file nor this site holds.`\n : '.')}\n </Typography>\n <Stack spacing={1}>\n <Typography variant=\"subtitle2\" component=\"h3\">\n Defaults\n </Typography>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1.5}>\n {comparisons.map((one) => (\n <TransferChoiceSelect<PackageItemDecision>\n key={one}\n label={BULK_LABELS[one]}\n value={bulk[one]}\n placeholder=\"Choose…\"\n options={packageDecisionOptions(PACKAGE_BULK_CHOICES[one])}\n onChange={(decision) => props.onBulk(one, decision)}\n />\n ))}\n </Stack>\n <Typography variant=\"caption\" color=\"text.secondary\">\n A default applies to every item of that kind you have not chosen for, where the item can take it.\n </Typography>\n </Stack>\n <Stack direction={{ xs: 'column', sm: 'row' }} spacing={1.5}>\n <TransferChoiceSelect\n label=\"Show\"\n value={status}\n onChange={setStatus}\n options={[\n { value: 'all', label: `All (${plan.items.length.toLocaleString()})` },\n ...(Object.keys(PACKAGE_STATUS_WORDS) as Array<keyof typeof PACKAGE_STATUS_WORDS>).map((one) => ({\n value: one,\n label: `${PACKAGE_STATUS_WORDS[one].label} (${counts[one].toLocaleString()})`,\n disabled: counts[one] === 0,\n })),\n ]}\n />\n <TransferChoiceSelect\n label=\"Kind\"\n value={kind}\n onChange={setKind}\n options={[\n { value: 'all', label: 'Every kind' },\n ...plan.kinds.map((one) => ({ value: one.kind, label: `${one.label} (${one.count.toLocaleString()})` })),\n ]}\n />\n <TextField\n size=\"small\"\n label=\"Search\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n />\n </Stack>\n {visible.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n No item matches.\n </Typography>\n ) : null}\n {plan.kinds.map((group) => {\n const items = visible.filter((item) => item.kind === group.kind)\n if (!items.length) return null\n const limit = shown[group.kind] ?? GROUP_PAGE\n return (\n <Stack spacing={1} key={group.kind}>\n <Typography variant=\"subtitle1\" component=\"h3\">\n {`${group.label} (${items.length.toLocaleString()})`}\n </Typography>\n <ScrollTable size=\"small\" aria-label={group.label}>\n <TableHead>\n <TableRow>\n <TableCell>Item</TableCell>\n <TableCell>Status</TableCell>\n <TableCell>On this site</TableCell>\n <TableCell>Decision</TableCell>\n <TableCell />\n </TableRow>\n </TableHead>\n <TableBody>\n {items.slice(0, limit).map((item) => {\n const title = packageItemTitle(item)\n const words = PACKAGE_STATUS_WORDS[item.status]\n return (\n <TableRow key={item.key}>\n <TableCell>\n <Typography variant=\"body2\">{title}</Typography>\n {item.slug && item.slug !== title ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {item.slug}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n <Chip size=\"small\" variant=\"outlined\" label={words.label} color={words.color} />\n {item.missing.length ? (\n <Typography variant=\"caption\" color=\"text.secondary\" component=\"div\">\n {`Needs ${item.missing.map((dep) => `${dep.kind} ${dep.id}`).join(', ')}`}\n </Typography>\n ) : null}\n </TableCell>\n <TableCell>\n {item.existing ? (\n <>\n <Typography variant=\"body2\">{packageItemTitle(item.existing)}</Typography>\n {item.matchedBy ? (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {`Matched ${MATCHED_BY_WORDS[item.matchedBy]}`}\n </Typography>\n ) : null}\n </>\n ) : (\n '—'\n )}\n </TableCell>\n <TableCell>\n <TransferChoiceSelect<PackageItemDecision>\n label={`Decision for ${title}`}\n hideLabel\n value={decisions[item.key] ?? ''}\n placeholder=\"Choose…\"\n options={packageDecisionOptions(item.choices)}\n onChange={(decision) => props.onDecision(item.key, decision)}\n {...(overrides[item.key] ? { helperText: 'Your choice' } : {})}\n />\n </TableCell>\n <TableCell>\n {item.existing && item.comparison === 'differs' ? (\n <Button size=\"small\" onClick={() => props.onCompare(item.key)}>\n {`Compare ${title}`}\n </Button>\n ) : null}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </ScrollTable>\n {items.length > limit ? (\n <Box>\n <Button\n size=\"small\"\n onClick={() => setShown((current) => ({ ...current, [group.kind]: limit + GROUP_PAGE }))}\n >\n {`Show ${Math.min(GROUP_PAGE, items.length - limit).toLocaleString()} more ${group.label.toLowerCase()}`}\n </Button>\n </Box>\n ) : null}\n </Stack>\n )\n })}\n <TransferWizardNav busy={props.busy} blockers={props.blockers} onBack={props.onBack} onNext={props.onNext} />\n </Stack>\n )\n}\n\n/*==========================================\n * MISSING ITEMS\n *=========================================*/\n\ninterface DependenciesStepProps {\n prompts: readonly PackageDependencyPrompt[]\n choices: Readonly<Record<string, SitePackageDependencyChoice>>\n catalog: SitePackageCatalog | null\n busy: boolean\n titleOf(key: string): string\n kindLabel(kind: string): string\n onNeedCatalog(): void\n onChoice(key: string, choice: SitePackageDependencyChoice): void\n onBack(): void\n onNext(): void\n}\n\nfunction DependenciesStep(props: DependenciesStepProps) {\n const { prompts, choices, catalog, onNeedCatalog } = props\n const mapping = prompts.some((prompt) => typeof choices[prompt.key] === 'object')\n useEffect(() => {\n if (mapping && !catalog) onNeedCatalog()\n }, [mapping, catalog, onNeedCatalog])\n\n return (\n <Stack spacing={2}>\n {prompts.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Every item you are importing has what it needs.\n </Typography>\n ) : (\n <>\n <Typography variant=\"body2\">\n These items are named by what you are importing, and this site will not hold them. Choose what to\n do about each.\n </Typography>\n <ScrollTable size=\"small\" aria-label=\"Missing items\">\n <TableHead>\n <TableRow>\n <TableCell>Missing item</TableCell>\n <TableCell>Needed by</TableCell>\n <TableCell>What to do</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {prompts.map((prompt) => {\n const name = prompt.inPackage\n ? packageItemTitle(prompt.inPackage)\n : `${props.kindLabel(prompt.kind)}: ${prompt.id}`\n const choice = choices[prompt.key]\n const answer = packageDependencyAnswer(choice)\n const options = (catalog?.manifest.items ?? []).filter((one) => one.kind === prompt.kind)\n const picked =\n typeof choice === 'object' ? (options.find((one) => one.$id === choice.mapTo) ?? null) : null\n return (\n <TableRow key={prompt.key}>\n <TableCell>\n <Typography variant=\"body2\">{name}</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {prompt.inPackage ? 'In the file, set to skip' : 'Neither in the file nor on this site'}\n </Typography>\n </TableCell>\n <TableCell>\n <Typography variant=\"body2\">\n {prompt.neededBy.slice(0, 3).map(props.titleOf).join(', ')}\n {prompt.neededBy.length > 3 ? ` and ${(prompt.neededBy.length - 3).toLocaleString()} more` : ''}\n </Typography>\n </TableCell>\n <TableCell>\n <Stack spacing={1}>\n <TransferChoiceSelect\n label={`What to do about ${name}`}\n hideLabel\n value={answer}\n placeholder=\"Choose…\"\n options={packageDependencyOptions(prompt)}\n onChange={(next) => props.onChoice(prompt.key, next === 'mapTo' ? { mapTo: '' } : next)}\n {...(answer === 'drop'\n ? { helperText: `Removed from ${countOf(prompt.neededBy.length, 'item')}.` }\n : {})}\n />\n {answer === 'mapTo' ? (\n <Autocomplete\n size=\"small\"\n options={options}\n loading={!catalog}\n value={picked}\n getOptionLabel={(option) => option.name || option.slug || option.$id}\n isOptionEqualToValue={(option, value) => option.$id === value.$id}\n onChange={(_event, value) => props.onChoice(prompt.key, { mapTo: value?.$id ?? '' })}\n renderInput={(params) => (\n <TextField {...params} label={`Use instead of ${name}`} />\n )}\n />\n ) : null}\n </Stack>\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </ScrollTable>\n </>\n )}\n <TransferWizardNav\n busy={props.busy}\n blockers={packageDependencyProblems(prompts, choices)}\n onBack={props.onBack}\n onNext={props.onNext}\n />\n </Stack>\n )\n}\n\nexport default PackageImportWizard\n"],"names":["ScrollTable","Alert","Autocomplete","Box","Button","Chip","CircularProgress","List","ListItemButton","ListItemText","Stack","Step","StepButton","StepLabel","Stepper","TableBody","TableCell","TableHead","TableRow","TextField","Typography","useCallback","useEffect","useMemo","useRef","useState","PackageImportUndo","PackageItemDiff","INITIAL_PACKAGE_BULK_DEFAULTS","PACKAGE_BULK_CHOICES","PACKAGE_DECISION_WORDS","PACKAGE_STATUS_WORDS","packageAcknowledgements","packageDecided","packageDecisionCounts","packageDecisionOptions","packageDecisions","packageDependencyAnswer","packageDependencyOptions","packageDependencyPrompts","packageDependencyProblems","packageItemTitle","TransferAcknowledgementList","TransferChoiceSelect","TransferWizardNav","countOf","STEPS","id","label","GROUP_PAGE","message","error","SyntaxError","Error","readFileText","file","text","Promise","resolve","reject","reader","FileReader","onload","String","result","onerror","readAsText","MATCHED_BY_WORDS","slug","name","PackageImportWizard","props","client","previewHref","renderers","initialFile","onImported","onUndone","onDone","step","setStep","setFile","answer","setAnswer","review","setReview","overrides","setOverrides","bulk","setBulk","dependencyChoices","setDependencyChoices","mergeChoices","setMergeChoices","comparisons","setComparisons","selected","setSelected","acknowledged","setAcknowledged","catalog","setCatalog","setResult","busy","setBusy","setError","inputRef","run","work","caught","plan","byKey","Map","items","map","item","key","titleOf","get","kindLabel","kind","kinds","find","one","decisions","undecided","prompts","effectiveDependencyChoices","out","prompt","choice","inPackage","undefined","decided","planFile","next","planned","content","started","current","onFile","event","chosen","target","files","value","JSON","parse","compare","answered","Object","fromEntries","loadCatalog","toReview","apply","applied","changed","filter","existing","decision","comparison","goChanges","first","stepIndex","findIndex","locked","body","spacing","variant","disabled","onClick","click","input","ref","type","accept","hidden","aria-label","onChange","color","onNext","ItemsStep","fileName","onBulk","onDecision","onCompare","blockers","length","onBack","DependenciesStep","choices","onNeedCatalog","onChoice","direction","xs","md","sx","width","flexShrink","dense","maxHeight","overflowY","primary","secondary","flex","minWidth","useFlexGap","alignItems","flexWrap","component","placeholder","options","onMergeChoice","size","nextLabel","acknowledgements","unacknowledged","required","includes","counts","m","pl","count","capRefusal","severity","done","entries","toLocaleString","join","written","importId","overflowX","nonLinear","activeStep","alternativeLabel","index","reachable","Boolean","completed","aria-current","onClose","BULK_LABELS","new","differs","identical","status","setStatus","setKind","search","setSearch","shown","setShown","needle","trim","toLowerCase","visible","some","keys","missingDependency","sm","group","limit","slice","title","words","missing","dep","matchedBy","hideLabel","helperText","Math","min","mapping","manifest","picked","$id","mapTo","neededBy","loading","getOptionLabel","option","isOptionEqualToValue","_event","renderInput","params"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;AAsBA,SAASA,WAAW,QAAQ,yDAAwD;AACpF,SACEC,KAAK,EACLC,YAAY,EACZC,GAAG,EACHC,MAAM,EACNC,IAAI,EACJC,gBAAgB,EAChBC,IAAI,EACJC,cAAc,EACdC,YAAY,EACZC,KAAK,EACLC,IAAI,EACJC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,SAAS,EACTC,UAAU,QACL,gBAAe;AACtB,SAA2CC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AAE3G,SAASC,iBAAiB,QAAQ,qCAAiC;AACnE,SACEC,eAAe,QAGV,mCAA+B;AAYtC,SACEC,6BAA6B,EAC7BC,oBAAoB,EACpBC,sBAAsB,EACtBC,oBAAoB,EAGpBC,uBAAuB,EACvBC,cAAc,EACdC,qBAAqB,EACrBC,sBAAsB,EACtBC,gBAAgB,EAChBC,uBAAuB,EACvBC,wBAAwB,EACxBC,wBAAwB,EACxBC,yBAAyB,EACzBC,gBAAgB,QACX,iCAA6B;AACpC,SAASC,2BAA2B,QAAQ,+CAA2C;AACvF,SAASC,oBAAoB,QAAQ,wCAAoC;AACzE,SAASC,iBAAiB,QAAQ,qCAAiC;AACnE,SAASC,OAAO,QAAQ,sBAAkB;AAI1C,MAAMC,QAAiE;IACrE;QAAEC,IAAI;QAAUC,OAAO;IAAS;IAChC;QAAED,IAAI;QAASC,OAAO;IAAQ;IAC9B;QAAED,IAAI;QAAgBC,OAAO;IAAgB;IAC7C;QAAED,IAAI;QAAWC,OAAO;IAAU;IAClC;QAAED,IAAI;QAAUC,OAAO;IAAS;IAChC;QAAED,IAAI;QAAWC,OAAO;IAAS;CAClC;AAED,4CAA4C,GAC5C,MAAMC,aAAa;AAqBnB,MAAMC,UAAU,CAACC,QACfA,iBAAiBC,cACb,+CACAD,iBAAiBE,SAASF,MAAMD,OAAO,GACrCC,MAAMD,OAAO,GACb;AAER,SAASI,aAAaC,IAAU;IAC9B,IAAI,OAAOA,KAAKC,IAAI,KAAK,YAAY,OAAOD,KAAKC,IAAI;IACrD,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3B,MAAMC,SAAS,IAAIC;QACnBD,OAAOE,MAAM,GAAG;gBAAqBF;mBAAfF,QAAQK,QAAOH,iBAAAA,OAAOI,MAAM,YAAbJ,iBAAiB;;QACtDA,OAAOK,OAAO,GAAG,IAAMN,OAAOC,OAAOT,KAAK;QAC1CS,OAAOM,UAAU,CAACX;IACpB;AACF;AAEA,MAAMY,mBAAkF;IACtFpB,IAAI;IACJqB,MAAM;IACNC,MAAM;AACR;AAEA,OAAO,SAASC,oBAAoBC,KAA+B;;IACjE,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAEC,WAAW,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGP;IACtF,MAAM,CAACQ,MAAMC,QAAQ,GAAGvD,SAA4B;IACpD,MAAM,CAAC8B,MAAM0B,QAAQ,GAAGxD,SAAoD;IAC5E,MAAM,CAACyD,QAAQC,UAAU,GAAG1D,SAAuC;IACnE,MAAM,CAAC2D,QAAQC,UAAU,GAAG5D,SAAuC;IACnE,MAAM,CAAC6D,WAAWC,aAAa,GAAG9D,SAA8C,CAAC;IACjF,MAAM,CAAC+D,MAAMC,QAAQ,GAAGhE,SAA8BG;IACtD,MAAM,CAAC8D,mBAAmBC,qBAAqB,GAAGlE,SAAsD,CAAC;IACzG,MAAM,CAACmE,cAAcC,gBAAgB,GAAGpE,SAAiE,CAAC;IAC1G,MAAM,CAACqE,aAAaC,eAAe,GAAGtE,SAAgD,CAAC;IACvF,MAAM,CAACuE,UAAUC,YAAY,GAAGxE,SAAwB;IACxD,MAAM,CAACyE,cAAcC,gBAAgB,GAAG1E,SAAmB,EAAE;IAC7D,MAAM,CAAC2E,SAASC,WAAW,GAAG5E,SAAoC;IAClE,MAAM,CAACuC,QAAQsC,UAAU,GAAG7E,SAAwC;IACpE,MAAM,CAAC8E,MAAMC,QAAQ,GAAG/E,SAAS;IACjC,MAAM,CAAC0B,OAAOsD,SAAS,GAAGhF,SAAwB;IAClD,MAAMiF,WAAWlF,OAAyB;IAE1C,MAAMmF,MAAMtF,YAAY,OAAOuF;QAC7BJ,QAAQ;QACRC,SAAS;QACT,IAAI;YACF,MAAMG;QACR,EAAE,OAAOC,QAAQ;YACfJ,SAASvD,QAAQ2D;QACnB,SAAU;YACRL,QAAQ;QACV;IACF,GAAG,EAAE;IAEL,MAAMM,eAAO5B,0BAAAA,OAAQ4B,IAAI,mBAAI;IAC7B,MAAMC,QAAQxF,QAAQ;;eAAM,IAAIyF,IAAI,SAACF,wBAAAA,KAAMG,KAAK,mBAAI,EAAE,EAAEC,GAAG,CAAC,CAACC,OAAS;gBAACA,KAAKC,GAAG;gBAAED;aAAK;OAAI;QAACL;KAAK;IAChG,MAAMO,UAAUhG,YAAY,CAAC+F;QAC3B,MAAMD,OAAOJ,MAAMO,GAAG,CAACF;QACvB,OAAOD,OAAO1E,iBAAiB0E,QAAQC;IACzC,GAAG;QAACL;KAAM;IACV,MAAMQ,YAAYlG,YAChB,CAACmG;;YAAiBV;uBAAAA,yBAAAA,mBAAAA,KAAMW,KAAK,CAACC,IAAI,CAAC,CAACC,MAAQA,IAAIH,IAAI,KAAKA,0BAAvCV,iBAA8C9D,KAAK,mBAAIwE;OACzE;QAACV;KAAK;IAGR,MAAM,EAAEc,SAAS,EAAEC,SAAS,EAAE,GAAGtG,QAC/B,IAAOuF,OAAO1E,iBAAiB0E,MAAMxB,WAAWE,QAAQ;YAAEoC,WAAW,CAAC;YAAGC,WAAW,EAAE;QAAC,GACvF;QAACf;QAAMxB;QAAWE;KAAK;IAEzB,MAAMsC,UAAUvG,QAAQ,IAAOuF,OAAOvE,yBAAyBuE,MAAMc,aAAa,EAAE,EAAG;QAACd;QAAMc;KAAU;IACxG,sFAAsF;IACtF,MAAMG,6BAA6BxG,QAAQ;QACzC,MAAMyG,MAAmD,CAAC;QAC1D,KAAK,MAAMC,UAAUH,QAAS;gBACbpC;YAAf,MAAMwC,UAASxC,gCAAAA,iBAAiB,CAACuC,OAAOb,GAAG,CAAC,YAA7B1B,gCAAkCuC,OAAOE,SAAS,GAAG,WAAWC;YAC/E,IAAIF,QAAQF,GAAG,CAACC,OAAOb,GAAG,CAAC,GAAGc;QAChC;QACA,OAAOF;IACT,GAAG;QAACF;QAASpC;KAAkB;IAC/B,MAAM2C,UAAU9G,QACd,IAAMU,eAAe2F,WAAWE,SAASC,4BAA4BnC,eACrE;QAACgC;QAAWE;QAASC;QAA4BnC;KAAa;IAGhE,MAAM0C,WAAWjH,YACf,CAACkH,OACC5B,IAAI;YACF,MAAM6B,UAAU,MAAMhE,OAAOsC,IAAI,CAACyB,KAAKE,OAAO;YAC9CxD,QAAQsD;YACRpD,UAAUqD;YACVjD,aAAa,CAAC;YACdE,QAAQ7D;YACR+D,qBAAqB,CAAC;YACtBE,gBAAgB,CAAC;YACjBE,eAAe,CAAC;YAChBE,YAAY;YACZjB,QAAQ;QACV,IACF;QAACR;QAAQmC;KAAI;IAGf,MAAM+B,UAAUlH,OAAO;IACvBF,UAAU;QACR,IAAI,CAACqD,eAAe+D,QAAQC,OAAO,EAAE;QACrCD,QAAQC,OAAO,GAAG;QAClB,KAAKL,SAAS3D;IAChB,GAAG;QAACA;QAAa2D;KAAS;IAE1B,MAAMM,SAAS,OAAOC;YACLA;QAAf,MAAMC,UAASD,sBAAAA,MAAME,MAAM,CAACC,KAAK,qBAAlBH,mBAAoB,CAAC,EAAE;QACtCA,MAAME,MAAM,CAACE,KAAK,GAAG;QACrB,IAAI,CAACH,QAAQ;QACb,MAAMnC,IAAI;YACR,MAAM8B,UAAUS,KAAKC,KAAK,CAAC,MAAM7F,aAAawF;YAC9C,MAAMR,SAAS;gBAAEjE,MAAMyE,OAAOzE,IAAI;gBAAEoE;YAAQ;QAC9C;IACF;IAEA,MAAMW,UAAU/H,YACd,OAAO+F;QACL,IAAI,CAAC7D,QAAQuC,WAAW,CAACsB,IAAI,EAAE;QAC/B,MAAMT,IAAI;YACR,MAAM0C,WAAW,MAAM7E,OAAO4E,OAAO,CAAC7F,KAAKkF,OAAO,EAAE;gBAACrB;aAAI;YACzDrB,eAAe,CAAC4C,UAAa,aACxBA,SACAW,OAAOC,WAAW,CAACF,SAASnC,GAAG,CAAC,CAACS,MAAQ;wBAACA,IAAIP,GAAG;wBAAEO;qBAAI;QAE9D;IACF,GACA;QAACnD;QAAQjB;QAAMuC;QAAaa;KAAI;IAGlC,MAAM6C,cAAcnI,YAAY;QAC9B,IAAI+E,SAAS;QACb,MAAMO,IAAI,UAAYN,WAAW,MAAM7B,OAAO4B,OAAO;IACvD,GAAG;QAACA;QAAS5B;QAAQmC;KAAI;IAEzB,MAAM8C,WAAW,IACf9C,IAAI;YACF,IAAI,CAACpD,MAAM;YACX8B,UAAU,MAAMb,OAAOsC,IAAI,CAACvD,KAAKkF,OAAO,EAAEJ;YAC1ClC,gBAAgB,EAAE;YAClBnB,QAAQ;QACV;IAEF,MAAM0E,QAAQ,IACZ/C,IAAI;YACF,IAAI,CAACpD,MAAM;YACX,MAAMoG,UAAU,MAAMnF,OAAOkF,KAAK,CAACnG,KAAKkF,OAAO,EAAEJ;YACjD/B,UAAUqD;YACV3E,QAAQ;YACRJ,8BAAAA,WAAa+E;QACf;IAEF,MAAMC,UAAUrI,QACd;;eACE,SAACuF,wBAAAA,KAAMG,KAAK,mBAAI,EAAE,EAAE4C,MAAM,CAAC,CAAC1C;YAC1B,IAAI,CAACA,KAAK2C,QAAQ,EAAE,OAAO;YAC3B,MAAMC,WAAWnC,SAAS,CAACT,KAAKC,GAAG,CAAC;YACpC,OAAOD,KAAK6C,UAAU,KAAK,aAAcD,aAAa3B,aAAa2B,aAAa;QAClF;OACF;QAACjD;QAAMc;KAAU;IAGnB,MAAMqC,YAAY,CAAC7C;YACHA,MAAAA;YAAmBwC;QAAjC,MAAMM,SAAQ9C,QAAAA,QAAAA,cAAAA,MAAOpB,oBAAPoB,SAAmBwC,YAAAA,OAAO,CAAC,EAAE,qBAAVA,UAAYxC,GAAG,YAAlCA,OAAsC;QACpDnB,YAAYiE;QACZlF,QAAQ;QACR,IAAIkF,OAAO,KAAKd,QAAQc;IAC1B;IAEA,MAAMC,YAAYrH,MAAMsH,SAAS,CAAC,CAACzC,MAAQA,IAAI5E,EAAE,KAAKgC;IACtD,MAAMsF,SAAStF,SAAS;IAExB,IAAIuF,OAAkB;IACtB,IAAIvF,SAAS,UAAU;QACrBuF,qBACE,MAAC5J;YAAM6J,SAAS;;8BACd,KAACnJ;oBAAWoJ,SAAQ;8BAAQ;;8BAI5B,MAACrK;;sCACC,KAACC;4BAAOoK,SAAQ;4BAAWC,UAAUlE;4BAAMmE,SAAS;oCAAMhE;wCAAAA,oBAAAA,SAASiC,OAAO,qBAAhBjC,kBAAkBiE,KAAK;;sCAAI;;sCAGrF,KAACC;4BACCC,KAAKnE;4BACLoE,MAAK;4BACLC,QAAO;4BACPC,MAAM;4BACNC,cAAW;4BACXC,UAAU,CAACrC,QAAU,KAAKD,OAAOC;;;;gBAGpCtF,qBACC,KAACnC;oBAAWoJ,SAAQ;oBAAQW,OAAM;8BAC/B5H,KAAKc,IAAI;qBAEV;gBACHa,uBAAS,KAACtC;oBAAkBwI,QAAQ,IAAMpG,QAAQ;oBAAUuB,MAAMA;qBAAW;;;IAGpF,OAAO,IAAIxB,SAAS,WAAW+B,QAAQ5B,QAAQ;;QAC7CoF,qBACE,KAACe;YACCC,QAAQ,WAAE/H,wBAAAA,KAAMc,IAAI,oBAAI;YACxBa,QAAQA;YACR0C,WAAWA;YACXtC,WAAWA;YACXE,MAAMA;YACNe,MAAMA;YACNgF,QAAQ,CAACvB,YAAYD,WAAatE,QAAQ,CAACkD,UAAa,aAAKA;wBAAS,CAACqB,WAAW,EAAED;;YACpFyB,YAAY,CAACpE,KAAK2C,WAAaxE,aAAa,CAACoD,UAAa,aAAKA;wBAAS,CAACvB,IAAI,EAAE2C;;YAC/E0B,WAAW,CAACrE,MAAQ6C,UAAU7C;YAC9BsE,UACE7D,UAAU8D,MAAM,GACZ;gBACE,CAAC,uBAAuB,EAAE9I,QAAQgF,UAAU8D,MAAM,EAAE,gBAAgB,sDAAsD,CAAC;aAC5H,GACD,EAAE;YAERC,QAAQ,IAAM5G,QAAQ;YACtBoG,QAAQ,IAAMpG,QAAQ;;IAG5B,OAAO,IAAID,SAAS,kBAAkB+B,MAAM;QAC1CwD,qBACE,KAACuB;YACC/D,SAASA;YACTgE,SAAS/D;YACT3B,SAASA;YACTG,MAAMA;YACNc,SAASA;YACTE,WAAWA;YACXwE,eAAe,IAAM,KAAKvC;YAC1BwC,UAAU,CAAC5E,KAAKc,SAAWvC,qBAAqB,CAACgD,UAAa,aAAKA;wBAAS,CAACvB,IAAI,EAAEc;;YACnF0D,QAAQ,IAAM5G,QAAQ;YACtBoG,QAAQ,IAAMnB;;IAGpB,OAAO,IAAIlF,SAAS,aAAa+B,MAAM;YAGZc,qBAqDOhC;QAvDhC,MAAMuB,OAAOnB,WAAWe,MAAMO,GAAG,CAACtB,YAAYoC;QAC9C,MAAM4B,aAAahE,WAAWF,WAAW,CAACE,SAAS,GAAGoC;QACtD,MAAM2B,WAAW5C,QAAQS,sBAAAA,SAAS,CAACT,KAAKC,GAAG,CAAC,YAAnBQ,sBAAuB,OAAQ;QACxD0C,qBACE,MAAC5J;YAAM6J,SAAS;;gBACbX,QAAQ+B,MAAM,KAAK,kBAClB,KAACvK;oBAAWoJ,SAAQ;oBAAQW,OAAM;8BAAiB;mCAInD,MAACzK;oBAAMuL,WAAW;wBAAEC,IAAI;wBAAUC,IAAI;oBAAM;oBAAG5B,SAAS;;sCACtD,KAACpK;4BAAIiM,IAAI;gCAAEC,OAAO;oCAAEF,IAAI;gCAAI;gCAAGG,YAAY;4BAAE;sCAC3C,cAAA,KAAC/L;gCAAKgM,KAAK;gCAACtB,cAAW;gCAAgBmB,IAAI;oCAAEI,WAAW;oCAAKC,WAAW;gCAAO;0CAC5E7C,QAAQ1C,GAAG,CAAC,CAACS;oCACZ,MAAMmB,SAASlB,SAAS,CAACD,IAAIP,GAAG,CAAC;oCACjC,qBACE,KAAC5G;wCAECwF,UAAU2B,IAAIP,GAAG,KAAKpB;wCACtB0E,SAAS;4CACPzE,YAAY0B,IAAIP,GAAG;4CACnB,KAAKgC,QAAQzB,IAAIP,GAAG;wCACtB;kDAEA,cAAA,KAAC3G;4CACCiM,SAASjK,iBAAiBkF;4CAC1BgF,WAAW,GAAGpF,UAAUI,IAAIH,IAAI,EAAE,GAAG,EAAEsB,SAAShH,sBAAsB,CAACgH,OAAO,CAAC9F,KAAK,GAAG,cAAc;;uCATlG2E,IAAIP,GAAG;gCAalB;;;sCAGJ,KAACjH;4BAAIiM,IAAI;gCAAEQ,MAAM;gCAAGC,UAAU;4BAAE;sCAC7B1F,qBACC,MAACzG;gCAAM6J,SAAS;;kDACd,MAAC7J;wCAAMoM,UAAU;wCAACb,WAAU;wCAAM1B,SAAS;wCAAG6B,IAAI;4CAAEW,YAAY;4CAAUC,UAAU;wCAAO;;0DACzF,KAAC5L;gDAAWoJ,SAAQ;gDAAKyC,WAAU;0DAChCxK,iBAAiB0E;;0DAEpB,KAACxE;gDACCK,OAAM;gDACNiG,KAAK,EAAEc,mBAAAA,WAAY;gDACnBmD,aAAY;gDACZC,SAAShL,uBAAuBgF,KAAK2E,OAAO;gDAC5CZ,UAAU,CAAC3C,OAAShD,aAAa,CAACoD,UAAa,aAAKA;4DAAS,CAACxB,KAAKC,GAAG,CAAC,EAAEmB;;;;;oCAG5EyB,2BACC,KAACrI;wCACCwF,MAAMA;wCACN6C,YAAYA;wCACZD,UAAUA;uCACLtF,cAAc;wCAAEA;oCAAY,IAAI,CAAC,GACjCC,YAAY;wCAAEA;oCAAU,IAAI,CAAC;wCAClCkB,YAAY,GAAEA,yBAAAA,YAAY,CAACuB,KAAKC,GAAG,CAAC,YAAtBxB,yBAA0B,CAAC;wCACzCwH,eAAe,CAAChG,KAAKc,SACnBrC,gBAAgB,CAAC8C;oDAEGA;uDAFU,aACzBA;oDACH,CAACxB,KAAKC,GAAG,CAAC,EAAE,cAAMuB,oBAAAA,OAAO,CAACxB,KAAKC,GAAG,CAAC,YAAjBuB,oBAAqB,CAAC;wDAAI,CAACvB,IAAI,EAAEc;;;;wDAKzD,KAAC5H;wCAAiB+M,MAAM;wCAAIpC,cAAW;;;+CAI3C,KAAC7J;gCAAWoJ,SAAQ;gCAAQW,OAAM;0CAAiB;;;;;8BAO3D,KAACvI;oBACC2D,MAAMA;oBACNmF,UACE7D,UAAU8D,MAAM,GACZ;wBAAC,CAAC,uBAAuB,EAAE9I,QAAQgF,UAAU8D,MAAM,EAAE,gBAAgB,CAAC,CAAC;qBAAC,GACxE,EAAE;oBAERC,QAAQ,IAAM5G,QAAQ;oBACtBoG,QAAQ,IAAM,KAAK3B;oBACnB6D,WAAU;;;;IAIlB,OAAO,IAAIvI,SAAS,YAAYK,QAAQ;QACtC,MAAMmI,mBAAmBvL,wBAAwBoD,QAAQwC,WAAWP;QACpE,MAAMmG,iBAAiBD,iBAAiB1D,MAAM,CAC5C,CAAClC,MAAQA,IAAI8F,QAAQ,IAAI,CAACvH,aAAawH,QAAQ,CAAC/F,IAAI5E,EAAE,GACtD4I,MAAM;QACR,MAAMgC,SAASzL,sBAAsB0F;QACrC0C,qBACE,MAAC5J;YAAM6J,SAAS;;8BACd,KAACpK;oBAAI8M,WAAU;oBAAKb,IAAI;wBAAEwB,GAAG;wBAAGC,IAAI;oBAAI;oBAAG5C,cAAW;8BACnD0C,OAAOzG,GAAG,CAAC,CAAC,EAAE6C,QAAQ,EAAE+D,KAAK,EAAE,iBAC9B,KAAC1M;4BAAW6L,WAAU;4BAAKzC,SAAQ;sCAChC,GAAG1I,sBAAsB,CAACiI,SAAS,CAAC/G,KAAK,CAAC,EAAE,EAAEH,QAAQiL,OAAO,SAAS;2BADzB/D;;gBAKnD3E,OAAO2I,UAAU,iBAAG,KAAC9N;oBAAM+N,UAAS;8BAAS5I,OAAO2I,UAAU;qBAAY;8BAC3E,KAACrL;oBACCuE,OAAOsG;oBACPrH,cAAcA;oBACduE,UAAUlE;oBACV2E,UAAU,CAACnI,IAAIkL,OACb9H,gBAAgB,CAACwC,UAAasF,OAAO;mCAAItF;gCAAS5F;6BAAG,GAAG4F,QAAQkB,MAAM,CAAC,CAAClC,MAAQA,QAAQ5E;;8BAG5F,KAACH;oBACC2D,MAAMA;oBACNmF,UAAU;2BACJtG,OAAO2I,UAAU,GAAG;4BAAC;yBAAqE,GAAG,EAAE;2BAC/FP,iBAAiB;4BAAC,CAAC,YAAY,EAAE3K,QAAQ2K,gBAAgB,WAAW,WAAW,CAAC;yBAAC,GAAG,EAAE;qBAC3F;oBACD5B,QAAQ,IAAM3B;oBACdmB,QAAQ,IAAM,KAAK1B;oBACnB4D,WAAU;;;;IAIlB,OAAO,IAAIvI,SAAS,aAAaf,QAAQ;QACvC,MAAM2J,SAASrE,OAAO4E,OAAO,CAAClK,OAAO2J,MAAM,EAAE9D,MAAM,CAAC,CAAC,GAAGiE,MAAM,GAAKA,QAAQ;QAC3ExD,qBACE,MAAC5J;YAAM6J,SAAS;;8BACd,KAACtK;oBAAM+N,UAAS;8BACb,CAAC,UAAU,EAAEL,OACXzG,GAAG,CAAC,CAAC,CAAC6C,UAAU+D,MAAM;;4BAClBhM;+BAAH,YAAGA,mCAAAA,sBAAsB,CAACiI,SAAgC,qBAAvDjI,iCAAyDkB,KAAK,mBAAI+G,SAAS,CAAC,EAAE+D,MAAMK,cAAc,IAAI;uBAE1GC,IAAI,CAAC,MAAM,EAAE,EAAEvL,QAAQmB,OAAOqK,OAAO,EAAE,YAAY,UAAU,CAAC;;8BAEnE,KAAC3M;oBAAkB8C,QAAQA;oBAAQ8J,UAAUtK,OAAOsK,QAAQ;mBAAOzJ,WAAW;oBAAEA;gBAAS,IAAI,CAAC;8BAC9F,KAACjC;oBAAkBwI,QAAQtG;oBAAQwI,WAAU;;;;IAGnD;IAEA,qBACE,MAAC5M;QAAM6J,SAAS;;0BACd,KAACpK;gBAAI8M,WAAU;gBAAMhC,cAAW;gBAAemB,IAAI;oBAAEmC,WAAW;gBAAO;0BACrE,cAAA,KAACzN;oBAAQ0N,SAAS;oBAACC,YAAYtE;oBAAWuE,gBAAgB;8BACvD5L,MAAMoE,GAAG,CAAC,CAACS,KAAKgH;wBACf,MAAMC,YAAYD,QAAQxE,aAAa,CAACE,UAAUwE,QAAQ3J;wBAC1D,qBACE,KAACvE;4BAAkBmO,WAAWH,QAAQxE;sCACnCyE,0BACC,KAAChO;gCACC8J,SAAS,IAAO/C,IAAI5E,EAAE,KAAK,YAAYkH,cAAcjF,QAAQ2C,IAAI5E,EAAE;0CAElE4E,IAAI3E,KAAK;+CAGZ,KAACnC;gCAAUkO,gBAAcJ,UAAUxE,YAAY,SAAS/B;0CAAYT,IAAI3E,KAAK;;2BARtE2E,IAAI5E,EAAE;oBAYrB;;;YAGHI,sBACC,KAAClD;gBAAM+N,UAAS;gBAAQgB,SAAS,IAAMvI,SAAS;0BAC7CtD;iBAED;YACHoD,QAAQxB,SAAS,0BAAY,KAACzE;gBAAiB+M,MAAM;gBAAIpC,cAAW;iBAAe;0BACpF,KAAC9K;0BAAKmK;;;;AAGZ;AAqBA,MAAM2E,cAAyD;IAC7DC,KAAK;IACLC,SAAS;IACTC,WAAW;AACb;AAEA,SAAS/D,UAAU9G,KAAqB;IACtC,MAAM,EAAEW,MAAM,EAAE0C,SAAS,EAAEtC,SAAS,EAAEE,IAAI,EAAE,GAAGjB;IAC/C,MAAM,EAAEuC,IAAI,EAAE,GAAG5B;IACjB,MAAM,CAACmK,QAAQC,UAAU,GAAG7N,SAAS;IACrC,MAAM,CAAC+F,MAAM+H,QAAQ,GAAG9N,SAAS;IACjC,MAAM,CAAC+N,QAAQC,UAAU,GAAGhO,SAAS;IACrC,MAAM,CAACiO,OAAOC,SAAS,GAAGlO,SAAiC,CAAC;IAC5D,MAAMmO,SAASJ,OAAOK,IAAI,GAAGC,WAAW;IACxC,MAAMC,UAAUjJ,KAAKG,KAAK,CAAC4C,MAAM,CAC/B,CAAC1C,OACC,AAACkI,CAAAA,WAAW,SAASlI,KAAKkI,MAAM,KAAKA,MAAK,KACzC7H,CAAAA,SAAS,SAASL,KAAKK,IAAI,KAAKA,IAAG,KACnC,CAAA,CAACoI,UACA;YAACzI,KAAK9C,IAAI;YAAE8C,KAAK/C,IAAI;YAAE+C,KAAKpE,EAAE;SAAC,CAACiN,IAAI,CAAC,CAAC/G,QAAUA,yBAAAA,MAAO6G,WAAW,GAAGpC,QAAQ,CAACkC,QAAO;IAE3F,MAAM9J,cAAc,AAACwD,OAAO2G,IAAI,CAAChB,aAAkDpF,MAAM,CAAC,CAAClC,MACzFb,KAAKG,KAAK,CAAC+I,IAAI,CAAC,CAAC7I,OAASA,KAAK6C,UAAU,KAAKrC;IAEhD,MAAMgG,SAAS7G,KAAK6G,MAAM;IAE1B,qBACE,MAACjN;QAAM6J,SAAS;;0BACd,KAACnJ;gBAAWoJ,SAAQ;0BACjB,GAAGjG,MAAM+G,QAAQ,GAAG,GAAG/G,MAAM+G,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAKzI,QAAQ8K,OAAOuB,GAAG,EAAE,YAAY,EAAE,CAAC,GACnF,GAAGrM,QAAQ8K,OAAOwB,OAAO,EAAE,QAAQ,oCAAoC,CAAC,GACxE,GAAGtM,QAAQ8K,OAAOyB,SAAS,EAAE,QAAQ,qBAAqB,CAAC,GAC1DzB,CAAAA,OAAOuC,iBAAiB,GACrB,CAAC,EAAE,EAAErN,QAAQ8K,OAAOuC,iBAAiB,EAAE,QAAQ,0DAA0D,CAAC,GAC1G,GAAE;;0BAEV,MAACxP;gBAAM6J,SAAS;;kCACd,KAACnJ;wBAAWoJ,SAAQ;wBAAYyC,WAAU;kCAAK;;kCAG/C,KAACvM;wBAAMuL,WAAW;4BAAEC,IAAI;4BAAUiE,IAAI;wBAAM;wBAAG5F,SAAS;kCACrDzE,YAAYoB,GAAG,CAAC,CAACS,oBAChB,KAAChF;gCAECK,OAAOiM,WAAW,CAACtH,IAAI;gCACvBsB,OAAOzD,IAAI,CAACmC,IAAI;gCAChBuF,aAAY;gCACZC,SAAShL,uBAAuBN,oBAAoB,CAAC8F,IAAI;gCACzDuD,UAAU,CAACnB,WAAaxF,MAAMgH,MAAM,CAAC5D,KAAKoC;+BALrCpC;;kCASX,KAACvG;wBAAWoJ,SAAQ;wBAAUW,OAAM;kCAAiB;;;;0BAIvD,MAACzK;gBAAMuL,WAAW;oBAAEC,IAAI;oBAAUiE,IAAI;gBAAM;gBAAG5F,SAAS;;kCACtD,KAAC5H;wBACCK,OAAM;wBACNiG,OAAOoG;wBACPnE,UAAUoE;wBACVnC,SAAS;4BACP;gCAAElE,OAAO;gCAAOjG,OAAO,CAAC,KAAK,EAAE8D,KAAKG,KAAK,CAAC0E,MAAM,CAACwC,cAAc,GAAG,CAAC,CAAC;4BAAC;+BAClE,AAAC7E,OAAO2G,IAAI,CAAClO,sBAAmEmF,GAAG,CAAC,CAACS,MAAS,CAAA;oCAC/FsB,OAAOtB;oCACP3E,OAAO,GAAGjB,oBAAoB,CAAC4F,IAAI,CAAC3E,KAAK,CAAC,EAAE,EAAE2K,MAAM,CAAChG,IAAI,CAACwG,cAAc,GAAG,CAAC,CAAC;oCAC7E1D,UAAUkD,MAAM,CAAChG,IAAI,KAAK;gCAC5B,CAAA;yBACD;;kCAEH,KAAChF;wBACCK,OAAM;wBACNiG,OAAOzB;wBACP0D,UAAUqE;wBACVpC,SAAS;4BACP;gCAAElE,OAAO;gCAAOjG,OAAO;4BAAa;+BACjC8D,KAAKW,KAAK,CAACP,GAAG,CAAC,CAACS,MAAS,CAAA;oCAAEsB,OAAOtB,IAAIH,IAAI;oCAAExE,OAAO,GAAG2E,IAAI3E,KAAK,CAAC,EAAE,EAAE2E,IAAImG,KAAK,CAACK,cAAc,GAAG,CAAC,CAAC;gCAAC,CAAA;yBACtG;;kCAEH,KAAChN;wBACCkM,MAAK;wBACLrK,OAAM;wBACNiG,OAAOuG;wBACPtE,UAAU,CAACrC,QAAU4G,UAAU5G,MAAME,MAAM,CAACE,KAAK;;;;YAGpD8G,QAAQpE,MAAM,KAAK,kBAClB,KAACvK;gBAAWoJ,SAAQ;gBAAQW,OAAM;0BAAiB;iBAGjD;YACHrE,KAAKW,KAAK,CAACP,GAAG,CAAC,CAACkJ;oBAGDV;gBAFd,MAAMzI,QAAQ8I,QAAQlG,MAAM,CAAC,CAAC1C,OAASA,KAAKK,IAAI,KAAK4I,MAAM5I,IAAI;gBAC/D,IAAI,CAACP,MAAM0E,MAAM,EAAE,OAAO;gBAC1B,MAAM0E,SAAQX,oBAAAA,KAAK,CAACU,MAAM5I,IAAI,CAAC,YAAjBkI,oBAAqBzM;gBACnC,qBACE,MAACvC;oBAAM6J,SAAS;;sCACd,KAACnJ;4BAAWoJ,SAAQ;4BAAYyC,WAAU;sCACvC,GAAGmD,MAAMpN,KAAK,CAAC,EAAE,EAAEiE,MAAM0E,MAAM,CAACwC,cAAc,GAAG,CAAC,CAAC;;sCAEtD,MAACnO;4BAAYqN,MAAK;4BAAQpC,cAAYmF,MAAMpN,KAAK;;8CAC/C,KAAC/B;8CACC,cAAA,MAACC;;0DACC,KAACF;0DAAU;;0DACX,KAACA;0DAAU;;0DACX,KAACA;0DAAU;;0DACX,KAACA;0DAAU;;0DACX,KAACA;;;;8CAGL,KAACD;8CACEkG,MAAMqJ,KAAK,CAAC,GAAGD,OAAOnJ,GAAG,CAAC,CAACC;4CAuCXS;wCAtCf,MAAM2I,QAAQ9N,iBAAiB0E;wCAC/B,MAAMqJ,QAAQzO,oBAAoB,CAACoF,KAAKkI,MAAM,CAAC;wCAC/C,qBACE,MAACnO;;8DACC,MAACF;;sEACC,KAACI;4DAAWoJ,SAAQ;sEAAS+F;;wDAC5BpJ,KAAK/C,IAAI,IAAI+C,KAAK/C,IAAI,KAAKmM,sBAC1B,KAACnP;4DAAWoJ,SAAQ;4DAAUW,OAAM;sEACjChE,KAAK/C,IAAI;6DAEV;;;8DAEN,MAACpD;;sEACC,KAACX;4DAAKgN,MAAK;4DAAQ7C,SAAQ;4DAAWxH,OAAOwN,MAAMxN,KAAK;4DAAEmI,OAAOqF,MAAMrF,KAAK;;wDAC3EhE,KAAKsJ,OAAO,CAAC9E,MAAM,iBAClB,KAACvK;4DAAWoJ,SAAQ;4DAAUW,OAAM;4DAAiB8B,WAAU;sEAC5D,CAAC,MAAM,EAAE9F,KAAKsJ,OAAO,CAACvJ,GAAG,CAAC,CAACwJ,MAAQ,GAAGA,IAAIlJ,IAAI,CAAC,CAAC,EAAEkJ,IAAI3N,EAAE,EAAE,EAAEqL,IAAI,CAAC,OAAO;6DAEzE;;;8DAEN,KAACpN;8DACEmG,KAAK2C,QAAQ,iBACZ;;0EACE,KAAC1I;gEAAWoJ,SAAQ;0EAAS/H,iBAAiB0E,KAAK2C,QAAQ;;4DAC1D3C,KAAKwJ,SAAS,iBACb,KAACvP;gEAAWoJ,SAAQ;gEAAUW,OAAM;0EACjC,CAAC,QAAQ,EAAEhH,gBAAgB,CAACgD,KAAKwJ,SAAS,CAAC,EAAE;iEAE9C;;yDAGN;;8DAGJ,KAAC3P;8DACC,cAAA,KAAC2B;wDACCK,OAAO,CAAC,aAAa,EAAEuN,OAAO;wDAC9BK,SAAS;wDACT3H,KAAK,GAAErB,sBAAAA,SAAS,CAACT,KAAKC,GAAG,CAAC,YAAnBQ,sBAAuB;wDAC9BsF,aAAY;wDACZC,SAAShL,uBAAuBgF,KAAK2E,OAAO;wDAC5CZ,UAAU,CAACnB,WAAaxF,MAAMiH,UAAU,CAACrE,KAAKC,GAAG,EAAE2C;uDAC9CzE,SAAS,CAAC6B,KAAKC,GAAG,CAAC,GAAG;wDAAEyJ,YAAY;oDAAc,IAAI,CAAC;;8DAGhE,KAAC7P;8DACEmG,KAAK2C,QAAQ,IAAI3C,KAAK6C,UAAU,KAAK,0BACpC,KAAC5J;wDAAOiN,MAAK;wDAAQ3C,SAAS,IAAMnG,MAAMkH,SAAS,CAACtE,KAAKC,GAAG;kEACzD,CAAC,QAAQ,EAAEmJ,OAAO;yDAEnB;;;2CA/COpJ,KAAKC,GAAG;oCAmD3B;;;;wBAGHH,MAAM0E,MAAM,GAAG0E,sBACd,KAAClQ;sCACC,cAAA,KAACC;gCACCiN,MAAK;gCACL3C,SAAS,IAAMiF,SAAS,CAAChH,UAAa,aAAKA;4CAAS,CAACyH,MAAM5I,IAAI,CAAC,EAAE6I,QAAQpN;;0CAEzE,CAAC,KAAK,EAAE6N,KAAKC,GAAG,CAAC9N,YAAYgE,MAAM0E,MAAM,GAAG0E,OAAOlC,cAAc,GAAG,MAAM,EAAEiC,MAAMpN,KAAK,CAAC8M,WAAW,IAAI;;6BAG1G;;mBAlFkBM,MAAM5I,IAAI;YAqFtC;0BACA,KAAC5E;gBAAkB2D,MAAMhC,MAAMgC,IAAI;gBAAEmF,UAAUnH,MAAMmH,QAAQ;gBAAEE,QAAQrH,MAAMqH,MAAM;gBAAER,QAAQ7G,MAAM6G,MAAM;;;;AAG/G;AAmBA,SAASS,iBAAiBtH,KAA4B;IACpD,MAAM,EAAEuD,OAAO,EAAEgE,OAAO,EAAE1F,OAAO,EAAE2F,aAAa,EAAE,GAAGxH;IACrD,MAAMyM,UAAUlJ,QAAQkI,IAAI,CAAC,CAAC/H,SAAW,OAAO6D,OAAO,CAAC7D,OAAOb,GAAG,CAAC,KAAK;IACxE9F,UAAU;QACR,IAAI0P,WAAW,CAAC5K,SAAS2F;IAC3B,GAAG;QAACiF;QAAS5K;QAAS2F;KAAc;IAEpC,qBACE,MAACrL;QAAM6J,SAAS;;YACbzC,QAAQ6D,MAAM,KAAK,kBAClB,KAACvK;gBAAWoJ,SAAQ;gBAAQW,OAAM;0BAAiB;+BAInD;;kCACE,KAAC/J;wBAAWoJ,SAAQ;kCAAQ;;kCAI5B,MAACxK;wBAAYqN,MAAK;wBAAQpC,cAAW;;0CACnC,KAAChK;0CACC,cAAA,MAACC;;sDACC,KAACF;sDAAU;;sDACX,KAACA;sDAAU;;sDACX,KAACA;sDAAU;;;;;0CAGf,KAACD;0CACE+G,QAAQZ,GAAG,CAAC,CAACe;8CAQoBkF;oCAPhC,MAAM9I,OAAO4D,OAAOE,SAAS,GACzB1F,iBAAiBwF,OAAOE,SAAS,IACjC,GAAG5D,MAAMgD,SAAS,CAACU,OAAOT,IAAI,EAAE,EAAE,EAAES,OAAOlF,EAAE,EAAE;oCACnD,MAAMmF,SAAS4D,OAAO,CAAC7D,OAAOb,GAAG,CAAC;oCAClC,MAAMlC,SAAS7C,wBAAwB6F;oCACvC,MAAMiF,UAAU,SAAC/G,2BAAAA,QAAS6K,QAAQ,CAAChK,KAAK,mBAAI,EAAE,EAAE4C,MAAM,CAAC,CAAClC,MAAQA,IAAIH,IAAI,KAAKS,OAAOT,IAAI;oCACxF,MAAM0J,SACJ,OAAOhJ,WAAW,YAAYiF,gBAAAA,QAAQzF,IAAI,CAAC,CAACC,MAAQA,IAAIwJ,GAAG,KAAKjJ,OAAOkJ,KAAK,aAA9CjE,gBAAmD,OAAQ;oCAC3F,qBACE,MAACjM;;0DACC,MAACF;;kEACC,KAACI;wDAAWoJ,SAAQ;kEAASnG;;kEAC7B,KAACjD;wDAAWoJ,SAAQ;wDAAUW,OAAM;kEACjClD,OAAOE,SAAS,GAAG,6BAA6B;;;;0DAGrD,KAACnH;0DACC,cAAA,MAACI;oDAAWoJ,SAAQ;;wDACjBvC,OAAOoJ,QAAQ,CAACf,KAAK,CAAC,GAAG,GAAGpJ,GAAG,CAAC3C,MAAM8C,OAAO,EAAE+G,IAAI,CAAC;wDACpDnG,OAAOoJ,QAAQ,CAAC1F,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,AAAC1D,CAAAA,OAAOoJ,QAAQ,CAAC1F,MAAM,GAAG,CAAA,EAAGwC,cAAc,GAAG,KAAK,CAAC,GAAG;;;;0DAGjG,KAACnN;0DACC,cAAA,MAACN;oDAAM6J,SAAS;;sEACd,KAAC5H;4DACCK,OAAO,CAAC,iBAAiB,EAAEqB,MAAM;4DACjCuM,SAAS;4DACT3H,OAAO/D;4DACPgI,aAAY;4DACZC,SAAS7K,yBAAyB2F;4DAClCiD,UAAU,CAAC3C,OAAShE,MAAMyH,QAAQ,CAAC/D,OAAOb,GAAG,EAAEmB,SAAS,UAAU;oEAAE6I,OAAO;gEAAG,IAAI7I;2DAC7ErD,WAAW,SACZ;4DAAE2L,YAAY,CAAC,aAAa,EAAEhO,QAAQoF,OAAOoJ,QAAQ,CAAC1F,MAAM,EAAE,QAAQ,CAAC,CAAC;wDAAC,IACzE,CAAC;wDAENzG,WAAW,wBACV,KAAChF;4DACCmN,MAAK;4DACLF,SAASA;4DACTmE,SAAS,CAAClL;4DACV6C,OAAOiI;4DACPK,gBAAgB,CAACC,SAAWA,OAAOnN,IAAI,IAAImN,OAAOpN,IAAI,IAAIoN,OAAOL,GAAG;4DACpEM,sBAAsB,CAACD,QAAQvI,QAAUuI,OAAOL,GAAG,KAAKlI,MAAMkI,GAAG;4DACjEjG,UAAU,CAACwG,QAAQzI;;uEAAU1E,MAAMyH,QAAQ,CAAC/D,OAAOb,GAAG,EAAE;oEAAEgK,KAAK,UAAEnI,yBAAAA,MAAOkI,GAAG,mBAAI;gEAAG;;4DAClFQ,aAAa,CAACC,uBACZ,KAACzQ,wBAAcyQ;oEAAQ5O,OAAO,CAAC,eAAe,EAAEqB,MAAM;;6DAGxD;;;;;uCAvCK4D,OAAOb,GAAG;gCA4C7B;;;;;;0BAKR,KAACxE;gBACC2D,MAAMhC,MAAMgC,IAAI;gBAChBmF,UAAUlJ,0BAA0BsF,SAASgE;gBAC7CF,QAAQrH,MAAMqH,MAAM;gBACpBR,QAAQ7G,MAAM6G,MAAM;;;;AAI5B;AAEA,eAAe9G,oBAAmB"}