{"version":3,"file":"TranslationOverrideSheet.mjs","names":["React","useState","useEffect","useMemo","useCallback","useTranslation","UdpDrawer","UdpFlexbox","UdpCard","UdpTextInput","UdpDropdown","UdpButton","UdpMessageBar","UdpAutocomplete","UdpDetailList","UdpDetailListItem","TranslationScopeEnums","translateScopeName","languageDisplayName","language","t","label","code","defaultValue","id","languageId","TranslationOverrideSheet","open","onClose","languages","unityUserId","editTranslation","resolveSystemDefault","fetchAdminTranslations","onCreate","onUpdate","onSaved","isEditMode","i18n","setLanguageId","setLabel","value","setValue","chainRows","setChainRows","chainLoading","setChainLoading","saving","setSaving","feedback","setFeedback","current","find","l","length","cancelled","rows","Array","isArray","languageOptions","map","effectiveByLanguage","overriddenByLanguage","effective","Map","overridden","forEach","row","scope","User","has","set","Set","get","add","labels","labelOptions","alreadyOverridden","from","keys","filter","sort","a","b","localeCompare","replacedDefault","targetLanguageId","targetLabel","resolved","canSave","trim","handleLanguageChange","e","target","handleLabelChange","handleClose","handleSave","ok","translationId","languageIds","outcome","intent","text","replacedDefaultRow","tier","undefined"],"sources":["../../../../src/udp/pages/UdpTranslationsPage/TranslationOverrideSheet.jsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { UdpDrawer } from '../../../UI/fluent-web-components/UdpDrawer';\nimport { UdpFlexbox } from '../../../UI/fluent-web-components/UdpFlexbox';\nimport { UdpCard } from '../../../UI/fluent-web-components/UdpCard';\nimport { UdpTextInput } from '../../../UI/fluent-web-components/UdpTextInput';\nimport { UdpDropdown } from '../../../UI/fluent-web-components/UdpDropdown';\nimport { UdpButton } from '../../../UI/fluent-web-components/UdpButton';\nimport { UdpMessageBar } from '../../../UI/fluent-web-components/UdpMessageBar';\nimport { UdpAutocomplete } from '../../../UI/fluent-web-components/UdpAutocomplete';\nimport { UdpDetailList } from '../../../UI/dataDisplay/UdpDetailList';\nimport { UdpDetailListItem } from '../../../UI/dataDisplay/UdpDetailListItem';\nimport {\n  TranslationScopeEnums,\n  translateScopeName\n} from '../../../enums/translationEnums';\n\nconst languageDisplayName = (language, t) =>\n  language?.label ||\n  language?.code ||\n  t('translations.page.languageFallback', {\n    defaultValue: 'Language {{id}}',\n    id: language?.languageId\n  });\n\n/**\n * Personal-override sheet (scope === 'user').\n *\n * Overrides change the VALUE only; the label is the key that anchors the\n * override to the system default, so it is never editable here. Net-new\n * overrides target an existing label: pick a language, then pick the label\n * from an autocomplete over that language's translation chain (labels the\n * user has already overridden are excluded - those are edited from the grid).\n *\n * Both modes show the value the override replaces - the highest NON-user tier\n * for that label+language, named by tier - so \"what am I changing, and back to\n * what?\" is answered on screen rather than inferred.\n */\nexport const TranslationOverrideSheet = ({\n  open,\n  onClose,\n  languages,\n  unityUserId,\n  editTranslation,\n  resolveSystemDefault,\n  fetchAdminTranslations,\n  onCreate,\n  onUpdate,\n  onSaved\n}) => {\n  const isEditMode = !!editTranslation;\n  const { t, i18n } = useTranslation();\n\n  const [languageId, setLanguageId] = useState(null);\n  const [label, setLabel] = useState('');\n  const [value, setValue] = useState('');\n  const [chainRows, setChainRows] = useState([]);\n  const [chainLoading, setChainLoading] = useState(false);\n  const [saving, setSaving] = useState(false);\n  const [feedback, setFeedback] = useState(null);\n\n  useEffect(() => {\n    if (!open) return;\n    setFeedback(null);\n    if (isEditMode) {\n      setLanguageId(editTranslation.languageId ?? null);\n      setLabel(editTranslation.label ?? '');\n      setValue(editTranslation.value ?? '');\n    } else {\n      // Default to the user's current UI language (falling back to the only\n      // language when just one exists) so the label picker is usable right away.\n      const current = languages.find((l) => l.code === i18n.language);\n      setLanguageId(\n        current?.languageId ??\n          (languages.length === 1 ? languages[0].languageId : null)\n      );\n      setLabel('');\n      setValue('');\n    }\n  }, [open, isEditMode, editTranslation, languages, i18n.language]);\n\n  // Load the full chain (all tiers + the caller's own user rows) once per open.\n  // It feeds the label autocomplete in create mode and the replaced-value\n  // preview in BOTH modes; one request covers every language.\n  useEffect(() => {\n    if (!open || !fetchAdminTranslations) return;\n    let cancelled = false;\n    setChainLoading(true);\n    (async () => {\n      try {\n        const rows = await fetchAdminTranslations({ unityUserId });\n        if (!cancelled) setChainRows(Array.isArray(rows) ? rows : []);\n      } finally {\n        if (!cancelled) setChainLoading(false);\n      }\n    })();\n    return () => {\n      cancelled = true;\n    };\n  }, [open, fetchAdminTranslations, unityUserId]);\n\n  const languageOptions = useMemo(\n    () =>\n      languages.map((l) => ({\n        label: languageDisplayName(l, t),\n        value: l.languageId\n      })),\n    [languages, t]\n  );\n\n  // Per language: label -> effective chain row (highest non-user tier wins:\n  // Tenant > Brand > Product), plus the set of labels this user already\n  // overrides (excluded from the picker - they are edited from the grid).\n  const { effectiveByLanguage, overriddenByLanguage } = useMemo(() => {\n    const effective = new Map();\n    const overridden = new Map();\n    chainRows.forEach((row) => {\n      if (row.scope === TranslationScopeEnums.User) {\n        if (!overridden.has(row.languageId))\n          overridden.set(row.languageId, new Set());\n        overridden.get(row.languageId).add(row.label);\n        return;\n      }\n      if (!effective.has(row.languageId))\n        effective.set(row.languageId, new Map());\n      const labels = effective.get(row.languageId);\n      const current = labels.get(row.label);\n      if (!current || row.scope > current.scope) labels.set(row.label, row);\n    });\n    return { effectiveByLanguage: effective, overriddenByLanguage: overridden };\n  }, [chainRows]);\n\n  const labelOptions = useMemo(() => {\n    if (!languageId) return [];\n    const labels = effectiveByLanguage.get(languageId);\n    if (!labels) return [];\n    const alreadyOverridden = overriddenByLanguage.get(languageId);\n    return Array.from(labels.keys())\n      .filter((l) => !alreadyOverridden?.has(l))\n      .sort((a, b) => a.localeCompare(b))\n      .map((l) => ({ label: l, value: l }));\n  }, [languageId, effectiveByLanguage, overriddenByLanguage]);\n\n  // The value this override replaces: the highest NON-user tier for the same\n  // label+language, with the tier it came from. Resolved from the chain in both\n  // modes, so the sheet no longer goes silent in edit mode when the optional\n  // resolveSystemDefault seam is unwired.\n  const replacedDefault = useMemo(() => {\n    const targetLanguageId = isEditMode\n      ? editTranslation?.languageId\n      : languageId;\n    const targetLabel = isEditMode ? editTranslation?.label : label;\n    if (!targetLanguageId || !targetLabel) return null;\n    const row = effectiveByLanguage.get(targetLanguageId)?.get(targetLabel);\n    if (row) return { value: row.value, scope: row.scope };\n    const resolved = resolveSystemDefault?.(\n      isEditMode ? editTranslation : { languageId, label }\n    );\n    return resolved ? { value: resolved, scope: null } : null;\n  }, [\n    isEditMode,\n    editTranslation,\n    resolveSystemDefault,\n    effectiveByLanguage,\n    languageId,\n    label\n  ]);\n\n  // Empty value means \"no override\" - block it (removing one is the grid's job).\n  const canSave = useMemo(\n    () => !!languageId && label.trim().length > 0 && value.trim().length > 0,\n    [languageId, label, value]\n  );\n\n  const handleLanguageChange = useCallback((e) => {\n    setLanguageId(e.target.value);\n    // The label belongs to the previous language's chain - clear it.\n    setLabel('');\n    setFeedback(null);\n  }, []);\n\n  const handleLabelChange = useCallback((e) => {\n    setLabel(e.target.value ?? '');\n    setFeedback(null);\n  }, []);\n\n  const handleClose = useCallback(() => {\n    if (saving) return;\n    onClose?.();\n  }, [saving, onClose]);\n\n  const handleSave = useCallback(async () => {\n    if (!canSave) return;\n    setSaving(true);\n    setFeedback(null);\n    try {\n      if (isEditMode) {\n        const ok = await onUpdate({\n          translationId: editTranslation.translationId,\n          languageId: editTranslation.languageId,\n          label: editTranslation.label,\n          value,\n          unityUserId\n        });\n        if (ok) {\n          onSaved?.({ languageIds: [editTranslation.languageId] });\n          onClose?.();\n        }\n        return;\n      }\n\n      const outcome = await onCreate({\n        languageId,\n        label: label.trim(),\n        value,\n        unityUserId\n      });\n      if (outcome === 'created') {\n        onSaved?.({ languageIds: [languageId] });\n        onClose?.();\n      } else if (outcome === 'duplicate') {\n        setFeedback({\n          intent: 'warning',\n          text: t('translations.overrides.duplicate', {\n            defaultValue:\n              'You already have an override for this label in this language.'\n          })\n        });\n      } else {\n        setFeedback({\n          intent: 'error',\n          text: t('translations.overrides.saveFailed', {\n            defaultValue: 'Failed to save override.'\n          })\n        });\n      }\n    } finally {\n      setSaving(false);\n    }\n  }, [\n    canSave,\n    isEditMode,\n    onUpdate,\n    onCreate,\n    editTranslation,\n    languageId,\n    label,\n    value,\n    unityUserId,\n    onSaved,\n    onClose,\n    t\n  ]);\n\n  // Named by tier when it comes from the chain (\"Default (from Brand)\"); the\n  // resolveSystemDefault fallback has no tier to name.\n  const replacedDefaultRow = replacedDefault && (\n    <UdpDetailListItem\n      label={\n        replacedDefault.scope != null\n          ? t('translations.overrides.defaultFrom', {\n              defaultValue: 'Default (from {{tier}})',\n              tier: translateScopeName(t, replacedDefault.scope)\n            })\n          : t('translations.overrides.defaultValue', {\n              defaultValue: 'Default value'\n            })\n      }\n      value={replacedDefault.value}\n      emphasis='strong'\n    />\n  );\n\n  return (\n    <UdpDrawer\n      open={open}\n      drawerTitle={\n        isEditMode\n          ? t('translations.overrides.editTitle', {\n              defaultValue: 'Edit Override'\n            })\n          : t('translations.overrides.addTitle', {\n              defaultValue: 'Add Override'\n            })\n      }\n      size='medium'\n      onDrawerClose={handleClose}\n    >\n      <UdpFlexbox direction='column' gap='md' width='100%'>\n        {feedback && (\n          <UdpMessageBar\n            intent={feedback.intent}\n            layout='multiline'\n            dismissible\n            onDismiss={() => setFeedback(null)}\n          >\n            {feedback.text}\n          </UdpMessageBar>\n        )}\n\n        {/* What is being overridden, and what it currently says - grouped away\n            from the one field the user actually edits. */}\n        <UdpCard\n          appearance='muted'\n          label={t('translations.overrides.contextSection', {\n            defaultValue: 'What you are overriding'\n          })}\n          subtitle={t('translations.overrides.scopeHint', {\n            defaultValue: 'Only you see this value. Everyone else keeps the default.'\n          })}\n        >\n          <UdpFlexbox direction='column' gap='md' width='100%'>\n            {isEditMode ? (\n              <UdpDetailList layout='stack' density='compact'>\n                <UdpDetailListItem\n                  label={t('translations.fields.language', {\n                    defaultValue: 'Language'\n                  })}\n                  value={languageDisplayName(\n                    languages.find(\n                      (l) => l.languageId === editTranslation.languageId\n                    ) ?? { languageId: editTranslation.languageId },\n                    t\n                  )}\n                />\n                <UdpDetailListItem\n                  label={t('translations.fields.label', {\n                    defaultValue: 'Label'\n                  })}\n                  value={editTranslation.label}\n                />\n                {replacedDefaultRow}\n              </UdpDetailList>\n            ) : (\n              <>\n                <UdpDropdown\n                  label={t('translations.fields.language', {\n                    defaultValue: 'Language'\n                  })}\n                  options={languageOptions}\n                  value={languageId}\n                  optionLabel='label'\n                  optionValue='value'\n                  valueAs='value'\n                  required\n                  onChange={handleLanguageChange}\n                />\n                <UdpAutocomplete\n                  label={t('translations.fields.label', {\n                    defaultValue: 'Label'\n                  })}\n                  placeholder={\n                    languageId\n                      ? t('translations.overrides.searchPlaceholder', {\n                          defaultValue:\n                            'Search labels, e.g. \"customer.form.firstName\"'\n                        })\n                      : undefined\n                  }\n                  options={labelOptions}\n                  valueAs='value'\n                  value={label}\n                  required\n                  disabled={!languageId || chainLoading}\n                  loading={chainLoading}\n                  /* The disabled reason belongs in the hint, not in a\n                     placeholder standing in for instructions. */\n                  hint={\n                    !languageId\n                      ? t('translations.overrides.selectLanguageFirst', {\n                          defaultValue: 'Select a language first'\n                        })\n                      : !chainLoading && labelOptions.length === 0\n                        ? t('translations.overrides.noLabels', {\n                            defaultValue:\n                              'No labels available to override in this language (none exist yet, or you have overridden them all).'\n                          })\n                        : undefined\n                  }\n                  onChange={handleLabelChange}\n                />\n                {replacedDefaultRow && (\n                  <UdpDetailList layout='stack' density='compact'>\n                    {replacedDefaultRow}\n                  </UdpDetailList>\n                )}\n              </>\n            )}\n          </UdpFlexbox>\n        </UdpCard>\n\n        <UdpTextInput\n          label={t('translations.overrides.myValue', {\n            defaultValue: 'My value'\n          })}\n          value={value}\n          required\n          hint={t('translations.overrides.myValueHint', {\n            defaultValue:\n              'Your own text for this label. To go back to the default, delete this override from the list.'\n          })}\n          onChange={(e) => setValue(e.target.value)}\n        />\n      </UdpFlexbox>\n\n      {/* No Cancel here - the drawer's own close handles dismissal. */}\n      <UdpFlexbox direction='row' slot='footer' justify='flex-end' gap='sm'>\n        <UdpButton\n          appearance='primary'\n          onClick={handleSave}\n          disabled={!canSave}\n          loading={saving}\n        >\n          {isEditMode\n            ? t('common.save', { defaultValue: 'Save' })\n            : t('common.add', { defaultValue: 'Add' })}\n        </UdpButton>\n      </UdpFlexbox>\n    </UdpDrawer>\n  );\n};\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAMkB,uBAAuBC,UAAUC,MACrCD,UAAUE,SACVF,UAAUG,QACVF,EAAE,sCAAsC;CACtCG,cAAc;CACdC,IAAIL,UAAUM;CACf,CAAC;;;;;;;;;;;;;;AAeJ,MAAaC,4BAA4B,EACvCC,MACAC,SACAC,WACAC,aACAC,iBACAC,sBACAC,wBACAC,UACAC,UACAC,cACI;CACJ,MAAMC,aAAa,CAAC,CAACN;CACrB,MAAM,EAAEX,GAAGkB,SAASjC,gBAAgB;CAEpC,MAAM,CAACoB,YAAYc,iBAAiBtC,SAAS,KAAK;CAClD,MAAM,CAACoB,OAAOmB,YAAYvC,SAAS,GAAG;CACtC,MAAM,CAACwC,OAAOC,YAAYzC,SAAS,GAAG;CACtC,MAAM,CAAC0C,WAAWC,gBAAgB3C,SAAS,EAAE,CAAC;CAC9C,MAAM,CAAC4C,cAAcC,mBAAmB7C,SAAS,MAAM;CACvD,MAAM,CAAC8C,QAAQC,aAAa/C,SAAS,MAAM;CAC3C,MAAM,CAACgD,UAAUC,eAAejD,SAAS,KAAK;AAE9CC,iBAAgB;AACd,MAAI,CAACyB,KAAM;AACXuB,cAAY,KAAK;AACjB,MAAIb,YAAY;AACdE,iBAAcR,gBAAgBN,cAAc,KAAK;AACjDe,YAAST,gBAAgBV,SAAS,GAAG;AACrCqB,YAASX,gBAAgBU,SAAS,GAAG;SAChC;AAILF,iBADgBV,UAAUuB,MAAMC,MAAMA,EAAE/B,SAASgB,KAAKnB,SAAS,EAEpDM,eACNI,UAAUyB,WAAW,IAAIzB,UAAU,GAAGJ,aAAa,MACvD;AACDe,YAAS,GAAG;AACZE,YAAS,GAAG;;IAEb;EAACf;EAAMU;EAAYN;EAAiBF;EAAWS,KAAKnB;EAAS,CAAC;AAKjEjB,iBAAgB;AACd,MAAI,CAACyB,QAAQ,CAACM,uBAAwB;EACtC,IAAIsB,YAAY;AAChBT,kBAAgB,KAAK;AACrB,GAAC,YAAY;AACX,OAAI;IACF,MAAMU,OAAO,MAAMvB,uBAAuB,EAAEH,aAAa,CAAC;AAC1D,QAAI,CAACyB,UAAWX,cAAaa,MAAMC,QAAQF,KAAK,GAAGA,OAAO,EAAE,CAAC;aACrD;AACR,QAAI,CAACD,UAAWT,iBAAgB,MAAM;;MAEtC;AACJ,eAAa;AACXS,eAAY;;IAEb;EAAC5B;EAAMM;EAAwBH;EAAY,CAAC;CAE/C,MAAM6B,kBAAkBxD,cAEpB0B,UAAU+B,KAAKP,SAAO;EACpBhC,OAAOH,oBAAoBmC,KAAGjC,EAAE;EAChCqB,OAAOY,IAAE5B;EACV,EAAE,EACL,CAACI,WAAWT,EACd,CAAC;CAKD,MAAM,EAAEyC,qBAAqBC,yBAAyB3D,cAAc;EAClE,MAAM4D,4BAAY,IAAIC,KAAK;EAC3B,MAAMC,6BAAa,IAAID,KAAK;AAC5BrB,YAAUuB,SAASC,QAAQ;AACzB,OAAIA,IAAIC,UAAUpD,sBAAsBqD,MAAM;AAC5C,QAAI,CAACJ,WAAWK,IAAIH,IAAI1C,WAAW,CACjCwC,YAAWM,IAAIJ,IAAI1C,4BAAY,IAAI+C,KAAK,CAAC;AAC3CP,eAAWQ,IAAIN,IAAI1C,WAAW,CAACiD,IAAIP,IAAI9C,MAAM;AAC7C;;AAEF,OAAI,CAAC0C,UAAUO,IAAIH,IAAI1C,WAAW,CAChCsC,WAAUQ,IAAIJ,IAAI1C,4BAAY,IAAIuC,KAAK,CAAC;GAC1C,MAAMW,SAASZ,UAAUU,IAAIN,IAAI1C,WAAW;GAC5C,MAAM0B,YAAUwB,OAAOF,IAAIN,IAAI9C,MAAM;AACrC,OAAI,CAAC8B,aAAWgB,IAAIC,QAAQjB,UAAQiB,MAAOO,QAAOJ,IAAIJ,IAAI9C,OAAO8C,IAAI;IACrE;AACF,SAAO;GAAEN,qBAAqBE;GAAWD,sBAAsBG;GAAY;IAC1E,CAACtB,UAAU,CAAC;CAEf,MAAMiC,eAAezE,cAAc;AACjC,MAAI,CAACsB,WAAY,QAAO,EAAE;EAC1B,MAAMkD,WAASd,oBAAoBY,IAAIhD,WAAW;AAClD,MAAI,CAACkD,SAAQ,QAAO,EAAE;EACtB,MAAME,oBAAoBf,qBAAqBW,IAAIhD,WAAW;AAC9D,SAAOgC,MAAMqB,KAAKH,SAAOI,MAAM,CAAC,CAC7BC,QAAQ3B,QAAM,CAACwB,mBAAmBP,IAAIjB,IAAE,CAAC,CACzC4B,MAAMC,GAAGC,MAAMD,EAAEE,cAAcD,EAAE,CAAC,CAClCvB,KAAKP,SAAO;GAAEhC,OAAOgC;GAAGZ,OAAOY;GAAG,EAAE;IACtC;EAAC5B;EAAYoC;EAAqBC;EAAqB,CAAC;CAM3D,MAAMuB,kBAAkBlF,cAAc;EACpC,MAAMmF,mBAAmBjD,aACrBN,iBAAiBN,aACjBA;EACJ,MAAM8D,cAAclD,aAAaN,iBAAiBV,QAAQA;AAC1D,MAAI,CAACiE,oBAAoB,CAACC,YAAa,QAAO;EAC9C,MAAMpB,QAAMN,oBAAoBY,IAAIa,iBAAiB,EAAEb,IAAIc,YAAY;AACvE,MAAIpB,MAAK,QAAO;GAAE1B,OAAO0B,MAAI1B;GAAO2B,OAAOD,MAAIC;GAAO;EACtD,MAAMoB,WAAWxD,uBACfK,aAAaN,kBAAkB;GAAEN;GAAYJ;GAC/C,CAAC;AACD,SAAOmE,WAAW;GAAE/C,OAAO+C;GAAUpB,OAAO;GAAM,GAAG;IACpD;EACD/B;EACAN;EACAC;EACA6B;EACApC;EACAJ;EACD,CAAC;CAGF,MAAMoE,UAAUtF,cACR,CAAC,CAACsB,cAAcJ,MAAMqE,MAAM,CAACpC,SAAS,KAAKb,MAAMiD,MAAM,CAACpC,SAAS,GACvE;EAAC7B;EAAYJ;EAAOoB;EACtB,CAAC;CAED,MAAMkD,uBAAuBvF,aAAawF,MAAM;AAC9CrD,gBAAcqD,EAAEC,OAAOpD,MAAM;AAE7BD,WAAS,GAAG;AACZU,cAAY,KAAK;IAChB,EAAE,CAAC;CAEN,MAAM4C,oBAAoB1F,aAAawF,QAAM;AAC3CpD,WAASoD,IAAEC,OAAOpD,SAAS,GAAG;AAC9BS,cAAY,KAAK;IAChB,EAAE,CAAC;CAEN,MAAM6C,cAAc3F,kBAAkB;AACpC,MAAI2C,OAAQ;AACZnB,aAAW;IACV,CAACmB,QAAQnB,QAAQ,CAAC;CAErB,MAAMoE,aAAa5F,YAAY,YAAY;AACzC,MAAI,CAACqF,QAAS;AACdzC,YAAU,KAAK;AACfE,cAAY,KAAK;AACjB,MAAI;AACF,OAAIb,YAAY;AAQd,QAPW,MAAMF,SAAS;KACxB+D,eAAenE,gBAAgBmE;KAC/BzE,YAAYM,gBAAgBN;KAC5BJ,OAAOU,gBAAgBV;KACvBoB;KACAX;KACD,CAAC,EACM;AACNM,eAAU,EAAE+D,aAAa,CAACpE,gBAAgBN,WAAU,EAAG,CAAC;AACxDG,gBAAW;;AAEb;;GAGF,MAAMwE,UAAU,MAAMlE,SAAS;IAC7BT;IACAJ,OAAOA,MAAMqE,MAAM;IACnBjD;IACAX;IACD,CAAC;AACF,OAAIsE,YAAY,WAAW;AACzBhE,cAAU,EAAE+D,aAAa,CAAC1E,WAAU,EAAG,CAAC;AACxCG,eAAW;cACFwE,YAAY,YACrBlD,aAAY;IACVmD,QAAQ;IACRC,MAAMlF,EAAE,oCAAoC,EAC1CG,cACE,iEACH,CAAA;IACF,CAAC;OAEF2B,aAAY;IACVmD,QAAQ;IACRC,MAAMlF,EAAE,qCAAqC,EAC3CG,cAAc,4BACf,CAAA;IACF,CAAC;YAEI;AACRyB,aAAU,MAAM;;IAEjB;EACDyC;EACApD;EACAF;EACAD;EACAH;EACAN;EACAJ;EACAoB;EACAX;EACAM;EACAR;EACAR;EACD,CAAC;CAIF,MAAMmF,qBAAqBlB,mBACzB,sBAAA,cAAC,mBAAD;EACE,OACEA,gBAAgBjB,SAAS,OACrBhD,EAAE,sCAAsC;GACtCG,cAAc;GACdiF,MAAMvF,mBAAmBG,GAAGiE,gBAAgBjB,MAAK;GAClD,CAAC,GACFhD,EAAE,uCAAuC,EACvCG,cAAc,iBACf,CACP;EACA,OAAO8D,gBAAgB5C;EACvB,UAAS;EAEZ,CAAA;AAED,QACE,sBAAA,cAAC,WAAD;EACQd;EACN,aACEU,aACIjB,EAAE,oCAAoC,EACpCG,cAAc,iBACf,CAAC,GACFH,EAAE,mCAAmC,EACnCG,cAAc,gBACf,CACP;EACA,MAAK;EACL,eAAewE;EAoIL,EAlIV,sBAAA,cAAC,YAAD;EAAY,WAAU;EAAS,KAAI;EAAK,OAAM;EAmHlC,EAlHT9C,YACC,sBAAA,cAAC,eAAD;EACE,QAAQA,SAASoD;EACjB,QAAO;EACP,aAAA;EACA,iBAAiBnD,YAAY,KAAK;EAIrC,EAFID,SAASqD,KAEb,EAID,sBAAA,cAAC,SAAD;EACE,YAAW;EACX,OAAOlF,EAAE,yCAAyC,EAChDG,cAAc,2BACf,CAAC;EACF,UAAUH,EAAE,oCAAoC,EAC9CG,cAAc,6DACf,CAAC;EAgFK,EA9EP,sBAAA,cAAC,YAAD;EAAY,WAAU;EAAS,KAAI;EAAK,OAAM;EA6ElC,EA5ETc,aACC,sBAAA,cAAC,eAAD;EAAe,QAAO;EAAQ,SAAQ;EAmBtB,EAlBd,sBAAA,cAAC,mBAAD;EACE,OAAOjB,EAAE,gCAAgC,EACvCG,cAAc,YACf,CAAC;EACF,OAAOL,oBACLW,UAAUuB,MACPC,QAAMA,IAAE5B,eAAeM,gBAAgBN,WACzC,IAAI,EAAEA,YAAYM,gBAAgBN,YAAY,EAC/CL,EACD;EAAC,CAAA,EAEJ,sBAAA,cAAC,mBAAD;EACE,OAAOA,EAAE,6BAA6B,EACpCG,cAAc,SACf,CAAC;EACF,OAAOQ,gBAAgBV;EAAM,CAAA,EAE9BkF,mBACa,GAEhB,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAAC,aAAD;EACE,OAAOnF,EAAE,gCAAgC,EACvCG,cAAc,YACf,CAAC;EACF,SAASoC;EACT,OAAOlC;EACP,aAAY;EACZ,aAAY;EACZ,SAAQ;EACR,UAAA;EACA,UAAUkE;EAAqB,CAAA,EAEjC,sBAAA,cAAC,iBAAD;EACE,OAAOvE,EAAE,6BAA6B,EACpCG,cAAc,SACf,CAAC;EACF,aACEE,aACIL,EAAE,4CAA4C,EAC5CG,cACE,mDACH,CAAC,GACFkF,KAAAA;EAEN,SAAS7B;EACT,SAAQ;EACR,OAAOvD;EACP,UAAA;EACA,UAAU,CAACI,cAAcoB;EACzB,SAASA;EAGT,MACE,CAACpB,aACGL,EAAE,8CAA8C,EAC9CG,cAAc,2BACf,CAAC,GACF,CAACsB,gBAAgB+B,aAAatB,WAAW,IACvClC,EAAE,mCAAmC,EACnCG,cACE,uGACH,CAAC,GACFkF,KAAAA;EAER,UAAUX;EAAkB,CAAA,EAE7BS,sBACC,sBAAA,cAAC,eAAD;EAAe,QAAO;EAAQ,SAAQ;EAGvC,EAFIA,mBAEJ,CAEJ,CACS,CACL,EAET,sBAAA,cAAC,cAAD;EACE,OAAOnF,EAAE,kCAAkC,EACzCG,cAAc,YACf,CAAC;EACKkB;EACP,UAAA;EACA,MAAMrB,EAAE,sCAAsC,EAC5CG,cACE,gGACH,CAAC;EACF,WAAWqE,QAAMlD,SAASkD,IAAEC,OAAOpD,MAAM;EAAC,CAAA,CAElC,EAGZ,sBAAA,cAAC,YAAD;EAAY,WAAU;EAAM,MAAK;EAAS,SAAQ;EAAW,KAAI;EAWrD,EAVV,sBAAA,cAAC,WAAD;EACE,YAAW;EACX,SAASuD;EACT,UAAU,CAACP;EACX,SAAS1C;EAKA,EAHRV,aACGjB,EAAE,eAAe,EAAEG,cAAc,QAAQ,CAAC,GAC1CH,EAAE,cAAc,EAAEG,cAAc,OAAO,CAAC,CACnC,CACD,CACF"}