cm-reporting 0.1.0
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/LICENSE +75 -0
- package/README.md +110 -0
- package/dist/browser-CFE8q4oi.js +604 -0
- package/dist/browser-CFE8q4oi.js.map +1 -0
- package/dist/browser-VGwYfUp0.cjs +2 -0
- package/dist/browser-VGwYfUp0.cjs.map +1 -0
- package/dist/cm-reporting.css +1 -0
- package/dist/index.cjs +40 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +1932 -0
- package/dist/index.js +14566 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/AMRT/RMI_AMRT_1.1.xlsx +0 -0
- package/dist/templates/AMRT/RMI_AMRT_1.2.xlsx +0 -0
- package/dist/templates/AMRT/RMI_AMRT_1.3.xlsx +0 -0
- package/dist/templates/CMRT/RMI_CMRT_6.01.xlsx +0 -0
- package/dist/templates/CMRT/RMI_CMRT_6.1.xlsx +0 -0
- package/dist/templates/CMRT/RMI_CMRT_6.22.xlsx +0 -0
- package/dist/templates/CMRT/RMI_CMRT_6.31.xlsx +0 -0
- package/dist/templates/CMRT/RMI_CMRT_6.4.xlsx +0 -0
- package/dist/templates/CMRT/RMI_CMRT_6.5.xlsx +0 -0
- package/dist/templates/CRT/RMI_CRT_2.2.xlsx +0 -0
- package/dist/templates/CRT/RMI_CRT_2.21.xlsx +0 -0
- package/dist/templates/EMRT/RMI_EMRT_1.1.xlsx +0 -0
- package/dist/templates/EMRT/RMI_EMRT_1.11.xlsx +0 -0
- package/dist/templates/EMRT/RMI_EMRT_1.2.xlsx +0 -0
- package/dist/templates/EMRT/RMI_EMRT_1.3.xlsx +0 -0
- package/dist/templates/EMRT/RMI_EMRT_2.0.xlsx +0 -0
- package/dist/templates/EMRT/RMI_EMRT_2.1.xlsx +0 -0
- package/dist/vite.svg +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/shell/navigation/navigationContextValue.ts","../src/lib/shell/navigation/NavigationContext.tsx","../src/lib/core/rules/fieldPath.ts","../src/lib/shell/navigation/useNavigation.ts","../src/lib/core/registry/common/helpers.ts","../src/lib/core/registry/templates/amrt/base.ts","../src/lib/core/registry/templates/amrt/manifest.ts","../src/lib/core/registry/templates/amrt/versions/1.1.ts","../src/lib/core/registry/templates/amrt/versions/1.2.ts","../src/lib/core/registry/templates/amrt/versions/1.3.ts","../src/lib/core/registry/templates/amrt/index.ts","../src/lib/core/registry/templates/cmrt/base.ts","../src/lib/core/registry/templates/cmrt/manifest.ts","../src/lib/core/registry/templates/cmrt/versions/6.01.ts","../src/lib/core/registry/templates/cmrt/versions/6.1.ts","../src/lib/core/registry/templates/cmrt/versions/6.22.ts","../src/lib/core/registry/templates/cmrt/versions/6.31.ts","../src/lib/core/registry/templates/cmrt/versions/6.4.ts","../src/lib/core/registry/templates/cmrt/versions/6.5.ts","../src/lib/core/registry/templates/cmrt/index.ts","../src/lib/core/registry/templates/crt/base.ts","../src/lib/core/registry/templates/crt/manifest.ts","../src/lib/core/registry/templates/crt/versions/2.2.ts","../src/lib/core/registry/templates/crt/versions/2.21.ts","../src/lib/core/registry/templates/crt/index.ts","../src/lib/core/registry/templates/emrt/base.ts","../src/lib/core/registry/templates/emrt/manifest.ts","../src/lib/core/registry/templates/emrt/versions/1.1.ts","../src/lib/core/registry/templates/emrt/versions/1.11.ts","../src/lib/core/registry/templates/emrt/versions/1.2.ts","../src/lib/core/registry/templates/emrt/versions/1.3.ts","../src/lib/core/registry/templates/emrt/versions/2.0.ts","../src/lib/core/registry/templates/emrt/versions/2.1.ts","../src/lib/core/registry/templates/emrt/index.ts","../src/lib/core/registry/index.ts","../src/lib/shell/routing/resolveTemplateRoute.ts","../src/lib/core/rules/gating.ts","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js","../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js","../src/lib/core/validation/errorKeys.ts","../src/lib/core/validation/email.ts","../src/lib/core/schema/index.ts","../src/lib/core/template/strings.ts","../src/lib/core/template/formDefaults.ts","../node_modules/.pnpm/immer@11.1.3/node_modules/immer/dist/immer.mjs","../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.10_immer@11.1.3_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/vanilla.mjs","../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.10_immer@11.1.3_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/react.mjs","../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.10_immer@11.1.3_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/middleware/immer.mjs","../src/lib/shell/store/mineralReconcile.ts","../src/lib/shell/store/templateStoreContext.ts","../src/lib/shell/store/templateStore.tsx","../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.10_immer@11.1.3_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/vanilla/shallow.mjs","../node_modules/.pnpm/zustand@5.0.11_@types+react@19.2.10_immer@11.1.3_react@19.2.4_use-sync-external-store@1.6.0_react@19.2.4_/node_modules/zustand/esm/react/shallow.mjs","../src/lib/shell/store/templateContext.ts","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_freeGlobal.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_root.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Symbol.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getRawTag.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_objectToString.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGetTag.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isObjectLike.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isSymbol.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayMap.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArray.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseToString.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isObject.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/identity.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isFunction.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_coreJsData.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isMasked.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_toSource.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsNative.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getValue.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getNative.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_WeakMap.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_apply.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/noop.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_shortOut.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/constant.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_defineProperty.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSetToString.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setToString.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseFindIndex.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsNaN.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_strictIndexOf.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIndexOf.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayIncludes.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isIndex.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseAssignValue.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/eq.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_overRest.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseRest.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isLength.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArrayLike.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isPrototype.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseTimes.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsArguments.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArguments.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/stubFalse.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isBuffer.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsTypedArray.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseUnary.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nodeUtil.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isTypedArray.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayLikeKeys.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_overArg.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nativeKeys.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseKeys.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/keys.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isKey.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_nativeCreate.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashClear.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashDelete.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashGet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashHas.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hashSet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Hash.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheClear.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_assocIndexOf.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheDelete.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheGet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheHas.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_listCacheSet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_ListCache.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Map.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheClear.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isKeyable.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getMapData.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheDelete.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheGet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheHas.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapCacheSet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_MapCache.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/memoize.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_memoizeCapped.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stringToPath.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/toString.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_castPath.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_toKey.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/get.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayPush.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackClear.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackDelete.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackGet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackHas.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_stackSet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Stack.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayFilter.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/stubArray.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getSymbols.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseGetAllKeys.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getAllKeys.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_DataView.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Promise.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Set.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getTag.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_Uint8Array.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/compact.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setCacheAdd.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setCacheHas.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_SetCache.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arraySome.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_cacheHas.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_equalArrays.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_mapToArray.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_setToArray.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_equalByTag.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_equalObjects.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsEqualDeep.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsEqual.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIsMatch.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_isStrictComparable.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_getMatchData.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_matchesStrictComparable.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMatches.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseHasIn.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_hasPath.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/hasIn.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseMatchesProperty.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseProperty.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_basePropertyDeep.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/property.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIteratee.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_arrayAggregator.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createBaseFor.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseFor.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseForOwn.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createBaseEach.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseEach.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseAggregator.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createAggregator.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/isArrayLikeObject.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/last.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/groupBy.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseIntersection.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_castArrayLikeObject.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/intersectionBy.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSum.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseSome.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/some.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/sumBy.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_createSet.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/_baseUniq.js","../node_modules/.pnpm/lodash-es@4.17.23/node_modules/lodash-es/uniq.js","../src/lib/core/template/minerals.ts","../src/lib/core/transform/index.ts","../src/lib/core/rules/helpers.ts","../src/lib/core/rules/required.ts","../src/lib/core/rules/checker.ts","../src/lib/core/rules/docStatus.ts","../src/lib/core/rules/summary.ts","../src/lib/core/data/countries.ts","../src/lib/core/viewmodels/pages.ts","../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/utils/index.js","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/utils/isDev.js","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/useMemoizedFn/index.js","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/utils/depsAreSame.js","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/useCreation/index.js","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/useLatest/index.js","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/useToggle/index.js","../node_modules/.pnpm/ahooks@3.9.6_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/ahooks/es/useBoolean/index.js","../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/dayjs.min.js","../src/lib/ui/i18n/useT.ts","../src/lib/shell/store/ruleContext.ts","../src/lib/shell/store/useTemplateDerived.ts","../src/lib/core/rules/errorGroups.ts","../src/lib/ui/hooks/useHandlerMap.ts","../src/lib/ui/checker/CheckerPanel.tsx","../src/lib/shell/pages/CheckerPage.tsx","../src/lib/ui/fields/error.ts","../src/lib/ui/fields/TextField.tsx","../src/lib/ui/fields/SelectField.tsx","../src/lib/ui/fields/DateField.tsx","../src/lib/ui/forms/CompanyInfoForm.tsx","../src/lib/ui/forms/CompanyQuestionsForm.tsx","../src/lib/ui/forms/MineralScopeForm.tsx","../src/lib/ui/forms/QuestionMatrixForm.tsx","../src/lib/ui/theme/spacing.ts","../src/lib/shell/pages/useFieldFocus.ts","../src/lib/shell/pages/DeclarationPage.tsx","../src/lib/shell/pages/Placeholder.tsx","../src/lib/shell/pages/useDocStatus.ts","../src/lib/shell/pages/DocContent.tsx","../src/lib/ui/helpers/fieldRequired.tsx","../src/lib/ui/tables/MineListTable.tsx","../src/lib/shell/pages/MineListPage.tsx","../src/lib/ui/forms/MineralsScopeReasonsForm.tsx","../src/lib/shell/pages/MineralsScopePage.tsx","../src/lib/ui/tables/ProductListTable.tsx","../src/lib/shell/pages/ProductListPage.tsx","../src/lib/shell/pages/RevisionPage.tsx","../src/lib/core/data/lookups.ts","../src/lib/ui/tables/SmelterListTable.tsx","../src/lib/shell/pages/SmelterListPage.tsx","../src/lib/core/template/workflow.ts","../src/lib/ui/layout/Sidebar.tsx","../src/lib/ui/layout/StepNav.tsx","../src/lib/ui/layout/AppLayout.tsx","../src/lib/ui/layout/RequiredHintBanner.tsx","../src/lib/shell/pages/PageActions.tsx","../src/lib/shell/pages/TemplateShell.tsx","../src/lib/CMReportingApp.tsx","../src/lib/core/i18n/initI18n.ts","../src/lib/ui/theme/index.ts","../src/lib/ui/theme/AppThemeScope.tsx","../node_modules/.pnpm/@babel+runtime@7.28.6/node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/.pnpm/@rc-component+pagination@1.2.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@rc-component/pagination/lib/locale/en_US.js","../node_modules/.pnpm/@rc-component+picker@1.9.0_dayjs@1.11.19_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@rc-component/picker/lib/locale/common.js","../node_modules/.pnpm/@rc-component+picker@1.9.0_dayjs@1.11.19_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@rc-component/picker/lib/locale/en_US.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/time-picker/locale/en_US.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/date-picker/locale/en_US.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/calendar/locale/en_US.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/locale/en_US.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/locale/en_US.js","../node_modules/.pnpm/@rc-component+pagination@1.2.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@rc-component/pagination/lib/locale/zh_CN.js","../node_modules/.pnpm/@rc-component+picker@1.9.0_dayjs@1.11.19_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/@rc-component/picker/lib/locale/zh_CN.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/time-picker/locale/zh_CN.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/date-picker/locale/zh_CN.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/calendar/locale/zh_CN.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/lib/locale/zh_CN.js","../node_modules/.pnpm/antd@6.2.2_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/antd/locale/zh_CN.js","../node_modules/.pnpm/dayjs@1.11.19/node_modules/dayjs/locale/zh-cn.js","../src/lib/providers/CMReportingProvider.tsx","../src/lib/public/_xlsx.ts","../src/lib/public/excelMappings.generated.ts","../src/lib/public/excelMapping.ts","../src/lib/public/excel.ts","../src/lib/public/snapshot.ts","../src/lib/CMReporting.tsx","../src/lib/public/useCMReporting.ts","../src/lib/public/adapters/cirsGpmLegacyAdapter/types.ts","../src/lib/public/adapters/cirsGpmLegacyAdapter/parse.ts","../src/lib/public/adapters/cirsGpmLegacyAdapter/adapterUtils.ts","../src/lib/public/adapters/cirsGpmLegacyAdapter/planCache.ts","../src/lib/public/adapters/cirsGpmLegacyAdapter/toExternal.ts","../src/lib/public/adapters/cirsGpmLegacyAdapter/toInternal.ts","../src/lib/public/adapters/cirsGpmLegacyAdapter/index.ts"],"sourcesContent":["/**\n * @file app/navigation/navigationContextValue.ts\n * @description 导航上下文与路由辅助。\n */\n\n// 说明:导航上下文与路由辅助\nimport { createContext } from 'react'\n\nimport type { NavigationContextValue } from './types'\n\n/**\n * 导出常量:NavigationContext。\n */\nexport const NavigationContext = createContext<NavigationContextValue | null>(null)\n","/**\n * @file app/navigation/NavigationContext.tsx\n * @description 导航上下文与路由辅助。\n */\n\n// 说明:导航上下文与路由辅助\nimport type { ReactNode } from 'react'\n\nimport { NavigationContext } from './navigationContextValue'\nimport type { NavigationContextValue } from './types'\n\n/**\n * 导出函数:NavigationProvider。\n */\nexport function NavigationProvider({\n value,\n children,\n}: {\n value: NavigationContextValue\n children: ReactNode\n}) {\n return <NavigationContext.Provider value={value}>{children}</NavigationContext.Provider>\n}\n\n// Navigation hooks live in useNavigation.ts to keep this file component-only for fast refresh.\n","/**\n * @file core/rules/fieldPath.ts\n * @description 字段路径与页面映射规则。\n */\n\n// 说明:将字段路径到 PageKey 的映射下沉至 core,保证规则集中维护。\nimport type { PageKey } from '@core/registry/types'\n\nconst PREFIX_TO_PAGE: Array<{ prefix: string; page: PageKey }> = [\n { prefix: 'companyInfo', page: 'declaration' },\n { prefix: 'questions', page: 'declaration' },\n { prefix: 'questionComments', page: 'declaration' },\n { prefix: 'companyQuestions', page: 'declaration' },\n { prefix: 'smelterList', page: 'smelter-list' },\n { prefix: 'mineList', page: 'mine-list' },\n { prefix: 'productList', page: 'product-list' },\n]\n\n/**\n * 导出函数:getPageKeyForFieldPath。\n */\nexport function getPageKeyForFieldPath(fieldPath: string): PageKey {\n const prefix = fieldPath.split('.')[0]\n const matched = PREFIX_TO_PAGE.find((item) => item.prefix === prefix)\n return matched?.page ?? 'declaration'\n}\n","/**\n * @file app/navigation/useNavigation.ts\n * @description 导航上下文与路由辅助。\n */\n\n// 说明:导航上下文与路由辅助\nimport { useContext } from 'react'\n\nimport { NavigationContext } from './navigationContextValue'\n\n/**\n * 自定义 Hook:useNavigation。\n */\nexport function useNavigation() {\n const ctx = useContext(NavigationContext)\n if (!ctx) {\n throw new Error('useNavigation must be used within NavigationProvider')\n }\n return ctx\n}\n\n/**\n * 自定义 Hook:useOptionalNavigation。\n */\nexport function useOptionalNavigation() {\n return useContext(NavigationContext)\n}\n","export function assertVersion<T extends string>(\n versions: readonly T[],\n versionId: string,\n templateName: string\n): asserts versionId is T {\n if (!versions.includes(versionId as T)) {\n throw new Error(`Unknown ${templateName} version: ${versionId}`)\n }\n}\n\nexport function createVersionMap<T extends { id: string }>(\n items: readonly T[]\n): Map<string, T> {\n const map = new Map<string, T>()\n items.forEach((item) => {\n map.set(item.id, item)\n })\n return map\n}\n","import type {\n FieldDef,\n MineralDef,\n PageDef,\n QuestionDef,\n QuestionOption,\n TemplateVersionDef,\n} from '../../types'\n\nimport type { AmrtVersionId } from './manifest'\n\n// ---------------------------------------------------------------------------\n// AMRT Minerals\n// ---------------------------------------------------------------------------\n\nexport const AMRT_MINERALS_V11_PREFILL: MineralDef[] = [\n { key: 'aluminum', labelKey: 'minerals.aluminum' },\n { key: 'copper', labelKey: 'minerals.copper' },\n { key: 'lithium', labelKey: 'minerals.lithium' },\n { key: 'nickel', labelKey: 'minerals.nickel' },\n { key: 'silver', labelKey: 'minerals.silver' },\n { key: 'chromium', labelKey: 'minerals.chromium' },\n { key: 'zinc', labelKey: 'minerals.zinc' },\n]\n\nexport const AMRT_V12_PREFILL_LABELS = ['铝', '铬', '铜', '锂', '镍', '银', '锌']\n\nexport const AMRT_V11_PREFILL_LABELS = [\n 'Aluminium',\n 'Copper',\n 'Lithium',\n 'Nickel',\n 'Silver',\n 'Chromium',\n 'Zinc',\n]\n\nexport const AMRT_MINERALS_V12_PREFILL: MineralDef[] = [\n { key: 'aluminum', labelKey: 'minerals.aluminum' },\n { key: 'chromium', labelKey: 'minerals.chromium' },\n { key: 'copper', labelKey: 'minerals.copper' },\n { key: 'lithium', labelKey: 'minerals.lithium' },\n { key: 'nickel', labelKey: 'minerals.nickel' },\n { key: 'silver', labelKey: 'minerals.silver' },\n { key: 'zinc', labelKey: 'minerals.zinc' },\n]\n\nexport const AMRT_MINERALS_V13: MineralDef[] = [\n { key: 'aluminum', labelKey: 'minerals.aluminum' },\n { key: 'iridium', labelKey: 'minerals.iridium' },\n { key: 'lime', labelKey: 'minerals.lime' },\n { key: 'manganese', labelKey: 'minerals.manganese' },\n { key: 'palladium', labelKey: 'minerals.palladium' },\n { key: 'platinum', labelKey: 'minerals.platinum' },\n { key: 'rareEarthElements', labelKey: 'minerals.rareEarthElements' },\n { key: 'rhodium', labelKey: 'minerals.rhodium' },\n { key: 'ruthenium', labelKey: 'minerals.ruthenium' },\n { key: 'silver', labelKey: 'minerals.silver' },\n { key: 'sodaAsh', labelKey: 'minerals.sodaAsh' },\n { key: 'zinc', labelKey: 'minerals.zinc' },\n { key: 'other', labelKey: 'minerals.other' },\n]\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nconst YES_NO: QuestionOption[] = [\n { value: 'Yes', labelKey: 'options.yes' },\n { value: 'No', labelKey: 'options.no' },\n]\n\nconst AMRT_Q1_OPTIONS: QuestionOption[] = [\n ...YES_NO,\n { value: 'Unknown', labelKey: 'options.unknown' },\n { value: 'Not declaring', labelKey: 'options.notDeclaring' },\n]\n\nconst AMRT_Q2_OPTIONS: QuestionOption[] = [\n { value: '1', labelKey: 'options.percentageOne' },\n { value: 'Greater than 90%', labelKey: 'options.percentageAbove90' },\n { value: 'Greater than 75%', labelKey: 'options.percentageAbove75' },\n { value: 'Greater than 50%', labelKey: 'options.percentageAbove50' },\n { value: '50% or less', labelKey: 'options.percentage50OrLess' },\n { value: 'None', labelKey: 'options.none' },\n { value: 'Unknown', labelKey: 'options.unknown' },\n { value: 'Did not survey', labelKey: 'options.didNotSurvey' },\n]\n\n// ---------------------------------------------------------------------------\n// AMRT Questions (Q1-Q2 only)\n// ---------------------------------------------------------------------------\n\nconst AMRT_QUESTIONS: QuestionDef[] = [\n { key: 'Q1', labelKey: 'questions.amrt.q1', options: AMRT_Q1_OPTIONS, perMineral: true },\n { key: 'Q2', labelKey: 'questions.amrt.q2', options: AMRT_Q2_OPTIONS, perMineral: true },\n]\n\n// ---------------------------------------------------------------------------\n// Company Info Fields\n// ---------------------------------------------------------------------------\n\nconst AMRT_COMPANY_FIELDS: FieldDef[] = [\n { key: 'companyName', labelKey: 'fields.companyName', type: 'text', required: true },\n { key: 'declarationScope', labelKey: 'fields.reportingScope', type: 'select', required: true },\n {\n key: 'scopeDescription',\n labelKey: 'fields.scopeDescription',\n type: 'textarea',\n required: 'conditional',\n },\n { key: 'companyId', labelKey: 'fields.companyId', type: 'text', required: false },\n { key: 'companyAuthId', labelKey: 'fields.companyAuthId', type: 'text', required: false },\n { key: 'address', labelKey: 'fields.address', type: 'text', required: true },\n { key: 'contactName', labelKey: 'fields.contactName', type: 'text', required: true },\n { key: 'contactEmail', labelKey: 'fields.contactEmail', type: 'email', required: true },\n { key: 'contactPhone', labelKey: 'fields.contactPhone', type: 'text', required: true },\n { key: 'authorizerName', labelKey: 'fields.authorizerName', type: 'text', required: true },\n { key: 'authorizerTitle', labelKey: 'fields.authorizerTitle', type: 'text', required: false },\n { key: 'authorizerEmail', labelKey: 'fields.authorizerEmail', type: 'email', required: true },\n { key: 'authorizerPhone', labelKey: 'fields.authorizerPhone', type: 'text', required: false },\n { key: 'authorizationDate', labelKey: 'fields.authorizationDate', type: 'date', required: true },\n]\n\n// ---------------------------------------------------------------------------\n// Version Override\n// ---------------------------------------------------------------------------\n\nexport interface AmrtVersionOverride {\n id: AmrtVersionId\n mineralScope: {\n mode: 'free-text' | 'dynamic-dropdown'\n minerals: MineralDef[]\n defaultCustomMinerals?: string[]\n otherSlotCount?: number\n }\n pages: {\n instructionsFirst: boolean\n hasLookup: boolean\n }\n smelterList: {\n hasIdColumn: boolean\n hasLookup: boolean\n hasCombinedColumn: boolean\n notYetIdentifiedCountryDefault: string\n recycledScrapOptions: 'yes-no' | 'yes-no-unknown'\n }\n mineList: {\n smelterNameMode: 'dropdown' | 'manual'\n }\n productList: {\n hasRequesterColumns: boolean\n }\n}\n\n// ---------------------------------------------------------------------------\n// Builders\n// ---------------------------------------------------------------------------\n\nfunction buildAmrtPages(pages: AmrtVersionOverride['pages']): PageDef[] {\n const leadingPages: PageDef[] = pages.instructionsFirst\n ? [\n { key: 'instructions', labelKey: 'tabs.instructions', available: true },\n { key: 'revision', labelKey: 'tabs.revision', available: true },\n ]\n : [\n { key: 'revision', labelKey: 'tabs.revision', available: true },\n { key: 'instructions', labelKey: 'tabs.instructions', available: true },\n ]\n return [\n ...leadingPages,\n { key: 'definitions', labelKey: 'tabs.definitions', available: true },\n { key: 'declaration', labelKey: 'tabs.declaration', available: true },\n { key: 'minerals-scope', labelKey: 'tabs.mineralsScope', available: true },\n { key: 'smelter-list', labelKey: 'tabs.smelterList', available: true },\n { key: 'mine-list', labelKey: 'tabs.mineList', available: true },\n { key: 'product-list', labelKey: 'tabs.productList', available: true },\n { key: 'smelter-lookup', labelKey: 'tabs.smelterLookup', available: pages.hasLookup },\n { key: 'checker', labelKey: 'tabs.checker', available: true },\n ]\n}\n\nexport function buildAmrtVersionDef(override: AmrtVersionOverride): TemplateVersionDef {\n return {\n templateType: 'amrt',\n version: { id: override.id, label: override.id },\n pages: buildAmrtPages(override.pages),\n mineralScope: {\n mode: override.mineralScope.mode,\n minerals: override.mineralScope.minerals,\n maxCount: 10,\n defaultCustomMinerals: override.mineralScope.defaultCustomMinerals,\n otherSlotCount: override.mineralScope.otherSlotCount,\n },\n companyInfoFields: AMRT_COMPANY_FIELDS,\n questions: AMRT_QUESTIONS,\n companyQuestions: [],\n gating: {\n q2Gating: { type: 'q1-not-negatives', negatives: ['No', 'Unknown', 'Not declaring'] },\n laterQuestionsGating: { type: 'always' },\n companyQuestionsGating: { type: 'always' },\n smelterListGating: { type: 'q1-yes' },\n },\n smelterList: {\n metalDropdownSource: { type: 'dynamic-active' },\n hasIdColumn: override.smelterList.hasIdColumn,\n hasLookup: override.smelterList.hasLookup,\n hasCombinedColumn: override.smelterList.hasCombinedColumn,\n notListedRequireNameCountry: true,\n notYetIdentifiedCountryDefault: override.smelterList.notYetIdentifiedCountryDefault,\n recycledScrapOptions: override.smelterList.recycledScrapOptions,\n },\n mineList: {\n available: true,\n metalDropdownSource: { type: 'dynamic-active' },\n smelterNameMode: override.mineList.smelterNameMode,\n },\n productList: {\n hasRequesterColumns: override.productList.hasRequesterColumns,\n productNumberLabelKey: 'productList.amrt.manufacturerNumber',\n productNameLabelKey: 'productList.amrt.manufacturerName',\n commentLabelKey: 'productList.amrt.comment',\n },\n dateConfig: {\n minDate: '2006-12-31',\n maxDate: '2026-03-31',\n },\n }\n}\n","export const AMRT_VERSION_IDS = ['1.1', '1.2', '1.3'] as const\n\nexport type AmrtVersionId = typeof AMRT_VERSION_IDS[number]\n\nexport const AMRT_DEFAULT_VERSION: AmrtVersionId = '1.3'\n\nexport const AMRT_VERSION_ENTRIES = AMRT_VERSION_IDS.map((id) => ({ id, label: id }))\n","import type { AmrtVersionOverride } from '../base'\nimport {\n AMRT_MINERALS_V11_PREFILL,\n AMRT_V11_PREFILL_LABELS,\n} from '../base'\n\nexport const amrt_1_1: AmrtVersionOverride = {\n id: '1.1',\n mineralScope: {\n mode: 'free-text',\n minerals: AMRT_MINERALS_V11_PREFILL,\n defaultCustomMinerals: AMRT_V11_PREFILL_LABELS,\n },\n pages: {\n instructionsFirst: true,\n hasLookup: false,\n },\n smelterList: {\n hasIdColumn: false,\n hasLookup: false,\n hasCombinedColumn: false,\n notYetIdentifiedCountryDefault: 'Unknown',\n recycledScrapOptions: 'yes-no-unknown',\n },\n mineList: {\n smelterNameMode: 'manual',\n },\n productList: {\n hasRequesterColumns: false,\n },\n}\n","import type { AmrtVersionOverride } from '../base'\nimport {\n AMRT_MINERALS_V12_PREFILL,\n AMRT_V12_PREFILL_LABELS,\n} from '../base'\n\nexport const amrt_1_2: AmrtVersionOverride = {\n id: '1.2',\n mineralScope: {\n mode: 'free-text',\n minerals: AMRT_MINERALS_V12_PREFILL,\n defaultCustomMinerals: AMRT_V12_PREFILL_LABELS,\n },\n pages: {\n instructionsFirst: true,\n hasLookup: false,\n },\n smelterList: {\n hasIdColumn: false,\n hasLookup: false,\n hasCombinedColumn: false,\n notYetIdentifiedCountryDefault: 'Unknown',\n recycledScrapOptions: 'yes-no-unknown',\n },\n mineList: {\n smelterNameMode: 'manual',\n },\n productList: {\n hasRequesterColumns: false,\n },\n}\n","import type { AmrtVersionOverride } from '../base'\nimport { AMRT_MINERALS_V13 } from '../base'\n\nexport const amrt_1_3: AmrtVersionOverride = {\n id: '1.3',\n mineralScope: {\n mode: 'dynamic-dropdown',\n minerals: AMRT_MINERALS_V13,\n otherSlotCount: 12,\n },\n pages: {\n instructionsFirst: false,\n hasLookup: true,\n },\n smelterList: {\n hasIdColumn: true,\n hasLookup: true,\n hasCombinedColumn: true,\n notYetIdentifiedCountryDefault: '',\n recycledScrapOptions: 'yes-no',\n },\n mineList: {\n smelterNameMode: 'dropdown',\n },\n productList: {\n hasRequesterColumns: true,\n },\n}\n","import { assertVersion, createVersionMap } from '../../common/helpers'\nimport type { TemplateDefinition, TemplateVersionDef } from '../../types'\n\nimport { buildAmrtVersionDef } from './base'\nimport type { AmrtVersionOverride } from './base'\nimport {\n AMRT_DEFAULT_VERSION,\n AMRT_VERSION_ENTRIES,\n AMRT_VERSION_IDS,\n} from './manifest'\nimport { amrt_1_1 } from './versions/1.1'\nimport { amrt_1_2 } from './versions/1.2'\nimport { amrt_1_3 } from './versions/1.3'\n\nconst AMRT_VERSION_OVERRIDES = {\n '1.1': amrt_1_1,\n '1.2': amrt_1_2,\n '1.3': amrt_1_3,\n} satisfies Record<(typeof AMRT_VERSION_IDS)[number], AmrtVersionOverride>\n\nconst AMRT_VERSION_MAP = createVersionMap(Object.values(AMRT_VERSION_OVERRIDES))\n\nexport const amrtDefinition: TemplateDefinition = {\n type: 'amrt',\n name: 'AMRT',\n fullNameKey: 'templates.amrt_full',\n versions: AMRT_VERSION_ENTRIES,\n defaultVersion: AMRT_DEFAULT_VERSION,\n}\n\nexport function getAmrtVersionDef(versionId: string): TemplateVersionDef {\n assertVersion(AMRT_VERSION_IDS, versionId, 'AMRT')\n const override = AMRT_VERSION_MAP.get(versionId)\n if (!override) {\n throw new Error(`Missing AMRT version config: ${versionId}`)\n }\n return buildAmrtVersionDef(override)\n}\n","import type { I18nKey } from '@core/i18n'\n\nimport type {\n CompanyQuestionDef,\n FieldDef,\n MineralDef,\n PageDef,\n QuestionDef,\n QuestionOption,\n TemplateVersionDef,\n} from '../../types'\n\nimport type { CmrtVersionId } from './manifest'\n\n// ---------------------------------------------------------------------------\n// CMRT Minerals\n// ---------------------------------------------------------------------------\n\nconst CMRT_MINERALS: MineralDef[] = [\n { key: 'tantalum', labelKey: 'minerals.tantalum' },\n { key: 'tin', labelKey: 'minerals.tin' },\n { key: 'gold', labelKey: 'minerals.gold' },\n { key: 'tungsten', labelKey: 'minerals.tungsten' },\n]\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nconst YES_NO: QuestionOption[] = [\n { value: 'Yes', labelKey: 'options.yes' },\n { value: 'No', labelKey: 'options.no' },\n]\n\nconst YES_NO_UNKNOWN: QuestionOption[] = [\n ...YES_NO,\n { value: 'Unknown', labelKey: 'options.unknown' },\n]\n\nconst YES_IPC1755_OTHER_NO: QuestionOption[] = [\n { value: 'Yes, in conformance with IPC1755 (e.g., CMRT)', labelKey: 'options.yesIpc1755' },\n { value: 'Yes, using other format (describe)', labelKey: 'options.yesOtherFormat' },\n { value: 'No', labelKey: 'options.no' },\n]\n\nconst YES_SEC_EU_NO: QuestionOption[] = [\n { value: 'Yes, with the SEC', labelKey: 'options.yesWithSec' },\n { value: 'Yes, with the EU', labelKey: 'options.yesWithEu' },\n { value: 'Yes, with the SEC and the EU', labelKey: 'options.yesWithSecAndEu' },\n { value: 'No', labelKey: 'options.no' },\n]\n\nexport const CMRT_Q6_OPTIONS_V6_22_AND_BELOW: QuestionOption[] = [\n { value: '1', labelKey: 'options.percentageOne' },\n { value: 'Greater than 90%', labelKey: 'options.percentageAbove90' },\n { value: 'Greater than 75%', labelKey: 'options.percentageAbove75' },\n { value: 'Greater than 50%', labelKey: 'options.percentageAbove50' },\n { value: '50% or less', labelKey: 'options.percentage50OrLess' },\n { value: 'None', labelKey: 'options.none' },\n]\n\nexport const CMRT_Q6_OPTIONS_V6_31_AND_ABOVE: QuestionOption[] = [\n { value: '100%', labelKey: 'options.percentage100' },\n { value: 'Greater than 90%', labelKey: 'options.percentageAbove90' },\n { value: 'Greater than 75%', labelKey: 'options.percentageAbove75' },\n { value: 'Greater than 50%', labelKey: 'options.percentageAbove50' },\n { value: '50% or less', labelKey: 'options.percentage50OrLess' },\n { value: 'None', labelKey: 'options.none' },\n]\n\n// ---------------------------------------------------------------------------\n// CMRT Questions (Q1-Q8)\n// ---------------------------------------------------------------------------\n\nfunction buildCmrtQuestions(q6Options: QuestionOption[]): QuestionDef[] {\n return [\n {\n key: 'Q1',\n labelKey: 'questions.cmrt.q1',\n options: YES_NO,\n perMineral: true,\n },\n {\n key: 'Q2',\n labelKey: 'questions.cmrt.q2',\n options: YES_NO,\n perMineral: true,\n },\n {\n key: 'Q3',\n labelKey: 'questions.cmrt.q3',\n options: YES_NO_UNKNOWN,\n perMineral: true,\n },\n {\n key: 'Q4',\n labelKey: 'questions.cmrt.q4',\n options: YES_NO_UNKNOWN,\n perMineral: true,\n },\n {\n key: 'Q5',\n labelKey: 'questions.cmrt.q5',\n options: YES_NO_UNKNOWN,\n perMineral: true,\n },\n {\n key: 'Q6',\n labelKey: 'questions.cmrt.q6',\n options: q6Options,\n perMineral: true,\n },\n {\n key: 'Q7',\n labelKey: 'questions.cmrt.q7',\n options: YES_NO,\n perMineral: true,\n },\n {\n key: 'Q8',\n labelKey: 'questions.cmrt.q8',\n options: YES_NO,\n perMineral: true,\n },\n ]\n}\n\n// ---------------------------------------------------------------------------\n// CMRT Company Questions (A-H)\n// ---------------------------------------------------------------------------\n\nconst CMRT_COMPANY_QUESTIONS: CompanyQuestionDef[] = [\n {\n key: 'A',\n labelKey: 'companyQuestions.cmrt.a',\n options: YES_NO,\n hasCommentField: true,\n },\n {\n key: 'B',\n labelKey: 'companyQuestions.cmrt.b',\n options: YES_NO,\n hasCommentField: true,\n commentLabelKey: 'companyQuestions.cmrt.b_comment',\n commentRequiredWhen: ['Yes'],\n },\n {\n key: 'C',\n labelKey: 'companyQuestions.cmrt.c',\n options: YES_NO,\n hasCommentField: true,\n },\n {\n key: 'D',\n labelKey: 'companyQuestions.cmrt.d',\n options: YES_NO,\n hasCommentField: true,\n },\n {\n key: 'E',\n labelKey: 'companyQuestions.cmrt.e',\n options: YES_IPC1755_OTHER_NO,\n hasCommentField: true,\n commentLabelKey: 'companyQuestions.cmrt.e_comment',\n commentRequiredWhen: ['Yes, using other format (describe)'],\n },\n {\n key: 'F',\n labelKey: 'companyQuestions.cmrt.f',\n options: YES_NO,\n hasCommentField: true,\n },\n {\n key: 'G',\n labelKey: 'companyQuestions.cmrt.g',\n options: YES_NO,\n hasCommentField: true,\n },\n {\n key: 'H',\n labelKey: 'companyQuestions.cmrt.h',\n options: YES_SEC_EU_NO,\n hasCommentField: true,\n },\n]\n\n// ---------------------------------------------------------------------------\n// Company Info Fields\n// ---------------------------------------------------------------------------\n\nconst CMRT_COMPANY_FIELDS: FieldDef[] = [\n { key: 'companyName', labelKey: 'fields.companyName', type: 'text', required: true },\n { key: 'declarationScope', labelKey: 'fields.reportingScope', type: 'select', required: true },\n {\n key: 'scopeDescription',\n labelKey: 'fields.scopeDescription',\n type: 'textarea',\n required: 'conditional',\n },\n { key: 'companyId', labelKey: 'fields.companyId', type: 'text', required: false },\n { key: 'companyAuthId', labelKey: 'fields.companyAuthId', type: 'text', required: false },\n { key: 'address', labelKey: 'fields.address', type: 'text', required: false },\n { key: 'contactName', labelKey: 'fields.contactName', type: 'text', required: true },\n { key: 'contactEmail', labelKey: 'fields.contactEmail', type: 'email', required: true },\n { key: 'contactPhone', labelKey: 'fields.contactPhone', type: 'text', required: true },\n { key: 'authorizerName', labelKey: 'fields.authorizerName', type: 'text', required: true },\n { key: 'authorizerTitle', labelKey: 'fields.authorizerTitle', type: 'text', required: false },\n { key: 'authorizerEmail', labelKey: 'fields.authorizerEmail', type: 'email', required: true },\n { key: 'authorizerPhone', labelKey: 'fields.authorizerPhone', type: 'text', required: false },\n { key: 'authorizationDate', labelKey: 'fields.authorizationDate', type: 'date', required: true },\n]\n\n// ---------------------------------------------------------------------------\n// Pages\n// ---------------------------------------------------------------------------\n\nconst CMRT_PAGES: PageDef[] = [\n { key: 'revision', labelKey: 'tabs.revision', available: true },\n { key: 'instructions', labelKey: 'tabs.instructions', available: true },\n { key: 'definitions', labelKey: 'tabs.definitions', available: true },\n { key: 'declaration', labelKey: 'tabs.declaration', available: true },\n { key: 'smelter-list', labelKey: 'tabs.smelterList', available: true },\n { key: 'product-list', labelKey: 'tabs.productList', available: true },\n { key: 'smelter-lookup', labelKey: 'tabs.smelterLookup', available: true },\n { key: 'checker', labelKey: 'tabs.checker', available: true },\n]\n\n// ---------------------------------------------------------------------------\n// Version Override\n// ---------------------------------------------------------------------------\n\nexport interface CmrtVersionOverride {\n id: CmrtVersionId\n q6Options: QuestionOption[]\n productList: {\n productNumberLabelKey: I18nKey\n productNameLabelKey: I18nKey\n }\n smelterList: {\n notListedRequireNameCountry: boolean\n notYetIdentifiedCountryByMetal?: Record<string, string>\n }\n dateConfig: {\n maxDate?: string\n }\n}\n\n// ---------------------------------------------------------------------------\n// Builder\n// ---------------------------------------------------------------------------\n\nexport function buildCmrtVersionDef(override: CmrtVersionOverride): TemplateVersionDef {\n return {\n templateType: 'cmrt',\n version: { id: override.id, label: override.id },\n pages: CMRT_PAGES,\n mineralScope: {\n mode: 'fixed',\n minerals: CMRT_MINERALS,\n },\n companyInfoFields: CMRT_COMPANY_FIELDS,\n questions: buildCmrtQuestions(override.q6Options),\n companyQuestions: CMRT_COMPANY_QUESTIONS,\n gating: {\n q2Gating: { type: 'q1-not-no' },\n laterQuestionsGating: { type: 'q1q2-not-no' },\n companyQuestionsGating: { type: 'q1q2-not-no' },\n smelterListGating: { type: 'q1q2-not-no' },\n },\n smelterList: {\n metalDropdownSource: { type: 'fixed', metals: CMRT_MINERALS },\n hasIdColumn: true,\n hasLookup: true,\n hasCombinedColumn: false,\n notListedRequireNameCountry: override.smelterList.notListedRequireNameCountry,\n notYetIdentifiedCountryDefault: 'Unknown',\n notYetIdentifiedCountryByMetal: override.smelterList.notYetIdentifiedCountryByMetal,\n },\n mineList: { available: false },\n productList: {\n hasRequesterColumns: false,\n productNumberLabelKey: override.productList.productNumberLabelKey,\n productNameLabelKey: override.productList.productNameLabelKey,\n commentLabelKey: 'productList.cmrt.comment',\n },\n dateConfig: {\n minDate: '2006-12-31',\n maxDate: override.dateConfig.maxDate,\n },\n }\n}\n","export const CMRT_VERSION_IDS = ['6.01', '6.1', '6.22', '6.31', '6.4', '6.5'] as const\n\nexport type CmrtVersionId = typeof CMRT_VERSION_IDS[number]\n\nexport const CMRT_DEFAULT_VERSION: CmrtVersionId = '6.5'\n\nexport const CMRT_VERSION_ENTRIES = CMRT_VERSION_IDS.map((id) => ({ id, label: id }))\n","import type { CmrtVersionOverride } from '../base'\nimport { CMRT_Q6_OPTIONS_V6_22_AND_BELOW } from '../base'\n\nexport const cmrt_6_01: CmrtVersionOverride = {\n id: '6.01',\n q6Options: CMRT_Q6_OPTIONS_V6_22_AND_BELOW,\n productList: {\n productNumberLabelKey: 'productList.cmrt.manufacturerNumber',\n productNameLabelKey: 'productList.cmrt.manufacturerName',\n },\n smelterList: {\n notListedRequireNameCountry: true,\n },\n dateConfig: {\n maxDate: '2026-03-31',\n },\n}\n","import type { CmrtVersionOverride } from '../base'\nimport { CMRT_Q6_OPTIONS_V6_22_AND_BELOW } from '../base'\n\nexport const cmrt_6_1: CmrtVersionOverride = {\n id: '6.1',\n q6Options: CMRT_Q6_OPTIONS_V6_22_AND_BELOW,\n productList: {\n productNumberLabelKey: 'productList.cmrt.manufacturerNumber',\n productNameLabelKey: 'productList.cmrt.manufacturerName',\n },\n smelterList: {\n notListedRequireNameCountry: true,\n },\n dateConfig: {\n maxDate: '2026-03-31',\n },\n}\n","import type { CmrtVersionOverride } from '../base'\nimport { CMRT_Q6_OPTIONS_V6_22_AND_BELOW } from '../base'\n\nexport const cmrt_6_22: CmrtVersionOverride = {\n id: '6.22',\n q6Options: CMRT_Q6_OPTIONS_V6_22_AND_BELOW,\n productList: {\n productNumberLabelKey: 'productList.cmrt.manufacturerNumber',\n productNameLabelKey: 'productList.cmrt.manufacturerName',\n },\n smelterList: {\n notListedRequireNameCountry: false,\n },\n dateConfig: {\n maxDate: '2026-03-31',\n },\n}\n","import type { CmrtVersionOverride } from '../base'\nimport { CMRT_Q6_OPTIONS_V6_31_AND_ABOVE } from '../base'\n\nexport const cmrt_6_31: CmrtVersionOverride = {\n id: '6.31',\n q6Options: CMRT_Q6_OPTIONS_V6_31_AND_ABOVE,\n productList: {\n productNumberLabelKey: 'productList.cmrt.manufacturerNumber',\n productNameLabelKey: 'productList.cmrt.manufacturerName',\n },\n smelterList: {\n notListedRequireNameCountry: false,\n },\n dateConfig: {},\n}\n","import type { CmrtVersionOverride } from '../base'\nimport { CMRT_Q6_OPTIONS_V6_31_AND_ABOVE } from '../base'\n\nexport const cmrt_6_4: CmrtVersionOverride = {\n id: '6.4',\n q6Options: CMRT_Q6_OPTIONS_V6_31_AND_ABOVE,\n productList: {\n productNumberLabelKey: 'productList.cmrt.manufacturerNumber',\n productNameLabelKey: 'productList.cmrt.manufacturerName',\n },\n smelterList: {\n notListedRequireNameCountry: false,\n },\n dateConfig: {},\n}\n","import type { CmrtVersionOverride } from '../base'\nimport { CMRT_Q6_OPTIONS_V6_31_AND_ABOVE } from '../base'\n\nexport const cmrt_6_5: CmrtVersionOverride = {\n id: '6.5',\n q6Options: CMRT_Q6_OPTIONS_V6_31_AND_ABOVE,\n productList: {\n productNumberLabelKey: 'productList.cmrt.respondentNumber',\n productNameLabelKey: 'productList.cmrt.respondentName',\n },\n smelterList: {\n notListedRequireNameCountry: false,\n notYetIdentifiedCountryByMetal: { tungsten: '' },\n },\n dateConfig: {},\n}\n","import { assertVersion, createVersionMap } from '../../common/helpers'\nimport type { TemplateDefinition, TemplateVersionDef } from '../../types'\n\nimport { buildCmrtVersionDef } from './base'\nimport type { CmrtVersionOverride } from './base'\nimport {\n CMRT_DEFAULT_VERSION,\n CMRT_VERSION_ENTRIES,\n CMRT_VERSION_IDS,\n} from './manifest'\nimport { cmrt_6_01 } from './versions/6.01'\nimport { cmrt_6_1 } from './versions/6.1'\nimport { cmrt_6_22 } from './versions/6.22'\nimport { cmrt_6_31 } from './versions/6.31'\nimport { cmrt_6_4 } from './versions/6.4'\nimport { cmrt_6_5 } from './versions/6.5'\n\nconst CMRT_VERSION_OVERRIDES = {\n '6.01': cmrt_6_01,\n '6.1': cmrt_6_1,\n '6.22': cmrt_6_22,\n '6.31': cmrt_6_31,\n '6.4': cmrt_6_4,\n '6.5': cmrt_6_5,\n} satisfies Record<(typeof CMRT_VERSION_IDS)[number], CmrtVersionOverride>\n\nconst CMRT_VERSION_MAP = createVersionMap(Object.values(CMRT_VERSION_OVERRIDES))\n\nexport const cmrtDefinition: TemplateDefinition = {\n type: 'cmrt',\n name: 'CMRT',\n fullNameKey: 'templates.cmrt_full',\n versions: CMRT_VERSION_ENTRIES,\n defaultVersion: CMRT_DEFAULT_VERSION,\n}\n\nexport function getCmrtVersionDef(versionId: string): TemplateVersionDef {\n assertVersion(CMRT_VERSION_IDS, versionId, 'CMRT')\n const override = CMRT_VERSION_MAP.get(versionId)\n if (!override) {\n throw new Error(`Missing CMRT version config: ${versionId}`)\n }\n return buildCmrtVersionDef(override)\n}\n","import type {\n CompanyQuestionDef,\n FieldDef,\n MineralDef,\n PageDef,\n QuestionDef,\n QuestionOption,\n TemplateVersionDef,\n} from '../../types'\n\nimport type { CrtVersionId } from './manifest'\n\n// ---------------------------------------------------------------------------\n// CRT Minerals\n// ---------------------------------------------------------------------------\n\nconst CRT_MINERALS: MineralDef[] = [{ key: 'cobalt', labelKey: 'minerals.cobalt' }]\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nconst YES_NO: QuestionOption[] = [\n { value: 'Yes', labelKey: 'options.yes' },\n { value: 'No', labelKey: 'options.no' },\n]\n\nexport const CRT_YES_NO_OPTIONS: QuestionOption[] = YES_NO\n\nconst YES_NO_UNKNOWN: QuestionOption[] = [\n ...YES_NO,\n { value: 'Unknown', labelKey: 'options.unknown' },\n]\n\nexport const CRT_Q2_OPTIONS_DEFAULT: QuestionOption[] = YES_NO_UNKNOWN\n\nexport const CRT_Q2_OPTIONS_221: QuestionOption[] = [\n { value: 'Yes', labelKey: 'options.yes' },\n { value: 'No', labelKey: 'options.no' },\n { value: 'Unknown', labelKey: 'options.unknown' },\n { value: 'DRC or adjoining countries only', labelKey: 'options.drcOrAdjoiningOnly' },\n]\n\n// ---------------------------------------------------------------------------\n// CRT Questions (Q1-Q6)\n// ---------------------------------------------------------------------------\n\nfunction buildCrtQuestions(q2Options: QuestionOption[]): QuestionDef[] {\n const percentageOptions: QuestionOption[] = [\n { value: '1', labelKey: 'options.percentage100' },\n { value: 'Greater than 90%', labelKey: 'options.percentageAbove90' },\n { value: 'Greater than 75%', labelKey: 'options.percentageAbove75' },\n { value: 'Greater than 50%', labelKey: 'options.percentageAbove50' },\n { value: '50% or less', labelKey: 'options.percentage50OrLess' },\n { value: 'None', labelKey: 'options.none' },\n ]\n\n return [\n { key: 'Q1', labelKey: 'questions.crt.q1', options: YES_NO_UNKNOWN, perMineral: false },\n { key: 'Q2', labelKey: 'questions.crt.q2', options: q2Options, perMineral: false },\n { key: 'Q3', labelKey: 'questions.crt.q3', options: YES_NO_UNKNOWN, perMineral: false },\n { key: 'Q4', labelKey: 'questions.crt.q4', options: percentageOptions, perMineral: false },\n { key: 'Q5', labelKey: 'questions.crt.q5', options: YES_NO_UNKNOWN, perMineral: false },\n { key: 'Q6', labelKey: 'questions.crt.q6', options: YES_NO_UNKNOWN, perMineral: false },\n ]\n}\n\n// ---------------------------------------------------------------------------\n// CRT Company Questions (A-I)\n// ---------------------------------------------------------------------------\n\nfunction buildCrtCompanyQuestions(override: CrtVersionOverride): CompanyQuestionDef[] {\n return [\n {\n key: 'A',\n labelKey: 'companyQuestions.crt.a',\n options: YES_NO,\n hasCommentField: true,\n commentLabelKey: 'companyQuestions.crt.a_comment',\n commentRequiredWhen: ['Yes'],\n },\n { key: 'B', labelKey: 'companyQuestions.crt.b', options: YES_NO, hasCommentField: true },\n { key: 'C', labelKey: 'companyQuestions.crt.c', options: YES_NO, hasCommentField: true },\n { key: 'D', labelKey: 'companyQuestions.crt.d', options: YES_NO, hasCommentField: true },\n { key: 'E', labelKey: 'companyQuestions.crt.e', options: YES_NO, hasCommentField: true },\n { key: 'F', labelKey: 'companyQuestions.crt.f', options: YES_NO, hasCommentField: true },\n {\n key: 'G',\n labelKey: 'companyQuestions.crt.g',\n options: override.companyQuestionsGOptions,\n hasCommentField: true,\n commentLabelKey: 'companyQuestions.crt.g_comment',\n commentRequiredWhen: override.companyQuestionsGCommentRequiredWhen,\n },\n { key: 'H', labelKey: 'companyQuestions.crt.h', options: YES_NO, hasCommentField: true },\n { key: 'I', labelKey: 'companyQuestions.crt.i', options: YES_NO, hasCommentField: true },\n ]\n}\n\n// ---------------------------------------------------------------------------\n// Company Info Fields\n// ---------------------------------------------------------------------------\n\nconst CRT_COMPANY_FIELDS: FieldDef[] = [\n { key: 'companyName', labelKey: 'fields.companyName', type: 'text', required: true },\n { key: 'declarationScope', labelKey: 'fields.reportingScope', type: 'select', required: true },\n {\n key: 'scopeDescription',\n labelKey: 'fields.scopeDescription',\n type: 'textarea',\n required: 'conditional',\n },\n { key: 'companyId', labelKey: 'fields.companyId', type: 'text', required: false },\n { key: 'companyAuthId', labelKey: 'fields.companyAuthId', type: 'text', required: false },\n { key: 'address', labelKey: 'fields.address', type: 'text', required: false },\n { key: 'contactName', labelKey: 'fields.contactName', type: 'text', required: true },\n { key: 'contactEmail', labelKey: 'fields.contactEmail', type: 'email', required: true },\n { key: 'contactPhone', labelKey: 'fields.contactPhone', type: 'text', required: true },\n { key: 'authorizerName', labelKey: 'fields.authorizerName', type: 'text', required: true },\n { key: 'authorizerTitle', labelKey: 'fields.authorizerTitle', type: 'text', required: false },\n { key: 'authorizerEmail', labelKey: 'fields.authorizerEmail', type: 'email', required: true },\n { key: 'authorizerPhone', labelKey: 'fields.authorizerPhone', type: 'text', required: false },\n { key: 'authorizationDate', labelKey: 'fields.authorizationDate', type: 'date', required: true },\n]\n\n// ---------------------------------------------------------------------------\n// Pages\n// ---------------------------------------------------------------------------\n\nconst CRT_PAGES: PageDef[] = [\n { key: 'instructions', labelKey: 'tabs.instructions', available: true },\n { key: 'revision', labelKey: 'tabs.revision', available: true },\n { key: 'definitions', labelKey: 'tabs.definitions', available: true },\n { key: 'declaration', labelKey: 'tabs.declaration', available: true },\n { key: 'smelter-list', labelKey: 'tabs.smelterList', available: true },\n { key: 'product-list', labelKey: 'tabs.productList', available: true },\n { key: 'smelter-lookup', labelKey: 'tabs.smelterLookup', available: true },\n { key: 'checker', labelKey: 'tabs.checker', available: true },\n]\n\n// ---------------------------------------------------------------------------\n// Version Override\n// ---------------------------------------------------------------------------\n\nexport interface CrtVersionOverride {\n id: CrtVersionId\n q2Options: QuestionOption[]\n companyQuestionsGOptions: QuestionOption[]\n companyQuestionsGCommentRequiredWhen: string[]\n}\n\n// ---------------------------------------------------------------------------\n// Builder\n// ---------------------------------------------------------------------------\n\nexport function buildCrtVersionDef(override: CrtVersionOverride): TemplateVersionDef {\n return {\n templateType: 'crt',\n version: { id: override.id, label: override.id },\n pages: CRT_PAGES,\n mineralScope: {\n mode: 'fixed',\n minerals: CRT_MINERALS,\n },\n companyInfoFields: CRT_COMPANY_FIELDS,\n questions: buildCrtQuestions(override.q2Options),\n companyQuestions: buildCrtCompanyQuestions(override),\n gating: {\n q2Gating: { type: 'q1-not-negatives', negatives: ['No', 'Unknown'] },\n laterQuestionsGating: { type: 'q1-not-negatives', negatives: ['No', 'Unknown'] },\n companyQuestionsGating: { type: 'q1-not-negatives', negatives: ['No', 'Unknown'] },\n smelterListGating: { type: 'q1-not-negatives', negatives: ['No', 'Unknown'] },\n },\n smelterList: {\n metalDropdownSource: { type: 'fixed', metals: CRT_MINERALS },\n hasIdColumn: true,\n hasLookup: true,\n hasCombinedColumn: false,\n notListedRequireNameCountry: true,\n notYetIdentifiedCountryDefault: 'Unknown',\n },\n mineList: { available: false },\n productList: {\n hasRequesterColumns: false,\n productNumberLabelKey: 'productList.crt.manufacturerNumber',\n productNameLabelKey: 'productList.crt.manufacturerName',\n commentLabelKey: 'productList.crt.comment',\n },\n dateConfig: {\n minDate: '2006-12-31',\n maxDate: '2026-03-31',\n },\n }\n}\n","export const CRT_VERSION_IDS = ['2.2', '2.21'] as const\n\nexport type CrtVersionId = typeof CRT_VERSION_IDS[number]\n\nexport const CRT_DEFAULT_VERSION: CrtVersionId = '2.21'\n\nexport const CRT_VERSION_ENTRIES = CRT_VERSION_IDS.map((id) => ({ id, label: id }))\n","import type { CrtVersionOverride } from '../base'\nimport { CRT_Q2_OPTIONS_DEFAULT } from '../base'\n\nexport const crt_2_2: CrtVersionOverride = {\n id: '2.2',\n q2Options: CRT_Q2_OPTIONS_DEFAULT,\n companyQuestionsGOptions: [\n { value: 'Yes, CRT', labelKey: 'options.yesCrtTemplate' },\n { value: 'Yes, Using Other Format (Describe)', labelKey: 'options.yesOtherFormatTitle' },\n { value: 'No', labelKey: 'options.no' },\n ],\n companyQuestionsGCommentRequiredWhen: ['Yes, Using Other Format (Describe)'],\n}\n","import type { CrtVersionOverride } from '../base'\nimport { CRT_Q2_OPTIONS_221 } from '../base'\n\nexport const crt_2_21: CrtVersionOverride = {\n id: '2.21',\n q2Options: CRT_Q2_OPTIONS_221,\n companyQuestionsGOptions: [\n { value: 'Yes, CRT', labelKey: 'options.yesCrtTemplate' },\n { value: 'Yes, Using Other Format (Describe)', labelKey: 'options.yesOtherFormatTitle' },\n { value: 'No', labelKey: 'options.no' },\n ],\n companyQuestionsGCommentRequiredWhen: ['Yes, Using Other Format (Describe)'],\n}\n","import { assertVersion, createVersionMap } from '../../common/helpers'\nimport type { TemplateDefinition, TemplateVersionDef } from '../../types'\n\nimport { buildCrtVersionDef } from './base'\nimport type { CrtVersionOverride } from './base'\nimport {\n CRT_DEFAULT_VERSION,\n CRT_VERSION_ENTRIES,\n CRT_VERSION_IDS,\n} from './manifest'\nimport { crt_2_2 } from './versions/2.2'\nimport { crt_2_21 } from './versions/2.21'\n\nconst CRT_VERSION_OVERRIDES = {\n '2.2': crt_2_2,\n '2.21': crt_2_21,\n} satisfies Record<(typeof CRT_VERSION_IDS)[number], CrtVersionOverride>\n\nconst CRT_VERSION_MAP = createVersionMap(Object.values(CRT_VERSION_OVERRIDES))\n\nexport const crtDefinition: TemplateDefinition = {\n type: 'crt',\n name: 'CRT',\n fullNameKey: 'templates.crt_full',\n versions: CRT_VERSION_ENTRIES,\n defaultVersion: CRT_DEFAULT_VERSION,\n}\n\nexport function getCrtVersionDef(versionId: string): TemplateVersionDef {\n assertVersion(CRT_VERSION_IDS, versionId, 'CRT')\n const override = CRT_VERSION_MAP.get(versionId)\n if (!override) {\n throw new Error(`Missing CRT version config: ${versionId}`)\n }\n return buildCrtVersionDef(override)\n}\n","import type { I18nKey } from '@core/i18n'\n\nimport type {\n CompanyQuestionDef,\n FieldDef,\n MineralDef,\n PageDef,\n QuestionDef,\n QuestionOption,\n TemplateVersionDef,\n MetalDropdownSource,\n} from '../../types'\n\nimport type { EmrtVersionId } from './manifest'\n\n// ---------------------------------------------------------------------------\n// EMRT Minerals\n// ---------------------------------------------------------------------------\n\nexport const EMRT_MINERALS_V1: MineralDef[] = [\n { key: 'cobalt', labelKey: 'minerals.cobalt' },\n { key: 'mica', labelKey: 'minerals.mica' },\n]\n\nexport const EMRT_MINERALS_V2: MineralDef[] = [\n { key: 'cobalt', labelKey: 'minerals.cobalt' },\n { key: 'copper', labelKey: 'minerals.copper' },\n { key: 'graphite', labelKey: 'minerals.graphite' },\n { key: 'lithium', labelKey: 'minerals.lithium' },\n { key: 'mica', labelKey: 'minerals.mica' },\n { key: 'nickel', labelKey: 'minerals.nickel' },\n]\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nconst YES_NO: QuestionOption[] = [\n { value: 'Yes', labelKey: 'options.yes' },\n { value: 'No', labelKey: 'options.no' },\n]\n\nexport const EMRT_YES_NO_OPTIONS: QuestionOption[] = YES_NO\n\nconst YES_NO_UNKNOWN: QuestionOption[] = [\n ...YES_NO,\n { value: 'Unknown', labelKey: 'options.unknown' },\n]\n\nexport const EMRT_YES_NO_UNKNOWN_OPTIONS: QuestionOption[] = YES_NO_UNKNOWN\n\nexport const EMRT_Q1_OPTIONS_V1: QuestionOption[] = [\n ...YES_NO_UNKNOWN,\n { value: 'Not applicable for this declaration', labelKey: 'options.notApplicableForDeclaration' },\n]\n\nexport const EMRT_Q1_OPTIONS_V2: QuestionOption[] = [\n ...YES_NO_UNKNOWN,\n { value: 'Not declaring', labelKey: 'options.notDeclaring' },\n]\n\nexport const EMRT_Q2_OPTIONS: QuestionOption[] = YES_NO_UNKNOWN\n\nexport const EMRT_Q3_OPTIONS_V1_COBALT: QuestionOption[] = [\n ...YES_NO_UNKNOWN,\n { value: 'DRC only', labelKey: 'options.drcOnly' },\n]\n\nexport const EMRT_Q3_OPTIONS_V1_MICA: QuestionOption[] = [\n ...YES_NO_UNKNOWN,\n { value: 'India and/or Madagascar only', labelKey: 'options.indiaMadagascarOnly' },\n]\n\nexport const EMRT_Q5_OPTIONS_V1: QuestionOption[] = [\n { value: '1', labelKey: 'options.percentageOne' },\n { value: 'Greater than 90%', labelKey: 'options.percentageAbove90' },\n { value: 'Greater than 75%', labelKey: 'options.percentageAbove75' },\n { value: 'Greater than 50%', labelKey: 'options.percentageAbove50' },\n { value: '50% or less', labelKey: 'options.percentage50OrLess' },\n { value: 'None', labelKey: 'options.none' },\n]\n\nexport const EMRT_Q5_OPTIONS_V2: QuestionOption[] = [\n { value: '100%', labelKey: 'options.percentage100' },\n { value: 'Greater than 90%', labelKey: 'options.percentageAbove90' },\n { value: 'Greater than 75%', labelKey: 'options.percentageAbove75' },\n { value: 'Greater than 50%', labelKey: 'options.percentageAbove50' },\n { value: '50% or less', labelKey: 'options.percentage50OrLess' },\n { value: 'None', labelKey: 'options.none' },\n { value: 'Did not survey', labelKey: 'options.didNotSurvey' },\n]\n\nexport const EMRT_COMPANY_QUESTION_C_OPTIONS_V2: QuestionOption[] = [\n { value: 'Yes', labelKey: 'options.yes' },\n { value: 'Yes, when more processors are validated', labelKey: 'options.yesWhenMoreValidated' },\n { value: 'No', labelKey: 'options.no' },\n]\n\nexport const EMRT_COMPANY_QUESTION_E_OPTIONS: QuestionOption[] = [\n { value: 'Yes, in conformance with IPC1755 (e.g. EMRT)', labelKey: 'options.yesIpc1755Emrt' },\n { value: 'Yes, Using Other Format (Describe)', labelKey: 'options.yesOtherFormatTitle' },\n { value: 'No', labelKey: 'options.no' },\n]\n\n// ---------------------------------------------------------------------------\n// Label helpers (Excel text alignment)\n// ---------------------------------------------------------------------------\n\nexport const EMRT_V1_QUESTION_LABELS: Record<string, I18nKey> = {\n Q1: 'questions.emrt.v1.q1',\n Q2: 'questions.emrt.v1.q2',\n Q3: 'questions.emrt.v1.q3',\n Q4: 'questions.emrt.v1.q4',\n Q5: 'questions.emrt.v1.q5',\n Q6: 'questions.emrt.v1.q6',\n Q7: 'questions.emrt.v1.q7',\n}\n\nexport const EMRT_V2_QUESTION_LABELS: Record<string, I18nKey> = {\n Q1: 'questions.emrt.q1',\n Q2: 'questions.emrt.q2',\n Q3: 'questions.emrt.q3',\n Q4: 'questions.emrt.q4',\n Q5: 'questions.emrt.q5',\n Q6: 'questions.emrt.q6',\n Q7: 'questions.emrt.q7',\n}\n\nexport const EMRT_V11_COMPANY_LABELS: Record<string, I18nKey> = {\n A: 'companyQuestions.emrt.v11.a',\n B: 'companyQuestions.emrt.v11.b',\n C: 'companyQuestions.emrt.v11.c',\n D: 'companyQuestions.emrt.v11.d',\n E: 'companyQuestions.emrt.v11.e',\n F: 'companyQuestions.emrt.v11.f',\n G: 'companyQuestions.emrt.v11.g',\n}\n\nexport const EMRT_V1_COMPANY_LABELS: Record<string, I18nKey> = {\n A: 'companyQuestions.emrt.a',\n B: 'companyQuestions.emrt.b',\n C: 'companyQuestions.emrt.v1.c',\n D: 'companyQuestions.emrt.d',\n E: 'companyQuestions.emrt.v1.e',\n F: 'companyQuestions.emrt.f',\n G: 'companyQuestions.emrt.g',\n}\n\nexport const EMRT_V2_COMPANY_LABELS: Record<string, I18nKey> = {\n A: 'companyQuestions.emrt.a',\n B: 'companyQuestions.emrt.b',\n C: 'companyQuestions.emrt.c',\n D: 'companyQuestions.emrt.d',\n E: 'companyQuestions.emrt.e',\n F: 'companyQuestions.emrt.f',\n G: 'companyQuestions.emrt.g',\n}\n\n// ---------------------------------------------------------------------------\n// Company Info Fields\n// ---------------------------------------------------------------------------\n\nconst EMRT_COMPANY_FIELDS: FieldDef[] = [\n { key: 'companyName', labelKey: 'fields.companyName', type: 'text', required: true },\n { key: 'declarationScope', labelKey: 'fields.reportingScope', type: 'select', required: true },\n {\n key: 'scopeDescription',\n labelKey: 'fields.scopeDescription',\n type: 'textarea',\n required: 'conditional',\n },\n { key: 'companyId', labelKey: 'fields.companyId', type: 'text', required: false },\n { key: 'companyAuthId', labelKey: 'fields.companyAuthId', type: 'text', required: false },\n { key: 'address', labelKey: 'fields.address', type: 'text', required: false },\n { key: 'contactName', labelKey: 'fields.contactName', type: 'text', required: true },\n { key: 'contactEmail', labelKey: 'fields.contactEmail', type: 'email', required: true },\n { key: 'contactPhone', labelKey: 'fields.contactPhone', type: 'text', required: true },\n { key: 'authorizerName', labelKey: 'fields.authorizerName', type: 'text', required: true },\n { key: 'authorizerTitle', labelKey: 'fields.authorizerTitle', type: 'text', required: false },\n { key: 'authorizerEmail', labelKey: 'fields.authorizerEmail', type: 'email', required: true },\n { key: 'authorizerPhone', labelKey: 'fields.authorizerPhone', type: 'text', required: false },\n { key: 'authorizationDate', labelKey: 'fields.authorizationDate', type: 'date', required: true },\n]\n\n// ---------------------------------------------------------------------------\n// Version Override\n// ---------------------------------------------------------------------------\n\nexport interface EmrtVersionOverride {\n id: EmrtVersionId\n minerals: MineralDef[]\n mineralScopeMode: 'fixed' | 'dynamic-dropdown'\n questionLabelKeys: Record<'Q1' | 'Q2' | 'Q3' | 'Q4' | 'Q5' | 'Q6' | 'Q7', I18nKey>\n questionOptions: {\n q1: QuestionOption[]\n q2: QuestionOption[]\n q3: QuestionOption[]\n q3ByMineral?: Record<string, QuestionOption[]>\n q4: QuestionOption[]\n q5: QuestionOption[]\n q6: QuestionOption[]\n q7: QuestionOption[]\n }\n companyLabelKeys: Record<'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G', I18nKey>\n companyOptions: {\n A: QuestionOption[]\n B: QuestionOption[]\n BCommentLabelKey?: I18nKey\n BCommentRequiredWhen?: string[]\n C: QuestionOption[]\n D: QuestionOption[]\n E: QuestionOption[]\n F: QuestionOption[]\n G: QuestionOption[]\n }\n gating: {\n q1Negatives: string[]\n }\n pages: {\n instructionsFirst: boolean\n hasMineList: boolean\n }\n smelterList: {\n metalDropdownSource: MetalDropdownSource\n hasCombinedColumn: boolean\n }\n mineList: {\n available: boolean\n metalDropdownSource?: MetalDropdownSource\n smelterNameMode: 'dropdown' | 'manual'\n }\n productList: {\n hasRequesterColumns: boolean\n }\n}\n\n// ---------------------------------------------------------------------------\n// Builders\n// ---------------------------------------------------------------------------\n\nfunction buildEmrtQuestions(override: EmrtVersionOverride): QuestionDef[] {\n const q = override.questionOptions\n return [\n { key: 'Q1', labelKey: override.questionLabelKeys.Q1, options: q.q1, perMineral: true },\n { key: 'Q2', labelKey: override.questionLabelKeys.Q2, options: q.q2, perMineral: true },\n {\n key: 'Q3',\n labelKey: override.questionLabelKeys.Q3,\n options: q.q3,\n optionsByMineral: q.q3ByMineral,\n perMineral: true,\n },\n { key: 'Q4', labelKey: override.questionLabelKeys.Q4, options: q.q4, perMineral: true },\n { key: 'Q5', labelKey: override.questionLabelKeys.Q5, options: q.q5, perMineral: true },\n { key: 'Q6', labelKey: override.questionLabelKeys.Q6, options: q.q6, perMineral: true },\n { key: 'Q7', labelKey: override.questionLabelKeys.Q7, options: q.q7, perMineral: true },\n ]\n}\n\nfunction buildEmrtCompanyQuestions(override: EmrtVersionOverride): CompanyQuestionDef[] {\n const labelKey = (key: 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G') =>\n override.companyLabelKeys[key]\n const options = override.companyOptions\n return [\n { key: 'A', labelKey: labelKey('A'), options: options.A, hasCommentField: true },\n {\n key: 'B',\n labelKey: labelKey('B'),\n options: options.B,\n hasCommentField: true,\n commentLabelKey: options.BCommentLabelKey,\n commentRequiredWhen: options.BCommentRequiredWhen ?? [],\n },\n {\n key: 'C',\n labelKey: labelKey('C'),\n options: options.C,\n perMineral: true,\n hasCommentField: true,\n },\n { key: 'D', labelKey: labelKey('D'), options: options.D, hasCommentField: true },\n {\n key: 'E',\n labelKey: labelKey('E'),\n options: options.E,\n hasCommentField: true,\n commentLabelKey: 'companyQuestions.emrt.e_comment',\n commentRequiredWhen: ['Yes, Using Other Format (Describe)'],\n },\n { key: 'F', labelKey: labelKey('F'), options: options.F, hasCommentField: true },\n { key: 'G', labelKey: labelKey('G'), options: options.G, hasCommentField: true },\n ]\n}\n\nfunction buildEmrtPages(pages: EmrtVersionOverride['pages']): PageDef[] {\n const leadingPages: PageDef[] = pages.instructionsFirst\n ? [\n { key: 'instructions', labelKey: 'tabs.instructions', available: true },\n { key: 'revision', labelKey: 'tabs.revision', available: true },\n ]\n : [\n { key: 'revision', labelKey: 'tabs.revision', available: true },\n { key: 'instructions', labelKey: 'tabs.instructions', available: true },\n ]\n return [\n ...leadingPages,\n { key: 'definitions', labelKey: 'tabs.definitions', available: true },\n { key: 'declaration', labelKey: 'tabs.declaration', available: true },\n { key: 'smelter-list', labelKey: 'tabs.smelterList', available: true },\n { key: 'mine-list', labelKey: 'tabs.mineList', available: pages.hasMineList },\n { key: 'product-list', labelKey: 'tabs.productList', available: true },\n { key: 'smelter-lookup', labelKey: 'tabs.smelterLookup', available: true },\n { key: 'checker', labelKey: 'tabs.checker', available: true },\n ]\n}\n\nexport function buildEmrtVersionDef(override: EmrtVersionOverride): TemplateVersionDef {\n const q1Negatives = override.gating.q1Negatives\n return {\n templateType: 'emrt',\n version: { id: override.id, label: override.id },\n pages: buildEmrtPages(override.pages),\n mineralScope: {\n mode: override.mineralScopeMode,\n minerals: override.minerals,\n },\n companyInfoFields: EMRT_COMPANY_FIELDS,\n questions: buildEmrtQuestions(override),\n companyQuestions: buildEmrtCompanyQuestions(override),\n gating: {\n q2Gating: { type: 'q1-not-negatives', negatives: q1Negatives },\n laterQuestionsGating: {\n type: 'q1-not-negatives-and-q2-not-negatives',\n q1Negatives: q1Negatives,\n q2Negatives: ['No', 'Unknown'],\n },\n companyQuestionsGating: {\n type: 'q1-not-negatives-and-q2-not-negatives',\n q1Negatives: q1Negatives,\n q2Negatives: ['No', 'Unknown'],\n },\n smelterListGating: {\n type: 'q1-not-negatives-and-q2-not-negatives',\n q1Negatives: q1Negatives,\n q2Negatives: ['No', 'Unknown'],\n },\n },\n smelterList: {\n metalDropdownSource: override.smelterList.metalDropdownSource,\n hasIdColumn: true,\n hasLookup: true,\n hasCombinedColumn: override.smelterList.hasCombinedColumn,\n notListedRequireNameCountry: true,\n notYetIdentifiedCountryDefault: '',\n },\n mineList: {\n available: override.mineList.available,\n metalDropdownSource: override.mineList.metalDropdownSource,\n smelterNameMode: override.mineList.smelterNameMode,\n },\n productList: {\n hasRequesterColumns: override.productList.hasRequesterColumns,\n productNumberLabelKey: 'productList.emrt.respondentNumber',\n productNameLabelKey: 'productList.emrt.respondentName',\n commentLabelKey: 'productList.emrt.comment',\n },\n dateConfig: {\n minDate: '2006-12-31',\n maxDate: '2026-03-31',\n },\n }\n}\n","export const EMRT_VERSION_IDS = ['1.1', '1.11', '1.2', '1.3', '2.0', '2.1'] as const\n\nexport type EmrtVersionId = typeof EMRT_VERSION_IDS[number]\n\nexport const EMRT_DEFAULT_VERSION: EmrtVersionId = '2.1'\n\nexport const EMRT_VERSION_ENTRIES = EMRT_VERSION_IDS.map((id) => ({ id, label: id }))\n","import type { EmrtVersionOverride } from '../base'\nimport {\n EMRT_COMPANY_QUESTION_E_OPTIONS,\n EMRT_MINERALS_V1,\n EMRT_Q1_OPTIONS_V1,\n EMRT_Q2_OPTIONS,\n EMRT_Q3_OPTIONS_V1_COBALT,\n EMRT_Q3_OPTIONS_V1_MICA,\n EMRT_Q5_OPTIONS_V1,\n EMRT_V1_QUESTION_LABELS,\n EMRT_V11_COMPANY_LABELS,\n EMRT_YES_NO_OPTIONS,\n} from '../base'\n\nexport const emrt_1_1: EmrtVersionOverride = {\n id: '1.1',\n minerals: EMRT_MINERALS_V1,\n mineralScopeMode: 'fixed',\n questionLabelKeys: EMRT_V1_QUESTION_LABELS,\n questionOptions: {\n q1: EMRT_Q1_OPTIONS_V1,\n q2: EMRT_Q2_OPTIONS,\n q3: EMRT_Q2_OPTIONS,\n q3ByMineral: {\n cobalt: EMRT_Q3_OPTIONS_V1_COBALT,\n mica: EMRT_Q3_OPTIONS_V1_MICA,\n },\n q4: EMRT_Q2_OPTIONS,\n q5: EMRT_Q5_OPTIONS_V1,\n q6: EMRT_Q2_OPTIONS,\n q7: EMRT_Q2_OPTIONS,\n },\n companyLabelKeys: EMRT_V11_COMPANY_LABELS,\n companyOptions: {\n A: EMRT_YES_NO_OPTIONS,\n B: EMRT_YES_NO_OPTIONS,\n BCommentLabelKey: undefined,\n BCommentRequiredWhen: [],\n C: EMRT_YES_NO_OPTIONS,\n D: EMRT_YES_NO_OPTIONS,\n E: EMRT_COMPANY_QUESTION_E_OPTIONS,\n F: EMRT_YES_NO_OPTIONS,\n G: EMRT_YES_NO_OPTIONS,\n },\n gating: {\n q1Negatives: ['No', 'Unknown', 'Not applicable for this declaration'],\n },\n pages: {\n instructionsFirst: true,\n hasMineList: false,\n },\n smelterList: {\n metalDropdownSource: { type: 'fixed', metals: EMRT_MINERALS_V1 },\n hasCombinedColumn: false,\n },\n mineList: {\n available: false,\n smelterNameMode: 'manual',\n },\n productList: {\n hasRequesterColumns: false,\n },\n}\n","import type { EmrtVersionOverride } from '../base'\nimport {\n EMRT_COMPANY_QUESTION_E_OPTIONS,\n EMRT_MINERALS_V1,\n EMRT_Q1_OPTIONS_V1,\n EMRT_Q2_OPTIONS,\n EMRT_Q3_OPTIONS_V1_COBALT,\n EMRT_Q3_OPTIONS_V1_MICA,\n EMRT_Q5_OPTIONS_V1,\n EMRT_V1_COMPANY_LABELS,\n EMRT_V1_QUESTION_LABELS,\n EMRT_YES_NO_OPTIONS,\n} from '../base'\n\nexport const emrt_1_11: EmrtVersionOverride = {\n id: '1.11',\n minerals: EMRT_MINERALS_V1,\n mineralScopeMode: 'fixed',\n questionLabelKeys: EMRT_V1_QUESTION_LABELS,\n questionOptions: {\n q1: EMRT_Q1_OPTIONS_V1,\n q2: EMRT_Q2_OPTIONS,\n q3: EMRT_Q2_OPTIONS,\n q3ByMineral: {\n cobalt: EMRT_Q3_OPTIONS_V1_COBALT,\n mica: EMRT_Q3_OPTIONS_V1_MICA,\n },\n q4: EMRT_Q2_OPTIONS,\n q5: EMRT_Q5_OPTIONS_V1,\n q6: EMRT_Q2_OPTIONS,\n q7: EMRT_Q2_OPTIONS,\n },\n companyLabelKeys: EMRT_V1_COMPANY_LABELS,\n companyOptions: {\n A: EMRT_YES_NO_OPTIONS,\n B: EMRT_YES_NO_OPTIONS,\n BCommentLabelKey: 'companyQuestions.emrt.b_comment',\n BCommentRequiredWhen: ['Yes'],\n C: EMRT_YES_NO_OPTIONS,\n D: EMRT_YES_NO_OPTIONS,\n E: EMRT_COMPANY_QUESTION_E_OPTIONS,\n F: EMRT_YES_NO_OPTIONS,\n G: EMRT_YES_NO_OPTIONS,\n },\n gating: {\n q1Negatives: ['No', 'Unknown', 'Not applicable for this declaration'],\n },\n pages: {\n instructionsFirst: true,\n hasMineList: false,\n },\n smelterList: {\n metalDropdownSource: { type: 'fixed', metals: EMRT_MINERALS_V1 },\n hasCombinedColumn: false,\n },\n mineList: {\n available: false,\n smelterNameMode: 'manual',\n },\n productList: {\n hasRequesterColumns: false,\n },\n}\n","import type { EmrtVersionOverride } from '../base'\nimport {\n EMRT_COMPANY_QUESTION_E_OPTIONS,\n EMRT_MINERALS_V1,\n EMRT_Q1_OPTIONS_V1,\n EMRT_Q2_OPTIONS,\n EMRT_Q3_OPTIONS_V1_COBALT,\n EMRT_Q3_OPTIONS_V1_MICA,\n EMRT_Q5_OPTIONS_V1,\n EMRT_V1_COMPANY_LABELS,\n EMRT_V1_QUESTION_LABELS,\n EMRT_YES_NO_OPTIONS,\n} from '../base'\n\nexport const emrt_1_2: EmrtVersionOverride = {\n id: '1.2',\n minerals: EMRT_MINERALS_V1,\n mineralScopeMode: 'fixed',\n questionLabelKeys: EMRT_V1_QUESTION_LABELS,\n questionOptions: {\n q1: EMRT_Q1_OPTIONS_V1,\n q2: EMRT_Q2_OPTIONS,\n q3: EMRT_Q2_OPTIONS,\n q3ByMineral: {\n cobalt: EMRT_Q3_OPTIONS_V1_COBALT,\n mica: EMRT_Q3_OPTIONS_V1_MICA,\n },\n q4: EMRT_Q2_OPTIONS,\n q5: EMRT_Q5_OPTIONS_V1,\n q6: EMRT_Q2_OPTIONS,\n q7: EMRT_Q2_OPTIONS,\n },\n companyLabelKeys: EMRT_V1_COMPANY_LABELS,\n companyOptions: {\n A: EMRT_YES_NO_OPTIONS,\n B: EMRT_YES_NO_OPTIONS,\n BCommentLabelKey: 'companyQuestions.emrt.b_comment',\n BCommentRequiredWhen: ['Yes'],\n C: EMRT_YES_NO_OPTIONS,\n D: EMRT_YES_NO_OPTIONS,\n E: EMRT_COMPANY_QUESTION_E_OPTIONS,\n F: EMRT_YES_NO_OPTIONS,\n G: EMRT_YES_NO_OPTIONS,\n },\n gating: {\n q1Negatives: ['No', 'Unknown', 'Not applicable for this declaration'],\n },\n pages: {\n instructionsFirst: true,\n hasMineList: false,\n },\n smelterList: {\n metalDropdownSource: { type: 'fixed', metals: EMRT_MINERALS_V1 },\n hasCombinedColumn: false,\n },\n mineList: {\n available: false,\n smelterNameMode: 'manual',\n },\n productList: {\n hasRequesterColumns: false,\n },\n}\n","import type { EmrtVersionOverride } from '../base'\nimport {\n EMRT_COMPANY_QUESTION_E_OPTIONS,\n EMRT_MINERALS_V1,\n EMRT_Q1_OPTIONS_V1,\n EMRT_Q2_OPTIONS,\n EMRT_Q3_OPTIONS_V1_COBALT,\n EMRT_Q3_OPTIONS_V1_MICA,\n EMRT_Q5_OPTIONS_V1,\n EMRT_V1_COMPANY_LABELS,\n EMRT_V1_QUESTION_LABELS,\n EMRT_YES_NO_OPTIONS,\n} from '../base'\n\nexport const emrt_1_3: EmrtVersionOverride = {\n id: '1.3',\n minerals: EMRT_MINERALS_V1,\n mineralScopeMode: 'fixed',\n questionLabelKeys: EMRT_V1_QUESTION_LABELS,\n questionOptions: {\n q1: EMRT_Q1_OPTIONS_V1,\n q2: EMRT_Q2_OPTIONS,\n q3: EMRT_Q2_OPTIONS,\n q3ByMineral: {\n cobalt: EMRT_Q3_OPTIONS_V1_COBALT,\n mica: EMRT_Q3_OPTIONS_V1_MICA,\n },\n q4: EMRT_Q2_OPTIONS,\n q5: EMRT_Q5_OPTIONS_V1,\n q6: EMRT_Q2_OPTIONS,\n q7: EMRT_Q2_OPTIONS,\n },\n companyLabelKeys: EMRT_V1_COMPANY_LABELS,\n companyOptions: {\n A: EMRT_YES_NO_OPTIONS,\n B: EMRT_YES_NO_OPTIONS,\n BCommentLabelKey: 'companyQuestions.emrt.b_comment',\n BCommentRequiredWhen: ['Yes'],\n C: EMRT_YES_NO_OPTIONS,\n D: EMRT_YES_NO_OPTIONS,\n E: EMRT_COMPANY_QUESTION_E_OPTIONS,\n F: EMRT_YES_NO_OPTIONS,\n G: EMRT_YES_NO_OPTIONS,\n },\n gating: {\n q1Negatives: ['No', 'Unknown', 'Not applicable for this declaration'],\n },\n pages: {\n instructionsFirst: true,\n hasMineList: false,\n },\n smelterList: {\n metalDropdownSource: { type: 'fixed', metals: EMRT_MINERALS_V1 },\n hasCombinedColumn: false,\n },\n mineList: {\n available: false,\n smelterNameMode: 'manual',\n },\n productList: {\n hasRequesterColumns: false,\n },\n}\n","import type { EmrtVersionOverride } from '../base'\nimport {\n EMRT_COMPANY_QUESTION_C_OPTIONS_V2,\n EMRT_COMPANY_QUESTION_E_OPTIONS,\n EMRT_MINERALS_V2,\n EMRT_Q1_OPTIONS_V2,\n EMRT_Q2_OPTIONS,\n EMRT_Q5_OPTIONS_V2,\n EMRT_V2_COMPANY_LABELS,\n EMRT_V2_QUESTION_LABELS,\n EMRT_YES_NO_OPTIONS,\n} from '../base'\n\nexport const emrt_2_0: EmrtVersionOverride = {\n id: '2.0',\n minerals: EMRT_MINERALS_V2,\n mineralScopeMode: 'dynamic-dropdown',\n questionLabelKeys: EMRT_V2_QUESTION_LABELS,\n questionOptions: {\n q1: EMRT_Q1_OPTIONS_V2,\n q2: EMRT_Q2_OPTIONS,\n q3: EMRT_Q2_OPTIONS,\n q4: EMRT_Q2_OPTIONS,\n q5: EMRT_Q5_OPTIONS_V2,\n q6: EMRT_Q2_OPTIONS,\n q7: EMRT_Q2_OPTIONS,\n },\n companyLabelKeys: EMRT_V2_COMPANY_LABELS,\n companyOptions: {\n A: EMRT_YES_NO_OPTIONS,\n B: EMRT_YES_NO_OPTIONS,\n BCommentLabelKey: 'companyQuestions.emrt.b_comment',\n BCommentRequiredWhen: ['Yes'],\n C: EMRT_COMPANY_QUESTION_C_OPTIONS_V2,\n D: EMRT_YES_NO_OPTIONS,\n E: EMRT_COMPANY_QUESTION_E_OPTIONS,\n F: EMRT_YES_NO_OPTIONS,\n G: EMRT_YES_NO_OPTIONS,\n },\n gating: {\n q1Negatives: ['No', 'Unknown', 'Not declaring'],\n },\n pages: {\n instructionsFirst: true,\n hasMineList: true,\n },\n smelterList: {\n metalDropdownSource: { type: 'dynamic-q2-yes' },\n hasCombinedColumn: false,\n },\n mineList: {\n available: true,\n metalDropdownSource: { type: 'dynamic-q2-yes' },\n smelterNameMode: 'manual',\n },\n productList: {\n hasRequesterColumns: false,\n },\n}\n","import type { EmrtVersionOverride } from '../base'\nimport {\n EMRT_COMPANY_QUESTION_C_OPTIONS_V2,\n EMRT_COMPANY_QUESTION_E_OPTIONS,\n EMRT_MINERALS_V2,\n EMRT_Q1_OPTIONS_V2,\n EMRT_Q2_OPTIONS,\n EMRT_Q5_OPTIONS_V2,\n EMRT_V2_COMPANY_LABELS,\n EMRT_V2_QUESTION_LABELS,\n EMRT_YES_NO_OPTIONS,\n} from '../base'\n\nexport const emrt_2_1: EmrtVersionOverride = {\n id: '2.1',\n minerals: EMRT_MINERALS_V2,\n mineralScopeMode: 'dynamic-dropdown',\n questionLabelKeys: EMRT_V2_QUESTION_LABELS,\n questionOptions: {\n q1: EMRT_Q1_OPTIONS_V2,\n q2: EMRT_Q2_OPTIONS,\n q3: EMRT_Q2_OPTIONS,\n q4: EMRT_Q2_OPTIONS,\n q5: EMRT_Q5_OPTIONS_V2,\n q6: EMRT_Q2_OPTIONS,\n q7: EMRT_Q2_OPTIONS,\n },\n companyLabelKeys: EMRT_V2_COMPANY_LABELS,\n companyOptions: {\n A: EMRT_YES_NO_OPTIONS,\n B: EMRT_YES_NO_OPTIONS,\n BCommentLabelKey: 'companyQuestions.emrt.b_comment',\n BCommentRequiredWhen: ['Yes'],\n C: EMRT_COMPANY_QUESTION_C_OPTIONS_V2,\n D: EMRT_YES_NO_OPTIONS,\n E: EMRT_COMPANY_QUESTION_E_OPTIONS,\n F: EMRT_YES_NO_OPTIONS,\n G: EMRT_YES_NO_OPTIONS,\n },\n gating: {\n q1Negatives: ['No', 'Unknown', 'Not declaring'],\n },\n pages: {\n instructionsFirst: false,\n hasMineList: true,\n },\n smelterList: {\n metalDropdownSource: { type: 'dynamic-q2-yes' },\n hasCombinedColumn: true,\n },\n mineList: {\n available: true,\n metalDropdownSource: { type: 'dynamic-q2-yes' },\n smelterNameMode: 'dropdown',\n },\n productList: {\n hasRequesterColumns: true,\n },\n}\n","import { assertVersion, createVersionMap } from '../../common/helpers'\nimport type { TemplateDefinition, TemplateVersionDef } from '../../types'\n\nimport { buildEmrtVersionDef } from './base'\nimport type { EmrtVersionOverride } from './base'\nimport {\n EMRT_DEFAULT_VERSION,\n EMRT_VERSION_ENTRIES,\n EMRT_VERSION_IDS,\n} from './manifest'\nimport { emrt_1_1 } from './versions/1.1'\nimport { emrt_1_11 } from './versions/1.11'\nimport { emrt_1_2 } from './versions/1.2'\nimport { emrt_1_3 } from './versions/1.3'\nimport { emrt_2_0 } from './versions/2.0'\nimport { emrt_2_1 } from './versions/2.1'\n\nconst EMRT_VERSION_OVERRIDES = {\n '1.1': emrt_1_1,\n '1.11': emrt_1_11,\n '1.2': emrt_1_2,\n '1.3': emrt_1_3,\n '2.0': emrt_2_0,\n '2.1': emrt_2_1,\n} satisfies Record<(typeof EMRT_VERSION_IDS)[number], EmrtVersionOverride>\n\nconst EMRT_VERSION_MAP = createVersionMap(Object.values(EMRT_VERSION_OVERRIDES))\n\nexport const emrtDefinition: TemplateDefinition = {\n type: 'emrt',\n name: 'EMRT',\n fullNameKey: 'templates.emrt_full',\n versions: EMRT_VERSION_ENTRIES,\n defaultVersion: EMRT_DEFAULT_VERSION,\n}\n\nexport function getEmrtVersionDef(versionId: string): TemplateVersionDef {\n assertVersion(EMRT_VERSION_IDS, versionId, 'EMRT')\n const override = EMRT_VERSION_MAP.get(versionId)\n if (!override) {\n throw new Error(`Missing EMRT version config: ${versionId}`)\n }\n return buildEmrtVersionDef(override)\n}\n","/**\n * @file core/registry/index.ts\n * @description 模板/版本注册与查询的统一入口。\n */\n\n// 说明:统一入口便于阅读与索引;业务代码建议按需直引具体模块以减少 bundle。\nimport { amrtDefinition, getAmrtVersionDef } from './templates/amrt'\nimport { cmrtDefinition, getCmrtVersionDef } from './templates/cmrt'\nimport { crtDefinition, getCrtVersionDef } from './templates/crt'\nimport { emrtDefinition, getEmrtVersionDef } from './templates/emrt'\nimport type { TemplateDefinition, TemplateType, TemplateVersionDef } from './types'\n\n// ---------------------------------------------------------------------------\n// Template Definitions Map\n// ---------------------------------------------------------------------------\n\nconst templateDefinitions: Record<TemplateType, TemplateDefinition> = {\n cmrt: cmrtDefinition,\n emrt: emrtDefinition,\n crt: crtDefinition,\n amrt: amrtDefinition,\n}\n\n// ---------------------------------------------------------------------------\n// Version Definition Getters Map\n// ---------------------------------------------------------------------------\n\nconst versionDefGetters: Record<TemplateType, (versionId: string) => TemplateVersionDef> = {\n cmrt: getCmrtVersionDef,\n emrt: getEmrtVersionDef,\n crt: getCrtVersionDef,\n amrt: getAmrtVersionDef,\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * 获取所有模板类型。\n */\nexport function getTemplateTypes(): TemplateType[] {\n return ['cmrt', 'emrt', 'crt', 'amrt']\n}\n\n/**\n * 获取模板定义(元信息 + 版本列表)。\n */\nexport function getTemplateDefinition(type: TemplateType): TemplateDefinition {\n const def = templateDefinitions[type]\n if (!def) {\n throw new Error(`Unknown template type: ${type}`)\n }\n return def\n}\n\n/**\n * 获取全部模板定义。\n */\nexport function getAllTemplateDefinitions(): TemplateDefinition[] {\n return Object.values(templateDefinitions)\n}\n\n/**\n * 获取指定模板与版本的版本定义。\n */\nexport function getVersionDef(type: TemplateType, versionId: string): TemplateVersionDef {\n const getter = versionDefGetters[type]\n if (!getter) {\n throw new Error(`Unknown template type: ${type}`)\n }\n return getter(versionId)\n}\n\n/**\n * 获取模板可用版本列表。\n */\nexport function getVersions(type: TemplateType): string[] {\n const def = getTemplateDefinition(type)\n return def.versions.map((v) => v.id)\n}\n\n/**\n * 获取模板默认版本。\n */\nexport function getDefaultVersion(type: TemplateType): string {\n return getTemplateDefinition(type).defaultVersion\n}\n\n/**\n * 判断模板类型是否合法。\n */\nexport function isValidTemplateType(type: string): type is TemplateType {\n return type in templateDefinitions\n}\n\n/**\n * 判断版本是否属于该模板。\n */\nexport function isValidVersion(type: TemplateType, versionId: string): boolean {\n const versions = getVersions(type)\n return versions.includes(versionId)\n}\n\n// ---------------------------------------------------------------------------\n// Re-exports\n// ---------------------------------------------------------------------------\n\n/**\n * 模板类型与结构定义(仅类型导出)。\n */\nexport type {\n CheckerSeverity,\n CompanyQuestionDef,\n DateConfig,\n FieldDef,\n GatingCondition,\n GatingConfig,\n MetalDropdownSource,\n MineListConfig,\n MineralDef,\n MineralInputMode,\n MineralScopeConfig,\n PageDef,\n PageKey,\n ProductListConfig,\n QuestionDef,\n QuestionOption,\n ScopeOption,\n ScopeType,\n SmelterListConfig,\n TemplateDefinition,\n TemplateType,\n TemplateVersion,\n TemplateVersionDef,\n} from './types'\n","/**\n * @file app/routing/resolveTemplateRoute.ts\n * @description 路由解析工具。\n */\n\n// 说明:路由解析工具\nimport { getDefaultVersion, isValidTemplateType, isValidVersion } from '@core/registry'\nimport type { PageKey, TemplateType } from '@core/registry/types'\n\n/**\n * 导出接口类型:TemplateRouteParams。\n */\nexport interface TemplateRouteParams {\n template?: string\n version?: string\n page?: string\n}\n\n/**\n * 导出接口类型:TemplateRouteConfig。\n */\nexport interface TemplateRouteConfig {\n basePath?: string\n defaultPage?: PageKey\n}\n\n/**\n * 导出类型:TemplateRouteResolution。\n */\nexport type TemplateRouteResolution =\n | {\n kind: 'ok'\n templateType: TemplateType\n versionId: string\n pageKey: PageKey\n }\n | {\n kind: 'redirect'\n to: string\n }\n\nconst PAGE_KEYS: PageKey[] = [\n 'revision',\n 'instructions',\n 'definitions',\n 'declaration',\n 'minerals-scope',\n 'smelter-list',\n 'checker',\n 'mine-list',\n 'product-list',\n 'smelter-lookup',\n]\n\nfunction normalizeBasePath(basePath?: string) {\n if (!basePath) return ''\n const trimmed = basePath.startsWith('/') ? basePath : `/${basePath}`\n return trimmed.endsWith('/') ? trimmed.slice(0, -1) : trimmed\n}\n\n/** 判断是否为合法 PageKey。 */\nfunction isPageKey(value?: string): value is PageKey {\n return Boolean(value && PAGE_KEYS.includes(value as PageKey))\n}\n\n/** 构建模板路径(支持可选 basePath)。 */\nexport function buildTemplatePath({\n template,\n version,\n page,\n basePath,\n}: {\n template: TemplateType\n version: string\n page: PageKey\n basePath?: string\n}) {\n const base = normalizeBasePath(basePath)\n return `${base}/${template}/${version}/${page}`\n}\n\n/** 解析模板路由参数并返回有效配置或重定向。 */\nexport function resolveTemplateRoute(\n params: TemplateRouteParams,\n config: TemplateRouteConfig = {}\n): TemplateRouteResolution {\n const base = normalizeBasePath(config.basePath)\n const defaultPage = config.defaultPage ?? 'declaration'\n\n if (!params.template || !isValidTemplateType(params.template)) {\n return { kind: 'redirect', to: base || '/' }\n }\n\n const templateType = params.template as TemplateType\n const versionId = params.version\n\n if (!versionId || !isValidVersion(templateType, versionId)) {\n const defaultVersion = getDefaultVersion(templateType)\n return {\n kind: 'redirect',\n to: buildTemplatePath({\n template: templateType,\n version: defaultVersion,\n page: defaultPage,\n basePath: base || undefined,\n }),\n }\n }\n\n if (!params.page || !isPageKey(params.page)) {\n return {\n kind: 'redirect',\n to: buildTemplatePath({\n template: templateType,\n version: versionId,\n page: defaultPage,\n basePath: base || undefined,\n }),\n }\n }\n\n return {\n kind: 'ok',\n templateType,\n versionId,\n pageKey: params.page,\n }\n}\n","/**\n * @file core/rules/gating.ts\n * @description 问卷门控(gating)逻辑:根据 Q1/Q2 的回答决定后续问题是否展示。\n */\n\nimport type { GatingCondition, TemplateVersionDef } from '@core/registry/types'\n\n// ---------------------------------------------------------------------------\n// 问题回答类型\n// ---------------------------------------------------------------------------\n\n/** 问题回答集合:perMineral 时为嵌套 Record,否则为 string。 */\nexport type QuestionAnswers = Record<string, Record<string, string> | string>\n\n// ---------------------------------------------------------------------------\n// 辅助函数:统一读取指定问题、指定矿种的回答值\n// ---------------------------------------------------------------------------\n\n/**\n * 从回答集合中读取指定问题的值。\n * - perMineral 时读取 `answers[key][mineral]`\n * - 非 perMineral 时读取 `answers[key]`(string)\n * - 无法匹配时返回空字符串\n */\nfunction getAnswer(answers: QuestionAnswers, key: string, mineral?: string): string {\n const entry = answers[key]\n if (typeof entry === 'object' && mineral) return entry[mineral] ?? ''\n if (typeof entry === 'string') return entry\n return ''\n}\n\n// ---------------------------------------------------------------------------\n// 评估单个门控条件\n// ---------------------------------------------------------------------------\n\nfunction evaluateCondition(\n condition: GatingCondition,\n answers: QuestionAnswers,\n mineral?: string\n): boolean {\n switch (condition.type) {\n case 'always':\n return true\n\n case 'q1-not-no':\n // CMRT:Q1 ≠ No(未回答视为\"尚未否定\",返回 true)\n return getAnswer(answers, 'Q1', mineral) !== 'No'\n\n case 'q1-yes':\n // CMRT:Q1 = Yes\n return getAnswer(answers, 'Q1', mineral) === 'Yes'\n\n case 'q1q2-not-no':\n // CMRT:Q1 ≠ No 且 Q2 ≠ No\n return (\n getAnswer(answers, 'Q1', mineral) !== 'No' &&\n getAnswer(answers, 'Q2', mineral) !== 'No'\n )\n\n case 'q1q2-yes':\n // CMRT:Q1 = Yes 且 Q2 = Yes\n return (\n getAnswer(answers, 'Q1', mineral) === 'Yes' &&\n getAnswer(answers, 'Q2', mineral) === 'Yes'\n )\n\n case 'q1-not-negatives':\n // CRT/EMRT:Q1 不在否定选项列表中\n return !condition.negatives.includes(getAnswer(answers, 'Q1', mineral))\n\n case 'q1-not-negatives-and-q2-not-negatives':\n // EMRT:Q1 不在否定列表 且 Q2 不在否定列表\n return (\n !condition.q1Negatives.includes(getAnswer(answers, 'Q1', mineral)) &&\n !condition.q2Negatives.includes(getAnswer(answers, 'Q2', mineral))\n )\n\n default:\n return true\n }\n}\n\n// ---------------------------------------------------------------------------\n// Gating results\n// ---------------------------------------------------------------------------\n\n/** 门控计算结果:控制各区块是否展示/必填。 */\nexport interface GatingResult {\n /** Q2 对该矿种是否展示。 */\n q2Enabled: boolean\n /** Q3+ 对该矿种是否展示。 */\n laterQuestionsEnabled: boolean\n /** 公司问题区块是否展示。 */\n companyQuestionsEnabled: boolean\n /** 冶炼厂列表是否必填。 */\n smelterListRequired: boolean\n}\n\n/** 计算指定矿种的门控结果。 */\nexport function calculateGating(\n versionDef: TemplateVersionDef,\n answers: QuestionAnswers,\n mineral?: string\n): GatingResult {\n const { gating } = versionDef\n\n return {\n q2Enabled: gating.q2Gating ? evaluateCondition(gating.q2Gating, answers, mineral) : true,\n laterQuestionsEnabled: gating.laterQuestionsGating\n ? evaluateCondition(gating.laterQuestionsGating, answers, mineral)\n : true,\n companyQuestionsEnabled: gating.companyQuestionsGating\n ? evaluateCondition(gating.companyQuestionsGating, answers, mineral)\n : true,\n smelterListRequired: gating.smelterListGating\n ? evaluateCondition(gating.smelterListGating, answers, mineral)\n : true,\n }\n}\n\n/** 计算所有矿种的门控结果(返回 Map)。 */\nexport function calculateAllGating(\n versionDef: TemplateVersionDef,\n answers: QuestionAnswers,\n mineralKeys?: string[]\n): Map<string, GatingResult> {\n const result = new Map<string, GatingResult>()\n const keys =\n mineralKeys ?? versionDef.mineralScope.minerals.map((mineral) => mineral.key)\n\n keys.forEach((key) => {\n result.set(key, calculateGating(versionDef, answers, key))\n })\n\n return result\n}\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n invalid_type: \"invalid_type\",\n too_big: \"too_big\",\n too_small: \"too_small\",\n invalid_format: \"invalid_format\",\n not_multiple_of: \"not_multiple_of\",\n unrecognized_keys: \"unrecognized_keys\",\n invalid_union: \"invalid_union\",\n invalid_key: \"invalid_key\",\n invalid_element: \"invalid_element\",\n invalid_value: \"invalid_value\",\n custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n core.config({\n customError: map,\n });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","/**\n * @file core/validation/errorKeys.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\n/**\n * 常量:ERROR_KEYS。\n */\nexport const ERROR_KEYS = {\n required: 'errors.required',\n emailInvalid: 'errors.email.invalid',\n dateInvalid: 'errors.date.invalid',\n companyQuestions: {\n commentRequired: 'errors.companyQuestions.commentRequired',\n },\n checker: {\n requiredField: 'checker.requiredField',\n requiredCompanyQuestionComment: 'checker.requiredCompanyQuestionComment',\n requiredProductList: 'checker.requiredProductList',\n requiredSmelterList: 'checker.requiredSmelterList',\n invalidEmail: 'checker.invalidEmail',\n },\n minerals: {\n tooManySelected: 'errors.minerals.tooManySelected',\n selectAtLeastOne: 'errors.minerals.selectAtLeastOne',\n enterAtLeastOne: 'errors.minerals.enterAtLeastOne',\n otherRequired: 'errors.minerals.otherRequired',\n otherNotAllowed: 'errors.minerals.otherNotAllowed',\n tooMany: 'errors.minerals.tooMany',\n },\n} as const\n\ntype NestedValue<T> = T extends string\n ? T\n : { [K in keyof T]: NestedValue<T[K]> }[keyof T]\n\n/**\n * 导出类型:ErrorKey。\n */\nexport type ErrorKey = NestedValue<typeof ERROR_KEYS>\n","/**\n * @file core/validation/email.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport { z } from 'zod/v4'\n\nimport { ERROR_KEYS } from './errorKeys'\n\nconst NOT_AVAILABLE_EMAIL = 'not available'\nconst EMAIL_FORMAT_SCHEMA = z.string().refine(\n (value) => value.includes('@'),\n ERROR_KEYS.emailInvalid\n)\n\n/**\n * 判断是否为“无邮箱”占位值(PRD 允许)。\n */\nfunction isNotAvailableEmail(value: string) {\n return value.trim().toLowerCase() === NOT_AVAILABLE_EMAIL\n}\n\n/**\n * 导出常量:emailSchema。\n */\nexport const emailSchema = z.string().refine(\n (value) => isNotAvailableEmail(value) || EMAIL_FORMAT_SCHEMA.safeParse(value).success,\n ERROR_KEYS.emailInvalid\n)\n\n/**\n * 导出函数:isValidEmail。\n */\nexport function isValidEmail(value: string) {\n return emailSchema.safeParse(value).success\n}\n","/**\n * @file core/schema/index.ts\n * @description 模块导出入口。\n */\n\n// 说明:模块导出入口\nimport type { FieldDef, TemplateVersionDef } from '@core/registry/types'\nimport type { MineRow, MineralsScopeRow, ProductRow, SmelterRow } from '@core/types/tableRows'\nimport { emailSchema } from '@core/validation/email'\nimport { ERROR_KEYS } from '@core/validation/errorKeys'\nimport { z } from 'zod/v4'\n\n\n// ---------------------------------------------------------------------------\n// Primitive field schemas\n// ---------------------------------------------------------------------------\n\nconst dateSchema = z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/, ERROR_KEYS.dateInvalid)\n\n// ---------------------------------------------------------------------------\n// Build field schema from FieldDef\n// ---------------------------------------------------------------------------\n\nfunction buildFieldSchema(field: FieldDef): z.ZodType {\n let base: z.ZodType\n\n switch (field.type) {\n case 'email':\n base = emailSchema\n break\n case 'date':\n base = dateSchema\n break\n case 'text':\n case 'textarea':\n case 'select':\n default:\n base = z.string()\n break\n }\n\n // Required fields must be non-empty; optional fields can be empty string or missing\n if (field.required === true) {\n if (field.type === 'email') return emailSchema.min(1, ERROR_KEYS.required)\n if (field.type === 'date') return dateSchema.min(1, ERROR_KEYS.required)\n return z.string().min(1, ERROR_KEYS.required)\n }\n return base.optional()\n}\n\n// ---------------------------------------------------------------------------\n// Company Info schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:buildCompanyInfoSchema。\n */\nexport function buildCompanyInfoSchema(versionDef: TemplateVersionDef) {\n const shape: Record<string, z.ZodType> = {}\n for (const field of versionDef.companyInfoFields) {\n shape[field.key] = buildFieldSchema(field)\n }\n return z.object(shape)\n}\n\n// ---------------------------------------------------------------------------\n// Question Matrix schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:buildQuestionMatrixSchema。\n */\nexport function buildQuestionMatrixSchema(versionDef: TemplateVersionDef) {\n const shape: Record<string, z.ZodType> = {}\n\n for (const question of versionDef.questions) {\n if (question.perMineral) {\n // Per mineral: Q1.tantalum, Q1.tin, etc.\n const mineralShape: Record<string, z.ZodType> = {}\n for (const mineral of versionDef.mineralScope.minerals) {\n mineralShape[mineral.key] = z.string().optional()\n }\n shape[question.key] = z.object(mineralShape)\n } else {\n // Single question (CRT: not per mineral)\n shape[question.key] = z.string().optional()\n }\n }\n\n return z.object(shape)\n}\n\n// ---------------------------------------------------------------------------\n// Question Matrix comment schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:buildQuestionMatrixCommentSchema。\n */\nexport function buildQuestionMatrixCommentSchema(versionDef: TemplateVersionDef) {\n const shape: Record<string, z.ZodType> = {}\n\n for (const question of versionDef.questions) {\n if (question.perMineral) {\n const mineralShape: Record<string, z.ZodType> = {}\n for (const mineral of versionDef.mineralScope.minerals) {\n mineralShape[mineral.key] = z.string().optional()\n }\n shape[question.key] = z.object(mineralShape)\n } else {\n shape[question.key] = z.string().optional()\n }\n }\n\n return z.object(shape)\n}\n\n// ---------------------------------------------------------------------------\n// Company Questions schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:buildCompanyQuestionsSchema。\n */\nexport function buildCompanyQuestionsSchema(versionDef: TemplateVersionDef) {\n const shape: Record<string, z.ZodType> = {}\n\n for (const cq of versionDef.companyQuestions) {\n if (cq.perMineral) {\n const mineralShape: Record<string, z.ZodType> = {}\n for (const mineral of versionDef.mineralScope.minerals) {\n mineralShape[mineral.key] = z.string().optional()\n }\n shape[cq.key] = z.object(mineralShape)\n } else {\n shape[cq.key] = z.string().optional()\n }\n if (cq.hasCommentField) {\n if (cq.perMineral) {\n const mineralShape: Record<string, z.ZodType> = {}\n for (const mineral of versionDef.mineralScope.minerals) {\n mineralShape[mineral.key] = z.string().optional()\n }\n shape[`${cq.key}_comment`] = z.object(mineralShape)\n } else {\n shape[`${cq.key}_comment`] = z.string().optional()\n }\n }\n }\n\n return z.object(shape).superRefine((data, ctx) => {\n const record = data as Record<string, unknown>\n for (const cq of versionDef.companyQuestions) {\n if (!cq.hasCommentField) continue\n const requiredWhen = cq.commentRequiredWhen ?? []\n const commentKey = `${cq.key}_comment`\n\n if (cq.perMineral) {\n const valueRecord =\n record[cq.key] && typeof record[cq.key] === 'object'\n ? (record[cq.key] as Record<string, unknown>)\n : {}\n const commentRecord =\n record[commentKey] && typeof record[commentKey] === 'object'\n ? (record[commentKey] as Record<string, unknown>)\n : {}\n if (requiredWhen.length === 0) continue\n for (const mineral of versionDef.mineralScope.minerals) {\n const value = typeof valueRecord[mineral.key] === 'string'\n ? (valueRecord[mineral.key] as string)\n : ''\n if (!value || !requiredWhen.includes(value)) continue\n const commentValue = typeof commentRecord[mineral.key] === 'string'\n ? (commentRecord[mineral.key] as string)\n : ''\n if (commentValue.trim()) continue\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [commentKey, mineral.key],\n message: ERROR_KEYS.companyQuestions.commentRequired,\n })\n }\n continue\n }\n\n const value =\n typeof record[cq.key] === 'string' ? (record[cq.key] as string) : ''\n if (!value) continue\n if (!requiredWhen.includes(value)) continue\n const commentValue = record[commentKey]\n if (typeof commentValue === 'string' && commentValue.trim()) continue\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [commentKey],\n message: ERROR_KEYS.companyQuestions.commentRequired,\n })\n }\n })\n}\n\n// ---------------------------------------------------------------------------\n// Smelter List row schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:buildSmelterRowSchema。\n */\nexport function buildSmelterRowSchema(versionDef: TemplateVersionDef) {\n const shape: Record<string, z.ZodType> = {\n metal: z.string().min(1),\n smelterLookup: z.string().optional(),\n smelterName: z.string().optional(),\n smelterCountry: z.string().optional(),\n smelterIdentification: z.string().optional(),\n sourceId: z.string().optional(),\n smelterStreet: z.string().optional(),\n smelterCity: z.string().optional(),\n smelterState: z.string().optional(),\n smelterContactName: z.string().optional(),\n smelterContactEmail: z.string().optional(),\n proposedNextSteps: z.string().optional(),\n mineName: z.string().optional(),\n mineCountry: z.string().optional(),\n recycledScrap: z.string().optional(),\n comments: z.string().optional(),\n }\n\n if (versionDef.smelterList.hasCombinedColumn) {\n shape.combinedMetal = z.string().optional()\n shape.combinedSmelter = z.string().optional()\n }\n\n if (versionDef.smelterList.hasIdColumn) {\n shape.smelterId = z.string().optional()\n }\n\n return z.object(shape)\n}\n\n// ---------------------------------------------------------------------------\n// Mine List row schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:buildMineRowSchema。\n */\nexport function buildMineRowSchema(versionDef: TemplateVersionDef) {\n if (!versionDef.mineList.available) return null\n\n return z.object({\n metal: z.string().min(1),\n mineName: z.string().optional(),\n mineCountry: z.string().optional(),\n mineId: z.string().optional(),\n mineIdSource: z.string().optional(),\n mineStreet: z.string().optional(),\n mineCity: z.string().optional(),\n mineProvince: z.string().optional(),\n mineDistrict: z.string().optional(),\n mineContactName: z.string().optional(),\n mineContactEmail: z.string().optional(),\n proposedNextSteps: z.string().optional(),\n smelterName: z.string().optional(),\n comments: z.string().optional(),\n })\n}\n\n// ---------------------------------------------------------------------------\n// Product List row schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:buildProductRowSchema。\n */\nexport function buildProductRowSchema(_versionDef: TemplateVersionDef) {\n void _versionDef\n const shape: Record<string, z.ZodType> = {\n productNumber: z.string().optional(),\n productName: z.string().optional(),\n comments: z.string().optional(),\n }\n\n // requester 字段对部分模板版本在 UI/Excel 中不可见,但 legacy JSON 可能携带;\n // 为确保导入后不被 schema strip,统一保留为可选字段。\n shape.requesterNumber = z.string().optional()\n shape.requesterName = z.string().optional()\n\n return z.object(shape)\n}\n\n// ---------------------------------------------------------------------------\n// Full form schema\n// ---------------------------------------------------------------------------\n\n/**\n * 导出接口类型:FormData。\n */\nexport interface FormData {\n companyInfo: Record<string, string>\n selectedMinerals: string[]\n customMinerals: string[]\n questions: Record<string, Record<string, string> | string>\n questionComments: Record<string, Record<string, string> | string>\n companyQuestions: Record<string, Record<string, string> | string>\n mineralsScope: MineralsScopeRow[]\n smelterList: SmelterRow[]\n mineList: MineRow[]\n productList: ProductRow[]\n}\n\n// ---------------------------------------------------------------------------\n// buildFormSchema 的 superRefine 拆分\n// ---------------------------------------------------------------------------\n\n/**\n * superRefine 回调的 data 参数类型:Zod 推断出 Record<string, unknown> 而非精确类型;\n * 提取函数使用该 alias 避免与 FormData 接口冲突。\n */\ntype SuperRefineData = {\n selectedMinerals: string[]\n customMinerals: string[]\n mineralsScope: Array<{ id: string; mineral: string; reason: string }>\n}\n\n/** 校验 dynamic-dropdown 模式下的矿产选择(EMRT/AMRT)。 */\nfunction validateDynamicDropdownMinerals(\n data: SuperRefineData,\n ctx: z.RefinementCtx,\n versionDef: TemplateVersionDef\n) {\n if (versionDef.mineralScope.mode !== 'dynamic-dropdown') return\n\n const maxCount = versionDef.mineralScope.maxCount\n if (maxCount && data.selectedMinerals.length > maxCount) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['selectedMinerals'],\n message: ERROR_KEYS.minerals.tooManySelected,\n })\n }\n if (data.selectedMinerals.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['selectedMinerals'],\n message: ERROR_KEYS.minerals.selectAtLeastOne,\n })\n }\n if (versionDef.templateType !== 'amrt') return\n\n const otherSelected = data.selectedMinerals.includes('other')\n const otherNames = data.customMinerals.map((v) => v.trim()).filter(Boolean)\n const baseCount = data.selectedMinerals.filter((k) => k !== 'other').length\n if (maxCount && baseCount + otherNames.length > maxCount) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['selectedMinerals'],\n message: ERROR_KEYS.minerals.tooManySelected,\n })\n }\n if (otherSelected && otherNames.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['customMinerals', 0],\n message: ERROR_KEYS.minerals.otherRequired,\n })\n }\n if (!otherSelected && otherNames.length > 0) {\n otherNames.forEach((_, index) => {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['customMinerals', index],\n message: ERROR_KEYS.minerals.otherNotAllowed,\n })\n })\n }\n}\n\n/** 校验 free-text 模式下的矿产输入(CRT 等)。 */\nfunction validateFreeTextMinerals(\n data: SuperRefineData,\n ctx: z.RefinementCtx,\n versionDef: TemplateVersionDef\n) {\n if (versionDef.mineralScope.mode !== 'free-text') return\n\n const maxCount = versionDef.mineralScope.maxCount ?? data.customMinerals.length\n const hasAny = data.customMinerals.some((v) => v.trim())\n if (!hasAny) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['customMinerals'],\n message: ERROR_KEYS.minerals.enterAtLeastOne,\n })\n }\n if (maxCount !== undefined && data.customMinerals.length > maxCount) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['customMinerals'],\n message: ERROR_KEYS.minerals.tooMany,\n })\n }\n}\n\n/** 校验 AMRT 的 mineralsScope 行(mineral 和 reason 必须成对填写)。 */\nfunction validateAmrtMineralsScopeRows(\n data: SuperRefineData,\n ctx: z.RefinementCtx,\n versionDef: TemplateVersionDef\n) {\n if (versionDef.templateType !== 'amrt') return\n\n data.mineralsScope.forEach((row, index) => {\n const mineral = row.mineral?.trim()\n const reason = row.reason?.trim()\n if (mineral && !reason) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['mineralsScope', index, 'reason'],\n message: ERROR_KEYS.required,\n })\n }\n if (!mineral && reason) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['mineralsScope', index, 'mineral'],\n message: ERROR_KEYS.required,\n })\n }\n })\n}\n\n/** 构建完整表单的 Zod schema(含跨字段校验)。 */\nexport function buildFormSchema(versionDef: TemplateVersionDef): z.ZodType<FormData, FormData> {\n const mineRowSchema = buildMineRowSchema(versionDef) ?? z.object({})\n const mineralsScopeRowSchema = z.object({\n id: z.string(),\n mineral: z.string(),\n reason: z.string(),\n })\n const schema = z\n .object({\n companyInfo: buildCompanyInfoSchema(versionDef),\n selectedMinerals: z.array(z.string()),\n customMinerals: z.array(z.string()),\n questions: buildQuestionMatrixSchema(versionDef),\n questionComments: buildQuestionMatrixCommentSchema(versionDef),\n companyQuestions: buildCompanyQuestionsSchema(versionDef),\n mineralsScope: z.array(mineralsScopeRowSchema),\n smelterList: z.array(buildSmelterRowSchema(versionDef)),\n mineList: z.array(mineRowSchema),\n productList: z.array(buildProductRowSchema(versionDef)),\n })\n .superRefine((data, ctx) => {\n validateDynamicDropdownMinerals(data, ctx, versionDef)\n validateFreeTextMinerals(data, ctx, versionDef)\n validateAmrtMineralsScopeRows(data, ctx, versionDef)\n })\n\n return schema as unknown as z.ZodType<FormData, FormData>\n}\n\n/**\n * 导出类型:FormDataType。\n */\nexport type FormDataType = z.infer<ReturnType<typeof buildFormSchema>>\n","/**\n * @file core/template/strings.ts\n * @description 字符串工具集:跨模块共享的通用字符串处理函数。\n */\n\n// ---------------------------------------------------------------------------\n// humanizeKey —— 将 kebab-case / snake_case key 转为人类可读的 Title Case\n// ---------------------------------------------------------------------------\n\n/**\n * 将 key(kebab-case 或 snake_case)转为人类可读的展示形式。\n *\n * @example\n * humanizeKey('rare-earth-elements') // → 'Rare Earth Elements'\n * humanizeKey('cobalt') // → 'Cobalt'\n * humanizeKey('other-0') // → 'Other 0'\n */\nexport function humanizeKey(value: string): string {\n return value\n .split(/[-_]/)\n .map((part) => (part ? part[0]!.toUpperCase() + part.slice(1) : part))\n .join(' ')\n}\n\n// ---------------------------------------------------------------------------\n// deepCloneJson —— 深拷贝 JSON 兼容对象\n// ---------------------------------------------------------------------------\n\n/**\n * 深拷贝一个 JSON 可序列化的值。\n * 优先使用 `structuredClone`(现代浏览器 & Node 17+),回退到 JSON 序列化。\n */\nexport function deepCloneJson<T>(value: T): T {\n if (typeof structuredClone === 'function') {\n return structuredClone(value)\n }\n return JSON.parse(JSON.stringify(value)) as T\n}\n","/**\n * @file core/template/formDefaults.ts\n * @description 基于模板定义构造空表单默认值。\n *\n * 该函数在两处消费:\n * - templateStore.tsx(zustand store 初始化时)\n * - toInternal.ts(将 legacy 数据导入时作为 base state)\n *\n * 提取到此处以消除重复实现。\n */\n\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport type { FormData } from '@core/schema'\n\nimport { humanizeKey } from './strings'\n\n// ---------------------------------------------------------------------------\n// 构造空表单默认值\n// ---------------------------------------------------------------------------\n\n/**\n * 根据模板版本定义,构造一份所有字段为空值的表单状态。\n *\n * - companyInfo:所有字段初始为空字符串\n * - questions / questionComments:按 perMineral 分为 Record<矿种, ''> 或纯字符串 ''\n * - companyQuestions:同 questions 逻辑,额外处理 commentField\n * - selectedMinerals:fixed 模式全选,其余为空\n * - customMinerals:free-text 模式使用 defaults 或 humanizeKey 生成\n * - 列表字段:初始为空数组\n */\nexport function createEmptyFormData(versionDef: TemplateVersionDef): FormData {\n // ── 公司信息:每个字段初始为空字符串 ──\n const companyInfo: Record<string, string> = {}\n for (const field of versionDef.companyInfoFields) {\n companyInfo[field.key] = ''\n }\n\n // ── 问题 & 问题备注 ──\n const questions: Record<string, Record<string, string> | string> = {}\n const questionComments: Record<string, Record<string, string> | string> = {}\n for (const question of versionDef.questions) {\n if (question.perMineral) {\n // perMineral 问题:每个矿种一个空字符串\n const perMineral: Record<string, string> = {}\n for (const mineral of versionDef.mineralScope.minerals) {\n perMineral[mineral.key] = ''\n }\n questions[question.key] = perMineral\n questionComments[question.key] = { ...perMineral }\n } else {\n questions[question.key] = ''\n questionComments[question.key] = ''\n }\n }\n\n // ── 公司级问题 ──\n const companyQuestions: Record<string, Record<string, string> | string> = {}\n for (const cq of versionDef.companyQuestions) {\n if (cq.perMineral) {\n const perMineral: Record<string, string> = {}\n for (const mineral of versionDef.mineralScope.minerals) {\n perMineral[mineral.key] = ''\n }\n companyQuestions[cq.key] = perMineral\n } else {\n companyQuestions[cq.key] = ''\n }\n // 带 comment 字段的公司问题,额外初始化 comment 键\n if (cq.hasCommentField) {\n if (cq.perMineral) {\n const perMineralComment: Record<string, string> = {}\n for (const mineral of versionDef.mineralScope.minerals) {\n perMineralComment[mineral.key] = ''\n }\n companyQuestions[`${cq.key}_comment`] = perMineralComment\n } else {\n companyQuestions[`${cq.key}_comment`] = ''\n }\n }\n }\n\n // ── 矿种选择 & 自定义矿种名 ──\n const allMinerals = versionDef.mineralScope.minerals.map((m) => m.key)\n const selectedMinerals = versionDef.mineralScope.mode === 'fixed' ? allMinerals : []\n const customMinerals =\n versionDef.mineralScope.mode === 'free-text'\n ? allMinerals.map((mineral, index) => {\n const defaults = versionDef.mineralScope.defaultCustomMinerals\n if (defaults && defaults.length > 0) {\n return defaults[index] ?? humanizeKey(mineral)\n }\n return humanizeKey(mineral)\n })\n : []\n\n return {\n companyInfo,\n selectedMinerals,\n customMinerals,\n questions,\n questionComments,\n companyQuestions,\n mineralsScope: [],\n smelterList: [],\n mineList: [],\n productList: [],\n }\n}\n","// src/utils/env.ts\nvar NOTHING = Symbol.for(\"immer-nothing\");\nvar DRAFTABLE = Symbol.for(\"immer-draftable\");\nvar DRAFT_STATE = Symbol.for(\"immer-state\");\n\n// src/utils/errors.ts\nvar errors = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(plugin) {\n return `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`;\n },\n function(thing) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(data) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + data;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(thing) {\n return `'current' expects a draft, got: ${thing}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(thing) {\n return `'original' expects a draft, got: ${thing}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction die(error, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const e = errors[error];\n const msg = isFunction(e) ? e.apply(null, args) : e;\n throw new Error(`[Immer] ${msg}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\n\n// src/utils/common.ts\nvar O = Object;\nvar getPrototypeOf = O.getPrototypeOf;\nvar CONSTRUCTOR = \"constructor\";\nvar PROTOTYPE = \"prototype\";\nvar CONFIGURABLE = \"configurable\";\nvar ENUMERABLE = \"enumerable\";\nvar WRITABLE = \"writable\";\nvar VALUE = \"value\";\nvar isDraft = (value) => !!value && !!value[DRAFT_STATE];\nfunction isDraftable(value) {\n if (!value)\n return false;\n return isPlainObject(value) || isArray(value) || !!value[DRAFTABLE] || !!value[CONSTRUCTOR]?.[DRAFTABLE] || isMap(value) || isSet(value);\n}\nvar objectCtorString = O[PROTOTYPE][CONSTRUCTOR].toString();\nvar cachedCtorStrings = /* @__PURE__ */ new WeakMap();\nfunction isPlainObject(value) {\n if (!value || !isObjectish(value))\n return false;\n const proto = getPrototypeOf(value);\n if (proto === null || proto === O[PROTOTYPE])\n return true;\n const Ctor = O.hasOwnProperty.call(proto, CONSTRUCTOR) && proto[CONSTRUCTOR];\n if (Ctor === Object)\n return true;\n if (!isFunction(Ctor))\n return false;\n let ctorString = cachedCtorStrings.get(Ctor);\n if (ctorString === void 0) {\n ctorString = Function.toString.call(Ctor);\n cachedCtorStrings.set(Ctor, ctorString);\n }\n return ctorString === objectCtorString;\n}\nfunction original(value) {\n if (!isDraft(value))\n die(15, value);\n return value[DRAFT_STATE].base_;\n}\nfunction each(obj, iter, strict = true) {\n if (getArchtype(obj) === 0 /* Object */) {\n const keys = strict ? Reflect.ownKeys(obj) : O.keys(obj);\n keys.forEach((key) => {\n iter(key, obj[key], obj);\n });\n } else {\n obj.forEach((entry, index) => iter(index, entry, obj));\n }\n}\nfunction getArchtype(thing) {\n const state = thing[DRAFT_STATE];\n return state ? state.type_ : isArray(thing) ? 1 /* Array */ : isMap(thing) ? 2 /* Map */ : isSet(thing) ? 3 /* Set */ : 0 /* Object */;\n}\nvar has = (thing, prop, type = getArchtype(thing)) => type === 2 /* Map */ ? thing.has(prop) : O[PROTOTYPE].hasOwnProperty.call(thing, prop);\nvar get = (thing, prop, type = getArchtype(thing)) => (\n // @ts-ignore\n type === 2 /* Map */ ? thing.get(prop) : thing[prop]\n);\nvar set = (thing, propOrOldValue, value, type = getArchtype(thing)) => {\n if (type === 2 /* Map */)\n thing.set(propOrOldValue, value);\n else if (type === 3 /* Set */) {\n thing.add(value);\n } else\n thing[propOrOldValue] = value;\n};\nfunction is(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\nvar isArray = Array.isArray;\nvar isMap = (target) => target instanceof Map;\nvar isSet = (target) => target instanceof Set;\nvar isObjectish = (target) => typeof target === \"object\";\nvar isFunction = (target) => typeof target === \"function\";\nvar isBoolean = (target) => typeof target === \"boolean\";\nfunction isArrayIndex(value) {\n const n = +value;\n return Number.isInteger(n) && String(n) === value;\n}\nvar getProxyDraft = (value) => {\n if (!isObjectish(value))\n return null;\n return value?.[DRAFT_STATE];\n};\nvar latest = (state) => state.copy_ || state.base_;\nvar getValue = (value) => {\n const proxyDraft = getProxyDraft(value);\n return proxyDraft ? proxyDraft.copy_ ?? proxyDraft.base_ : value;\n};\nvar getFinalValue = (state) => state.modified_ ? state.copy_ : state.base_;\nfunction shallowCopy(base, strict) {\n if (isMap(base)) {\n return new Map(base);\n }\n if (isSet(base)) {\n return new Set(base);\n }\n if (isArray(base))\n return Array[PROTOTYPE].slice.call(base);\n const isPlain = isPlainObject(base);\n if (strict === true || strict === \"class_only\" && !isPlain) {\n const descriptors = O.getOwnPropertyDescriptors(base);\n delete descriptors[DRAFT_STATE];\n let keys = Reflect.ownKeys(descriptors);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const desc = descriptors[key];\n if (desc[WRITABLE] === false) {\n desc[WRITABLE] = true;\n desc[CONFIGURABLE] = true;\n }\n if (desc.get || desc.set)\n descriptors[key] = {\n [CONFIGURABLE]: true,\n [WRITABLE]: true,\n // could live with !!desc.set as well here...\n [ENUMERABLE]: desc[ENUMERABLE],\n [VALUE]: base[key]\n };\n }\n return O.create(getPrototypeOf(base), descriptors);\n } else {\n const proto = getPrototypeOf(base);\n if (proto !== null && isPlain) {\n return { ...base };\n }\n const obj = O.create(proto);\n return O.assign(obj, base);\n }\n}\nfunction freeze(obj, deep = false) {\n if (isFrozen(obj) || isDraft(obj) || !isDraftable(obj))\n return obj;\n if (getArchtype(obj) > 1) {\n O.defineProperties(obj, {\n set: dontMutateMethodOverride,\n add: dontMutateMethodOverride,\n clear: dontMutateMethodOverride,\n delete: dontMutateMethodOverride\n });\n }\n O.freeze(obj);\n if (deep)\n each(\n obj,\n (_key, value) => {\n freeze(value, true);\n },\n false\n );\n return obj;\n}\nfunction dontMutateFrozenCollections() {\n die(2);\n}\nvar dontMutateMethodOverride = {\n [VALUE]: dontMutateFrozenCollections\n};\nfunction isFrozen(obj) {\n if (obj === null || !isObjectish(obj))\n return true;\n return O.isFrozen(obj);\n}\n\n// src/utils/plugins.ts\nvar PluginMapSet = \"MapSet\";\nvar PluginPatches = \"Patches\";\nvar PluginArrayMethods = \"ArrayMethods\";\nvar plugins = {};\nfunction getPlugin(pluginKey) {\n const plugin = plugins[pluginKey];\n if (!plugin) {\n die(0, pluginKey);\n }\n return plugin;\n}\nvar isPluginLoaded = (pluginKey) => !!plugins[pluginKey];\nfunction loadPlugin(pluginKey, implementation) {\n if (!plugins[pluginKey])\n plugins[pluginKey] = implementation;\n}\n\n// src/core/scope.ts\nvar currentScope;\nvar getCurrentScope = () => currentScope;\nvar createScope = (parent_, immer_) => ({\n drafts_: [],\n parent_,\n immer_,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: true,\n unfinalizedDrafts_: 0,\n handledSet_: /* @__PURE__ */ new Set(),\n processedForPatches_: /* @__PURE__ */ new Set(),\n mapSetPlugin_: isPluginLoaded(PluginMapSet) ? getPlugin(PluginMapSet) : void 0,\n arrayMethodsPlugin_: isPluginLoaded(PluginArrayMethods) ? getPlugin(PluginArrayMethods) : void 0\n});\nfunction usePatchesInScope(scope, patchListener) {\n if (patchListener) {\n scope.patchPlugin_ = getPlugin(PluginPatches);\n scope.patches_ = [];\n scope.inversePatches_ = [];\n scope.patchListener_ = patchListener;\n }\n}\nfunction revokeScope(scope) {\n leaveScope(scope);\n scope.drafts_.forEach(revokeDraft);\n scope.drafts_ = null;\n}\nfunction leaveScope(scope) {\n if (scope === currentScope) {\n currentScope = scope.parent_;\n }\n}\nvar enterScope = (immer2) => currentScope = createScope(currentScope, immer2);\nfunction revokeDraft(draft) {\n const state = draft[DRAFT_STATE];\n if (state.type_ === 0 /* Object */ || state.type_ === 1 /* Array */)\n state.revoke_();\n else\n state.revoked_ = true;\n}\n\n// src/core/finalize.ts\nfunction processResult(result, scope) {\n scope.unfinalizedDrafts_ = scope.drafts_.length;\n const baseDraft = scope.drafts_[0];\n const isReplaced = result !== void 0 && result !== baseDraft;\n if (isReplaced) {\n if (baseDraft[DRAFT_STATE].modified_) {\n revokeScope(scope);\n die(4);\n }\n if (isDraftable(result)) {\n result = finalize(scope, result);\n }\n const { patchPlugin_ } = scope;\n if (patchPlugin_) {\n patchPlugin_.generateReplacementPatches_(\n baseDraft[DRAFT_STATE].base_,\n result,\n scope\n );\n }\n } else {\n result = finalize(scope, baseDraft);\n }\n maybeFreeze(scope, result, true);\n revokeScope(scope);\n if (scope.patches_) {\n scope.patchListener_(scope.patches_, scope.inversePatches_);\n }\n return result !== NOTHING ? result : void 0;\n}\nfunction finalize(rootScope, value) {\n if (isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n if (!state) {\n const finalValue = handleValue(value, rootScope.handledSet_, rootScope);\n return finalValue;\n }\n if (!isSameScope(state, rootScope)) {\n return value;\n }\n if (!state.modified_) {\n return state.base_;\n }\n if (!state.finalized_) {\n const { callbacks_ } = state;\n if (callbacks_) {\n while (callbacks_.length > 0) {\n const callback = callbacks_.pop();\n callback(rootScope);\n }\n }\n generatePatchesAndFinalize(state, rootScope);\n }\n return state.copy_;\n}\nfunction maybeFreeze(scope, value, deep = false) {\n if (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n freeze(value, deep);\n }\n}\nfunction markStateFinalized(state) {\n state.finalized_ = true;\n state.scope_.unfinalizedDrafts_--;\n}\nvar isSameScope = (state, rootScope) => state.scope_ === rootScope;\nvar EMPTY_LOCATIONS_RESULT = [];\nfunction updateDraftInParent(parent, draftValue, finalizedValue, originalKey) {\n const parentCopy = latest(parent);\n const parentType = parent.type_;\n if (originalKey !== void 0) {\n const currentValue = get(parentCopy, originalKey, parentType);\n if (currentValue === draftValue) {\n set(parentCopy, originalKey, finalizedValue, parentType);\n return;\n }\n }\n if (!parent.draftLocations_) {\n const draftLocations = parent.draftLocations_ = /* @__PURE__ */ new Map();\n each(parentCopy, (key, value) => {\n if (isDraft(value)) {\n const keys = draftLocations.get(value) || [];\n keys.push(key);\n draftLocations.set(value, keys);\n }\n });\n }\n const locations = parent.draftLocations_.get(draftValue) ?? EMPTY_LOCATIONS_RESULT;\n for (const location of locations) {\n set(parentCopy, location, finalizedValue, parentType);\n }\n}\nfunction registerChildFinalizationCallback(parent, child, key) {\n parent.callbacks_.push(function childCleanup(rootScope) {\n const state = child;\n if (!state || !isSameScope(state, rootScope)) {\n return;\n }\n rootScope.mapSetPlugin_?.fixSetContents(state);\n const finalizedValue = getFinalValue(state);\n updateDraftInParent(parent, state.draft_ ?? state, finalizedValue, key);\n generatePatchesAndFinalize(state, rootScope);\n });\n}\nfunction generatePatchesAndFinalize(state, rootScope) {\n const shouldFinalize = state.modified_ && !state.finalized_ && (state.type_ === 3 /* Set */ || state.type_ === 1 /* Array */ && state.allIndicesReassigned_ || (state.assigned_?.size ?? 0) > 0);\n if (shouldFinalize) {\n const { patchPlugin_ } = rootScope;\n if (patchPlugin_) {\n const basePath = patchPlugin_.getPath(state);\n if (basePath) {\n patchPlugin_.generatePatches_(state, basePath, rootScope);\n }\n }\n markStateFinalized(state);\n }\n}\nfunction handleCrossReference(target, key, value) {\n const { scope_ } = target;\n if (isDraft(value)) {\n const state = value[DRAFT_STATE];\n if (isSameScope(state, scope_)) {\n state.callbacks_.push(function crossReferenceCleanup() {\n prepareCopy(target);\n const finalizedValue = getFinalValue(state);\n updateDraftInParent(target, value, finalizedValue, key);\n });\n }\n } else if (isDraftable(value)) {\n target.callbacks_.push(function nestedDraftCleanup() {\n const targetCopy = latest(target);\n if (target.type_ === 3 /* Set */) {\n if (targetCopy.has(value)) {\n handleValue(value, scope_.handledSet_, scope_);\n }\n } else {\n if (get(targetCopy, key, target.type_) === value) {\n if (scope_.drafts_.length > 1 && (target.assigned_.get(key) ?? false) === true && target.copy_) {\n handleValue(\n get(target.copy_, key, target.type_),\n scope_.handledSet_,\n scope_\n );\n }\n }\n }\n });\n }\n}\nfunction handleValue(target, handledSet, rootScope) {\n if (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n return target;\n }\n if (isDraft(target) || handledSet.has(target) || !isDraftable(target) || isFrozen(target)) {\n return target;\n }\n handledSet.add(target);\n each(target, (key, value) => {\n if (isDraft(value)) {\n const state = value[DRAFT_STATE];\n if (isSameScope(state, rootScope)) {\n const updatedValue = getFinalValue(state);\n set(target, key, updatedValue, target.type_);\n markStateFinalized(state);\n }\n } else if (isDraftable(value)) {\n handleValue(value, handledSet, rootScope);\n }\n });\n return target;\n}\n\n// src/core/proxy.ts\nfunction createProxyProxy(base, parent) {\n const baseIsArray = isArray(base);\n const state = {\n type_: baseIsArray ? 1 /* Array */ : 0 /* Object */,\n // Track which produce call this is associated with.\n scope_: parent ? parent.scope_ : getCurrentScope(),\n // True for both shallow and deep changes.\n modified_: false,\n // Used during finalization.\n finalized_: false,\n // Track which properties have been assigned (true) or deleted (false).\n // actually instantiated in `prepareCopy()`\n assigned_: void 0,\n // The parent draft state.\n parent_: parent,\n // The base state.\n base_: base,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: false,\n // `callbacks` actually gets assigned in `createProxy`\n callbacks_: void 0\n };\n let target = state;\n let traps = objectTraps;\n if (baseIsArray) {\n target = [state];\n traps = arrayTraps;\n }\n const { revoke, proxy } = Proxy.revocable(target, traps);\n state.draft_ = proxy;\n state.revoke_ = revoke;\n return [proxy, state];\n}\nvar objectTraps = {\n get(state, prop) {\n if (prop === DRAFT_STATE)\n return state;\n let arrayPlugin = state.scope_.arrayMethodsPlugin_;\n const isArrayWithStringProp = state.type_ === 1 /* Array */ && typeof prop === \"string\";\n if (isArrayWithStringProp) {\n if (arrayPlugin?.isArrayOperationMethod(prop)) {\n return arrayPlugin.createMethodInterceptor(state, prop);\n }\n }\n const source = latest(state);\n if (!has(source, prop, state.type_)) {\n return readPropFromProto(state, source, prop);\n }\n const value = source[prop];\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (isArrayWithStringProp && state.operationMethod && arrayPlugin?.isMutatingArrayMethod(\n state.operationMethod\n ) && isArrayIndex(prop)) {\n return value;\n }\n if (value === peek(state.base_, prop)) {\n prepareCopy(state);\n const childKey = state.type_ === 1 /* Array */ ? +prop : prop;\n const childDraft = createProxy(state.scope_, value, state, childKey);\n return state.copy_[childKey] = childDraft;\n }\n return value;\n },\n has(state, prop) {\n return prop in latest(state);\n },\n ownKeys(state) {\n return Reflect.ownKeys(latest(state));\n },\n set(state, prop, value) {\n const desc = getDescriptorFromProto(latest(state), prop);\n if (desc?.set) {\n desc.set.call(state.draft_, value);\n return true;\n }\n if (!state.modified_) {\n const current2 = peek(latest(state), prop);\n const currentState = current2?.[DRAFT_STATE];\n if (currentState && currentState.base_ === value) {\n state.copy_[prop] = value;\n state.assigned_.set(prop, false);\n return true;\n }\n if (is(value, current2) && (value !== void 0 || has(state.base_, prop, state.type_)))\n return true;\n prepareCopy(state);\n markChanged(state);\n }\n if (state.copy_[prop] === value && // special case: handle new props with value 'undefined'\n (value !== void 0 || prop in state.copy_) || // special case: NaN\n Number.isNaN(value) && Number.isNaN(state.copy_[prop]))\n return true;\n state.copy_[prop] = value;\n state.assigned_.set(prop, true);\n handleCrossReference(state, prop, value);\n return true;\n },\n deleteProperty(state, prop) {\n prepareCopy(state);\n if (peek(state.base_, prop) !== void 0 || prop in state.base_) {\n state.assigned_.set(prop, false);\n markChanged(state);\n } else {\n state.assigned_.delete(prop);\n }\n if (state.copy_) {\n delete state.copy_[prop];\n }\n return true;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(state, prop) {\n const owner = latest(state);\n const desc = Reflect.getOwnPropertyDescriptor(owner, prop);\n if (!desc)\n return desc;\n return {\n [WRITABLE]: true,\n [CONFIGURABLE]: state.type_ !== 1 /* Array */ || prop !== \"length\",\n [ENUMERABLE]: desc[ENUMERABLE],\n [VALUE]: owner[prop]\n };\n },\n defineProperty() {\n die(11);\n },\n getPrototypeOf(state) {\n return getPrototypeOf(state.base_);\n },\n setPrototypeOf() {\n die(12);\n }\n};\nvar arrayTraps = {};\nfor (let key in objectTraps) {\n let fn = objectTraps[key];\n arrayTraps[key] = function() {\n const args = arguments;\n args[0] = args[0][0];\n return fn.apply(this, args);\n };\n}\narrayTraps.deleteProperty = function(state, prop) {\n if (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop)))\n die(13);\n return arrayTraps.set.call(this, state, prop, void 0);\n};\narrayTraps.set = function(state, prop, value) {\n if (process.env.NODE_ENV !== \"production\" && prop !== \"length\" && isNaN(parseInt(prop)))\n die(14);\n return objectTraps.set.call(this, state[0], prop, value, state[0]);\n};\nfunction peek(draft, prop) {\n const state = draft[DRAFT_STATE];\n const source = state ? latest(state) : draft;\n return source[prop];\n}\nfunction readPropFromProto(state, source, prop) {\n const desc = getDescriptorFromProto(source, prop);\n return desc ? VALUE in desc ? desc[VALUE] : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n desc.get?.call(state.draft_)\n ) : void 0;\n}\nfunction getDescriptorFromProto(source, prop) {\n if (!(prop in source))\n return void 0;\n let proto = getPrototypeOf(source);\n while (proto) {\n const desc = Object.getOwnPropertyDescriptor(proto, prop);\n if (desc)\n return desc;\n proto = getPrototypeOf(proto);\n }\n return void 0;\n}\nfunction markChanged(state) {\n if (!state.modified_) {\n state.modified_ = true;\n if (state.parent_) {\n markChanged(state.parent_);\n }\n }\n}\nfunction prepareCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = shallowCopy(\n state.base_,\n state.scope_.immer_.useStrictShallowCopy_\n );\n }\n}\n\n// src/core/immerClass.ts\nvar Immer2 = class {\n constructor(config) {\n this.autoFreeze_ = true;\n this.useStrictShallowCopy_ = false;\n this.useStrictIteration_ = false;\n /**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\n this.produce = (base, recipe, patchListener) => {\n if (isFunction(base) && !isFunction(recipe)) {\n const defaultBase = recipe;\n recipe = base;\n const self = this;\n return function curriedProduce(base2 = defaultBase, ...args) {\n return self.produce(base2, (draft) => recipe.call(this, draft, ...args));\n };\n }\n if (!isFunction(recipe))\n die(6);\n if (patchListener !== void 0 && !isFunction(patchListener))\n die(7);\n let result;\n if (isDraftable(base)) {\n const scope = enterScope(this);\n const proxy = createProxy(scope, base, void 0);\n let hasError = true;\n try {\n result = recipe(proxy);\n hasError = false;\n } finally {\n if (hasError)\n revokeScope(scope);\n else\n leaveScope(scope);\n }\n usePatchesInScope(scope, patchListener);\n return processResult(result, scope);\n } else if (!base || !isObjectish(base)) {\n result = recipe(base);\n if (result === void 0)\n result = base;\n if (result === NOTHING)\n result = void 0;\n if (this.autoFreeze_)\n freeze(result, true);\n if (patchListener) {\n const p = [];\n const ip = [];\n getPlugin(PluginPatches).generateReplacementPatches_(base, result, {\n patches_: p,\n inversePatches_: ip\n });\n patchListener(p, ip);\n }\n return result;\n } else\n die(1, base);\n };\n this.produceWithPatches = (base, recipe) => {\n if (isFunction(base)) {\n return (state, ...args) => this.produceWithPatches(state, (draft) => base(draft, ...args));\n }\n let patches, inversePatches;\n const result = this.produce(base, recipe, (p, ip) => {\n patches = p;\n inversePatches = ip;\n });\n return [result, patches, inversePatches];\n };\n if (isBoolean(config?.autoFreeze))\n this.setAutoFreeze(config.autoFreeze);\n if (isBoolean(config?.useStrictShallowCopy))\n this.setUseStrictShallowCopy(config.useStrictShallowCopy);\n if (isBoolean(config?.useStrictIteration))\n this.setUseStrictIteration(config.useStrictIteration);\n }\n createDraft(base) {\n if (!isDraftable(base))\n die(8);\n if (isDraft(base))\n base = current(base);\n const scope = enterScope(this);\n const proxy = createProxy(scope, base, void 0);\n proxy[DRAFT_STATE].isManual_ = true;\n leaveScope(scope);\n return proxy;\n }\n finishDraft(draft, patchListener) {\n const state = draft && draft[DRAFT_STATE];\n if (!state || !state.isManual_)\n die(9);\n const { scope_: scope } = state;\n usePatchesInScope(scope, patchListener);\n return processResult(void 0, scope);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(value) {\n this.autoFreeze_ = value;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(value) {\n this.useStrictShallowCopy_ = value;\n }\n /**\n * Pass false to use faster iteration that skips non-enumerable properties\n * but still handles symbols for compatibility.\n *\n * By default, strict iteration is enabled (includes all own properties).\n */\n setUseStrictIteration(value) {\n this.useStrictIteration_ = value;\n }\n shouldUseStrictIteration() {\n return this.useStrictIteration_;\n }\n applyPatches(base, patches) {\n let i;\n for (i = patches.length - 1; i >= 0; i--) {\n const patch = patches[i];\n if (patch.path.length === 0 && patch.op === \"replace\") {\n base = patch.value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const applyPatchesImpl = getPlugin(PluginPatches).applyPatches_;\n if (isDraft(base)) {\n return applyPatchesImpl(base, patches);\n }\n return this.produce(\n base,\n (draft) => applyPatchesImpl(draft, patches)\n );\n }\n};\nfunction createProxy(rootScope, value, parent, key) {\n const [draft, state] = isMap(value) ? getPlugin(PluginMapSet).proxyMap_(value, parent) : isSet(value) ? getPlugin(PluginMapSet).proxySet_(value, parent) : createProxyProxy(value, parent);\n const scope = parent?.scope_ ?? getCurrentScope();\n scope.drafts_.push(draft);\n state.callbacks_ = parent?.callbacks_ ?? [];\n state.key_ = key;\n if (parent && key !== void 0) {\n registerChildFinalizationCallback(parent, state, key);\n } else {\n state.callbacks_.push(function rootDraftCleanup(rootScope2) {\n rootScope2.mapSetPlugin_?.fixSetContents(state);\n const { patchPlugin_ } = rootScope2;\n if (state.modified_ && patchPlugin_) {\n patchPlugin_.generatePatches_(state, [], rootScope2);\n }\n });\n }\n return draft;\n}\n\n// src/core/current.ts\nfunction current(value) {\n if (!isDraft(value))\n die(10, value);\n return currentImpl(value);\n}\nfunction currentImpl(value) {\n if (!isDraftable(value) || isFrozen(value))\n return value;\n const state = value[DRAFT_STATE];\n let copy;\n let strict = true;\n if (state) {\n if (!state.modified_)\n return state.base_;\n state.finalized_ = true;\n copy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_);\n strict = state.scope_.immer_.shouldUseStrictIteration();\n } else {\n copy = shallowCopy(value, true);\n }\n each(\n copy,\n (key, childValue) => {\n set(copy, key, currentImpl(childValue));\n },\n strict\n );\n if (state) {\n state.finalized_ = false;\n }\n return copy;\n}\n\n// src/plugins/patches.ts\nfunction enablePatches() {\n const errorOffset = 16;\n if (process.env.NODE_ENV !== \"production\") {\n errors.push(\n 'Sets cannot have \"replace\" patches.',\n function(op) {\n return \"Unsupported patch operation: \" + op;\n },\n function(path) {\n return \"Cannot apply patch, path doesn't resolve: \" + path;\n },\n \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n );\n }\n function getPath(state, path = []) {\n if (state.key_ !== void 0) {\n const parentCopy = state.parent_.copy_ ?? state.parent_.base_;\n const proxyDraft = getProxyDraft(get(parentCopy, state.key_));\n const valueAtKey = get(parentCopy, state.key_);\n if (valueAtKey === void 0) {\n return null;\n }\n if (valueAtKey !== state.draft_ && valueAtKey !== state.base_ && valueAtKey !== state.copy_) {\n return null;\n }\n if (proxyDraft != null && proxyDraft.base_ !== state.base_) {\n return null;\n }\n const isSet2 = state.parent_.type_ === 3 /* Set */;\n let key;\n if (isSet2) {\n const setParent = state.parent_;\n key = Array.from(setParent.drafts_.keys()).indexOf(state.key_);\n } else {\n key = state.key_;\n }\n if (!(isSet2 && parentCopy.size > key || has(parentCopy, key))) {\n return null;\n }\n path.push(key);\n }\n if (state.parent_) {\n return getPath(state.parent_, path);\n }\n path.reverse();\n try {\n resolvePath(state.copy_, path);\n } catch (e) {\n return null;\n }\n return path;\n }\n function resolvePath(base, path) {\n let current2 = base;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n current2 = get(current2, key);\n if (!isObjectish(current2) || current2 === null) {\n throw new Error(`Cannot resolve path at '${path.join(\"/\")}'`);\n }\n }\n return current2;\n }\n const REPLACE = \"replace\";\n const ADD = \"add\";\n const REMOVE = \"remove\";\n function generatePatches_(state, basePath, scope) {\n if (state.scope_.processedForPatches_.has(state)) {\n return;\n }\n state.scope_.processedForPatches_.add(state);\n const { patches_, inversePatches_ } = scope;\n switch (state.type_) {\n case 0 /* Object */:\n case 2 /* Map */:\n return generatePatchesFromAssigned(\n state,\n basePath,\n patches_,\n inversePatches_\n );\n case 1 /* Array */:\n return generateArrayPatches(\n state,\n basePath,\n patches_,\n inversePatches_\n );\n case 3 /* Set */:\n return generateSetPatches(\n state,\n basePath,\n patches_,\n inversePatches_\n );\n }\n }\n function generateArrayPatches(state, basePath, patches, inversePatches) {\n let { base_, assigned_ } = state;\n let copy_ = state.copy_;\n if (copy_.length < base_.length) {\n ;\n [base_, copy_] = [copy_, base_];\n [patches, inversePatches] = [inversePatches, patches];\n }\n const allReassigned = state.allIndicesReassigned_ === true;\n for (let i = 0; i < base_.length; i++) {\n const copiedItem = copy_[i];\n const baseItem = base_[i];\n const isAssigned = allReassigned || assigned_?.get(i.toString());\n if (isAssigned && copiedItem !== baseItem) {\n const childState = copiedItem?.[DRAFT_STATE];\n if (childState && childState.modified_) {\n continue;\n }\n const path = basePath.concat([i]);\n patches.push({\n op: REPLACE,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copiedItem)\n });\n inversePatches.push({\n op: REPLACE,\n path,\n value: clonePatchValueIfNeeded(baseItem)\n });\n }\n }\n for (let i = base_.length; i < copy_.length; i++) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n // Need to maybe clone it, as it can in fact be the original value\n // due to the base/copy inversion at the start of this function\n value: clonePatchValueIfNeeded(copy_[i])\n });\n }\n for (let i = copy_.length - 1; base_.length <= i; --i) {\n const path = basePath.concat([i]);\n inversePatches.push({\n op: REMOVE,\n path\n });\n }\n }\n function generatePatchesFromAssigned(state, basePath, patches, inversePatches) {\n const { base_, copy_, type_ } = state;\n each(state.assigned_, (key, assignedValue) => {\n const origValue = get(base_, key, type_);\n const value = get(copy_, key, type_);\n const op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD;\n if (origValue === value && op === REPLACE)\n return;\n const path = basePath.concat(key);\n patches.push(\n op === REMOVE ? { op, path } : { op, path, value: clonePatchValueIfNeeded(value) }\n );\n inversePatches.push(\n op === ADD ? { op: REMOVE, path } : op === REMOVE ? { op: ADD, path, value: clonePatchValueIfNeeded(origValue) } : { op: REPLACE, path, value: clonePatchValueIfNeeded(origValue) }\n );\n });\n }\n function generateSetPatches(state, basePath, patches, inversePatches) {\n let { base_, copy_ } = state;\n let i = 0;\n base_.forEach((value) => {\n if (!copy_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: REMOVE,\n path,\n value\n });\n inversePatches.unshift({\n op: ADD,\n path,\n value\n });\n }\n i++;\n });\n i = 0;\n copy_.forEach((value) => {\n if (!base_.has(value)) {\n const path = basePath.concat([i]);\n patches.push({\n op: ADD,\n path,\n value\n });\n inversePatches.unshift({\n op: REMOVE,\n path,\n value\n });\n }\n i++;\n });\n }\n function generateReplacementPatches_(baseValue, replacement, scope) {\n const { patches_, inversePatches_ } = scope;\n patches_.push({\n op: REPLACE,\n path: [],\n value: replacement === NOTHING ? void 0 : replacement\n });\n inversePatches_.push({\n op: REPLACE,\n path: [],\n value: baseValue\n });\n }\n function applyPatches_(draft, patches) {\n patches.forEach((patch) => {\n const { path, op } = patch;\n let base = draft;\n for (let i = 0; i < path.length - 1; i++) {\n const parentType = getArchtype(base);\n let p = path[i];\n if (typeof p !== \"string\" && typeof p !== \"number\") {\n p = \"\" + p;\n }\n if ((parentType === 0 /* Object */ || parentType === 1 /* Array */) && (p === \"__proto__\" || p === CONSTRUCTOR))\n die(errorOffset + 3);\n if (isFunction(base) && p === PROTOTYPE)\n die(errorOffset + 3);\n base = get(base, p);\n if (!isObjectish(base))\n die(errorOffset + 2, path.join(\"/\"));\n }\n const type = getArchtype(base);\n const value = deepClonePatchValue(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case REPLACE:\n switch (type) {\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n die(errorOffset);\n default:\n return base[key] = value;\n }\n case ADD:\n switch (type) {\n case 1 /* Array */:\n return key === \"-\" ? base.push(value) : base.splice(key, 0, value);\n case 2 /* Map */:\n return base.set(key, value);\n case 3 /* Set */:\n return base.add(value);\n default:\n return base[key] = value;\n }\n case REMOVE:\n switch (type) {\n case 1 /* Array */:\n return base.splice(key, 1);\n case 2 /* Map */:\n return base.delete(key);\n case 3 /* Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n die(errorOffset + 1, op);\n }\n });\n return draft;\n }\n function deepClonePatchValue(obj) {\n if (!isDraftable(obj))\n return obj;\n if (isArray(obj))\n return obj.map(deepClonePatchValue);\n if (isMap(obj))\n return new Map(\n Array.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n );\n if (isSet(obj))\n return new Set(Array.from(obj).map(deepClonePatchValue));\n const cloned = Object.create(getPrototypeOf(obj));\n for (const key in obj)\n cloned[key] = deepClonePatchValue(obj[key]);\n if (has(obj, DRAFTABLE))\n cloned[DRAFTABLE] = obj[DRAFTABLE];\n return cloned;\n }\n function clonePatchValueIfNeeded(obj) {\n if (isDraft(obj)) {\n return deepClonePatchValue(obj);\n } else\n return obj;\n }\n loadPlugin(PluginPatches, {\n applyPatches_,\n generatePatches_,\n generateReplacementPatches_,\n getPath\n });\n}\n\n// src/plugins/mapset.ts\nfunction enableMapSet() {\n class DraftMap extends Map {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 2 /* Map */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n assigned_: void 0,\n base_: target,\n draft_: this,\n isManual_: false,\n revoked_: false,\n callbacks_: []\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(key) {\n return latest(this[DRAFT_STATE]).has(key);\n }\n set(key, value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!latest(state).has(key) || latest(state).get(key) !== value) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_.set(key, true);\n state.copy_.set(key, value);\n state.assigned_.set(key, true);\n handleCrossReference(state, key, value);\n }\n return this;\n }\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareMapCopy(state);\n markChanged(state);\n if (state.base_.has(key)) {\n state.assigned_.set(key, false);\n } else {\n state.assigned_.delete(key);\n }\n state.copy_.delete(key);\n return true;\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareMapCopy(state);\n markChanged(state);\n state.assigned_ = /* @__PURE__ */ new Map();\n each(state.base_, (key) => {\n state.assigned_.set(key, false);\n });\n state.copy_.clear();\n }\n }\n forEach(cb, thisArg) {\n const state = this[DRAFT_STATE];\n latest(state).forEach((_value, key, _map) => {\n cb.call(thisArg, this.get(key), key, this);\n });\n }\n get(key) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n const value = latest(state).get(key);\n if (state.finalized_ || !isDraftable(value)) {\n return value;\n }\n if (value !== state.base_.get(key)) {\n return value;\n }\n const draft = createProxy(state.scope_, value, state, key);\n prepareMapCopy(state);\n state.copy_.set(key, draft);\n return draft;\n }\n keys() {\n return latest(this[DRAFT_STATE]).keys();\n }\n values() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value\n };\n }\n };\n }\n entries() {\n const iterator = this.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: () => {\n const r = iterator.next();\n if (r.done)\n return r;\n const value = this.get(r.value);\n return {\n done: false,\n value: [r.value, value]\n };\n }\n };\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.entries();\n }\n }\n function proxyMap_(target, parent) {\n const map = new DraftMap(target, parent);\n return [map, map[DRAFT_STATE]];\n }\n function prepareMapCopy(state) {\n if (!state.copy_) {\n state.assigned_ = /* @__PURE__ */ new Map();\n state.copy_ = new Map(state.base_);\n }\n }\n class DraftSet extends Set {\n constructor(target, parent) {\n super();\n this[DRAFT_STATE] = {\n type_: 3 /* Set */,\n parent_: parent,\n scope_: parent ? parent.scope_ : getCurrentScope(),\n modified_: false,\n finalized_: false,\n copy_: void 0,\n base_: target,\n draft_: this,\n drafts_: /* @__PURE__ */ new Map(),\n revoked_: false,\n isManual_: false,\n assigned_: void 0,\n callbacks_: []\n };\n }\n get size() {\n return latest(this[DRAFT_STATE]).size;\n }\n has(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!state.copy_) {\n return state.base_.has(value);\n }\n if (state.copy_.has(value))\n return true;\n if (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n return true;\n return false;\n }\n add(value) {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (!this.has(value)) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.add(value);\n handleCrossReference(state, value, value);\n }\n return this;\n }\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n markChanged(state);\n return state.copy_.delete(value) || (state.drafts_.has(value) ? state.copy_.delete(state.drafts_.get(value)) : (\n /* istanbul ignore next */\n false\n ));\n }\n clear() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n if (latest(state).size) {\n prepareSetCopy(state);\n markChanged(state);\n state.copy_.clear();\n }\n }\n values() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.values();\n }\n entries() {\n const state = this[DRAFT_STATE];\n assertUnrevoked(state);\n prepareSetCopy(state);\n return state.copy_.entries();\n }\n keys() {\n return this.values();\n }\n [(DRAFT_STATE, Symbol.iterator)]() {\n return this.values();\n }\n forEach(cb, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n cb.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n }\n }\n function proxySet_(target, parent) {\n const set2 = new DraftSet(target, parent);\n return [set2, set2[DRAFT_STATE]];\n }\n function prepareSetCopy(state) {\n if (!state.copy_) {\n state.copy_ = /* @__PURE__ */ new Set();\n state.base_.forEach((value) => {\n if (isDraftable(value)) {\n const draft = createProxy(state.scope_, value, state, value);\n state.drafts_.set(value, draft);\n state.copy_.add(draft);\n } else {\n state.copy_.add(value);\n }\n });\n }\n }\n function assertUnrevoked(state) {\n if (state.revoked_)\n die(3, JSON.stringify(latest(state)));\n }\n function fixSetContents(target) {\n if (target.type_ === 3 /* Set */ && target.copy_) {\n const copy = new Set(target.copy_);\n target.copy_.clear();\n copy.forEach((value) => {\n target.copy_.add(getValue(value));\n });\n }\n }\n loadPlugin(PluginMapSet, { proxyMap_, proxySet_, fixSetContents });\n}\n\n// src/plugins/arrayMethods.ts\nfunction enableArrayMethods() {\n const SHIFTING_METHODS = /* @__PURE__ */ new Set([\"shift\", \"unshift\"]);\n const QUEUE_METHODS = /* @__PURE__ */ new Set([\"push\", \"pop\"]);\n const RESULT_RETURNING_METHODS = /* @__PURE__ */ new Set([\n ...QUEUE_METHODS,\n ...SHIFTING_METHODS\n ]);\n const REORDERING_METHODS = /* @__PURE__ */ new Set([\"reverse\", \"sort\"]);\n const MUTATING_METHODS = /* @__PURE__ */ new Set([\n ...RESULT_RETURNING_METHODS,\n ...REORDERING_METHODS,\n \"splice\"\n ]);\n const FIND_METHODS = /* @__PURE__ */ new Set([\"find\", \"findLast\"]);\n const NON_MUTATING_METHODS = /* @__PURE__ */ new Set([\n \"filter\",\n \"slice\",\n \"concat\",\n \"flat\",\n ...FIND_METHODS,\n \"findIndex\",\n \"findLastIndex\",\n \"some\",\n \"every\",\n \"indexOf\",\n \"lastIndexOf\",\n \"includes\",\n \"join\",\n \"toString\",\n \"toLocaleString\"\n ]);\n function isMutatingArrayMethod(method) {\n return MUTATING_METHODS.has(method);\n }\n function isNonMutatingArrayMethod(method) {\n return NON_MUTATING_METHODS.has(method);\n }\n function isArrayOperationMethod(method) {\n return isMutatingArrayMethod(method) || isNonMutatingArrayMethod(method);\n }\n function enterOperation(state, method) {\n state.operationMethod = method;\n }\n function exitOperation(state) {\n state.operationMethod = void 0;\n }\n function executeArrayMethod(state, operation, markLength = true) {\n prepareCopy(state);\n const result = operation();\n markChanged(state);\n if (markLength)\n state.assigned_.set(\"length\", true);\n return result;\n }\n function markAllIndicesReassigned(state) {\n state.allIndicesReassigned_ = true;\n }\n function normalizeSliceIndex(index, length) {\n if (index < 0) {\n return Math.max(length + index, 0);\n }\n return Math.min(index, length);\n }\n function handleSimpleOperation(state, method, args) {\n return executeArrayMethod(state, () => {\n const result = state.copy_[method](...args);\n if (SHIFTING_METHODS.has(method)) {\n markAllIndicesReassigned(state);\n }\n return RESULT_RETURNING_METHODS.has(method) ? result : state.draft_;\n });\n }\n function handleReorderingOperation(state, method, args) {\n return executeArrayMethod(\n state,\n () => {\n ;\n state.copy_[method](...args);\n markAllIndicesReassigned(state);\n return state.draft_;\n },\n false\n );\n }\n function createMethodInterceptor(state, originalMethod) {\n return function interceptedMethod(...args) {\n const method = originalMethod;\n enterOperation(state, method);\n try {\n if (isMutatingArrayMethod(method)) {\n if (RESULT_RETURNING_METHODS.has(method)) {\n return handleSimpleOperation(state, method, args);\n }\n if (REORDERING_METHODS.has(method)) {\n return handleReorderingOperation(state, method, args);\n }\n if (method === \"splice\") {\n const res = executeArrayMethod(\n state,\n () => state.copy_.splice(...args)\n );\n markAllIndicesReassigned(state);\n return res;\n }\n } else {\n return handleNonMutatingOperation(state, method, args);\n }\n } finally {\n exitOperation(state);\n }\n };\n }\n function handleNonMutatingOperation(state, method, args) {\n const source = latest(state);\n if (method === \"filter\") {\n const predicate = args[0];\n const result = [];\n for (let i = 0; i < source.length; i++) {\n if (predicate(source[i], i, source)) {\n result.push(state.draft_[i]);\n }\n }\n return result;\n }\n if (FIND_METHODS.has(method)) {\n const predicate = args[0];\n const isForward = method === \"find\";\n const step = isForward ? 1 : -1;\n const start = isForward ? 0 : source.length - 1;\n for (let i = start; i >= 0 && i < source.length; i += step) {\n if (predicate(source[i], i, source)) {\n return state.draft_[i];\n }\n }\n return void 0;\n }\n if (method === \"slice\") {\n const rawStart = args[0] ?? 0;\n const rawEnd = args[1] ?? source.length;\n const start = normalizeSliceIndex(rawStart, source.length);\n const end = normalizeSliceIndex(rawEnd, source.length);\n const result = [];\n for (let i = start; i < end; i++) {\n result.push(state.draft_[i]);\n }\n return result;\n }\n return source[method](...args);\n }\n loadPlugin(PluginArrayMethods, {\n createMethodInterceptor,\n isArrayOperationMethod,\n isMutatingArrayMethod\n });\n}\n\n// src/immer.ts\nvar immer = new Immer2();\nvar produce = immer.produce;\nvar produceWithPatches = /* @__PURE__ */ immer.produceWithPatches.bind(\n immer\n);\nvar setAutoFreeze = /* @__PURE__ */ immer.setAutoFreeze.bind(immer);\nvar setUseStrictShallowCopy = /* @__PURE__ */ immer.setUseStrictShallowCopy.bind(\n immer\n);\nvar setUseStrictIteration = /* @__PURE__ */ immer.setUseStrictIteration.bind(\n immer\n);\nvar applyPatches = /* @__PURE__ */ immer.applyPatches.bind(immer);\nvar createDraft = /* @__PURE__ */ immer.createDraft.bind(immer);\nvar finishDraft = /* @__PURE__ */ immer.finishDraft.bind(immer);\nvar castDraft = (value) => value;\nvar castImmutable = (value) => value;\nexport {\n Immer2 as Immer,\n applyPatches,\n castDraft,\n castImmutable,\n createDraft,\n current,\n enableArrayMethods,\n enableMapSet,\n enablePatches,\n finishDraft,\n freeze,\n DRAFTABLE as immerable,\n isDraft,\n isDraftable,\n NOTHING as nothing,\n original,\n produce,\n produceWithPatches,\n setAutoFreeze,\n setUseStrictIteration,\n setUseStrictShallowCopy\n};\n//# sourceMappingURL=immer.mjs.map","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import { produce } from 'immer';\n\nconst immerImpl = (initializer) => (set, get, store) => {\n store.setState = (updater, replace, ...args) => {\n const nextState = typeof updater === \"function\" ? produce(updater) : updater;\n return set(nextState, replace, ...args);\n };\n return initializer(store.setState, get, store);\n};\nconst immer = immerImpl;\n\nexport { immer };\n","import type { TemplateVersionDef } from '@core/registry/types'\n\nimport type { MineralReconcileNotice } from './templateTypes'\n\n/**\n * 计算并合并“矿种删减后需人工校对”提示。\n */\nexport function buildMineralReconcileNotice(\n versionDef: TemplateVersionDef,\n previous: string[],\n next: string[],\n current: MineralReconcileNotice | null\n): MineralReconcileNotice | null {\n if (versionDef.templateType !== 'emrt') return current\n if (versionDef.version.id !== '2.0' && versionDef.version.id !== '2.1') return current\n\n const nextSet = new Set(next)\n const removed = previous.filter((key) => !nextSet.has(key))\n if (removed.length === 0) return current\n\n const merged = new Set(current?.removedMinerals ?? [])\n removed.forEach((key) => merged.add(key))\n\n return {\n templateType: 'emrt',\n versionId: versionDef.version.id,\n removedMinerals: Array.from(merged),\n }\n}\n","/**\n * @file shell/store/templateStoreContext.ts\n * @description zustand store 的 React Context 定义与底层 hook。\n *\n * 单独抽出以满足 react-refresh/only-export-components 规则:\n * - templateStore.tsx 仅导出 TemplateProvider(React 组件)\n * - 本文件仅导出 Context + useTemplateStore(非组件)\n */\n\nimport { createContext, useContext } from 'react'\nimport type { StoreApi } from 'zustand'\nimport { useStore } from 'zustand'\n\nimport type { TemplateStoreState } from './templateStore'\n\n/** zustand store 实例类型。 */\nexport type TemplateStore = StoreApi<TemplateStoreState>\n\n/** 用于 Provider 传递 store 实例的 Context。 */\nexport const TemplateStoreContext = createContext<TemplateStore | null>(null)\n\n/** 使用 zustand selector 读取 store 状态(需在 TemplateProvider 内部调用)。 */\nexport function useTemplateStore<T>(selector: (state: TemplateStoreState) => T): T {\n const store = useContext(TemplateStoreContext)\n if (!store) {\n throw new Error('useTemplateStore must be used within TemplateProvider')\n }\n return useStore(store, selector)\n}\n","/**\n * @file shell/store/templateStore.tsx\n * @description zustand 状态管理:替代原 9 层 Context + react-hook-form 架构。\n *\n * 核心设计:\n * - 使用 zustand `createStore` + immer middleware 管理全量表单状态\n * - 通过 React Context 提供 store 实例(支持多实例/测试隔离)\n * - 消费侧用 selector 精确订阅,天然实现按需更新\n * - 校验使用 zod schema.safeParse 直接完成(无需 react-hook-form)\n * - 校验通过 queueMicrotask 延迟执行,同一帧内多次状态变更仅触发一次校验\n */\n\nimport { getVersionDef } from '@core/registry'\nimport type { TemplateType, TemplateVersionDef } from '@core/registry/types'\nimport { calculateGating } from '@core/rules/gating'\nimport { buildFormSchema } from '@core/schema'\nimport { createEmptyFormData } from '@core/template/formDefaults'\nimport type { MineRow, MineralsScopeRow, ProductRow, SmelterRow } from '@core/types/tableRows'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport type { CMReportingIntegrations } from '@lib/public/integrations'\nimport { enableMapSet } from 'immer'\nimport type { ReactNode } from 'react'\nimport { useEffect, useState } from 'react'\nimport { createStore } from 'zustand'\nimport { immer } from 'zustand/middleware/immer'\n\nimport { buildMineralReconcileNotice } from './mineralReconcile'\nimport { TemplateStoreContext } from './templateStoreContext'\nimport type {\n MineralReconcileNotice,\n TemplateFormErrors,\n TemplateFormState,\n} from './templateTypes'\n\nenableMapSet()\n\n// ---------------------------------------------------------------------------\n// 空错误常量\n// ---------------------------------------------------------------------------\n\nconst EMPTY_ERRORS: TemplateFormErrors = {\n companyInfo: {},\n customMinerals: {},\n mineralsScopeRows: {},\n questions: {},\n companyQuestions: {},\n}\n\n// ---------------------------------------------------------------------------\n// Store 类型定义\n// ---------------------------------------------------------------------------\n\n/** zustand store 的完整类型(状态 + 元信息 + 错误 + 操作)。 */\nexport interface TemplateStoreState {\n // ── 静态元信息 ──\n templateType: TemplateType\n versionId: string\n versionDef: TemplateVersionDef\n integrations?: CMReportingIntegrations\n\n // ── 表单数据(即 TemplateFormState 的展开) ──\n companyInfo: Record<string, string>\n selectedMinerals: string[]\n customMinerals: string[]\n questions: Record<string, Record<string, string> | string>\n questionComments: Record<string, Record<string, string> | string>\n companyQuestions: Record<string, Record<string, string> | string>\n mineralsScope: MineralsScopeRow[]\n smelterList: SmelterRow[]\n mineList: MineRow[]\n productList: ProductRow[]\n\n // ── 校验 ──\n errors: TemplateFormErrors\n isDirty: boolean\n mineralReconcileNotice: MineralReconcileNotice | null\n\n // ── 操作 ──\n setCompanyInfoField: (key: string, value: string) => void\n setSelectedMinerals: (minerals: string[]) => void\n setCustomMinerals: (minerals: string[]) => void\n setQuestionValue: (questionKey: string, mineralKey: string | null, value: string) => void\n setQuestionComment: (questionKey: string, mineralKey: string | null, value: string) => void\n setCompanyQuestionValue: (key: string, value: string, mineralKey?: string) => void\n setMineralsScope: (rows: MineralsScopeRow[]) => void\n setSmelterList: (rows: SmelterRow[]) => void\n setMineList: (rows: MineRow[]) => void\n setProductList: (rows: ProductRow[]) => void\n setFormData: (data: TemplateFormState) => void\n validateForm: () => Promise<boolean>\n resetForm: () => void\n clearMineralReconcileNotice: () => void\n}\n\n// ---------------------------------------------------------------------------\n// 辅助函数\n// ---------------------------------------------------------------------------\n\n/** 嵌套字段写入器:处理 Record<key, Record<subKey, value> | value> 结构。 */\nfunction writeNestedField(\n target: Record<string, Record<string, string> | string>,\n key: string,\n value: string,\n subKey?: string | null,\n) {\n if (subKey) {\n const current = target[key]\n if (typeof current === 'object') {\n current[subKey] = value\n } else {\n target[key] = { [subKey]: value }\n }\n } else {\n target[key] = value\n }\n}\n\n/**\n * 问题字段写入器:按 perMineral 决定写入 Record<mineral, string> 还是纯 string。\n * 同时用于 questions 和 questionComments。\n */\nfunction writeQuestionField(\n target: Record<string, Record<string, string> | string>,\n def: { perMineral: boolean },\n questionKey: string,\n mineralKey: string | null,\n value: string,\n) {\n if (def.perMineral) {\n if (!mineralKey) return\n writeNestedField(target, questionKey, value, mineralKey)\n } else {\n target[questionKey] = value\n }\n}\n\n// ---------------------------------------------------------------------------\n// Zod 错误映射\n// ---------------------------------------------------------------------------\n\n/** 将 Zod issues 映射为 UI 友好的 TemplateFormErrors。 */\nfunction mapZodErrors(issues: Array<{ path: PropertyKey[]; message: string }>): TemplateFormErrors {\n const result: TemplateFormErrors = {\n companyInfo: {},\n customMinerals: {},\n mineralsScopeRows: {},\n questions: {},\n companyQuestions: {},\n }\n\n for (const issue of issues) {\n const [root, ...rest] = issue.path\n const msg = issue.message as ErrorKey\n\n switch (root) {\n case 'companyInfo': {\n const key = rest[0]\n if (typeof key === 'string') result.companyInfo[key] = msg\n break\n }\n case 'selectedMinerals':\n result.mineralsScope = msg\n break\n case 'customMinerals': {\n const idx = rest[0]\n if (typeof idx === 'number') result.customMinerals[idx] = msg\n break\n }\n case 'mineralsScope': {\n const idx = rest[0]\n const field = rest[1]\n if (typeof idx === 'number' && (field === 'mineral' || field === 'reason')) {\n const existing = result.mineralsScopeRows[idx] ?? {}\n existing[field] = msg\n result.mineralsScopeRows[idx] = existing\n }\n break\n }\n case 'questions': {\n const qKey = rest[0]\n const mKey = rest[1]\n if (typeof qKey === 'string') {\n if (typeof mKey === 'string') {\n const existing = result.questions[qKey]\n if (existing && typeof existing === 'object') {\n (existing as Record<string, ErrorKey>)[mKey] = msg\n } else {\n result.questions[qKey] = { [mKey]: msg }\n }\n } else {\n result.questions[qKey] = msg\n }\n }\n break\n }\n case 'companyQuestions': {\n const cqKey = rest[0]\n const mKey = rest[1]\n if (typeof cqKey === 'string') {\n if (typeof mKey === 'string') {\n const existing = result.companyQuestions[cqKey]\n if (existing && typeof existing === 'object') {\n (existing as Record<string, ErrorKey>)[mKey] = msg\n } else {\n result.companyQuestions[cqKey] = { [mKey]: msg }\n }\n } else {\n result.companyQuestions[cqKey] = msg\n }\n }\n break\n }\n }\n }\n\n return result\n}\n\n// ---------------------------------------------------------------------------\n// 获取 TemplateFormState 快照(从 store 中提取表单字段)\n// ---------------------------------------------------------------------------\n\nfunction getFormData(s: TemplateStoreState): TemplateFormState {\n return {\n companyInfo: s.companyInfo,\n selectedMinerals: s.selectedMinerals,\n customMinerals: s.customMinerals,\n questions: s.questions,\n questionComments: s.questionComments,\n companyQuestions: s.companyQuestions,\n mineralsScope: s.mineralsScope,\n smelterList: s.smelterList,\n mineList: s.mineList,\n productList: s.productList,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Store 工厂\n// ---------------------------------------------------------------------------\n\n/** 创建 zustand store 实例(每个 TemplateProvider 一个)。 */\nfunction createTemplateStore(\n templateType: TemplateType,\n versionId: string,\n integrations?: CMReportingIntegrations\n) {\n const versionDef = getVersionDef(templateType, versionId)\n const defaultState = createEmptyFormData(versionDef)\n const schema = buildFormSchema(versionDef)\n\n const questionDefsByKey = new Map(versionDef.questions.map((q) => [q.key, q]))\n const questionKeyOrder = versionDef.questions.map((q) => q.key)\n\n /** 同步运行 zod 全量校验(用于 validateForm 等需要立即获取结果的场景)。 */\n function runValidationSync(state: TemplateStoreState): TemplateFormErrors {\n const result = schema.safeParse(getFormData(state))\n if (result.success) return EMPTY_ERRORS\n return mapZodErrors(result.error.issues)\n }\n\n /**\n * 延迟校验调度器:通过 queueMicrotask 将校验推迟到当前微任务队列末尾。\n *\n * 优势:\n * - 同一帧内多次 set() 仅触发一次校验(例如门控级联清空多个字段)\n * - 校验在浏览器绘制前完成(microtask),UI 不会闪烁\n * - 避免每次按键都跑一遍完整 zod schema\n */\n let validationPending = false\n function scheduleValidation(\n set: (partial: Partial<TemplateStoreState>) => void,\n get: () => TemplateStoreState\n ) {\n if (validationPending) return\n validationPending = true\n queueMicrotask(() => {\n validationPending = false\n const state = get()\n const errors = runValidationSync(state)\n // 仅在 errors 引用变化时更新(EMPTY_ERRORS 是稳定引用)\n if (errors !== state.errors) {\n set({ errors })\n }\n })\n }\n\n /**\n * 门控级联清空:Q1/Q2 变更时,按 gating 规则清空受影响的后续问题。\n *\n * 逻辑:\n * 1. 仅 Q1/Q2 触发级联\n * 2. 计算当前 gating 状态\n * 3. 若 Q2 被禁用:清空 Q2 + Q2 之后所有问题\n * 4. 若仅后续问题被禁用:清空 Q2 之后所有问题\n */\n function applyGatingCascade(\n s: TemplateStoreState,\n questionKey: string,\n mineralKey: string | null,\n value: string,\n def: { perMineral: boolean },\n ) {\n if (questionKey !== 'Q1' && questionKey !== 'Q2') return\n\n // 构建包含最新值的 questions 快照用于 gating 计算\n const nextQuestions = { ...getFormData(s).questions }\n if (def.perMineral && mineralKey) {\n const cur = typeof nextQuestions[questionKey] === 'object' ? nextQuestions[questionKey] : {}\n nextQuestions[questionKey] = { ...(cur as Record<string, string>), [mineralKey]: value }\n } else if (!def.perMineral) {\n nextQuestions[questionKey] = value\n }\n\n const gating = calculateGating(\n versionDef,\n nextQuestions,\n def.perMineral ? mineralKey ?? undefined : undefined,\n )\n const q2Index = questionKeyOrder.indexOf('Q2')\n if (q2Index < 0) return\n const laterKeys = questionKeyOrder.slice(q2Index + 1)\n\n /** 清空指定问题的回答与备注。 */\n const clearQuestion = (k: string, m: string | null) => {\n const d = questionDefsByKey.get(k)\n if (!d) return\n if (d.perMineral && m) {\n const qv = s.questions[k]\n if (typeof qv === 'object') qv[m] = ''\n const cv = s.questionComments[k]\n if (typeof cv === 'object') cv[m] = ''\n } else if (!d.perMineral) {\n s.questions[k] = ''\n s.questionComments[k] = ''\n }\n }\n\n if (!gating.q2Enabled) {\n clearQuestion('Q2', mineralKey)\n laterKeys.forEach((k) => clearQuestion(k, mineralKey))\n } else if (!gating.laterQuestionsEnabled) {\n laterKeys.forEach((k) => clearQuestion(k, mineralKey))\n }\n }\n\n return createStore<TemplateStoreState>()(\n immer((set, get) => ({\n // ── 静态元信息 ──\n templateType,\n versionId,\n versionDef,\n integrations,\n\n // ── 表单数据 ──\n ...defaultState,\n\n // ── 校验 ──\n errors: EMPTY_ERRORS,\n isDirty: false,\n mineralReconcileNotice: null,\n\n // ── Actions ──\n // 每个 action 仅调用一次 set(),校验通过 scheduleValidation 延迟到微任务。\n\n setCompanyInfoField: (key, value) => {\n set((s) => { s.companyInfo[key] = value; s.isDirty = true })\n scheduleValidation(set, get)\n },\n\n setSelectedMinerals: (minerals) => {\n set((s) => {\n const previous = s.selectedMinerals\n s.selectedMinerals = minerals\n s.isDirty = true\n s.mineralReconcileNotice = buildMineralReconcileNotice(\n versionDef,\n previous,\n minerals,\n s.mineralReconcileNotice\n )\n })\n scheduleValidation(set, get)\n },\n\n setCustomMinerals: (minerals) => {\n set({ customMinerals: minerals, isDirty: true })\n scheduleValidation(set, get)\n },\n\n setQuestionValue: (questionKey, mineralKey, value) => {\n set((s) => {\n // ── 1. 写入回答值 ──\n const def = questionDefsByKey.get(questionKey)\n if (!def) return\n writeQuestionField(s.questions, def, questionKey, mineralKey, value)\n s.isDirty = true\n\n // ── 2. 门控级联:Q1/Q2 变更时清空受影响的后续问题 ──\n applyGatingCascade(s, questionKey, mineralKey, value, def)\n })\n scheduleValidation(set, get)\n },\n\n setQuestionComment: (questionKey, mineralKey, value) => {\n set((s) => {\n const def = questionDefsByKey.get(questionKey)\n if (!def) return\n writeQuestionField(s.questionComments, def, questionKey, mineralKey, value)\n s.isDirty = true\n })\n scheduleValidation(set, get)\n },\n\n setCompanyQuestionValue: (key, value, mineralKey?) => {\n set((s) => {\n writeNestedField(s.companyQuestions, key, value, mineralKey)\n s.isDirty = true\n })\n scheduleValidation(set, get)\n },\n\n setMineralsScope: (rows) => {\n set({ mineralsScope: rows, isDirty: true })\n scheduleValidation(set, get)\n },\n\n setSmelterList: (rows) => {\n set({ smelterList: rows, isDirty: true })\n scheduleValidation(set, get)\n },\n\n setMineList: (rows) => {\n set({ mineList: rows, isDirty: true })\n scheduleValidation(set, get)\n },\n\n setProductList: (rows) => {\n set({ productList: rows, isDirty: true })\n scheduleValidation(set, get)\n },\n\n setFormData: (data) => {\n set({ ...data, isDirty: false, mineralReconcileNotice: null })\n scheduleValidation(set, get)\n },\n\n /** 同步全量校验(用于导出前确认),不走 scheduleValidation。 */\n validateForm: async () => {\n const state = get()\n const result = schema.safeParse(getFormData(state))\n if (result.success) {\n set({ errors: EMPTY_ERRORS })\n return true\n }\n set({ errors: mapZodErrors(result.error.issues) })\n return false\n },\n\n resetForm: () => {\n set({\n ...defaultState,\n errors: EMPTY_ERRORS,\n isDirty: false,\n mineralReconcileNotice: null,\n })\n },\n\n clearMineralReconcileNotice: () => {\n set({ mineralReconcileNotice: null })\n },\n }))\n )\n}\n\n// ---------------------------------------------------------------------------\n// React Provider\n// ---------------------------------------------------------------------------\n\ninterface TemplateProviderProps {\n templateType: TemplateType\n versionId: string\n integrations?: CMReportingIntegrations\n children: ReactNode\n}\n\n/**\n * 模板 Provider:创建/重置 zustand store 实例。\n *\n * 使用 React 官方 \"Storing information from previous renders\" 模式\n * (https://react.dev/reference/react/useState#storing-information-from-previous-renders)\n * 在 templateType/versionId 变更时同步重建 store,避免子组件看到过期实例。\n */\nexport function TemplateProvider({\n templateType,\n versionId,\n integrations,\n children,\n}: TemplateProviderProps) {\n const currentKey = `${templateType}:${versionId}`\n\n // \"derive state from props\" 模式:在 render 期间检测 key 变化并同步重建 store。\n // React 会在 setState 后立即重新渲染本组件,子组件不会看到过期 store。\n const [prevKey, setPrevKey] = useState(currentKey)\n const [store, setStore] = useState(() =>\n createTemplateStore(templateType, versionId, integrations)\n )\n if (currentKey !== prevKey) {\n setPrevKey(currentKey)\n setStore(createTemplateStore(templateType, versionId, integrations))\n }\n\n // integrations 变更时仅更新引用(不重建 store)\n useEffect(() => {\n store.setState({ integrations })\n }, [store, integrations])\n\n // 离开页面前提示(isDirty)\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const handler = (event: BeforeUnloadEvent) => {\n event.preventDefault()\n event.returnValue = ''\n }\n\n const unsubscribe = store.subscribe((state) => {\n if (state.isDirty) {\n window.addEventListener('beforeunload', handler)\n } else {\n window.removeEventListener('beforeunload', handler)\n }\n })\n\n return () => {\n unsubscribe()\n window.removeEventListener('beforeunload', handler)\n }\n }, [store])\n\n return (\n <TemplateStoreContext.Provider value={store}>\n {children}\n </TemplateStoreContext.Provider>\n )\n}\n","const isIterable = (obj) => Symbol.iterator in obj;\nconst hasIterableEntries = (value) => (\n // HACK: avoid checking entries type\n \"entries\" in value\n);\nconst compareEntries = (valueA, valueB) => {\n const mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());\n const mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());\n if (mapA.size !== mapB.size) {\n return false;\n }\n for (const [key, value] of mapA) {\n if (!mapB.has(key) || !Object.is(value, mapB.get(key))) {\n return false;\n }\n }\n return true;\n};\nconst compareIterables = (valueA, valueB) => {\n const iteratorA = valueA[Symbol.iterator]();\n const iteratorB = valueB[Symbol.iterator]();\n let nextA = iteratorA.next();\n let nextB = iteratorB.next();\n while (!nextA.done && !nextB.done) {\n if (!Object.is(nextA.value, nextB.value)) {\n return false;\n }\n nextA = iteratorA.next();\n nextB = iteratorB.next();\n }\n return !!nextA.done && !!nextB.done;\n};\nfunction shallow(valueA, valueB) {\n if (Object.is(valueA, valueB)) {\n return true;\n }\n if (typeof valueA !== \"object\" || valueA === null || typeof valueB !== \"object\" || valueB === null) {\n return false;\n }\n if (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {\n return false;\n }\n if (isIterable(valueA) && isIterable(valueB)) {\n if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {\n return compareEntries(valueA, valueB);\n }\n return compareIterables(valueA, valueB);\n }\n return compareEntries(\n { entries: () => Object.entries(valueA) },\n { entries: () => Object.entries(valueB) }\n );\n}\n\nexport { shallow };\n","import React from 'react';\nimport { shallow } from 'zustand/vanilla/shallow';\n\nfunction useShallow(selector) {\n const prev = React.useRef(void 0);\n return (state) => {\n const next = selector(state);\n return shallow(prev.current, next) ? prev.current : prev.current = next;\n };\n}\n\nexport { useShallow };\n","/**\n * @file shell/store/templateContext.ts\n * @description 消费侧 hooks:基于 zustand selector 实现,保持原有公开 API 不变。\n *\n * 公开 hooks:\n * - useTemplateState() → { meta, form, lists }\n * - useTemplateErrors() → TemplateFormErrors\n * - useTemplateActions() → 所有 setter/reset/validate\n * - useTemplateIntegrations() → CMReportingIntegrations | undefined\n */\n\nimport { useMemo } from 'react'\nimport { useShallow } from 'zustand/react/shallow'\n\nimport { useTemplateStore } from './templateStoreContext'\nimport type {\n MineralReconcileNotice,\n TemplateFormErrors,\n TemplateFormState,\n} from './templateTypes'\n\n// ---------------------------------------------------------------------------\n// 公开类型(保持向后兼容)\n// ---------------------------------------------------------------------------\n\n/** 表单主体读取切片(不含列表与错误)。 */\ninterface TemplateFormSlice {\n companyInfo: TemplateFormState['companyInfo']\n selectedMinerals: TemplateFormState['selectedMinerals']\n customMinerals: TemplateFormState['customMinerals']\n questions: TemplateFormState['questions']\n questionComments: TemplateFormState['questionComments']\n companyQuestions: TemplateFormState['companyQuestions']\n}\n\n/** 列表数据读取切片。 */\ninterface TemplateListsSlice {\n mineralsScope: TemplateFormState['mineralsScope']\n smelterList: TemplateFormState['smelterList']\n mineList: TemplateFormState['mineList']\n productList: TemplateFormState['productList']\n}\n\n/** 模板静态信息。 */\ninterface TemplateMetaSlice {\n templateType: import('@core/registry/types').TemplateType\n versionId: string\n versionDef: import('@core/registry/types').TemplateVersionDef\n}\n\n/** 模板完整读取视图(静态信息 + 表单主体 + 列表)。 */\ninterface TemplateState {\n meta: TemplateMetaSlice\n form: TemplateFormSlice\n lists: TemplateListsSlice\n}\n\n/** 表单写操作。 */\ninterface TemplateActionsValue {\n setCompanyInfoField: (key: string, value: string) => void\n setSelectedMinerals: (minerals: string[]) => void\n setCustomMinerals: (minerals: string[]) => void\n setQuestionValue: (questionKey: string, mineralKey: string | null, value: string) => void\n setQuestionComment: (questionKey: string, mineralKey: string | null, value: string) => void\n setCompanyQuestionValue: (key: string, value: string, mineralKey?: string) => void\n setMineralsScope: (rows: TemplateFormState['mineralsScope']) => void\n setSmelterList: (rows: TemplateFormState['smelterList']) => void\n setMineList: (rows: TemplateFormState['mineList']) => void\n setProductList: (rows: TemplateFormState['productList']) => void\n setFormData: (data: TemplateFormState) => void\n validateForm: () => Promise<boolean>\n resetForm: () => void\n clearMineralReconcileNotice: () => void\n}\n\n// ---------------------------------------------------------------------------\n// Selectors(提升到模块顶层避免每次渲染创建新引用)\n// ---------------------------------------------------------------------------\n\nconst selectMeta = (s: { templateType: TemplateMetaSlice['templateType']; versionId: string; versionDef: TemplateMetaSlice['versionDef'] }): TemplateMetaSlice => ({\n templateType: s.templateType,\n versionId: s.versionId,\n versionDef: s.versionDef,\n})\n\nconst selectForm = (s: TemplateFormSlice): TemplateFormSlice => ({\n companyInfo: s.companyInfo,\n selectedMinerals: s.selectedMinerals,\n customMinerals: s.customMinerals,\n questions: s.questions,\n questionComments: s.questionComments,\n companyQuestions: s.companyQuestions,\n})\n\nconst selectLists = (s: TemplateListsSlice): TemplateListsSlice => ({\n mineralsScope: s.mineralsScope,\n smelterList: s.smelterList,\n mineList: s.mineList,\n productList: s.productList,\n})\n\nconst selectErrors = (s: { errors: TemplateFormErrors }): TemplateFormErrors => s.errors\n\nconst selectIntegrations = (s: { integrations?: import('@lib/public/integrations').CMReportingIntegrations }) => s.integrations\nconst selectMineralReconcileNotice = (s: { mineralReconcileNotice: MineralReconcileNotice | null }) => s.mineralReconcileNotice\n\n/**\n * Actions selector:虽然 zustand store 中 action 引用在 store 生命周期内不变,\n * 但 selector 每次返回新对象。搭配 useShallow 做属性级浅比较,\n * 确保 action 引用未变时不触发消费组件 re-render。\n * 开销极低(~13 个属性的 === 比较),无需额外优化。\n */\nconst selectActions = (s: TemplateActionsValue): TemplateActionsValue => ({\n setCompanyInfoField: s.setCompanyInfoField,\n setSelectedMinerals: s.setSelectedMinerals,\n setCustomMinerals: s.setCustomMinerals,\n setQuestionValue: s.setQuestionValue,\n setQuestionComment: s.setQuestionComment,\n setCompanyQuestionValue: s.setCompanyQuestionValue,\n setMineralsScope: s.setMineralsScope,\n setSmelterList: s.setSmelterList,\n setMineList: s.setMineList,\n setProductList: s.setProductList,\n setFormData: s.setFormData,\n validateForm: s.validateForm,\n resetForm: s.resetForm,\n clearMineralReconcileNotice: s.clearMineralReconcileNotice,\n})\n\n// ---------------------------------------------------------------------------\n// 公开 hooks\n// ---------------------------------------------------------------------------\n\n/** 读取模板状态(静态信息 + 表单主体 + 列表)。 */\nexport function useTemplateState(): TemplateState {\n const meta = useTemplateStore(useShallow(selectMeta))\n const form = useTemplateStore(useShallow(selectForm))\n const lists = useTemplateStore(useShallow(selectLists))\n\n return useMemo(() => ({ meta, form, lists }), [meta, form, lists])\n}\n\n/** 读取表单错误信息。 */\nexport function useTemplateErrors(): TemplateFormErrors {\n return useTemplateStore(selectErrors)\n}\n\n/** 读取表单写操作。 */\nexport function useTemplateActions(): TemplateActionsValue {\n return useTemplateStore(useShallow(selectActions))\n}\n\n/** 读取对外 integrations(宿主扩展点)。 */\nexport function useTemplateIntegrations() {\n return useTemplateStore(selectIntegrations)\n}\n\n/** 读取矿种删除后的人工校对提示。 */\nexport function useMineralReconcileNotice() {\n return useTemplateStore(selectMineralReconcileNotice)\n}\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nexport default baseGet;\n","import baseGet from './_baseGet.js';\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\nfunction compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default compact;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nexport default arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nexport default equalArrays;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nexport default mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nexport default baseIsMatch;\n","import isObject from './isObject.js';\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\nexport default getMatchData;\n","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\nexport default baseMatches;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n}\n\nexport default baseMatchesProperty;\n","/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\nexport default baseIteratee;\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nexport default arrayAggregator;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nexport default baseAggregator;\n","import arrayAggregator from './_arrayAggregator.js';\nimport baseAggregator from './_baseAggregator.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nexport default createAggregator;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseAssignValue from './_baseAssignValue.js';\nimport createAggregator from './_createAggregator.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n});\n\nexport default groupBy;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport arrayMap from './_arrayMap.js';\nimport baseUnary from './_baseUnary.js';\nimport cacheHas from './_cacheHas.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMin = Math.min;\n\n/**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\nfunction baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseIntersection;\n","import isArrayLikeObject from './isArrayLikeObject.js';\n\n/**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\nfunction castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n}\n\nexport default castArrayLikeObject;\n","import arrayMap from './_arrayMap.js';\nimport baseIntersection from './_baseIntersection.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseRest from './_baseRest.js';\nimport castArrayLikeObject from './_castArrayLikeObject.js';\nimport last from './last.js';\n\n/**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\nvar intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, baseIteratee(iteratee, 2))\n : [];\n});\n\nexport default intersectionBy;\n","/**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\nfunction baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n}\n\nexport default baseSum;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n}\n\nexport default baseSome;\n","import arraySome from './_arraySome.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseSome from './_baseSome.js';\nimport isArray from './isArray.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\nfunction some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default some;\n","import baseIteratee from './_baseIteratee.js';\nimport baseSum from './_baseSum.js';\n\n/**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\nfunction sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, baseIteratee(iteratee, 2))\n : 0;\n}\n\nexport default sumBy;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nexport default baseUniq;\n","import baseUniq from './_baseUniq.js';\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nexport default uniq;\n","/**\n * @file core/template/minerals.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { MetalDropdownSource, MineralDef, TemplateVersionDef } from '@core/registry/types'\nimport type { QuestionAnswers } from '@core/rules/gating'\nimport { compact, intersectionBy } from 'lodash-es'\n\nconst OTHER_MINERAL_PREFIX = 'other-'\n\nfunction buildOtherMineralKey(index: number): string {\n return `${OTHER_MINERAL_PREFIX}${index}`\n}\n\nfunction getOtherMineralKeys(customMinerals: string[]): string[] {\n return compact(\n customMinerals.map((label, index) =>\n label.trim() ? buildOtherMineralKey(index) : null\n )\n )\n}\n\nfunction buildOtherMinerals(customMinerals: string[]): MineralDef[] {\n return compact(\n customMinerals.map((label, index) =>\n label.trim()\n ? { key: buildOtherMineralKey(index), labelKey: 'minerals.other' }\n : null\n )\n )\n}\n\nexport function parseOtherMineralKey(key: string): number | null {\n if (!key.startsWith(OTHER_MINERAL_PREFIX)) return null\n const index = Number(key.slice(OTHER_MINERAL_PREFIX.length))\n return Number.isFinite(index) ? index : null\n}\n\nfunction getAnswerForMineral(\n answers: QuestionAnswers,\n questionKey: string,\n mineralKey: string\n): string {\n const question = answers[questionKey]\n if (typeof question === 'object') {\n return question[mineralKey] || ''\n }\n if (typeof question === 'string') {\n return question\n }\n return ''\n}\n\n/**\n * 导出函数:getMetalsForSource。\n */\nexport function getMetalsForSource(\n source: MetalDropdownSource | undefined,\n versionDef: TemplateVersionDef,\n answers: QuestionAnswers,\n options?: { selectedMinerals?: string[]; customMinerals?: string[] }\n): MineralDef[] {\n if (!source) return []\n\n if (source.type === 'fixed') {\n return source.metals\n }\n\n if (source.type === 'dynamic-active') {\n return getActiveMinerals(\n versionDef,\n options?.selectedMinerals ?? [],\n options?.customMinerals ?? []\n )\n }\n\n if (source.type === 'dynamic-q1-yes') {\n return intersectionBy(\n versionDef.mineralScope.minerals,\n compact(\n versionDef.mineralScope.minerals.map((mineral) =>\n getAnswerForMineral(answers, 'Q1', mineral.key) === 'Yes' ? mineral : null\n )\n ),\n (mineral) => mineral.key\n )\n }\n\n if (source.type === 'dynamic-q2-yes') {\n return intersectionBy(\n versionDef.mineralScope.minerals,\n compact(\n versionDef.mineralScope.minerals.map((mineral) =>\n getAnswerForMineral(answers, 'Q2', mineral.key) === 'Yes' ? mineral : null\n )\n ),\n (mineral) => mineral.key\n )\n }\n\n return []\n}\n\n/**\n * 导出函数:getCustomMineralLabels。\n */\nexport function getCustomMineralLabels(\n versionDef: TemplateVersionDef,\n customMinerals: string[],\n selectedMinerals: string[] = []\n): Map<string, string> {\n const labels = new Map<string, string>()\n if (versionDef.mineralScope.mode === 'free-text') {\n versionDef.mineralScope.minerals.forEach((mineral, index) => {\n const label = customMinerals[index]?.trim()\n if (label) labels.set(mineral.key, label)\n })\n return labels\n }\n\n if (\n versionDef.mineralScope.mode === 'dynamic-dropdown' &&\n selectedMinerals.includes('other')\n ) {\n customMinerals.forEach((label, index) => {\n const value = label.trim()\n if (value) labels.set(buildOtherMineralKey(index), value)\n })\n }\n\n return labels\n}\n\n/**\n * 导出函数:getActiveMineralKeys。\n */\nexport function getActiveMineralKeys(\n versionDef: TemplateVersionDef,\n selectedMinerals: string[],\n customMinerals: string[]\n): string[] {\n const minerals = versionDef.mineralScope.minerals\n if (versionDef.mineralScope.mode === 'dynamic-dropdown') {\n const base = minerals\n .filter((m) => m.key !== 'other' && selectedMinerals.includes(m.key))\n .map((m) => m.key)\n const otherKeys = selectedMinerals.includes('other')\n ? getOtherMineralKeys(customMinerals)\n : []\n return [...base, ...otherKeys]\n }\n if (versionDef.mineralScope.mode === 'free-text') {\n return minerals\n .filter((_, index) => Boolean(customMinerals[index]?.trim()))\n .map((m) => m.key)\n }\n return minerals.map((m) => m.key)\n}\n\n/**\n * 导出函数:getActiveMinerals。\n */\nexport function getActiveMinerals(\n versionDef: TemplateVersionDef,\n selectedMinerals: string[],\n customMinerals: string[]\n): MineralDef[] {\n const allMinerals = versionDef.mineralScope.minerals\n\n if (versionDef.mineralScope.mode === 'dynamic-dropdown') {\n const base = intersectionBy(\n allMinerals,\n compact(\n allMinerals.map((mineral) =>\n selectedMinerals.includes(mineral.key) && mineral.key !== 'other' ? mineral : null\n )\n ),\n (mineral) => mineral.key\n )\n const otherMinerals = selectedMinerals.includes('other')\n ? buildOtherMinerals(customMinerals)\n : []\n return [...base, ...otherMinerals]\n }\n\n if (versionDef.mineralScope.mode === 'free-text') {\n return compact(\n allMinerals.map((mineral, index) =>\n customMinerals[index]?.trim() ? mineral : null\n )\n )\n }\n\n return allMinerals\n}\n\n/**\n * 导出函数:getDisplayMinerals。\n */\nexport function getDisplayMinerals(\n versionDef: TemplateVersionDef,\n selectedMinerals: string[],\n customMinerals: string[]\n): Array<MineralDef & { label?: string }> {\n const active = getActiveMinerals(versionDef, selectedMinerals, customMinerals)\n const labels = getCustomMineralLabels(versionDef, customMinerals, selectedMinerals)\n return active.map((mineral) => ({ ...mineral, label: labels.get(mineral.key) }))\n}\n","/**\n * @file core/transform/index.ts\n * @description 数据转换工具集:日期格式、冶炼厂 lookup 标准化、DV 选项映射。\n */\n\n// ---------------------------------------------------------------------------\n// 日期转换\n// ---------------------------------------------------------------------------\n\nconst MONTH_NAMES = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n]\n\n/** 将 ISO 日期(YYYY-MM-DD)转为 Excel 展示格式(DD-MMM-YYYY)。 */\nexport function toDisplayDate(isoDate: string): string {\n if (!isoDate) return ''\n const [year, month, day] = isoDate.split('-')\n if (!year || !month || !day) return isoDate\n const monthIndex = parseInt(month, 10) - 1\n if (monthIndex < 0 || monthIndex > 11) return isoDate\n return `${day}-${MONTH_NAMES[monthIndex]}-${year}`\n}\n\n/** 将 Excel 展示日期(DD-MMM-YYYY)转为 ISO 格式(YYYY-MM-DD)。 */\nexport function toIsoDate(displayDate: string): string {\n if (!displayDate) return ''\n const parts = displayDate.split('-')\n if (parts.length !== 3) return displayDate\n const [day, monthStr, year] = parts\n const monthIndex = MONTH_NAMES.findIndex(\n (m) => m.toLowerCase() === monthStr?.toLowerCase()\n )\n if (monthIndex === -1) return displayDate\n const month = String(monthIndex + 1).padStart(2, '0')\n return `${year}-${month}-${day?.padStart(2, '0')}`\n}\n\n// ---------------------------------------------------------------------------\n// 冶炼厂 lookup 特殊值(大小写无关标准化)\n// ---------------------------------------------------------------------------\n\nconst SMELTER_NOT_LISTED_VARIANTS = [\n 'smelter not listed',\n 'Smelter not listed',\n 'Smelter Not Listed',\n]\n\nconst SMELTER_NOT_IDENTIFIED_VARIANTS = [\n 'smelter not yet identified',\n 'Smelter not yet identified',\n 'Smelter Not Yet Identified',\n]\n\n/** 将冶炼厂 lookup 值标准化为规范形式。 */\nexport function normalizeSmelterLookup(value: string): string {\n const lower = value.toLowerCase().trim()\n\n if (SMELTER_NOT_LISTED_VARIANTS.some((v) => v.toLowerCase() === lower)) {\n return 'Smelter not listed'\n }\n\n if (SMELTER_NOT_IDENTIFIED_VARIANTS.some((v) => v.toLowerCase() === lower)) {\n return 'Smelter not yet identified'\n }\n\n return value\n}\n\n/** 判断是否为\"Smelter not listed\"。 */\nexport function isSmelterNotListed(value: string): boolean {\n return SMELTER_NOT_LISTED_VARIANTS.some(\n (v) => v.toLowerCase() === value.toLowerCase().trim()\n )\n}\n\n/** 判断是否为\"Smelter not yet identified\"。 */\nexport function isSmelterNotIdentified(value: string): boolean {\n return SMELTER_NOT_IDENTIFIED_VARIANTS.some(\n (v) => v.toLowerCase() === value.toLowerCase().trim()\n )\n}\n\n// ---------------------------------------------------------------------------\n// DV 选项值映射(internal ↔ display)\n// ---------------------------------------------------------------------------\n\n/**\n * 导出接口类型:OptionTransform。\n */\nexport interface OptionTransform {\n displayValue: string\n internalValue: string\n}\n\n/** 创建 内部值 → 展示值 的映射 Map。 */\nexport function createDisplayValueMap(options: OptionTransform[]): Map<string, string> {\n const map = new Map<string, string>()\n for (const opt of options) {\n map.set(opt.internalValue, opt.displayValue)\n }\n return map\n}\n\n/** 创建 展示值 → 内部值 的映射 Map。 */\nexport function createInternalValueMap(options: OptionTransform[]): Map<string, string> {\n const map = new Map<string, string>()\n for (const opt of options) {\n map.set(opt.displayValue, opt.internalValue)\n }\n return map\n}\n","/**\n * @file core/rules/helpers.ts\n * @description 规则计算共享小工具。\n */\n\n// 说明:规则计算共享小工具\nimport type { I18nKey } from '@core/i18n'\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport { compact } from 'lodash-es'\n\nimport type { GatingResult } from './gating'\n\n/**\n * 根据模板定义构建矿产 key -> labelKey 的映射。\n */\nexport function buildMineralLabelMap(\n versionDef: TemplateVersionDef\n): Map<string, I18nKey> {\n return new Map(\n versionDef.mineralScope.minerals.map((mineral) => [mineral.key, mineral.labelKey])\n )\n}\n\n/**\n * 读取问题答案(支持 perMineral 与非 perMineral)。\n */\nexport function getQuestionAnswerValue(\n answers: Record<string, Record<string, string> | string>,\n questionKey: string,\n mineralKey: string,\n perMineral: boolean\n): string {\n const value = answers[questionKey]\n if (perMineral && typeof value === 'object') {\n return value[mineralKey] || ''\n }\n if (!perMineral && typeof value === 'string') {\n return value\n }\n return ''\n}\n\n/**\n * 计算需要填写 Smelter List 的矿产清单。\n */\nexport function getRequiredSmelterMinerals(params: {\n versionDef: TemplateVersionDef\n activeMinerals: string[]\n gatingByMineral: Map<string, GatingResult>\n}): string[] {\n const { activeMinerals, gatingByMineral } = params\n\n return compact(\n activeMinerals.map((mineralKey) => {\n return gatingByMineral.get(mineralKey)?.smelterListRequired ? mineralKey : null\n })\n )\n}\n","/**\n * @file core/rules/required.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { FieldDef, TemplateVersionDef } from '@core/registry/types'\nimport { getActiveMineralKeys as getActiveMineralKeysFromTemplate } from '@core/template/minerals'\n\nimport { calculateAllGating, type GatingResult, type QuestionAnswers } from './gating'\n\n// ---------------------------------------------------------------------------\n// Required field result\n// ---------------------------------------------------------------------------\n\n/**\n * 导出接口类型:RequiredFieldsResult。\n */\nexport interface RequiredFieldsResult {\n companyInfo: Map<string, boolean>\n questions: Map<string, Map<string, boolean>> // Q1 -> mineral -> required\n companyQuestions: Map<string, boolean>\n smelterListRequired: boolean\n productListRequired: boolean\n}\n\n// ---------------------------------------------------------------------------\n// Form state for required calculation\n// ---------------------------------------------------------------------------\n\n/**\n * 导出接口类型:FormStateForRequired。\n */\nexport interface FormStateForRequired {\n scopeType?: 'A' | 'B' | 'C'\n questionAnswers: QuestionAnswers\n selectedMinerals?: string[]\n customMinerals?: string[]\n}\n\n/**\n * 导出接口类型:RequiredContext。\n */\nexport interface RequiredContext {\n gatingByMineral: Map<string, GatingResult>\n activeMinerals: string[]\n}\n\n/**\n * 导出函数:buildRequiredContext。\n */\nexport function buildRequiredContext(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired\n): RequiredContext {\n const activeMinerals = getActiveMineralKeysFromTemplate(\n versionDef,\n formState.selectedMinerals ?? [],\n formState.customMinerals ?? []\n )\n return {\n gatingByMineral: calculateAllGating(versionDef, formState.questionAnswers, activeMinerals),\n activeMinerals,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Calculate required fields\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:calculateRequiredFields。\n */\nexport function calculateRequiredFields(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired\n): RequiredFieldsResult {\n return calculateRequiredFieldsWithContext(\n versionDef,\n formState,\n buildRequiredContext(versionDef, formState)\n )\n}\n\n/**\n * 导出函数:calculateRequiredFieldsWithContext。\n */\nexport function calculateRequiredFieldsWithContext(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n context: RequiredContext\n): RequiredFieldsResult {\n const { gatingByMineral } = context\n const activeMinerals = new Set(context.activeMinerals)\n /** 必填计算矿种清单:以当前激活矿种为准,确保自定义矿种也被覆盖。 */\n const mineralsForRequired = context.activeMinerals\n\n // Company info fields\n const companyInfo = new Map<string, boolean>()\n for (const field of versionDef.companyInfoFields) {\n companyInfo.set(field.key, isFieldRequired(field, formState))\n }\n\n // Questions: per mineral\n const questions = new Map<string, Map<string, boolean>>()\n for (const question of versionDef.questions) {\n const mineralMap = new Map<string, boolean>()\n\n for (const mineralKey of mineralsForRequired) {\n if (!activeMinerals.has(mineralKey)) {\n mineralMap.set(mineralKey, false)\n continue\n }\n const gating = gatingByMineral.get(mineralKey)\n if (!gating) {\n mineralMap.set(mineralKey, false)\n continue\n }\n\n // Q1 always required if mineral is selected\n if (question.key === 'Q1') {\n mineralMap.set(mineralKey, true)\n continue\n }\n\n // Q2 required if gating allows\n if (question.key === 'Q2') {\n if (versionDef.templateType === 'amrt') {\n mineralMap.set(mineralKey, false)\n } else {\n mineralMap.set(mineralKey, gating.q2Enabled)\n }\n continue\n }\n\n // Q3+ required if later questions enabled\n mineralMap.set(mineralKey, gating.laterQuestionsEnabled)\n }\n\n questions.set(question.key, mineralMap)\n }\n\n // Company questions: enabled by gating\n const companyQuestions = new Map<string, boolean>()\n let companyQuestionsRequired = false\n for (const mineral of activeMinerals) {\n const gating = gatingByMineral.get(mineral)\n if (gating?.companyQuestionsEnabled) {\n companyQuestionsRequired = true\n break\n }\n }\n\n for (const cq of versionDef.companyQuestions) {\n companyQuestions.set(cq.key, companyQuestionsRequired)\n }\n\n // Smelter list required: any active mineral has smelter list required\n let smelterListRequired = false\n for (const mineralKey of activeMinerals) {\n if (gatingByMineral.get(mineralKey)?.smelterListRequired) {\n smelterListRequired = true\n break\n }\n }\n\n // Product list required if scope = B\n const productListRequired = formState.scopeType === 'B'\n\n return {\n companyInfo,\n questions,\n companyQuestions,\n smelterListRequired,\n productListRequired,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Active minerals helper\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:getActiveMineralKeys。\n */\nexport function getActiveMineralKeys(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired\n): string[] {\n return getActiveMineralKeysFromTemplate(\n versionDef,\n formState.selectedMinerals ?? [],\n formState.customMinerals ?? []\n )\n}\n\n// ---------------------------------------------------------------------------\n// Helper: check if a field is required based on its definition and state\n// ---------------------------------------------------------------------------\n\nfunction isFieldRequired(field: FieldDef, formState: FormStateForRequired): boolean {\n if (field.required === true) return true\n if (field.required === false) return false\n\n // Conditional required\n if (field.required === 'conditional') {\n // scopeDescription is required if scope = C\n if (field.key === 'scopeDescription') {\n return formState.scopeType === 'C'\n }\n }\n\n return false\n}\n","/**\n * @file core/rules/checker.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { I18nKey } from '@core/i18n'\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport { getCustomMineralLabels } from '@core/template/minerals'\nimport { isSmelterNotListed } from '@core/transform'\nimport type { MineralsScopeRow } from '@core/types/tableRows'\nimport { isValidEmail } from '@core/validation/email'\nimport { ERROR_KEYS, type ErrorKey } from '@core/validation/errorKeys'\nimport { some } from 'lodash-es'\n\nimport { calculateAllGating } from './gating'\nimport {\n buildMineralLabelMap,\n getQuestionAnswerValue,\n getRequiredSmelterMinerals,\n} from './helpers'\nimport { getActiveMineralKeys, type FormStateForRequired } from './required'\n\n// ---------------------------------------------------------------------------\n// Checker error\n// ---------------------------------------------------------------------------\n\n/**\n * 导出接口类型:CheckerError。\n */\nexport interface CheckerError {\n code: string // e.g., \"R001\", \"E001\", \"C001\", \"A001\"\n messageKey: ErrorKey // i18n key\n fieldPath: string // e.g., \"companyInfo.companyName\", \"questions.Q1.tantalum\"\n fieldLabelKey?: I18nKey\n messageValues?: Record<string, string>\n severity: 'error'\n}\n\n// ---------------------------------------------------------------------------\n// Form data for checking\n// ---------------------------------------------------------------------------\n\n/**\n * 导出接口类型:FormDataForChecker。\n */\nexport interface FormDataForChecker {\n companyInfo: Record<string, string>\n questions: Record<string, Record<string, string> | string>\n companyQuestions: Record<string, Record<string, string> | string>\n mineralsScope: MineralsScopeRow[]\n smelterList: Array<Record<string, string | undefined>>\n mineList?: Array<Record<string, string | undefined>>\n productList: Array<Record<string, string | undefined>>\n}\n\n// ---------------------------------------------------------------------------\n// Run checker\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:runChecker。\n */\nexport function runChecker(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n formData: FormDataForChecker\n): CheckerError[] {\n const errors: CheckerError[] = []\n\n // Check company info required fields\n checkCompanyInfo(versionDef, formState, formData, errors)\n\n // Check questions\n checkQuestions(versionDef, formState, formData, errors)\n\n // Check company-level questions\n checkCompanyQuestions(versionDef, formState, formData, errors)\n\n // Check smelter list\n checkSmelterList(versionDef, formState, formData, errors)\n\n // Check product list\n checkProductList(versionDef, formState, formData, errors)\n\n // Check minerals scope (AMRT only)\n checkMineralsScope(versionDef, formData, errors)\n\n // Check mine list (no-op for templates without checker rules)\n checkMineList(versionDef)\n\n // Check email format\n checkEmailFormat(formData, errors)\n\n return errors\n}\n\n// ---------------------------------------------------------------------------\n// Check company info\n// ---------------------------------------------------------------------------\n\nfunction checkCompanyInfo(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n formData: FormDataForChecker,\n errors: CheckerError[]\n) {\n for (const field of versionDef.companyInfoFields) {\n const value = formData.companyInfo[field.key] || ''\n\n // Check required\n if (field.required === true && !value.trim()) {\n pushError(\n errors,\n 'R',\n ERROR_KEYS.checker.requiredField,\n `companyInfo.${field.key}`,\n field.labelKey\n )\n }\n\n // Check conditional required (scope C -> scopeDescription)\n if (\n field.required === 'conditional' &&\n field.key === 'scopeDescription' &&\n formState.scopeType === 'C' &&\n !value.trim()\n ) {\n pushError(\n errors,\n 'R',\n ERROR_KEYS.checker.requiredField,\n 'companyInfo.scopeDescription',\n 'fields.scopeDescription'\n )\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Check questions (Q1/Q2/Q3+ required per gating)\n// ---------------------------------------------------------------------------\n\nfunction checkQuestions(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n formData: FormDataForChecker,\n errors: CheckerError[]\n) {\n const activeMinerals = getActiveMineralKeys(versionDef, formState)\n const gatingByMineral = calculateAllGating(versionDef, formState.questionAnswers, activeMinerals)\n\n for (const question of versionDef.questions) {\n if (question.perMineral) {\n for (const mineralKey of activeMinerals) {\n const gating = gatingByMineral.get(mineralKey)\n const value = getQuestionAnswerValue(\n formData.questions,\n question.key,\n mineralKey,\n question.perMineral\n )\n const required = isQuestionRequired(versionDef, question.key, gating)\n if (required && !value.trim()) {\n pushError(\n errors,\n 'E',\n ERROR_KEYS.checker.requiredField,\n `questions.${question.key}.${mineralKey}`,\n question.labelKey\n )\n }\n }\n } else {\n const firstMineralKey = activeMinerals[0] ?? versionDef.mineralScope.minerals[0]?.key\n const gating = firstMineralKey ? gatingByMineral.get(firstMineralKey) : undefined\n const value = getQuestionAnswerValue(\n formData.questions,\n question.key,\n firstMineralKey ?? '',\n question.perMineral\n )\n const required = isQuestionRequired(versionDef, question.key, gating)\n if (required && !value.trim()) {\n pushError(\n errors,\n 'E',\n ERROR_KEYS.checker.requiredField,\n `questions.${question.key}`,\n question.labelKey\n )\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Check company-level questions\n// ---------------------------------------------------------------------------\n\nfunction checkCompanyQuestions(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n formData: FormDataForChecker,\n errors: CheckerError[]\n) {\n if (versionDef.companyQuestions.length === 0) return\n\n const activeMinerals = getActiveMineralKeys(versionDef, formState)\n const gatingByMineral = calculateAllGating(versionDef, formState.questionAnswers, activeMinerals)\n const hasRequiredMineral = some(\n activeMinerals,\n (mineralKey) => gatingByMineral.get(mineralKey)?.companyQuestionsEnabled === true,\n )\n if (!hasRequiredMineral) return\n\n for (const question of versionDef.companyQuestions) {\n if (question.perMineral) {\n // ── perMineral 公司问题:每个活跃矿种独立校验 ──\n for (const mineralKey of activeMinerals) {\n if (!gatingByMineral.get(mineralKey)?.companyQuestionsEnabled) continue\n checkSingleCompanyQuestion(formData, question, errors, mineralKey)\n }\n } else {\n // ── 全局公司问题 ──\n checkSingleCompanyQuestion(formData, question, errors)\n }\n }\n}\n\n/**\n * 校验单个公司级问题(含 comment 条件校验)。\n *\n * @param mineralKey - 若为 perMineral 问题则传入矿种 key,否则 undefined\n */\nfunction checkSingleCompanyQuestion(\n formData: FormDataForChecker,\n question: TemplateVersionDef['companyQuestions'][number],\n errors: CheckerError[],\n mineralKey?: string,\n) {\n const asText = (v: unknown) => (typeof v === 'string' ? v : '')\n const fieldSuffix = mineralKey ? `.${mineralKey}` : ''\n\n // ── 1. 校验回答值是否为空 ──\n const value = mineralKey\n ? asText(extractNestedValue(formData.companyQuestions[question.key], mineralKey))\n : asText(formData.companyQuestions[question.key])\n\n if (!value.trim()) {\n pushError(errors, 'E', ERROR_KEYS.checker.requiredField, `companyQuestions.${question.key}${fieldSuffix}`, question.labelKey)\n return\n }\n\n // ── 2. 条件校验 comment:仅当回答值匹配 commentRequiredWhen 时 ──\n if (!question.hasCommentField) return\n const requiredWhen = question.commentRequiredWhen ?? []\n if (requiredWhen.length === 0 || !requiredWhen.includes(value)) return\n\n const commentKey = `${question.key}_comment`\n const comment = mineralKey\n ? asText(extractNestedValue(formData.companyQuestions[commentKey], mineralKey))\n : asText(formData.companyQuestions[commentKey])\n\n if (!comment.trim()) {\n pushError(\n errors, 'E', ERROR_KEYS.checker.requiredCompanyQuestionComment,\n `companyQuestions.${commentKey}${fieldSuffix}`,\n question.commentLabelKey ?? question.labelKey,\n )\n }\n}\n\n/** 从嵌套 Record<string, Record<string, string> | string> 中提取 mineralKey 对应值。 */\nfunction extractNestedValue(record: Record<string, string> | string | undefined, mineralKey: string): string {\n if (record && typeof record === 'object') return record[mineralKey] ?? ''\n return ''\n}\n\n// ---------------------------------------------------------------------------\n// Check product list\n// ---------------------------------------------------------------------------\n\nfunction checkProductList(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n formData: FormDataForChecker,\n errors: CheckerError[]\n) {\n if (formState.scopeType !== 'B') return\n\n const rows = formData.productList ?? []\n if (rows.length === 0) {\n pushError(errors, 'R', ERROR_KEYS.checker.requiredProductList, 'productList')\n return\n }\n\n rows.forEach((row, index) => {\n const productNumber = row.productNumber || ''\n if (!productNumber.trim()) {\n pushError(\n errors,\n 'R',\n ERROR_KEYS.checker.requiredField,\n `productList.${index}.productNumber`,\n versionDef.productList.productNumberLabelKey\n )\n }\n })\n}\n\n// ---------------------------------------------------------------------------\n// Check minerals scope (AMRT only)\n// ---------------------------------------------------------------------------\n\nfunction checkMineralsScope(\n versionDef: TemplateVersionDef,\n formData: FormDataForChecker,\n errors: CheckerError[]\n) {\n if (versionDef.templateType !== 'amrt') return\n\n const rows = formData.mineralsScope ?? []\n rows.forEach((row, index) => {\n const mineral = (row.mineral ?? '').trim()\n if (!mineral) return\n const reason = (row.reason ?? '').trim()\n if (!reason) {\n pushError(\n errors,\n 'A',\n ERROR_KEYS.checker.requiredField,\n `mineralsScope.${index}.reason`,\n 'tables.mineralsScopeReason'\n )\n }\n })\n}\n\n// ---------------------------------------------------------------------------\n// Check smelter list\n// ---------------------------------------------------------------------------\n\nfunction checkSmelterList(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n formData: FormDataForChecker,\n errors: CheckerError[]\n) {\n const rows = formData.smelterList ?? []\n const activeMinerals = getActiveMineralKeys(versionDef, formState)\n const gatingByMineral = calculateAllGating(versionDef, formState.questionAnswers, activeMinerals)\n const mineralLabelMap = buildMineralLabelMap(versionDef)\n const mineralLabelOverrides = getCustomMineralLabels(\n versionDef,\n formState.customMinerals ?? [],\n formState.selectedMinerals ?? []\n )\n\n const requiredMinerals = getRequiredSmelterMinerals({\n versionDef,\n activeMinerals,\n gatingByMineral,\n })\n\n if (requiredMinerals.length === 0) return\n\n for (const mineralKey of requiredMinerals) {\n const hasRow = some(rows, (row) => row.metal === mineralKey)\n if (!hasRow) {\n const override = mineralLabelOverrides.get(mineralKey)\n pushError(\n errors,\n 'R',\n ERROR_KEYS.checker.requiredSmelterList,\n `smelterList.${mineralKey}`,\n override ? undefined : mineralLabelMap.get(mineralKey),\n override ? { field: override } : undefined\n )\n }\n }\n\n if (!versionDef.smelterList.hasLookup) return\n if (!versionDef.smelterList.notListedRequireNameCountry) return\n\n rows.forEach((row, index) => {\n if (!isSmelterNotListed(row.smelterLookup || '')) return\n const name = row.smelterName || ''\n if (!name.trim()) {\n pushError(\n errors,\n 'R',\n ERROR_KEYS.checker.requiredField,\n `smelterList.${index}.smelterName`,\n 'tables.smelterName'\n )\n }\n const country = row.smelterCountry || ''\n if (!country.trim()) {\n pushError(\n errors,\n 'R',\n ERROR_KEYS.checker.requiredField,\n `smelterList.${index}.smelterCountry`,\n 'tables.country'\n )\n }\n })\n}\n\n// ---------------------------------------------------------------------------\n// Check mine list (no template currently requires it in Checker)\n// ---------------------------------------------------------------------------\n\nfunction checkMineList(versionDef: TemplateVersionDef) {\n if (!versionDef.mineList.available) return\n}\n\n// ---------------------------------------------------------------------------\n// Check email format\n// ---------------------------------------------------------------------------\n\nfunction checkEmailFormat(formData: FormDataForChecker, errors: CheckerError[]) {\n const emailFields = ['contactEmail', 'authorizerEmail'] as const\n for (const key of emailFields) {\n const value = formData.companyInfo[key] || ''\n if (value.trim() && !isValidEmail(value)) {\n const fieldLabelKey = key === 'contactEmail' ? 'fields.contactEmail' : 'fields.authorizerEmail'\n pushError(\n errors,\n 'E',\n ERROR_KEYS.checker.invalidEmail,\n `companyInfo.${key}`,\n fieldLabelKey\n )\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction pushError(\n errors: CheckerError[],\n prefix: string,\n messageKey: ErrorKey,\n fieldPath: string,\n fieldLabelKey?: I18nKey,\n messageValues?: Record<string, string>\n) {\n errors.push({\n code: `${prefix}${String(errors.length + 1).padStart(3, '0')}`,\n messageKey,\n fieldPath,\n fieldLabelKey,\n messageValues,\n severity: 'error',\n })\n}\n\nfunction isQuestionRequired(\n versionDef: TemplateVersionDef,\n questionKey: string,\n gating?: { q2Enabled: boolean; laterQuestionsEnabled: boolean }\n) {\n if (questionKey === 'Q1') return true\n if (questionKey === 'Q2') {\n if (versionDef.templateType === 'amrt') return false\n return gating?.q2Enabled ?? true\n }\n return gating?.laterQuestionsEnabled ?? true\n}\n\n// ---------------------------------------------------------------------------\n// Get error count\n// ---------------------------------------------------------------------------\n\n/**\n * 导出函数:getErrorCount。\n */\nexport function getErrorCount(errors: CheckerError[]): number {\n return errors.length\n}\n","/**\n * @file core/rules/docStatus.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { GatingCondition, TemplateVersionDef } from '@core/registry/types'\nimport { compact, uniq } from 'lodash-es'\n\nimport {\n buildRequiredContext,\n calculateRequiredFieldsWithContext,\n type FormStateForRequired,\n} from './required'\n\n/**\n * 导出类型:DocStatusType。\n */\nexport type DocStatusType =\n | 'productListRequired'\n | 'productListNotRequired'\n | 'productListUnknown'\n | 'smelterListRequired'\n | 'smelterListNotRequired'\n | 'smelterListUnknown'\n | 'smelterListPending'\n | 'mineListAvailable'\n | 'mineListNotAvailable'\n\n/**\n * 导出接口类型:DocStatusData。\n */\nexport interface DocStatusData {\n type: DocStatusType\n metals?: string[]\n questions?: 'Q1' | 'Q1/Q2'\n}\n\n/**\n * 导出接口类型:DocStatusBySection。\n */\nexport interface DocStatusBySection {\n productList: DocStatusData\n smelterList: DocStatusData\n mineList: DocStatusData\n}\n\n/**\n * 导出函数:getDocStatusData。\n */\nexport function getDocStatusData(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired\n): DocStatusBySection {\n const requiredContext = buildRequiredContext(versionDef, formState)\n const requiredFields = calculateRequiredFieldsWithContext(versionDef, formState, requiredContext)\n const { activeMinerals, gatingByMineral } = requiredContext\n\n const productList: DocStatusData = requiredFields.productListRequired\n ? { type: 'productListRequired' }\n : formState.scopeType\n ? { type: 'productListNotRequired' }\n : { type: 'productListUnknown' }\n\n const missingGatingMetals = getMissingGatingMetals(\n versionDef.gating.smelterListGating,\n activeMinerals,\n formState.questionAnswers\n )\n let smelterList: DocStatusData\n if (activeMinerals.length === 0) {\n smelterList = { type: 'smelterListUnknown' }\n } else if (missingGatingMetals.length > 0) {\n smelterList = {\n type: 'smelterListPending',\n metals: missingGatingMetals,\n questions: getGatingQuestionLabel(versionDef.gating.smelterListGating),\n }\n } else if (requiredFields.smelterListRequired) {\n const requiredMinerals = compact(\n activeMinerals.map((mineralKey) =>\n gatingByMineral.get(mineralKey)?.smelterListRequired ? mineralKey : null\n )\n )\n smelterList = {\n type: 'smelterListRequired',\n metals: uniq(requiredMinerals),\n }\n } else {\n smelterList = { type: 'smelterListNotRequired' }\n }\n\n const mineList: DocStatusData = versionDef.mineList.available\n ? { type: 'mineListAvailable' }\n : { type: 'mineListNotAvailable' }\n\n return {\n productList,\n smelterList,\n mineList,\n }\n}\n\nfunction getGatingQuestionLabel(condition?: GatingCondition): 'Q1' | 'Q1/Q2' {\n if (!condition) return 'Q1/Q2'\n switch (condition.type) {\n case 'q1-yes':\n case 'q1-not-no':\n case 'q1-not-negatives':\n return 'Q1'\n case 'q1q2-yes':\n case 'q1q2-not-no':\n case 'q1-not-negatives-and-q2-not-negatives':\n return 'Q1/Q2'\n default:\n return 'Q1/Q2'\n }\n}\n\nfunction getMissingGatingMetals(\n condition: GatingCondition | undefined,\n activeMinerals: string[],\n answers: Record<string, Record<string, string> | string>\n): string[] {\n if (!condition) return []\n\n const needsQ1 =\n condition.type === 'q1-yes' ||\n condition.type === 'q1-not-no' ||\n condition.type === 'q1q2-not-no' ||\n condition.type === 'q1-not-negatives' ||\n condition.type === 'q1-not-negatives-and-q2-not-negatives'\n const needsQ2 =\n condition.type === 'q1q2-yes' ||\n condition.type === 'q1q2-not-no' ||\n condition.type === 'q1-not-negatives-and-q2-not-negatives'\n\n const missing = new Set<string>()\n if (needsQ1) {\n const q1 = answers['Q1']\n if (typeof q1 === 'string') {\n if (!q1.trim()) activeMinerals.forEach((m) => missing.add(m))\n } else {\n activeMinerals.forEach((mineral) => {\n if (!q1?.[mineral]?.trim()) missing.add(mineral)\n })\n }\n }\n\n if (needsQ2) {\n const q2 = answers['Q2']\n if (typeof q2 === 'string') {\n if (!q2.trim()) activeMinerals.forEach((m) => missing.add(m))\n } else {\n activeMinerals.forEach((mineral) => {\n if (!q2?.[mineral]?.trim()) missing.add(mineral)\n })\n }\n }\n\n return uniq(Array.from(missing))\n}\n","/**\n * @file core/rules/summary.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { I18nKey } from '@core/i18n'\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport { getCustomMineralLabels } from '@core/template/minerals'\nimport { isSmelterNotListed } from '@core/transform'\nimport { isValidEmail } from '@core/validation/email'\nimport { some } from 'lodash-es'\n\nimport type { FormDataForChecker } from './checker'\nimport { calculateAllGating } from './gating'\nimport {\n buildMineralLabelMap,\n getQuestionAnswerValue,\n getRequiredSmelterMinerals,\n} from './helpers'\nimport type { FormStateForRequired } from './required'\nimport { calculateRequiredFields, getActiveMineralKeys } from './required'\n\n/**\n * 导出类型:Translate。\n */\nexport type Translate = (key: I18nKey, options?: Record<string, unknown>) => string\n\n/**\n * 导出接口类型:SectionProgress。\n */\nexport interface SectionProgress {\n total: number\n completed: number\n}\n\n/**\n * 导出接口类型:CheckerSummary。\n */\nexport interface CheckerSummary {\n completion: number\n totalRequired: number\n completedRequired: number\n /** 分区进度(用于 GlobalErrorBar 显示) */\n sections: {\n companyInfo: SectionProgress\n questionMatrix: SectionProgress\n companyQuestions: SectionProgress\n smelterList: SectionProgress\n productList: SectionProgress\n }\n}\n\n/**\n * 导出接口类型:PassedItem。\n */\nexport interface PassedItem {\n key: string\n label: string\n location: string\n}\n\n/**\n * 导出函数:buildCheckerSummary。\n */\nexport function buildCheckerSummary(\n versionDef: TemplateVersionDef,\n formState: FormStateForRequired,\n formData: FormDataForChecker,\n t: Translate\n): { summary: CheckerSummary; passedItems: PassedItem[] } {\n const asText = (value: unknown) => (typeof value === 'string' ? value : '')\n const required = calculateRequiredFields(versionDef, formState)\n const { companyInfo, questions, companyQuestions, smelterList, productList } = formData\n\n let totalRequired = 0\n let completedRequired = 0\n const passedItems: PassedItem[] = []\n\n const addPassed = (key: string, label: string, location: string) => {\n passedItems.push({ key, label, location })\n }\n\n const declarationLabel = t('checker.groups.declaration')\n const smelterLabel = t('checker.groups.smelter')\n const productLabel = t('checker.groups.product')\n const mineralLabelByKey = buildMineralLabelMap(versionDef)\n const mineralLabelOverrides = getCustomMineralLabels(\n versionDef,\n formState.customMinerals ?? [],\n formState.selectedMinerals ?? []\n )\n\n // Company info fields\n let companyRequired = 0\n let companyCompleted = 0\n for (const field of versionDef.companyInfoFields) {\n const isRequired = required.companyInfo.get(field.key) === true\n if (!isRequired) continue\n totalRequired += 1\n companyRequired += 1\n const value = companyInfo[field.key] || ''\n if (value.trim()) {\n completedRequired += 1\n companyCompleted += 1\n addPassed(`companyInfo.${field.key}`, t(field.labelKey), declarationLabel)\n }\n }\n if (companyRequired > 0 && companyCompleted === companyRequired) {\n addPassed(\n 'summary.companyInfo',\n t('checker.sectionComplete', { section: t('sections.companyInfo') }),\n declarationLabel\n )\n }\n\n // Questions\n let questionsRequired = 0\n let questionsCompleted = 0\n for (const question of versionDef.questions) {\n const requiredMap = required.questions.get(question.key)\n if (!requiredMap) continue\n for (const [mineralKey, isRequired] of requiredMap.entries()) {\n if (!isRequired) continue\n totalRequired += 1\n questionsRequired += 1\n const answer = getQuestionAnswerValue(\n questions,\n question.key,\n mineralKey,\n question.perMineral\n )\n if (answer.trim()) {\n completedRequired += 1\n questionsCompleted += 1\n const mineralLabelKey = mineralLabelByKey.get(mineralKey)\n const mineralLabel = mineralLabelKey ? t(mineralLabelKey) : mineralKey\n addPassed(`questions.${question.key}.${mineralKey}`, `${question.key} ${mineralLabel}`, declarationLabel)\n }\n }\n }\n if (questionsRequired > 0 && questionsCompleted === questionsRequired) {\n addPassed(\n 'summary.questionMatrix',\n t('checker.sectionComplete', { section: t('sections.questionMatrix') }),\n declarationLabel\n )\n }\n\n const activeMinerals = getActiveMineralKeys(versionDef, formState)\n const gatingByMineral = calculateAllGating(versionDef, formState.questionAnswers, activeMinerals)\n\n // Company questions + comment fields\n let companyQuestionsRequired = 0\n let companyQuestionsCompleted = 0\n for (const question of versionDef.companyQuestions) {\n if (question.perMineral) {\n activeMinerals.forEach((mineralKey) => {\n const gating = gatingByMineral.get(mineralKey)\n if (!gating?.companyQuestionsEnabled) return\n totalRequired += 1\n companyQuestionsRequired += 1\n const valueRecord = companyQuestions[question.key]\n const rawValue =\n valueRecord && typeof valueRecord === 'object' ? valueRecord[mineralKey] ?? '' : ''\n const value = asText(rawValue)\n if (value.trim()) {\n completedRequired += 1\n companyQuestionsCompleted += 1\n const overrideLabel = mineralLabelOverrides.get(mineralKey)\n const mineralLabelKey = mineralLabelByKey.get(mineralKey)\n const mineralLabel = overrideLabel ?? (mineralLabelKey ? t(mineralLabelKey) : mineralKey)\n addPassed(\n `companyQuestions.${question.key}.${mineralKey}`,\n `${question.key}. ${t(question.labelKey)} (${mineralLabel})`,\n declarationLabel\n )\n }\n if (question.hasCommentField) {\n const requiredWhen = question.commentRequiredWhen ?? []\n if (requiredWhen.length === 0 || !requiredWhen.includes(value)) return\n totalRequired += 1\n companyQuestionsRequired += 1\n const commentRecord = companyQuestions[`${question.key}_comment`]\n const rawComment =\n commentRecord && typeof commentRecord === 'object'\n ? commentRecord[mineralKey] ?? ''\n : ''\n const comment = asText(rawComment)\n if (comment.trim()) {\n completedRequired += 1\n companyQuestionsCompleted += 1\n const overrideLabel = mineralLabelOverrides.get(mineralKey)\n const mineralLabelKey = mineralLabelByKey.get(mineralKey)\n const mineralLabel = overrideLabel ?? (mineralLabelKey ? t(mineralLabelKey) : mineralKey)\n addPassed(\n `companyQuestions.${question.key}_comment.${mineralKey}`,\n `${t(question.commentLabelKey ?? question.labelKey)} (${mineralLabel})`,\n declarationLabel\n )\n }\n }\n })\n continue\n }\n\n const isRequired = required.companyQuestions.get(question.key) === true\n if (!isRequired) continue\n totalRequired += 1\n companyQuestionsRequired += 1\n const value = asText(companyQuestions[question.key])\n if (value.trim()) {\n completedRequired += 1\n companyQuestionsCompleted += 1\n addPassed(\n `companyQuestions.${question.key}`,\n `${question.key}. ${t(question.labelKey)}`,\n declarationLabel\n )\n }\n\n if (question.hasCommentField) {\n const requiredWhen = question.commentRequiredWhen ?? []\n if (requiredWhen.length > 0 && requiredWhen.includes(value)) {\n totalRequired += 1\n companyQuestionsRequired += 1\n const comment = asText(companyQuestions[`${question.key}_comment`])\n if (comment.trim()) {\n completedRequired += 1\n companyQuestionsCompleted += 1\n addPassed(\n `companyQuestions.${question.key}_comment`,\n t(question.commentLabelKey ?? question.labelKey),\n declarationLabel\n )\n }\n }\n }\n }\n if (companyQuestionsRequired > 0 && companyQuestionsCompleted === companyQuestionsRequired) {\n addPassed(\n 'summary.companyQuestions',\n t('checker.sectionComplete', { section: t('sections.companyQuestions') }),\n declarationLabel\n )\n }\n\n // Smelter list required by mineral\n const requiredMinerals = getRequiredSmelterMinerals({\n versionDef,\n activeMinerals,\n gatingByMineral,\n })\n let smelterRequired = 0\n let smelterCompleted = 0\n requiredMinerals.forEach((mineralKey) => {\n totalRequired += 1\n smelterRequired += 1\n const hasRow = some(smelterList, (row) => row.metal === mineralKey)\n if (hasRow) {\n completedRequired += 1\n smelterCompleted += 1\n const overrideLabel = mineralLabelOverrides.get(mineralKey)\n const mineralLabelKey = mineralLabelByKey.get(mineralKey)\n const mineralLabel = overrideLabel ?? (mineralLabelKey ? t(mineralLabelKey) : mineralKey)\n addPassed(\n `smelterList.${mineralKey}`,\n t('checker.passedSmelterForMineral', { mineral: mineralLabel }),\n smelterLabel\n )\n }\n })\n // Smelter not listed -> name/country required (when enabled)\n if (versionDef.smelterList.hasLookup && versionDef.smelterList.notListedRequireNameCountry) {\n smelterList.forEach((row, index) => {\n if (!isSmelterNotListed(row.smelterLookup || '')) return\n totalRequired += 1\n smelterRequired += 1\n const name = row.smelterName || ''\n if (name.trim()) {\n completedRequired += 1\n smelterCompleted += 1\n addPassed(\n `smelterList.${index}.smelterName`,\n t('tables.smelterName'),\n smelterLabel\n )\n }\n totalRequired += 1\n smelterRequired += 1\n const country = row.smelterCountry || ''\n if (country.trim()) {\n completedRequired += 1\n smelterCompleted += 1\n addPassed(\n `smelterList.${index}.smelterCountry`,\n t('tables.country'),\n smelterLabel\n )\n }\n })\n }\n\n if (smelterRequired > 0 && smelterCompleted === smelterRequired) {\n addPassed(\n 'summary.smelterList',\n t('checker.sectionComplete', { section: t('tabs.smelterList') }),\n smelterLabel\n )\n }\n\n // Product list required for scope B\n let productRequired = 0\n let productCompleted = 0\n if (formState.scopeType === 'B') {\n totalRequired += 1\n productRequired += 1\n if (productList.length > 0) {\n completedRequired += 1\n productCompleted += 1\n addPassed('productList', t('checker.passedProductList'), productLabel)\n }\n productList.forEach((row, index) => {\n totalRequired += 1\n productRequired += 1\n const value = row.productNumber || ''\n if (value.trim()) {\n completedRequired += 1\n productCompleted += 1\n addPassed(`productList.${row.id}.productNumber`, t('checker.passedProductRow', { index: index + 1 }), productLabel)\n }\n })\n if (productRequired > 0 && productCompleted === productRequired) {\n addPassed(\n 'summary.productList',\n t('checker.sectionComplete', { section: t('tabs.productList') }),\n productLabel\n )\n }\n }\n\n // Valid email checks (only if provided)\n const contactEmail = companyInfo.contactEmail || ''\n if (contactEmail.trim() && isValidEmail(contactEmail)) {\n addPassed('companyInfo.contactEmail.valid', t('checker.validEmail', { field: t('fields.contactEmail') }), declarationLabel)\n }\n const authorizerEmail = companyInfo.authorizerEmail || ''\n if (authorizerEmail.trim() && isValidEmail(authorizerEmail)) {\n addPassed(\n 'companyInfo.authorizerEmail.valid',\n t('checker.validEmail', { field: t('fields.authorizerEmail') }),\n declarationLabel\n )\n }\n\n const completion = totalRequired > 0 ? Math.round((completedRequired / totalRequired) * 100) : 100\n\n return {\n summary: {\n completion,\n totalRequired,\n completedRequired,\n sections: {\n companyInfo: { total: companyRequired, completed: companyCompleted },\n questionMatrix: { total: questionsRequired, completed: questionsCompleted },\n companyQuestions: { total: companyQuestionsRequired, completed: companyQuestionsCompleted },\n smelterList: { total: smelterRequired, completed: smelterCompleted },\n productList: { total: productRequired, completed: productCompleted },\n },\n },\n passedItems,\n }\n}\n","/**\n * @file core/data/countries.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { TemplateType } from '@core/registry/types'\n\nconst BASE_COUNTRIES = [\n 'China',\n 'Malaysia',\n 'Indonesia',\n 'Japan',\n 'USA',\n 'Germany',\n 'Switzerland',\n 'Vietnam',\n 'Thailand',\n 'Philippines',\n]\n\nconst CRT_COUNTRIES = [...BASE_COUNTRIES, 'Unknown']\n\nconst COUNTRIES_BY_TEMPLATE: Record<TemplateType, string[]> = {\n cmrt: BASE_COUNTRIES,\n emrt: BASE_COUNTRIES,\n crt: CRT_COUNTRIES,\n amrt: BASE_COUNTRIES,\n}\n\n/**\n * 导出接口类型:CountryOption。\n */\nexport interface CountryOption {\n value: string\n label: string\n}\n\n/**\n * 导出函数:getCountryOptions。\n */\nexport function getCountryOptions(templateType: TemplateType): CountryOption[] {\n const list = COUNTRIES_BY_TEMPLATE[templateType] ?? BASE_COUNTRIES\n return list.map((value) => ({ value, label: value }))\n}\n","/**\n * @file core/viewmodels/pages.ts\n * @description 页面派生数据的纯函数集合。\n */\n\n// 说明:页面只负责渲染,这里的函数负责“从模板/表单派生展示数据”。\n\nimport { compact, uniq } from 'lodash-es'\n\nimport { getCountryOptions } from '../data/countries'\nimport type { TemplateType, TemplateVersionDef } from '../registry/types'\nimport { getCustomMineralLabels, getDisplayMinerals, getMetalsForSource } from '../template/minerals'\nimport { isSmelterNotIdentified, isSmelterNotListed } from '../transform'\nimport type { SmelterRow } from '../types/tableRows'\n\n/** Declaration 页面派生数据。 */\nexport function buildDeclarationViewModel({\n versionDef,\n selectedMinerals,\n customMinerals,\n}: {\n versionDef: TemplateVersionDef\n selectedMinerals: string[]\n customMinerals: string[]\n}) {\n const displayMinerals = getDisplayMinerals(\n versionDef,\n selectedMinerals,\n customMinerals\n )\n\n return {\n displayMinerals,\n }\n}\n\n/** Smelter List 页面派生数据。 */\nexport function buildSmelterListViewModel({\n templateType,\n versionDef,\n questionAnswers,\n selectedMinerals,\n customMinerals,\n}: {\n templateType: TemplateType\n versionDef: TemplateVersionDef\n questionAnswers: Record<string, Record<string, string> | string>\n selectedMinerals?: string[]\n customMinerals?: string[]\n}) {\n const labelOverrides = getCustomMineralLabels(\n versionDef,\n customMinerals ?? [],\n selectedMinerals ?? []\n )\n const availableMetals = getMetalsForSource(\n versionDef.smelterList.metalDropdownSource,\n versionDef,\n questionAnswers,\n { selectedMinerals, customMinerals }\n ).map((mineral) => ({ ...mineral, label: labelOverrides.get(mineral.key) }))\n const countryOptions = getCountryOptions(templateType)\n\n const showNotYetIdentifiedCountryHint =\n (templateType === 'emrt' && versionDef.version.id === '2.1') ||\n (templateType === 'amrt' && versionDef.version.id === '1.3')\n\n return {\n availableMetals,\n countryOptions,\n showNotYetIdentifiedCountryHint,\n }\n}\n\n/** Mine List 页面派生数据。 */\nexport function buildMineListViewModel({\n templateType,\n versionDef,\n questionAnswers,\n selectedMinerals,\n customMinerals,\n smelterList,\n}: {\n templateType: TemplateType\n versionDef: TemplateVersionDef\n questionAnswers: Record<string, Record<string, string> | string>\n selectedMinerals?: string[]\n customMinerals?: string[]\n smelterList: SmelterRow[]\n}) {\n const labelOverrides = getCustomMineralLabels(\n versionDef,\n customMinerals ?? [],\n selectedMinerals ?? []\n )\n const availableMetals = versionDef.mineList.available\n ? getMetalsForSource(\n versionDef.mineList.metalDropdownSource,\n versionDef,\n questionAnswers,\n { selectedMinerals, customMinerals }\n ).map((mineral) => ({ ...mineral, label: labelOverrides.get(mineral.key) }))\n : []\n const countryOptions = getCountryOptions(templateType)\n\n const smelterNames = compact<string>(\n smelterList.map((row) => {\n if (row.smelterName) return row.smelterName\n if (\n row.smelterLookup &&\n !isSmelterNotListed(row.smelterLookup) &&\n !isSmelterNotIdentified(row.smelterLookup)\n ) {\n return row.smelterLookup\n }\n return null\n })\n )\n const smelterOptions = uniq(smelterNames).map((value) => ({ value, label: value }))\n const smelterOptionsByMetal = (() => {\n const map = new Map<string, Set<string>>()\n smelterList.forEach((row) => {\n const metalKey = row.metal?.trim()\n if (!metalKey) return\n const name = row.smelterName\n ? row.smelterName\n : row.smelterLookup &&\n !isSmelterNotListed(row.smelterLookup) &&\n !isSmelterNotIdentified(row.smelterLookup)\n ? row.smelterLookup\n : ''\n if (!name) return\n const bucket = map.get(metalKey) ?? new Set<string>()\n bucket.add(name)\n map.set(metalKey, bucket)\n })\n return Object.fromEntries(\n Array.from(map.entries()).map(([metalKey, names]) => [\n metalKey,\n Array.from(names).map((value) => ({ value, label: value })),\n ])\n )\n })()\n\n return {\n availableMetals,\n countryOptions,\n smelterOptions,\n smelterOptionsByMetal,\n }\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var isObject = function (value) {\n return value !== null && typeof value === 'object';\n};\nexport var isFunction = function (value) {\n return typeof value === 'function';\n};\nexport var isString = function (value) { return typeof value === 'string'; };\nexport var isBoolean = function (value) { return typeof value === 'boolean'; };\nexport var isNumber = function (value) { return typeof value === 'number'; };\nexport var isUndef = function (value) { return typeof value === 'undefined'; };\n","var isDev = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'test';\nexport default isDev;\n","import { useMemo, useRef } from 'react';\nimport { isFunction } from '../utils';\nimport isDev from '../utils/isDev';\nvar useMemoizedFn = function (fn) {\n if (isDev) {\n if (!isFunction(fn)) {\n console.error(\"useMemoizedFn expected parameter is a function, got \".concat(typeof fn));\n }\n }\n var fnRef = useRef(fn);\n // why not write `fnRef.current = fn`?\n // https://github.com/alibaba/hooks/issues/728\n fnRef.current = useMemo(function () { return fn; }, [fn]);\n var memoizedFn = useRef(undefined);\n if (!memoizedFn.current) {\n memoizedFn.current = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fnRef.current.apply(this, args);\n };\n }\n return memoizedFn.current;\n};\nexport default useMemoizedFn;\n","function depsAreSame(oldDeps, deps) {\n if (oldDeps === deps) {\n return true;\n }\n for (var i = 0; i < oldDeps.length; i++) {\n if (!Object.is(oldDeps[i], deps[i])) {\n return false;\n }\n }\n return true;\n}\nexport default depsAreSame;\n","import { useRef } from 'react';\nimport depsAreSame from '../utils/depsAreSame';\nvar useCreation = function (factory, deps) {\n var current = useRef({\n deps: deps,\n obj: undefined,\n initialized: false,\n }).current;\n if (current.initialized === false || !depsAreSame(current.deps, deps)) {\n current.deps = deps;\n current.obj = factory();\n current.initialized = true;\n }\n return current.obj;\n};\nexport default useCreation;\n","import { useRef } from 'react';\nfunction useLatest(value) {\n var ref = useRef(value);\n ref.current = value;\n return ref;\n}\nexport default useLatest;\n","import { __read } from \"tslib\";\nimport { useMemo, useState } from 'react';\nfunction useToggle(defaultValue, reverseValue) {\n if (defaultValue === void 0) { defaultValue = false; }\n var _a = __read(useState(defaultValue), 2), state = _a[0], setState = _a[1];\n var actions = useMemo(function () {\n var reverseValueOrigin = (reverseValue === undefined ? !defaultValue : reverseValue);\n var toggle = function () { return setState(function (s) { return (s === defaultValue ? reverseValueOrigin : defaultValue); }); };\n var set = function (value) { return setState(value); };\n var setLeft = function () { return setState(defaultValue); };\n var setRight = function () { return setState(reverseValueOrigin); };\n return {\n toggle: toggle,\n set: set,\n setLeft: setLeft,\n setRight: setRight,\n };\n // useToggle ignore value change\n // }, [defaultValue, reverseValue]);\n }, []);\n return [state, actions];\n}\nexport default useToggle;\n","import { __read } from \"tslib\";\nimport { useMemo } from 'react';\nimport useToggle from '../useToggle';\nexport default function useBoolean(defaultValue) {\n if (defaultValue === void 0) { defaultValue = false; }\n var _a = __read(useToggle(!!defaultValue), 2), state = _a[0], _b = _a[1], toggle = _b.toggle, set = _b.set;\n var actions = useMemo(function () {\n var setTrue = function () { return set(true); };\n var setFalse = function () { return set(false); };\n return {\n toggle: toggle,\n set: function (v) { return set(!!v); },\n setTrue: setTrue,\n setFalse: setFalse,\n };\n }, []);\n return [state, actions];\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","/**\n * @file ui/i18n/useT.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { I18nKey, Locale } from '@core/i18n'\nimport { useMemoizedFn } from 'ahooks'\nimport { useTranslation } from 'react-i18next'\n\ntype Translate = (key: I18nKey, options?: Record<string, unknown>) => string\n\n/**\n * 自定义 Hook:useT。\n */\nexport function useT() {\n const { t: rawT, i18n } = useTranslation()\n /** 稳定翻译函数,避免依赖项频繁变化。 */\n const t = useMemoizedFn((key: I18nKey, options?: Record<string, unknown>) =>\n rawT(key, options)\n ) as Translate\n return {\n t,\n locale: i18n.language as Locale,\n i18n,\n changeLocale: (locale: Locale) => i18n.changeLanguage(locale),\n }\n}\n","/**\n * @file app/store/ruleContext.ts\n * @description 状态管理与业务模型。\n */\n\n// 说明:状态管理与业务模型\nimport type { TemplateFormState } from './templateTypes'\n\n/**\n * 导出类型:ScopeType。\n */\nexport type ScopeType = 'A' | 'B' | 'C' | undefined\n\n/**\n * 导出接口类型:RuleInput。\n */\nexport interface RuleInput {\n scopeType: ScopeType\n questionAnswers: TemplateFormState['questions']\n selectedMinerals: TemplateFormState['selectedMinerals']\n customMinerals: TemplateFormState['customMinerals']\n}\n\n/**\n * 导出接口类型:DataInput。\n */\nexport interface DataInput {\n companyInfo: TemplateFormState['companyInfo']\n questions: TemplateFormState['questions']\n companyQuestions: TemplateFormState['companyQuestions']\n mineralsScope: TemplateFormState['mineralsScope']\n smelterList: TemplateFormState['smelterList']\n mineList: TemplateFormState['mineList']\n productList: TemplateFormState['productList']\n}\n\n/**\n * 导出接口类型:RuleContext。\n */\nexport interface RuleContext {\n scopeType: ScopeType\n ruleInput: RuleInput\n dataInput: DataInput\n}\n\n/**\n * 导出函数:buildRuleInput。\n */\nexport function buildRuleInput(state: TemplateFormState): RuleInput {\n const scopeType = state.companyInfo.declarationScope as ScopeType\n return {\n scopeType,\n questionAnswers: state.questions,\n selectedMinerals: state.selectedMinerals,\n customMinerals: state.customMinerals,\n }\n}\n\n/**\n * 导出函数:buildDataInput。\n */\nexport function buildDataInput(state: TemplateFormState): DataInput {\n return {\n companyInfo: state.companyInfo,\n questions: state.questions,\n companyQuestions: state.companyQuestions,\n mineralsScope: state.mineralsScope,\n smelterList: state.smelterList,\n mineList: state.mineList,\n productList: state.productList,\n }\n}\n\n/**\n * 导出函数:buildRuleContext。\n */\nexport function buildRuleContext(state: TemplateFormState): RuleContext {\n const scopeType = state.companyInfo.declarationScope as ScopeType\n return {\n scopeType,\n ruleInput: {\n scopeType,\n questionAnswers: state.questions,\n selectedMinerals: state.selectedMinerals,\n customMinerals: state.customMinerals,\n },\n dataInput: buildDataInput(state),\n }\n}\n","/**\n * @file app/store/useTemplateDerived.ts\n * @description 状态管理与业务模型。\n */\n\n// 说明:规则/页面派生逻辑集中在此,页面只消费结果。\nimport { runChecker, type CheckerError } from '@core/rules/checker'\nimport { getDocStatusData, type DocStatusBySection } from '@core/rules/docStatus'\nimport { calculateAllGating, type GatingResult } from '@core/rules/gating'\nimport { calculateRequiredFields, type RequiredFieldsResult } from '@core/rules/required'\nimport { buildCheckerSummary, type CheckerSummary, type PassedItem } from '@core/rules/summary'\nimport { getActiveMineralKeys } from '@core/template/minerals'\nimport { buildDeclarationViewModel, buildMineListViewModel, buildSmelterListViewModel } from '@core/viewmodels/pages'\nimport { useT } from '@ui/i18n/useT'\nimport { useCreation } from 'ahooks'\n\nimport { buildDataInput, buildRuleInput } from './ruleContext'\nimport { useTemplateState } from './templateContext'\n\n/**\n * 导出接口类型:TemplateViewModels。\n */\nexport interface TemplateViewModels {\n declaration: ReturnType<typeof buildDeclarationViewModel>\n smelterList: ReturnType<typeof buildSmelterListViewModel>\n mineList: ReturnType<typeof buildMineListViewModel>\n}\n\n/**\n * 导出接口类型:TemplateDerived。\n */\nexport interface TemplateDerived {\n ruleInput: ReturnType<typeof buildRuleInput>\n dataInput: ReturnType<typeof buildDataInput>\n gatingByMineral: Map<string, GatingResult>\n requiredFields: RequiredFieldsResult\n checkerErrors: CheckerError[]\n checkerSummary: CheckerSummary\n checkerPassedItems: PassedItem[]\n docStatusBySection: DocStatusBySection\n viewModels: TemplateViewModels\n}\n\n/**\n * 导出函数:useTemplateDerived。\n */\nexport function useTemplateDerived(): TemplateDerived {\n const { meta, form, lists } = useTemplateState()\n const { t } = useT()\n\n const formState = useCreation(\n () => ({\n companyInfo: form.companyInfo,\n selectedMinerals: form.selectedMinerals,\n customMinerals: form.customMinerals,\n questions: form.questions,\n questionComments: form.questionComments,\n companyQuestions: form.companyQuestions,\n mineralsScope: lists.mineralsScope,\n smelterList: lists.smelterList,\n mineList: lists.mineList,\n productList: lists.productList,\n }),\n [\n form.companyInfo,\n form.selectedMinerals,\n form.customMinerals,\n form.questions,\n form.questionComments,\n form.companyQuestions,\n lists.mineralsScope,\n lists.smelterList,\n lists.mineList,\n lists.productList,\n ]\n )\n\n const ruleInput = useCreation(() => buildRuleInput(formState), [formState])\n const dataInput = useCreation(() => buildDataInput(formState), [formState])\n\n const activeMinerals = useCreation(\n () => getActiveMineralKeys(meta.versionDef, form.selectedMinerals, form.customMinerals),\n [meta.versionDef, form.selectedMinerals, form.customMinerals]\n )\n const gatingByMineral = useCreation(\n () => calculateAllGating(meta.versionDef, ruleInput.questionAnswers, activeMinerals),\n [meta.versionDef, ruleInput.questionAnswers, activeMinerals]\n )\n const requiredFields = useCreation(\n () => calculateRequiredFields(meta.versionDef, ruleInput),\n [meta.versionDef, ruleInput]\n )\n const checkerErrors = useCreation(\n () => runChecker(meta.versionDef, ruleInput, dataInput),\n [meta.versionDef, ruleInput, dataInput]\n )\n const checkerSummaryResult = useCreation(\n () => buildCheckerSummary(meta.versionDef, ruleInput, dataInput, t),\n [meta.versionDef, ruleInput, dataInput, t]\n )\n const docStatusBySection = useCreation(\n () => getDocStatusData(meta.versionDef, ruleInput),\n [meta.versionDef, ruleInput]\n )\n\n const declarationViewModel = useCreation(\n () =>\n buildDeclarationViewModel({\n versionDef: meta.versionDef,\n selectedMinerals: form.selectedMinerals,\n customMinerals: form.customMinerals,\n }),\n [meta.versionDef, form.selectedMinerals, form.customMinerals]\n )\n const smelterListViewModel = useCreation(\n () =>\n buildSmelterListViewModel({\n templateType: meta.templateType,\n versionDef: meta.versionDef,\n questionAnswers: form.questions,\n selectedMinerals: form.selectedMinerals,\n customMinerals: form.customMinerals,\n }),\n [meta.templateType, meta.versionDef, form.questions, form.selectedMinerals, form.customMinerals, t]\n )\n const mineListViewModel = useCreation(\n () =>\n buildMineListViewModel({\n templateType: meta.templateType,\n versionDef: meta.versionDef,\n questionAnswers: form.questions,\n selectedMinerals: form.selectedMinerals,\n customMinerals: form.customMinerals,\n smelterList: lists.smelterList,\n }),\n [\n meta.templateType,\n meta.versionDef,\n form.questions,\n form.selectedMinerals,\n form.customMinerals,\n lists.smelterList,\n ]\n )\n\n return {\n ruleInput,\n dataInput,\n gatingByMineral,\n requiredFields,\n checkerErrors,\n checkerSummary: checkerSummaryResult.summary,\n checkerPassedItems: checkerSummaryResult.passedItems,\n docStatusBySection,\n viewModels: {\n declaration: declarationViewModel,\n smelterList: smelterListViewModel,\n mineList: mineListViewModel,\n },\n }\n}\n","/**\n * @file core/rules/errorGroups.ts\n * @description Checker 错误分组逻辑。\n */\n\n// 说明:将错误分组规则下沉到 core,避免 UI 重复维护。\nimport type { I18nKey } from '@core/i18n'\nimport type { TemplateType, TemplateVersionDef } from '@core/registry/types'\nimport { groupBy } from 'lodash-es'\n\nimport type { CheckerError } from './checker'\n\ntype ErrorGroupKey =\n | 'companyInfo'\n | 'mineralsScope'\n | 'questionMatrix'\n | 'companyQuestions'\n | 'smelter'\n | 'mine'\n | 'product'\n | 'other'\n\n/**\n * 导出类型:ErrorGroup。\n */\nexport type ErrorGroup = {\n key: ErrorGroupKey\n labelKey: I18nKey\n items: CheckerError[]\n}\n\nconst CMRT_GROUP_ORDER: Array<{ key: ErrorGroupKey; labelKey: I18nKey }> = [\n { key: 'companyInfo', labelKey: 'checker.groups.companyInfo' },\n { key: 'mineralsScope', labelKey: 'checker.groups.mineralsScope' },\n { key: 'questionMatrix', labelKey: 'checker.groups.questionMatrix' },\n { key: 'companyQuestions', labelKey: 'checker.groups.companyQuestions' },\n { key: 'smelter', labelKey: 'checker.groups.smelter' },\n { key: 'mine', labelKey: 'checker.groups.mine' },\n { key: 'product', labelKey: 'checker.groups.product' },\n { key: 'other', labelKey: 'checker.groups.other' },\n] as const\n\nconst DEFAULT_GROUP_ORDER: Array<{ key: ErrorGroupKey; labelKey: I18nKey }> = [\n { key: 'companyInfo', labelKey: 'checker.groups.companyInfo' },\n { key: 'mineralsScope', labelKey: 'checker.groups.mineralsScope' },\n { key: 'questionMatrix', labelKey: 'checker.groups.questionMatrix' },\n { key: 'companyQuestions', labelKey: 'checker.groups.companyQuestions' },\n { key: 'product', labelKey: 'checker.groups.product' },\n { key: 'smelter', labelKey: 'checker.groups.smelter' },\n { key: 'mine', labelKey: 'checker.groups.mine' },\n { key: 'other', labelKey: 'checker.groups.other' },\n] as const\n\n/**\n * 选择分组顺序:CMRT 按 Excel Checker(Smelter 在 Product 之前),\n * 其余模板按 PRD(Product 在 Smelter 之前)。\n */\nconst getGroupOrder = (templateType?: TemplateType) =>\n templateType === 'cmrt' ? CMRT_GROUP_ORDER : DEFAULT_GROUP_ORDER\n\nconst getGroupKey = (fieldPath: string): ErrorGroupKey => {\n const prefix = fieldPath.split('.')[0]\n switch (prefix) {\n case 'companyInfo':\n return 'companyInfo'\n case 'mineralsScope':\n return 'mineralsScope'\n case 'questions':\n return 'questionMatrix'\n case 'companyQuestions':\n return 'companyQuestions'\n case 'smelterList':\n return 'smelter'\n case 'mineList':\n return 'mine'\n case 'productList':\n return 'product'\n default:\n return 'other'\n }\n}\n\n/**\n * 导出函数:groupCheckerErrors。\n */\nconst parseIndex = (value: string) => {\n const index = Number(value)\n return Number.isFinite(index) ? index : null\n}\n\nconst buildOrderMap = (keys: string[]) =>\n new Map(keys.map((key, index) => [key, index]))\n\nconst buildSortKeyFactory = (versionDef: TemplateVersionDef | undefined) => {\n if (!versionDef) {\n return (_groupKey: ErrorGroupKey, error: CheckerError) => error.fieldPath\n }\n\n const companyInfoOrder = buildOrderMap(\n versionDef.companyInfoFields.map((field) => field.key)\n )\n const questionOrder = buildOrderMap(versionDef.questions.map((question) => question.key))\n const mineralOrder = buildOrderMap(\n versionDef.mineralScope.minerals.map((mineral) => mineral.key)\n )\n const companyQuestionOrder = buildOrderMap(\n versionDef.companyQuestions.map((question) => question.key)\n )\n\n return (groupKey: ErrorGroupKey, error: CheckerError) => {\n const parts = error.fieldPath.split('.')\n switch (groupKey) {\n case 'companyInfo': {\n const key = parts[1] ?? ''\n return `${companyInfoOrder.get(key) ?? 999}-${error.fieldPath}`\n }\n case 'mineralsScope': {\n const index = parseIndex(parts[1] ?? '')\n return `${index ?? 999}-mineralsScope-${error.fieldPath}`\n }\n case 'questionMatrix': {\n const questionKey = parts[1] ?? ''\n const mineralKey = parts[2] ?? ''\n const questionIndex = questionOrder.get(questionKey) ?? 999\n const mineralIndex = mineralKey ? mineralOrder.get(mineralKey) ?? 999 : -1\n return `${questionIndex}-${mineralIndex}-${error.fieldPath}`\n }\n case 'companyQuestions': {\n const keyWithSuffix = parts[1] ?? ''\n const isComment = keyWithSuffix.endsWith('_comment')\n const key = isComment ? keyWithSuffix.replace('_comment', '') : keyWithSuffix\n const base = companyQuestionOrder.get(key) ?? 999\n const mineralKey = !isComment ? parts[2] : ''\n const mineralIndex = mineralKey ? mineralOrder.get(mineralKey) ?? 999 : -1\n const suffix = isComment ? 2 : mineralKey ? 0 : 1\n return `${base}-${suffix}-${mineralIndex}-${error.fieldPath}`\n }\n case 'smelter': {\n const index = parseIndex(parts[1] ?? '')\n if (index !== null) {\n return `${index}-smelter-${error.fieldPath}`\n }\n const mineralIndex = mineralOrder.get(parts[1] ?? '') ?? 999\n return `${mineralIndex}-mineral-${error.fieldPath}`\n }\n case 'mine': {\n const index = parseIndex(parts[1] ?? '')\n return `${index ?? -1}-mine-${error.fieldPath}`\n }\n case 'product': {\n const index = parseIndex(parts[1] ?? '')\n return `${index ?? -1}-product-${error.fieldPath}`\n }\n default:\n return error.fieldPath\n }\n }\n}\n\nexport function groupCheckerErrors(\n errors: CheckerError[],\n versionDef?: TemplateVersionDef\n): ErrorGroup[] {\n const grouped = groupBy(errors, (error) => getGroupKey(error.fieldPath))\n const sortKeyFactory = buildSortKeyFactory(versionDef)\n const groupOrder = getGroupOrder(versionDef?.templateType)\n\n return groupOrder.flatMap((group) => {\n const items = grouped[group.key]\n if (!items || items.length === 0) return []\n const sorted = [...items].sort((a, b) =>\n sortKeyFactory(group.key, a).localeCompare(sortKeyFactory(group.key, b))\n )\n return [{ key: group.key, labelKey: group.labelKey, items: sorted }]\n })\n}\n","/**\n * @file ui/hooks/useHandlerMap.ts\n * @description 通用 handler 缓存 hook:合并 useCreation + useMemoizedFn 的重复模式。\n *\n * 典型用法(替代 useCreation + useMemoizedFn 组合):\n *\n * ```ts\n * // 替代前:6+ 行\n * const handlers = useCreation(() => {\n * const map = new Map<string, (v: string) => void>()\n * items.forEach(item => map.set(item.key, v => onChange(item.key, v)))\n * return map\n * }, [items, onChange])\n * const getHandler = useMemoizedFn((key: string) => handlers.get(key))\n *\n * // 替代后:4 行\n * const getHandler = useHandlerMap(() => {\n * const map = new Map<string, (v: string) => void>()\n * items.forEach(item => map.set(item.key, v => onChange(item.key, v)))\n * return map\n * }, [items, onChange])\n * ```\n */\n\nimport { useCreation, useMemoizedFn } from 'ahooks'\n\n/**\n * 创建缓存的 handler Map 并返回稳定的 getter 函数。\n *\n * @param factory 构建 Map 的工厂函数,当 deps 变更时重建。\n * @param deps 依赖数组,语义同 useCreation / useMemo。\n * @returns 稳定引用的 getter 函数:`(key) => handler | undefined`。\n */\nexport function useHandlerMap<K, V>(\n factory: () => Map<K, V>,\n deps: unknown[],\n): (key: K) => V | undefined {\n const map = useCreation(factory, deps)\n return useMemoizedFn((key: K) => map.get(key))\n}\n","/**\n * @file ui/checker/CheckerPanel.tsx\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { I18nKey } from '@core/i18n'\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport type { CheckerError } from '@core/rules/checker'\nimport { groupCheckerErrors } from '@core/rules/errorGroups'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n'\nimport { useBoolean, useCreation, useMemoizedFn } from 'ahooks'\nimport { Button, Card, Collapse, Flex, List, Tag, Typography } from 'antd'\n\nimport type { CheckerSummary, PassedItem } from './types'\n\nconst { Text, Title } = Typography\n\n/**\n * 从 fieldPath 中提取金属 key(用于问题矩阵和公司层面问题)。\n * 例如:questions.Q1.tantalum -> tantalum\n * companyQuestions.A.tantalum -> tantalum\n */\nfunction extractMineralKeyFromPath(fieldPath: string): string | null {\n const parts = fieldPath.split('.')\n // 问题矩阵: questions.Q1.tantalum\n if (parts[0] === 'questions' && parts.length === 3) {\n return parts[2]\n }\n // 公司层面问题: companyQuestions.A.tantalum 或 companyQuestions.A_comment.tantalum\n if (parts[0] === 'companyQuestions' && parts.length === 3) {\n return parts[2]\n }\n return null\n}\n\n/**\n * 根据金属 key 获取对应的翻译 key。\n */\nfunction getMineralLabelKey(mineralKey: string): I18nKey | null {\n const mineralLabelKeys: Record<string, I18nKey> = {\n tantalum: 'minerals.tantalum',\n tin: 'minerals.tin',\n gold: 'minerals.gold',\n tungsten: 'minerals.tungsten',\n cobalt: 'minerals.cobalt',\n mica: 'minerals.mica',\n copper: 'minerals.copper',\n graphite: 'minerals.graphite',\n lithium: 'minerals.lithium',\n nickel: 'minerals.nickel',\n }\n return mineralLabelKeys[mineralKey] ?? null\n}\n\ninterface CheckerPanelProps {\n versionDef: TemplateVersionDef\n errors: CheckerError[]\n summary?: CheckerSummary\n passedItems?: PassedItem[]\n onGoToField?: (error: CheckerError) => void\n}\n\n/**\n * 导出函数:CheckerPanel。\n */\nexport function CheckerPanel({\n versionDef,\n errors,\n summary,\n passedItems = [],\n onGoToField,\n}: CheckerPanelProps) {\n const { t } = useT()\n /** 错误文案翻译:使用稳定引用避免子树重复渲染。 */\n const translateError = useMemoizedFn(\n (key: ErrorKey, values?: Record<string, string | undefined>) => t(key, values),\n )\n const hasErrors = errors.length > 0\n const [showPassedDetails, { toggle: togglePassedDetails }] = useBoolean(false)\n const totalRequired = summary?.totalRequired ?? 0\n const completedRequired = summary?.completedRequired ?? 0\n const passedLabel = summary\n ? t('checker.passedSummary', { count: completedRequired, total: totalRequired })\n : t('checker.noErrors')\n\n /** 仅在 errors/versionDef 变化时重分组,减少渲染成本。 */\n const groupedErrors = useCreation(\n () => groupCheckerErrors(errors, versionDef),\n [errors, versionDef],\n )\n /** 统一的跳转回调,避免在列表内创建多层函数。 */\n const handleGoToField = useMemoizedFn((error: CheckerError) => {\n onGoToField?.(error)\n })\n /** 缓存跳转按钮 handler(返回函数,不在渲染期执行)。 */\n const getGoToFieldHandler = useHandlerMap(() => {\n const map = new Map<string, () => void>()\n if (!onGoToField) return map\n errors.forEach((error) => {\n map.set(`${error.code}-${error.fieldPath}`, () => handleGoToField(error))\n })\n return map\n }, [errors, handleGoToField, onGoToField])\n const passedBodyStyle = showPassedDetails ? undefined : { display: 'none' }\n\n return (\n <Flex vertical gap={16}>\n <div>\n <Title level={5} style={{ margin: 0 }}>\n {t('tabs.checker')}\n </Title>\n <Text type=\"secondary\">{t('checker.subtitle')}</Text>\n </div>\n\n <Card\n title={\n <Flex align=\"center\" justify=\"space-between\" style={{ width: '100%' }}>\n <Flex align=\"center\" gap={8}>\n <span aria-hidden>❌</span>\n <Text type=\"danger\" strong>\n {t('checker.errorsTitle')}\n </Text>\n </Flex>\n <Tag color=\"error\">{t('checker.errorBadge', { count: errors.length })}</Tag>\n </Flex>\n }\n >\n {!hasErrors ? (\n <Typography.Text type=\"secondary\">{t('checker.noErrors')}</Typography.Text>\n ) : (\n <Collapse\n bordered={false}\n defaultActiveKey={groupedErrors.map((g) => g.key)}\n items={groupedErrors.map((group) => ({\n key: group.key,\n label: (\n <Flex align=\"center\" justify=\"space-between\" style={{ width: '100%' }}>\n <Text type=\"secondary\">{t(group.labelKey)}</Text>\n <Tag>{t('checker.groupCount', { count: group.items.length })}</Tag>\n </Flex>\n ),\n children: (\n <Flex vertical gap={8}>\n {group.items.map((error) => {\n const errorKey = `${error.code}-${error.fieldPath}`\n const mineralKey = extractMineralKeyFromPath(error.fieldPath)\n const mineralLabelKey = mineralKey ? getMineralLabelKey(mineralKey) : null\n const mineralLabel = mineralLabelKey ? t(mineralLabelKey) : null\n return (\n <Flex key={errorKey} align=\"flex-start\" justify=\"space-between\" gap={12}>\n <Flex align=\"baseline\" gap={8} wrap>\n {mineralLabel && (\n <Tag color=\"blue\" className=\"shrink-0\">\n {mineralLabel}\n </Tag>\n )}\n <Text>\n {translateError(error.messageKey, {\n field: error.fieldLabelKey ? t(error.fieldLabelKey) : undefined,\n ...(error.messageValues ?? {}),\n })}\n </Text>\n </Flex>\n {onGoToField && (\n <Button\n type=\"link\"\n onClick={getGoToFieldHandler(`${error.code}-${error.fieldPath}`)}\n className=\"shrink-0\"\n >\n {t('checker.goToField')}\n </Button>\n )}\n </Flex>\n )\n })}\n </Flex>\n ),\n }))}\n />\n )}\n </Card>\n\n <Card\n styles={{\n body: passedBodyStyle,\n }}\n title={\n <Flex\n align=\"center\"\n justify=\"space-between\"\n style={{ width: '100%', cursor: 'pointer' }}\n onClick={togglePassedDetails}\n >\n <Text type=\"success\" strong>\n ✅ {passedLabel}\n </Text>\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {showPassedDetails ? t('checker.passedToggleHide') : t('checker.passedToggleShow')}\n </Text>\n </Flex>\n }\n >\n {showPassedDetails &&\n (passedItems.length === 0 ? (\n <Text type=\"secondary\">{t('checker.passedEmpty')}</Text>\n ) : (\n <List\n dataSource={passedItems}\n renderItem={(item) => (\n <List.Item key={item.key}>\n <List.Item.Meta title={item.label} description={item.location} />\n </List.Item>\n )}\n />\n ))}\n </Card>\n </Flex>\n )\n}\n\n// 分组逻辑已下沉到 core(groupCheckerErrors)。\n","/**\n * @file app/pages/CheckerPage.tsx\n * @description 页面组件。\n */\n\n// 说明:页面组件\nimport type { PageKey } from '@core/registry/types'\nimport type { CheckerError } from '@core/rules/checker'\nimport { getPageKeyForFieldPath } from '@core/rules/fieldPath'\nimport { useOptionalNavigation } from '@shell/navigation/useNavigation'\nimport { buildTemplatePath } from '@shell/routing/resolveTemplateRoute'\nimport { useTemplateDerived, useTemplateState } from '@shell/store'\nimport { CheckerPanel } from '@ui/checker/CheckerPanel'\nimport { useMemoizedFn } from 'ahooks'\n\n/** CheckerPage Props。 */\ninterface CheckerPageProps {\n onNavigateToField?: (pageKey: PageKey, fieldPath: string) => void\n}\n\n/** Checker 页面:展示校验结果与跳转到具体字段。 */\nexport function CheckerPage({ onNavigateToField }: CheckerPageProps) {\n const { meta } = useTemplateState()\n const { templateType, versionId, versionDef } = meta\n const { checkerErrors, checkerSummary, checkerPassedItems } = useTemplateDerived()\n const navigation = useOptionalNavigation()\n\n const errors = checkerErrors\n /** 根据错误定位字段所在页面并跳转。 */\n const handleGoToField = useMemoizedFn((error: CheckerError) => {\n const pageKey = getPageKeyForFieldPath(error.fieldPath)\n if (onNavigateToField) {\n onNavigateToField(pageKey, error.fieldPath)\n return\n }\n if (navigation) {\n // 路由模式:优先使用内部导航。\n const path = buildTemplatePath({\n template: templateType,\n version: versionId,\n page: pageKey,\n })\n navigation.actions.navigate(`${path}?focus=${encodeURIComponent(error.fieldPath)}`)\n return\n }\n if (typeof window !== 'undefined') {\n // 无导航上下文时,回退到硬跳转。\n const path = buildTemplatePath({\n template: templateType,\n version: versionId,\n page: pageKey,\n })\n window.location.assign(`${path}?focus=${encodeURIComponent(error.fieldPath)}`)\n }\n })\n\n return (\n <CheckerPanel\n versionDef={versionDef}\n errors={errors}\n summary={checkerSummary}\n passedItems={checkerPassedItems}\n onGoToField={handleGoToField}\n />\n )\n}\n","/**\n * @file ui/fields/error.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { I18nKey } from '@core/i18n'\nimport type { ErrorKey } from '@core/validation/errorKeys'\n\n/**\n * 导出函数:resolveErrorMessage(将错误 key 转为 i18n 文案)。\n */\nexport function resolveErrorMessage(\n t: (key: I18nKey, options?: Record<string, unknown>) => string,\n error?: ErrorKey\n): string | undefined {\n if (!error) return undefined\n return t(error as I18nKey)\n}\n","/**\n * @file ui/fields/TextField.tsx\n * @description 使用 Ant Design Form.Item 封装的文本输入字段(垂直布局)。\n */\n\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useT } from '@ui/i18n/useT'\nimport { useMemoizedFn } from 'ahooks'\nimport { Form, Input } from 'antd'\nimport type { ChangeEvent } from 'react'\n\nimport { resolveErrorMessage } from './error'\n\ninterface TextFieldProps {\n value?: string\n onChange?: (value: string) => void\n label?: string\n placeholder?: string\n hint?: string\n required?: boolean\n disabled?: boolean\n error?: ErrorKey\n multiline?: boolean\n rows?: number\n fieldPath?: string\n className?: string\n style?: React.CSSProperties\n /** HTML autocomplete 属性,用于浏览器自动填充 */\n autoComplete?: string\n /** 是否启用拼写检查,邮箱等字段应设为 false */\n spellCheck?: boolean\n}\n\n/**\n * TextField:使用 Ant Design Form.Item 的文本输入组件(垂直布局)。\n */\nexport function TextField({\n value,\n onChange,\n label,\n placeholder,\n hint,\n required,\n disabled,\n error,\n multiline,\n rows = 3,\n fieldPath,\n className,\n style,\n autoComplete,\n spellCheck,\n}: TextFieldProps) {\n const { t } = useT()\n\n const resolvedPlaceholder = placeholder ?? t('placeholders.input')\n\n const handleChange = useMemoizedFn(\n (e: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n onChange?.(e.target.value)\n }\n )\n\n const errorText = resolveErrorMessage(t, error)\n const validateStatus = errorText ? 'error' : undefined\n\n // 必填字段的黄色背景样式\n const inputClassName = required && !value?.trim() ? 'field-required-empty' : undefined\n\n return (\n <Form.Item\n label={label}\n required={required}\n validateStatus={validateStatus}\n help={errorText}\n extra={hint}\n layout=\"vertical\"\n data-field-path={fieldPath}\n className={className}\n style={style}\n >\n {multiline ? (\n <Input.TextArea\n value={value || undefined}\n onChange={handleChange}\n placeholder={resolvedPlaceholder}\n disabled={disabled}\n rows={rows}\n className={inputClassName}\n autoComplete={autoComplete}\n spellCheck={spellCheck}\n />\n ) : (\n <Input\n value={value || undefined}\n onChange={handleChange}\n placeholder={resolvedPlaceholder}\n disabled={disabled}\n className={inputClassName}\n autoComplete={autoComplete}\n spellCheck={spellCheck}\n />\n )}\n </Form.Item>\n )\n}\n","/**\n * @file ui/fields/SelectField.tsx\n * @description 使用 Ant Design Form.Item 封装的下拉选择字段(垂直布局)。\n */\n\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useT } from '@ui/i18n/useT'\nimport { useMemoizedFn } from 'ahooks'\nimport { Form, Select } from 'antd'\n\nimport { resolveErrorMessage } from './error'\n\ninterface SelectOption {\n value: string\n label: string\n}\n\ninterface SelectFieldProps {\n value?: string\n onChange?: (value: string) => void\n label?: string\n placeholder?: string\n hint?: string\n required?: boolean\n disabled?: boolean\n error?: ErrorKey\n options: SelectOption[]\n allowClear?: boolean\n fieldPath?: string\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * SelectField:使用 Ant Design Form.Item 的下拉选择组件(垂直布局)。\n */\nexport function SelectField({\n value,\n onChange,\n label,\n placeholder,\n hint,\n required,\n disabled,\n error,\n options,\n allowClear = true,\n fieldPath,\n className,\n style,\n}: SelectFieldProps) {\n const { t } = useT()\n\n const errorText = resolveErrorMessage(t, error)\n const validateStatus = errorText ? 'error' : undefined\n const resolvedPlaceholder = placeholder ?? t('placeholders.select')\n\n const handleChange = useMemoizedFn((nextValue: string | undefined | null) => {\n onChange?.(nextValue ?? '')\n })\n\n // 键盘快捷键:Y/N/U 快速选择 Yes/No/Unknown\n const handleKeyDown = useMemoizedFn((e: React.KeyboardEvent) => {\n if (disabled) return\n const key = e.key.toLowerCase()\n // 只处理 Y/N/U 快捷键\n if (key !== 'y' && key !== 'n' && key !== 'u') return\n // 查找以该字母开头的选项(忽略大小写)\n const matchedOption = options.find((opt) =>\n opt.value.toLowerCase().startsWith(key)\n )\n if (matchedOption) {\n e.preventDefault()\n onChange?.(matchedOption.value)\n }\n })\n\n const normalizedValue = value === '' ? undefined : value\n\n // 必填字段的黄色背景样式\n const selectClassName = required && !value ? 'field-required-empty' : undefined\n\n return (\n <Form.Item\n label={label}\n required={required}\n validateStatus={validateStatus}\n help={errorText}\n extra={hint}\n layout=\"vertical\"\n data-field-path={fieldPath}\n className={className}\n style={style}\n >\n <Select\n value={normalizedValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={resolvedPlaceholder}\n disabled={disabled}\n options={options}\n allowClear={allowClear}\n className={selectClassName}\n />\n </Form.Item>\n )\n}\n","/**\n * @file ui/fields/DateField.tsx\n * @description 使用 Ant Design Form.Item 封装的日期选择字段(垂直布局)。\n */\n\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useT } from '@ui/i18n/useT'\nimport { useMemoizedFn } from 'ahooks'\nimport { DatePicker, Form } from 'antd'\nimport dayjs from 'dayjs'\n\nimport { resolveErrorMessage } from './error'\n\n/** UI 展示格式。 */\nconst DISPLAY_FORMAT = 'DD-MMM-YYYY'\n/** 存储格式。 */\nconst STORAGE_FORMAT = 'YYYY-MM-DD'\n\ninterface DateFieldProps {\n value?: string // ISO format: YYYY-MM-DD\n onChange?: (value: string) => void\n label?: string\n placeholder?: string\n hint?: string\n formatHint?: string\n required?: boolean\n disabled?: boolean\n error?: ErrorKey\n minDate?: string\n maxDate?: string\n fieldPath?: string\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * DateField:使用 Ant Design Form.Item 的日期选择组件(垂直布局)。\n */\nexport function DateField({\n value,\n onChange,\n label,\n placeholder,\n hint,\n formatHint,\n required,\n disabled,\n error,\n minDate,\n maxDate,\n fieldPath,\n className,\n style,\n}: DateFieldProps) {\n const { t } = useT()\n\n const errorText = resolveErrorMessage(t, error)\n const validateStatus = errorText ? 'error' : undefined\n const dayjsValue = value ? dayjs(value) : undefined\n const displayHint = hint ?? formatHint\n const displayPlaceholder = placeholder ?? formatHint ?? t('placeholders.date')\n\n const handleChange = useMemoizedFn((date: dayjs.Dayjs | null) => {\n onChange?.(date ? date.format(STORAGE_FORMAT) : '')\n })\n\n const disabledDate = useMemoizedFn((current: dayjs.Dayjs) => {\n if (!current) return false\n if (minDate && current.isBefore(dayjs(minDate), 'day')) return true\n if (maxDate && current.isAfter(dayjs(maxDate), 'day')) return true\n return false\n })\n\n // 必填字段的黄色背景样式\n const pickerClassName = required && !value ? 'field-required-empty' : undefined\n\n return (\n <Form.Item\n label={label}\n required={required}\n validateStatus={validateStatus}\n help={errorText}\n extra={displayHint}\n layout=\"vertical\"\n data-field-path={fieldPath}\n className={className}\n style={style}\n >\n <DatePicker\n value={dayjsValue}\n onChange={handleChange}\n placeholder={displayPlaceholder}\n disabled={disabled}\n disabledDate={disabledDate}\n format={DISPLAY_FORMAT}\n className={pickerClassName}\n style={{ width: '100%' }}\n />\n </Form.Item>\n )\n}\n","/**\n * @file ui/forms/CompanyInfoForm.tsx\n * @description 公司信息表单,使用 Ant Design 组件和垂直布局。\n */\n\nimport { CopyOutlined } from '@ant-design/icons'\nimport type { I18nKey } from '@core/i18n'\nimport type { FieldDef, TemplateVersionDef } from '@core/registry/types'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { Button, Card, Col, Flex, Row, Tag, Typography } from 'antd'\nimport { groupBy, sumBy } from 'lodash-es'\n\nimport { DateField, SelectField, TextField } from '../fields'\n\nconst { Title } = Typography\n\ninterface CompanyInfoFormProps {\n versionDef: TemplateVersionDef\n values: Record<string, string>\n onChange: (key: string, value: string) => void\n errors?: Record<string, ErrorKey>\n requiredFields?: Map<string, boolean>\n dateFormatHint?: string\n}\n\n/** 声明范围选项。 */\nconst SCOPE_OPTIONS = [\n { value: 'A', label: 'A. Company-wide' },\n { value: 'B', label: 'B. Product (or List of Products)' },\n { value: 'C', label: 'C. User defined' },\n]\n\nconst COMPANY_FIELD_KEYS = new Set([\n 'companyName', 'declarationScope', 'scopeDescription',\n 'companyId', 'companyAuthId', 'address',\n])\nconst CONTACT_FIELD_KEYS = new Set(['contactName', 'contactEmail', 'contactPhone'])\nconst AUTHORIZER_FIELD_KEYS = new Set([\n 'authorizerName', 'authorizerTitle', 'authorizerEmail',\n 'authorizerPhone', 'authorizationDate',\n])\n\nconst PLACEHOLDER_KEYS: Record<string, I18nKey> = {\n companyName: 'placeholders.companyName',\n declarationScope: 'placeholders.declarationScope',\n scopeDescription: 'placeholders.scopeDescription',\n companyId: 'placeholders.companyId',\n companyAuthId: 'placeholders.companyAuthId',\n address: 'placeholders.address',\n contactName: 'placeholders.contactName',\n contactEmail: 'placeholders.contactEmail',\n contactPhone: 'placeholders.contactPhone',\n authorizerName: 'placeholders.authorizerName',\n authorizerTitle: 'placeholders.authorizerTitle',\n authorizerEmail: 'placeholders.authorizerEmail',\n authorizerPhone: 'placeholders.authorizerPhone',\n authorizationDate: 'placeholders.authorizationDate',\n}\n\n/** 字段的 HTML autocomplete 属性映射 */\nconst AUTOCOMPLETE_KEYS: Record<string, string> = {\n companyName: 'organization',\n address: 'street-address',\n contactName: 'name',\n contactEmail: 'email',\n contactPhone: 'tel',\n authorizerName: 'name',\n authorizerTitle: 'organization-title',\n authorizerEmail: 'email',\n authorizerPhone: 'tel',\n}\n\n/** 需要禁用拼写检查的字段(邮箱、电话、ID 等) */\nconst SPELLCHECK_DISABLED_KEYS = new Set([\n 'contactEmail',\n 'authorizerEmail',\n 'contactPhone',\n 'authorizerPhone',\n 'companyId',\n 'companyAuthId',\n])\n\n/**\n * CompanyInfoForm:公司信息表单组件。\n */\nexport function CompanyInfoForm({\n versionDef,\n values,\n onChange,\n errors = {},\n requiredFields,\n dateFormatHint,\n}: CompanyInfoFormProps) {\n const { t } = useT()\n\n const showPrompts =\n versionDef.templateType !== 'cmrt' ||\n ['6.31', '6.4', '6.5'].includes(versionDef.version.id)\n\n const scopeType = values.declarationScope as 'A' | 'B' | 'C' | undefined\n\n const handleChange = useMemoizedFn((key: string, value: string) => {\n onChange(key, value)\n })\n\n const getFieldHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n versionDef.companyInfoFields.forEach((field) => {\n map.set(field.key, (value) => handleChange(field.key, value))\n })\n return map\n }, [versionDef.companyInfoFields, handleChange])\n\n const getPlaceholder = (fieldKey: string) => {\n const key = PLACEHOLDER_KEYS[fieldKey]\n if (!key) return undefined\n if (!showPrompts) return ''\n return t(key)\n }\n\n const renderField = (field: FieldDef, span: number = 12) => {\n const value = values[field.key] || ''\n const error = errors[field.key]\n const isRequired = requiredFields?.get(field.key) ?? field.required === true\n const label = t(field.labelKey)\n const placeholder = getPlaceholder(field.key)\n const fieldHandler = getFieldHandler(field.key)\n\n const content = (() => {\n if (field.type === 'select' && field.key === 'declarationScope') {\n return (\n <SelectField\n value={value}\n onChange={fieldHandler}\n label={label}\n required={isRequired}\n error={error}\n options={SCOPE_OPTIONS}\n placeholder={placeholder}\n fieldPath={`companyInfo.${field.key}`}\n />\n )\n }\n\n if (field.type === 'date') {\n const resolvedDateHint = showPrompts ? dateFormatHint : undefined\n return (\n <DateField\n value={value}\n onChange={fieldHandler}\n label={label}\n required={isRequired}\n error={error}\n minDate={versionDef.dateConfig.minDate}\n maxDate={versionDef.dateConfig.maxDate}\n placeholder={placeholder}\n formatHint={resolvedDateHint}\n fieldPath={`companyInfo.${field.key}`}\n />\n )\n }\n\n return (\n <TextField\n value={value}\n onChange={fieldHandler}\n label={label}\n required={isRequired}\n error={error}\n multiline={field.type === 'textarea'}\n rows={field.key === 'scopeDescription' ? 3 : undefined}\n placeholder={placeholder}\n fieldPath={`companyInfo.${field.key}`}\n autoComplete={AUTOCOMPLETE_KEYS[field.key]}\n spellCheck={SPELLCHECK_DISABLED_KEYS.has(field.key) ? false : undefined}\n />\n )\n })()\n\n return (\n <Col key={field.key} xs={24} md={span}>\n {content}\n </Col>\n )\n }\n\n const { companyFields, contactFields, authorizerFields } = useCreation(() => {\n const fieldGroups = groupBy(versionDef.companyInfoFields, (field) => {\n if (CONTACT_FIELD_KEYS.has(field.key)) return 'contact'\n if (AUTHORIZER_FIELD_KEYS.has(field.key)) return 'authorizer'\n if (COMPANY_FIELD_KEYS.has(field.key)) return 'company'\n return 'other'\n })\n const companyFieldsRaw = fieldGroups.company ?? []\n const companyFieldsFiltered =\n scopeType === 'C'\n ? companyFieldsRaw\n : companyFieldsRaw.filter((field) => field.key !== 'scopeDescription')\n return {\n companyFields: companyFieldsFiltered,\n contactFields: fieldGroups.contact ?? [],\n authorizerFields: fieldGroups.authorizer ?? [],\n }\n }, [versionDef.companyInfoFields, scopeType])\n\n const isRequired = (field: FieldDef) =>\n requiredFields ? requiredFields.get(field.key) === true : field.required === true\n\n const requiredTotal = useCreation(\n () => sumBy(versionDef.companyInfoFields, (field) => (isRequired(field) ? 1 : 0)),\n [versionDef.companyInfoFields, requiredFields]\n )\n\n const requiredCompleted = useCreation(\n () =>\n sumBy(versionDef.companyInfoFields, (field) => {\n if (!isRequired(field)) return 0\n const value = values[field.key]\n return typeof value === 'string' && value.trim().length > 0 ? 1 : 0\n }),\n [versionDef.companyInfoFields, requiredFields, values]\n )\n\n const sectionHeaderStyle = { marginBottom: 0 }\n\n // 复制联系人信息到授权人\n const handleCopyContactToAuthorizer = useMemoizedFn(() => {\n if (values.contactName) onChange('authorizerName', values.contactName)\n if (values.contactEmail) onChange('authorizerEmail', values.contactEmail)\n if (values.contactPhone) onChange('authorizerPhone', values.contactPhone)\n })\n\n // 判断联系人信息是否有内容可复制\n const hasContactInfo = Boolean(values.contactName || values.contactEmail || values.contactPhone)\n\n return (\n <Card\n title={\n <Flex align=\"center\" justify=\"space-between\" style={{ width: '100%' }}>\n <Title level={5} style={sectionHeaderStyle}>\n {t('sections.companyInfo')}\n </Title>\n {requiredTotal > 0 && (\n <Tag color=\"orange\">\n {t('badges.requiredCompleted', { done: requiredCompleted, total: requiredTotal })}\n </Tag>\n )}\n </Flex>\n }\n >\n <Flex vertical gap={24}>\n {/* 公司基本信息 */}\n <Row gutter={[24, 0]}>\n {companyFields.map((field) => renderField(field, 12))}\n </Row>\n\n {/* 联系人信息 */}\n {contactFields.length > 0 && (\n <>\n <div className=\"border-t border-gray-200 pt-4\">\n <Typography.Text strong className=\"text-gray-600 text-sm\">\n {t('sections.contact')}\n </Typography.Text>\n </div>\n <Row gutter={[24, 0]}>\n {contactFields.map((field) => renderField(field, 12))}\n </Row>\n </>\n )}\n\n {/* 授权人信息 */}\n {authorizerFields.length > 0 && (\n <>\n <Flex\n align=\"center\"\n justify=\"space-between\"\n className=\"border-t border-gray-200 pt-4\"\n >\n <Typography.Text strong className=\"text-gray-600 text-sm\">\n {t('sections.authorizer')}\n </Typography.Text>\n {contactFields.length > 0 && (\n <Button\n type=\"link\"\n size=\"small\"\n icon={<CopyOutlined />}\n onClick={handleCopyContactToAuthorizer}\n disabled={!hasContactInfo}\n >\n {t('actions.sameAsContact')}\n </Button>\n )}\n </Flex>\n <Row gutter={[24, 0]}>\n {authorizerFields.map((field) => renderField(field, 12))}\n </Row>\n </>\n )}\n </Flex>\n </Card>\n )\n}\n","/**\n * @file ui/forms/CompanyQuestionsForm.tsx\n * @description 模块实现。\n */\n\nimport type { I18nKey } from '@core/i18n'\nimport type { CompanyQuestionDef, GatingCondition, MineralDef, QuestionDef } from '@core/registry/types'\nimport type { GatingResult } from '@core/rules/gating'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n/useT'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { Card, Flex, Tag, Typography } from 'antd'\nimport { compact } from 'lodash-es'\n\nimport { SelectField, TextField } from '../fields'\n\ninterface CompanyQuestionsFormProps {\n questions: CompanyQuestionDef[]\n questionDefs?: QuestionDef[]\n values: Record<string, Record<string, string> | string>\n onChange: (key: string, value: string, mineralKey?: string) => void\n minerals?: Array<MineralDef & { label?: string }>\n gatingByMineral?: Map<string, GatingResult>\n gatingCondition?: GatingCondition\n requiredByQuestion?: Map<string, boolean>\n errors?: Record<string, Record<string, ErrorKey> | ErrorKey>\n}\n\n/**\n * 公司层面问题表单:负责主问题选择与备注输入联动。\n */\nexport function CompanyQuestionsForm({\n questions,\n questionDefs,\n values,\n onChange,\n minerals = [],\n gatingByMineral,\n gatingCondition,\n requiredByQuestion,\n errors = {},\n}: CompanyQuestionsFormProps) {\n const { t } = useT()\n const questionDefsSignature = useCreation(\n () =>\n (questionDefs ?? [])\n .map(\n (question) =>\n `${question.key}:${question.options\n .map((opt) => `${opt.value}:${opt.labelKey}`)\n .join(',')}`\n )\n .join('|'),\n [questionDefs]\n )\n const optionLabelsByQuestion = useCreation(() => {\n const map = new Map<string, Map<string, string>>()\n ;(questionDefs ?? []).forEach((question) => {\n const optionMap = new Map<string, string>()\n question.options.forEach((opt) => {\n optionMap.set(opt.value, t(opt.labelKey))\n })\n map.set(question.key, optionMap)\n })\n return map\n }, [questionDefs, questionDefsSignature, t])\n const companyQuestionsRequired = requiredByQuestion\n ? Array.from(requiredByQuestion.values()).some((value) => value)\n : gatingByMineral\n ? Array.from(gatingByMineral.values()).some((item) => item.companyQuestionsEnabled)\n : false\n const isOptional = !companyQuestionsRequired\n const requiredHint = useCreation(\n () => buildCompanyQuestionsRequiredHint(t, gatingCondition, optionLabelsByQuestion),\n [t, gatingCondition, optionLabelsByQuestion]\n )\n /** 题目签名:用于检测就地修改后的选项变化。 */\n const questionSignature = questions\n .map(\n (cq) =>\n `${cq.key}:${cq.perMineral ? 1 : 0}:${cq.hasCommentField ? 1 : 0}:${cq.options\n .map((opt) => `${opt.value}:${opt.labelKey}`)\n .join(',')}`\n )\n .join('|')\n /** 预先构建选项列表,避免每次渲染重复翻译与过滤。 */\n const optionsByQuestion = useCreation(() => {\n const map = new Map<string, { value: string; label: string }[]>()\n questions.forEach((cq) => {\n map.set(\n cq.key,\n compact(\n cq.options.map((opt) => {\n const label = t(opt.labelKey)\n return label ? { value: opt.value, label } : null\n })\n )\n )\n })\n return map\n }, [questions, questionSignature, t])\n /** 稳定回调,减少子组件不必要刷新。 */\n const handleChange = useMemoizedFn((key: string, value: string) => {\n onChange(key, value)\n })\n /** 预构建回调映射,减少 JSX 内联函数。 */\n const getSelectHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n questions.forEach((cq) => {\n if (cq.perMineral) return\n map.set(cq.key, (value) => handleChange(cq.key, value))\n })\n return map\n }, [questions, questionSignature, handleChange])\n\n const getPerMineralHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n questions.forEach((cq) => {\n if (!cq.perMineral) return\n minerals.forEach((mineral) => {\n map.set(`${cq.key}:${mineral.key}`, (value) =>\n onChange(cq.key, value, mineral.key)\n )\n })\n })\n return map\n }, [questions, minerals, onChange, questionSignature])\n\n const getCommentHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n questions.forEach((cq) => {\n if (!cq.hasCommentField || cq.perMineral) return\n const commentKey = `${cq.key}_comment`\n map.set(commentKey, (value) => handleChange(commentKey, value))\n })\n return map\n }, [questions, questionSignature, handleChange])\n\n const getPerMineralCommentHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n questions.forEach((cq) => {\n if (!cq.hasCommentField || !cq.perMineral) return\n const commentKey = `${cq.key}_comment`\n minerals.forEach((mineral) => {\n map.set(`${commentKey}:${mineral.key}`, (value) =>\n onChange(commentKey, value, mineral.key)\n )\n })\n })\n return map\n }, [questions, minerals, onChange, questionSignature])\n\n if (questions.length === 0) return null\n\n return (\n <Card\n title={\n <Flex wrap align=\"center\" justify=\"space-between\" gap={8}>\n <Typography.Title level={5} style={{ margin: 0 }}>{t('sections.companyQuestions')}</Typography.Title>\n <Tag color=\"blue\">\n {requiredHint}\n </Tag>\n </Flex>\n }\n >\n <Flex vertical gap={0} data-optional={isOptional ? 'true' : 'false'}>\n {questions.map((cq) =>\n cq.perMineral\n ? renderPerMineralQuestionRow({\n question: cq,\n minerals,\n values,\n errors,\n gatingByMineral,\n options: optionsByQuestion.get(cq.key) ?? [],\n getPerMineralHandler,\n getPerMineralCommentHandler,\n t,\n })\n : renderCompanyQuestionRow({\n question: cq,\n values,\n errors,\n isOptional,\n requiredByQuestion,\n options: optionsByQuestion.get(cq.key) ?? [],\n getSelectHandler,\n getCommentHandler,\n t,\n })\n )}\n </Flex>\n </Card>\n )\n}\n\n/**\n * 渲染单个公司层面问题卡片。\n * 依赖预构建 handler,避免每次 render 生成闭包。\n */\nfunction renderCompanyQuestionRow({\n question,\n values,\n errors,\n isOptional,\n requiredByQuestion,\n options,\n getSelectHandler,\n getCommentHandler,\n t,\n}: {\n question: CompanyQuestionDef\n values: Record<string, Record<string, string> | string>\n errors: Record<string, Record<string, ErrorKey> | ErrorKey>\n isOptional: boolean\n requiredByQuestion?: Map<string, boolean>\n options: Array<{ value: string; label: string }>\n getSelectHandler: (key: string) => ((value: string) => void) | undefined\n getCommentHandler: (key: string) => ((value: string) => void) | undefined\n t: (key: I18nKey) => string\n}) {\n const selectError = getCompanyQuestionError(errors, question.key, '', false)\n const commentKey = `${question.key}_comment`\n const selectHandler = getSelectHandler(question.key)\n const commentHandler = getCommentHandler(commentKey)\n const commentRequiredWhen = question.commentRequiredWhen ?? []\n const mainValue = getCompanyQuestionValue(values, question.key, '', false)\n const commentError = getCompanyQuestionCommentError(errors, commentKey, '', false)\n const questionRequired = requiredByQuestion?.get(question.key) ?? !isOptional\n // 备注始终展示,但仅在命中特定选项时要求必填。\n const shouldRequireComment =\n question.hasCommentField && commentRequiredWhen.includes(mainValue || '')\n const commentRequired = questionRequired && shouldRequireComment\n const commentValue = getCompanyQuestionCommentValue(values, commentKey, '', false)\n\n return (\n <div key={question.key} className=\"company-question-row\">\n <div className=\"company-question-grid\">\n <Typography.Text className=\"company-question-label\">\n {t(question.labelKey)}\n </Typography.Text>\n <div className=\"company-question-answer\">\n <SelectField\n value={getCompanyQuestionValue(values, question.key, '', false)}\n onChange={selectHandler}\n options={options}\n placeholder={t('placeholders.select')}\n required={questionRequired}\n error={selectError}\n allowClear\n fieldPath={`companyQuestions.${question.key}`}\n />\n </div>\n <div className=\"company-question-comment\">\n {question.hasCommentField && (\n <TextField\n value={commentValue}\n onChange={commentHandler}\n placeholder={\n question.commentLabelKey\n ? t(question.commentLabelKey)\n : t('placeholders.comments')\n }\n required={commentRequired}\n multiline\n rows={2}\n error={commentError}\n fieldPath={`companyQuestions.${commentKey}`}\n />\n )}\n </div>\n </div>\n </div>\n )\n}\n\n/**\n * 渲染按矿种拆分的公司层面问题(EMRT C)。\n */\nfunction renderPerMineralQuestionRow({\n question,\n minerals,\n values,\n errors,\n gatingByMineral,\n options,\n getPerMineralHandler,\n getPerMineralCommentHandler,\n t,\n}: {\n question: CompanyQuestionDef\n minerals: Array<MineralDef & { label?: string }>\n values: Record<string, Record<string, string> | string>\n errors: Record<string, Record<string, ErrorKey> | ErrorKey>\n gatingByMineral?: Map<string, GatingResult>\n options: Array<{ value: string; label: string }>\n getPerMineralHandler: (key: string) => ((value: string) => void) | undefined\n getPerMineralCommentHandler: (key: string) => ((value: string) => void) | undefined\n t: (key: I18nKey) => string\n}) {\n if (minerals.length === 0) return null\n const commentKey = `${question.key}_comment`\n\n return (\n <div key={question.key} className=\"company-question-row\">\n <div className=\"company-question-grid company-question-grid-per-mineral\">\n <Typography.Text className=\"company-question-label company-question-label-full\" strong>\n {t(question.labelKey)}\n </Typography.Text>\n {minerals.map((mineral) => {\n const required = gatingByMineral?.get(mineral.key)?.companyQuestionsEnabled === true\n const value = getCompanyQuestionValue(values, question.key, mineral.key, true)\n const error = getCompanyQuestionError(errors, question.key, mineral.key, true)\n const handler = getPerMineralHandler(`${question.key}:${mineral.key}`)\n const commentValue = getCompanyQuestionCommentValue(values, commentKey, mineral.key, true)\n const commentError = getCompanyQuestionCommentError(\n errors,\n commentKey,\n mineral.key,\n true\n )\n const commentRequiredWhen = question.commentRequiredWhen ?? []\n const shouldRequireComment =\n question.hasCommentField && commentRequiredWhen.includes(value || '')\n const commentRequired = required && shouldRequireComment\n const perMineralCommentHandler = getPerMineralCommentHandler(\n `${commentKey}:${mineral.key}`\n )\n return (\n <div key={mineral.key} className=\"company-question-mineral-row\">\n <Typography.Text className=\"company-question-mineral-label\">\n {mineral.label ?? t(mineral.labelKey)}\n </Typography.Text>\n <div className=\"company-question-answer\">\n <SelectField\n value={value}\n onChange={handler}\n options={options}\n placeholder={t('placeholders.select')}\n required={required}\n error={error}\n allowClear\n fieldPath={`companyQuestions.${question.key}.${mineral.key}`}\n />\n </div>\n <div className=\"company-question-comment\">\n {question.hasCommentField && (\n <TextField\n value={commentValue}\n onChange={perMineralCommentHandler}\n placeholder={\n question.commentLabelKey\n ? t(question.commentLabelKey)\n : t('placeholders.comments')\n }\n required={commentRequired}\n multiline\n rows={2}\n error={commentError}\n fieldPath={`companyQuestions.${commentKey}.${mineral.key}`}\n />\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\n/**\n * 读取公司问题值(支持 perMineral 与普通问题)。\n */\nfunction getCompanyQuestionValue(\n values: Record<string, Record<string, string> | string>,\n questionKey: string,\n mineralKey: string,\n perMineral: boolean\n): string {\n const value = values[questionKey]\n if (perMineral && typeof value === 'object') {\n return value[mineralKey] || ''\n }\n if (!perMineral && typeof value === 'string') {\n return value\n }\n return ''\n}\n\n/**\n * 读取公司问题错误(支持 perMineral 与普通问题)。\n */\nfunction getCompanyQuestionError(\n errors: Record<string, Record<string, ErrorKey> | ErrorKey>,\n questionKey: string,\n mineralKey: string,\n perMineral: boolean\n): ErrorKey | undefined {\n const questionError = errors[questionKey]\n if (perMineral && questionError && typeof questionError === 'object') {\n return questionError[mineralKey]\n }\n if (!perMineral && typeof questionError === 'string') {\n return questionError\n }\n return undefined\n}\n\n/**\n * 读取公司问题备注值(支持 perMineral 与普通问题)。\n */\nfunction getCompanyQuestionCommentValue(\n values: Record<string, Record<string, string> | string>,\n commentKey: string,\n mineralKey: string,\n perMineral: boolean\n): string {\n const value = values[commentKey]\n if (perMineral && value && typeof value === 'object') {\n return value[mineralKey] || ''\n }\n if (!perMineral && typeof value === 'string') {\n return value\n }\n return ''\n}\n\n/**\n * 读取公司问题备注错误(支持 perMineral 与普通问题)。\n */\nfunction getCompanyQuestionCommentError(\n errors: Record<string, Record<string, ErrorKey> | ErrorKey>,\n commentKey: string,\n mineralKey: string,\n perMineral: boolean\n): ErrorKey | undefined {\n const commentError = errors[commentKey]\n if (perMineral && commentError && typeof commentError === 'object') {\n return commentError[mineralKey]\n }\n if (!perMineral && typeof commentError === 'string') {\n return commentError\n }\n return undefined\n}\n\n/**\n * 计算公司问题必填提示文案(跟随 Excel gating 条件)。\n */\nfunction buildCompanyQuestionsRequiredHint(\n t: (key: I18nKey, options?: Record<string, unknown>) => string,\n gatingCondition?: GatingCondition,\n optionLabelsByQuestion?: Map<string, Map<string, string>>\n): string {\n const condition = gatingCondition\n ? resolveGatingConditionLabel(t, gatingCondition, optionLabelsByQuestion)\n : t('conditions.always')\n return t('badges.companyQuestionsRequired', { condition })\n}\n\n/**\n * 解析 gating 条件为可展示文案。\n */\nfunction resolveGatingConditionLabel(\n t: (key: I18nKey, options?: Record<string, unknown>) => string,\n condition: GatingCondition,\n optionLabelsByQuestion?: Map<string, Map<string, string>>\n): string {\n const resolveOptionLabel = (questionKey: 'Q1' | 'Q2', value: string) =>\n optionLabelsByQuestion?.get(questionKey)?.get(value) ?? value\n const formatLabels = (labels: string[]) => labels.filter(Boolean).join(' / ')\n\n switch (condition.type) {\n case 'always':\n return t('conditions.always')\n case 'q1-not-no':\n return t('conditions.q1NotNo', { no: resolveOptionLabel('Q1', 'No') })\n case 'q1-yes':\n return t('conditions.q1Yes', { yes: resolveOptionLabel('Q1', 'Yes') })\n case 'q1q2-not-no':\n return t('conditions.q1q2NotNo', {\n no: resolveOptionLabel('Q1', 'No'),\n noQ2: resolveOptionLabel('Q2', 'No'),\n })\n case 'q1q2-yes':\n return t('conditions.q1q2Yes', {\n yes: resolveOptionLabel('Q1', 'Yes'),\n yesQ2: resolveOptionLabel('Q2', 'Yes'),\n })\n case 'q1-not-negatives':\n return t('conditions.q1NotNegatives', {\n negatives: formatLabels(\n condition.negatives.map((value) => resolveOptionLabel('Q1', value))\n ),\n })\n case 'q1-not-negatives-and-q2-not-negatives':\n return t('conditions.q1NotNegativesAndQ2NotNegatives', {\n q1Negatives: formatLabels(\n condition.q1Negatives.map((value) => resolveOptionLabel('Q1', value))\n ),\n q2Negatives: formatLabels(\n condition.q2Negatives.map((value) => resolveOptionLabel('Q2', value))\n ),\n })\n default:\n return t('conditions.always')\n }\n}\n","/**\n * @file ui/forms/MineralScopeForm.tsx\n * @description 模块实现。\n */\n\nimport type { I18nKey } from '@core/i18n'\nimport type { MineralDef, TemplateVersionDef } from '@core/registry/types'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { Checkbox, Col, Tag, Input, Row, Select, Tooltip, Typography, Flex } from 'antd'\n\nimport { resolveErrorMessage } from '../fields/error'\n\ninterface MineralScopeFormProps {\n versionDef: TemplateVersionDef\n selectedMinerals: string[]\n onMineralsChange: (minerals: string[]) => void\n errors?: {\n selection?: ErrorKey\n custom?: Record<number, ErrorKey>\n }\n customMinerals?: string[]\n onCustomMineralsChange?: (minerals: string[]) => void\n}\n\n/**\n * 导出函数:MineralScopeForm。\n */\nexport function MineralScopeForm({\n versionDef,\n selectedMinerals,\n onMineralsChange,\n errors,\n customMinerals = [],\n onCustomMineralsChange,\n}: MineralScopeFormProps) {\n const { t } = useT()\n const { mineralScope } = versionDef\n const isRequired = mineralScope.mode !== 'fixed'\n const maxSlots = mineralScope.mode === 'free-text' ? mineralScope.maxCount || 10 : 0\n const otherSlotCount = mineralScope.otherSlotCount ?? 0\n const freeTextSlots = useCreation(\n () => (maxSlots > 0 ? Array.from({ length: maxSlots }, (_, index) => index) : []),\n [maxSlots]\n )\n const otherSlots = useCreation(\n () =>\n otherSlotCount > 0\n ? Array.from({ length: otherSlotCount }, (_, index) => index)\n : [],\n [otherSlotCount]\n )\n const { maxCountHint, maxCountReachedHint } = useCreation(\n () => getMineralScopeHints(t, mineralScope.maxCount),\n [t, mineralScope.maxCount]\n )\n const selectionError = resolveErrorMessage(t, errors?.selection)\n const customErrors = resolveErrorRecord(t, errors?.custom)\n\n const handleMineralToggle = useMemoizedFn((mineral: MineralDef, checked: boolean) => {\n if (checked) {\n if (mineralScope.maxCount && selectedMinerals.length >= mineralScope.maxCount) {\n return\n }\n onMineralsChange([...selectedMinerals, mineral.key])\n return\n }\n onMineralsChange(selectedMinerals.filter((m) => m !== mineral.key))\n })\n const handleCustomMineralChange = useMemoizedFn((index: number, value: string) => {\n const next = [...customMinerals]\n next[index] = value\n onCustomMineralsChange?.(next)\n })\n const customSlots = mineralScope.mode === 'free-text' ? freeTextSlots : otherSlots\n\n /** 复选框 onChange handler(合并原 toggleHandlers + checkboxHandlers)。 */\n const getCheckboxHandler = useHandlerMap(() => {\n const map = new Map<string, (event: { target: { checked: boolean } }) => void>()\n mineralScope.minerals.forEach((mineral) => {\n map.set(mineral.key, (event) => handleMineralToggle(mineral, event.target.checked))\n })\n return map\n }, [mineralScope.minerals, handleMineralToggle])\n\n /** 自定义矿产名输入 handler(合并原 customMineralHandlers + customInputHandlers)。 */\n const getCustomInputHandler = useHandlerMap(() => {\n const map = new Map<number, (event: { target: { value: string } }) => void>()\n customSlots.forEach((index) => {\n map.set(index, (event) => handleCustomMineralChange(index, event.target.value))\n })\n return map\n }, [customSlots, handleCustomMineralChange])\n\n // 固定模式:仅展示矿种标签(只读)。\n if (mineralScope.mode === 'fixed') {\n return (\n <Flex vertical gap={12}>\n <Typography.Text strong type=\"secondary\">\n {t('sections.mineralsScope')}\n </Typography.Text>\n <Flex wrap gap={8}>\n {mineralScope.minerals.map((mineral) => (\n <Tag key={mineral.key} color=\"blue\">\n {t(mineral.labelKey)}\n </Tag>\n ))}\n </Flex>\n </Flex>\n )\n }\n\n // 动态模式:以多选框选择矿种。\n if (mineralScope.mode === 'dynamic-dropdown') {\n const otherSelected = selectedMinerals.includes('other')\n return (\n <Flex vertical gap={12}>\n <Flex align=\"center\" gap={8}>\n <Typography.Text strong type=\"secondary\">\n {t('sections.mineralsScope')}\n </Typography.Text>\n {isRequired && <Typography.Text type=\"danger\">*</Typography.Text>}\n {mineralScope.maxCount && (\n <Typography.Text type=\"secondary\" style={{ fontSize: 12 }}>\n ({selectedMinerals.length}/{mineralScope.maxCount})\n </Typography.Text>\n )}\n </Flex>\n <Flex wrap gap={16}>\n {mineralScope.minerals.map((mineral) => {\n const isSelected = selectedMinerals.includes(mineral.key)\n const isDisabled =\n !isSelected &&\n mineralScope.maxCount !== undefined &&\n selectedMinerals.length >= mineralScope.maxCount\n const checkbox = (\n <Checkbox\n key={mineral.key}\n checked={isSelected}\n disabled={isDisabled}\n onChange={getCheckboxHandler(mineral.key)}\n >\n {t(mineral.labelKey)}\n </Checkbox>\n )\n return isDisabled && maxCountReachedHint ? (\n <Tooltip key={mineral.key} title={maxCountReachedHint}>\n <span>{checkbox}</span>\n </Tooltip>\n ) : (\n checkbox\n )\n })}\n </Flex>\n {maxCountHint && (\n <Typography.Text type=\"secondary\" style={{ fontSize: 12 }}>\n {maxCountHint}\n </Typography.Text>\n )}\n {otherSelected && otherSlots.length > 0 && (\n <Flex vertical gap={8}>\n <Flex align=\"center\" gap={4}>\n <Typography.Text type=\"secondary\" style={{ fontSize: 12 }}>\n {t('sections.mineralsOther')}\n </Typography.Text>\n <Typography.Text type=\"danger\">*</Typography.Text>\n </Flex>\n <Row gutter={[8, 8]}>\n {otherSlots.map((index) => (\n <Col key={index} xs={12} md={6}>\n <Input\n value={customMinerals[index] || undefined}\n onChange={getCustomInputHandler(index)}\n placeholder={t('placeholders.customMineral', { index: index + 1 })}\n status={customErrors[index] ? 'error' : undefined}\n />\n </Col>\n ))}\n </Row>\n {customErrors[0] && (\n <Typography.Text type=\"danger\" style={{ fontSize: 12 }}>\n {customErrors[0]}\n </Typography.Text>\n )}\n </Flex>\n )}\n {selectionError && (\n <Typography.Text type=\"danger\" style={{ fontSize: 12 }}>\n {selectionError}\n </Typography.Text>\n )}\n </Flex>\n )\n }\n\n // 自由输入模式(AMRT 1.1/1.2):文本框填写自定义矿种。\n if (mineralScope.mode === 'free-text') {\n return (\n <Flex vertical gap={8}>\n <Flex align=\"center\" gap={4}>\n <Typography.Text strong type=\"secondary\">\n {t('sections.mineralsScope')}\n </Typography.Text>\n <Typography.Text type=\"danger\">*</Typography.Text>\n <Typography.Text type=\"secondary\" style={{ fontSize: 12, marginLeft: 8 }}>\n ({t('hints.mineralsMaxCount', { max: maxSlots })})\n </Typography.Text>\n </Flex>\n <Row gutter={[8, 8]}>\n {freeTextSlots.map((index) => (\n <Col key={index} xs={12} md={6}>\n <Input\n value={customMinerals[index] || undefined}\n onChange={getCustomInputHandler(index)}\n placeholder={t('placeholders.customMineral', { index: index + 1 })}\n status={customErrors[index] ? 'error' : undefined}\n />\n </Col>\n ))}\n </Row>\n {customErrors[0] && (\n <Typography.Text type=\"danger\" style={{ fontSize: 12 }}>\n {customErrors[0]}\n </Typography.Text>\n )}\n </Flex>\n )\n }\n\n return null\n}\n\n/** 解析矿产上限提示文案。 */\nfunction getMineralScopeHints(\n t: (key: I18nKey, options?: Record<string, unknown>) => string,\n maxCount?: number\n) {\n if (!maxCount) return { maxCountHint: undefined, maxCountReachedHint: undefined }\n return {\n maxCountHint: t('hints.mineralsMaxCount', { max: maxCount }),\n maxCountReachedHint: t('hints.mineralsMaxCountReached'),\n }\n}\n\n/** 解析矿产自由输入错误映射(按索引)。 */\nfunction resolveErrorRecord(\n t: (key: I18nKey, options?: Record<string, unknown>) => string,\n errors?: Record<number, ErrorKey>\n) {\n const result: Record<number, string> = {}\n if (!errors) return result\n Object.entries(errors).forEach(([key, value]) => {\n if (!value) return\n const index = Number(key)\n if (Number.isNaN(index)) return\n result[index] = resolveErrorMessage(t, value) ?? value\n })\n return result\n}\n\n// 简化版范围选择器(用于 Declaration 页头部)。\ninterface ScopeSelectorProps {\n value?: 'A' | 'B' | 'C'\n onChange: (value: 'A' | 'B' | 'C') => void\n scopeDescription?: string\n onScopeDescriptionChange?: (value: string) => void\n}\n\n/** 声明范围选项(ScopeSelector 使用)。 */\nconst SCOPE_OPTIONS = [\n { value: 'A', label: 'A. Company-wide' },\n { value: 'B', label: 'B. Product (or List of Products)' },\n { value: 'C', label: 'C. User defined' },\n]\n\n/**\n * 导出函数:ScopeSelector。\n */\nexport function ScopeSelector({\n value,\n onChange,\n scopeDescription,\n onScopeDescriptionChange,\n}: ScopeSelectorProps) {\n const { t } = useT()\n const handleScopeDescriptionChange = useMemoizedFn((nextValue: string) => {\n onScopeDescriptionChange?.(nextValue)\n })\n const handleScopeDescriptionInput = useMemoizedFn((event: { target: { value: string } }) => {\n handleScopeDescriptionChange(event.target.value)\n })\n\n return (\n <Flex vertical gap={16}>\n <Flex vertical gap={8}>\n <Flex align=\"center\" gap={4}>\n <Typography.Text strong type=\"secondary\">\n {t('fields.reportingScope')}\n </Typography.Text>\n <Typography.Text type=\"danger\">*</Typography.Text>\n </Flex>\n <Select\n value={value || undefined}\n onChange={onChange}\n options={SCOPE_OPTIONS}\n placeholder={t('placeholders.declarationScope')}\n style={{ width: '100%', maxWidth: 448 }}\n />\n </Flex>\n {value === 'C' && (\n <Flex vertical gap={8}>\n <Flex align=\"center\" gap={4}>\n <Typography.Text strong type=\"secondary\">\n {t('fields.scopeDescription')}\n </Typography.Text>\n <Typography.Text type=\"danger\">*</Typography.Text>\n </Flex>\n <Input.TextArea\n value={scopeDescription || undefined}\n onChange={handleScopeDescriptionInput}\n placeholder={t('placeholders.scopeDescription')}\n rows={3}\n style={{ maxWidth: 448 }}\n />\n </Flex>\n )}\n </Flex>\n )\n}\n","/**\n * @file ui/forms/QuestionMatrixForm.tsx\n * @description 问题矩阵表单 - 单卡片模块内纵向排列问题。\n */\n\nimport type { I18nKey } from '@core/i18n'\nimport type { MineralDef, QuestionDef, TemplateVersionDef } from '@core/registry/types'\nimport type { GatingResult } from '@core/rules/gating'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n/useT'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { Card, Flex, Input, Select, Tag, Typography } from 'antd'\n\ninterface QuestionMatrixFormProps {\n versionDef: TemplateVersionDef\n minerals?: Array<MineralDef & { label?: string }>\n values: Record<string, Record<string, string> | string>\n commentValues: Record<string, Record<string, string> | string>\n onChange: (questionKey: string, mineralKey: string | null, value: string) => void\n onCommentChange: (questionKey: string, mineralKey: string | null, value: string) => void\n gatingByMineral?: Map<string, GatingResult>\n requiredByQuestion?: Map<string, Map<string, boolean>>\n errors?: Record<string, Record<string, ErrorKey> | ErrorKey>\n}\n\ntype QuestionOptionItem = { value: string; label: string }\n\n/**\n * 辅助函数:生成选项签名(用于检测就地修改)。\n */\nfunction buildOptionSignature(options: QuestionDef['options']): string {\n return options.map((opt) => `${opt.value}:${opt.labelKey}`).join(',')\n}\n\n/**\n * 辅助函数:生成按矿种覆盖的选项签名。\n */\nfunction buildOptionsByMineralSignature(\n optionsByMineral?: Record<string, QuestionDef['options']>\n): string {\n if (!optionsByMineral) return ''\n return Object.keys(optionsByMineral)\n .sort()\n .map((key) => `${key}[${buildOptionSignature(optionsByMineral[key] ?? [])}]`)\n .join('|')\n}\n\n/**\n * 导出函数:QuestionMatrixForm。\n * 单卡片模块:问题纵向排列。\n */\nexport function QuestionMatrixForm({\n versionDef,\n minerals: mineralsOverride,\n values,\n commentValues,\n onChange,\n onCommentChange,\n gatingByMineral,\n requiredByQuestion,\n errors = {},\n}: QuestionMatrixFormProps) {\n const { t } = useT()\n const { questions, mineralScope } = versionDef\n const rawMinerals = mineralsOverride ?? mineralScope.minerals\n\n const mineralSignature = rawMinerals\n .map((mineral) => `${mineral.key}:${mineral.labelKey ?? ''}`)\n .join('|')\n\n const questionSignature = questions\n .map(\n (question) =>\n `${question.key}:${question.perMineral ? 1 : 0}:${question.labelKey}:${buildOptionSignature(\n question.options\n )}:${buildOptionsByMineralSignature(question.optionsByMineral)}`\n )\n .join('|')\n\n const minerals: Array<MineralDef & { label?: string }> = useCreation(\n () => rawMinerals.map((mineral) => ({ ...mineral })),\n [rawMinerals, mineralSignature]\n )\n\n const optionsByKey = useCreation(() => {\n const map = new Map<string, QuestionOptionItem[]>()\n const toOptions = (options: QuestionDef['options']) =>\n options.map((opt) => ({\n value: opt.value,\n label: t(opt.labelKey),\n }))\n questions.forEach((question) => {\n if (question.perMineral) {\n minerals.forEach((mineral) => {\n const override = question.optionsByMineral?.[mineral.key]\n const options = override ?? question.options\n map.set(`${question.key}:${mineral.key}`, toOptions(options))\n })\n return\n }\n map.set(`${question.key}:__all`, toOptions(question.options))\n })\n return map\n }, [questions, minerals, mineralSignature, questionSignature, t])\n\n const handleChange = useMemoizedFn(\n (questionKey: string, mineralKey: string | null, value: string) => {\n onChange(questionKey, mineralKey, value)\n }\n )\n\n const handleCommentChange = useMemoizedFn(\n (questionKey: string, mineralKey: string | null, value: string) => {\n onCommentChange(questionKey, mineralKey, value)\n }\n )\n\n /** 预构建问题回答回调映射。 */\n const getCellHandlerByKey = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n questions.forEach((question) => {\n if (question.perMineral) {\n minerals.forEach((mineral) => {\n map.set(`${question.key}:${mineral.key}`, (value) =>\n handleChange(question.key, mineral.key, value)\n )\n })\n return\n }\n map.set(`${question.key}:__all`, (value) => handleChange(question.key, null, value))\n })\n return map\n }, [handleChange, minerals, questions, mineralSignature, questionSignature])\n\n /** 预构建问题备注回调映射。 */\n const getCommentHandlerByKey = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n questions.forEach((question) => {\n if (question.perMineral) {\n minerals.forEach((mineral) => {\n map.set(`${question.key}:${mineral.key}`, (value) =>\n handleCommentChange(question.key, mineral.key, value)\n )\n })\n return\n }\n map.set(`${question.key}:__all`, (value) => handleCommentChange(question.key, null, value))\n })\n return map\n }, [handleCommentChange, minerals, questions, mineralSignature, questionSignature])\n\n /** 根据问题类型(全局/按矿产)计算 Map key。 */\n const getCellHandler = useMemoizedFn(\n (questionKey: string, mineralKey: string | null, perMineral: boolean) => {\n const key = perMineral ? `${questionKey}:${mineralKey ?? ''}` : `${questionKey}:__all`\n return getCellHandlerByKey(key)!\n }\n )\n\n const getCommentHandler = useMemoizedFn(\n (questionKey: string, mineralKey: string | null, perMineral: boolean) => {\n const key = perMineral ? `${questionKey}:${mineralKey ?? ''}` : `${questionKey}:__all`\n return getCommentHandlerByKey(key)!\n }\n )\n\n const getOptions = useMemoizedFn(\n (questionKey: string, mineralKey: string | null, perMineral: boolean) => {\n const key = perMineral ? `${questionKey}:${mineralKey ?? ''}` : `${questionKey}:__all`\n return optionsByKey.get(key) ?? []\n }\n )\n\n // 批量设置处理:为所有支持该选项的金属设置值\n const handleBatchSet = useMemoizedFn((questionKey: string, value: string) => {\n minerals.forEach((mineral) => {\n const opts = getOptions(questionKey, mineral.key, true)\n // 只有当该金属支持此选项时才设置\n if (opts.some((o) => o.value === value)) {\n onChange(questionKey, mineral.key, value)\n }\n })\n })\n\n return (\n <Card\n title={\n <Flex wrap align=\"center\" justify=\"space-between\" gap={8}>\n <div>\n <Typography.Title level={5} style={{ margin: 0 }}>\n {t('sections.questionMatrix')}\n </Typography.Title>\n <Typography.Text type=\"secondary\">\n {t('sections.questionMatrixHint')}\n </Typography.Text>\n </div>\n <Tag color=\"blue\">\n {t('badges.questionRange', { from: 1, to: questions.length })}\n </Tag>\n </Flex>\n }\n >\n <Flex vertical gap={0}>\n {questions.map((question) => (\n <QuestionRow\n key={question.key}\n question={question}\n minerals={minerals}\n values={values}\n commentValues={commentValues}\n errors={errors}\n gatingByMineral={gatingByMineral}\n requiredByQuestion={requiredByQuestion}\n getOptions={getOptions}\n getCellHandler={getCellHandler}\n getCommentHandler={getCommentHandler}\n onBatchSet={handleBatchSet}\n t={t}\n />\n ))}\n </Flex>\n </Card>\n )\n}\n\n/**\n * 单个问题卡片组件\n */\nfunction QuestionRow({\n question,\n minerals,\n values,\n commentValues,\n errors,\n gatingByMineral,\n requiredByQuestion,\n getOptions,\n getCellHandler,\n getCommentHandler,\n onBatchSet,\n t,\n}: {\n question: QuestionDef\n minerals: Array<MineralDef & { label?: string }>\n values: Record<string, Record<string, string> | string>\n commentValues: Record<string, Record<string, string> | string>\n errors: Record<string, Record<string, ErrorKey> | ErrorKey>\n gatingByMineral?: Map<string, GatingResult>\n requiredByQuestion?: Map<string, Map<string, boolean>>\n getOptions: (\n questionKey: string,\n mineralKey: string | null,\n perMineral: boolean\n ) => QuestionOptionItem[]\n getCellHandler: (\n questionKey: string,\n mineralKey: string | null,\n perMineral: boolean\n ) => ((value: string) => void) | undefined\n getCommentHandler: (\n questionKey: string,\n mineralKey: string | null,\n perMineral: boolean\n ) => ((value: string) => void) | undefined\n onBatchSet: (questionKey: string, value: string) => void\n t: (key: I18nKey) => string\n}) {\n // 判断整行是否禁用\n let rowDisabled = question.key !== 'Q1'\n for (const mineral of minerals) {\n const gating = gatingByMineral?.get(mineral.key)\n const isDisabled = getQuestionDisabled(question.key, gating)\n if (!isDisabled) {\n rowDisabled = false\n break\n }\n }\n\n // 是否显示\"全部设为\":perMineral=true 且金属数>1\n const showBatchFill = question.perMineral && minerals.length > 1\n\n // 计算所有金属选项的交集(只显示所有金属都有的选项)\n const commonOptions = useCreation(() => {\n if (!showBatchFill) return []\n // 收集每个金属的选项值集合\n const allOptionSets = minerals.map(\n (m) => new Set(getOptions(question.key, m.key, true).map((o) => o.value))\n )\n // 取交集\n const intersection = allOptionSets.reduce(\n (acc, set) => new Set([...acc].filter((v) => set.has(v))),\n allOptionSets[0] ?? new Set()\n )\n // 返回完整选项对象(保留 label)\n const firstOptions = getOptions(question.key, minerals[0]?.key ?? null, true)\n return firstOptions.filter((opt) => intersection.has(opt.value))\n }, [showBatchFill, question.key, minerals, getOptions])\n\n return (\n <div className={`question-matrix-row ${rowDisabled ? 'question-row-disabled' : ''}`}>\n <Flex vertical gap={12}>\n {/* 问题标题 + 全部设为下拉框 */}\n <Flex align=\"center\" justify=\"space-between\" gap={12}>\n <Typography.Text strong style={{ fontSize: 14, flex: 1 }}>\n {t(question.labelKey)}\n </Typography.Text>\n {showBatchFill && commonOptions.length > 0 && !rowDisabled && (\n <Select\n placeholder={t('actions.setAllTo')}\n options={commonOptions}\n onChange={(value: string) => onBatchSet(question.key, value)}\n style={{ width: 140 }}\n size=\"small\"\n allowClear\n value={undefined}\n />\n )}\n </Flex>\n\n {/* 金属列表 - 纵向排列 */}\n <Flex vertical gap={8}>\n {minerals.map((mineral) => {\n const gating = gatingByMineral?.get(mineral.key)\n const isDisabled = getQuestionDisabled(question.key, gating)\n const currentValue = getQuestionValue(\n values,\n question.key,\n mineral.key,\n question.perMineral\n )\n const currentComment = getQuestionValue(\n commentValues,\n question.key,\n mineral.key,\n question.perMineral\n )\n const error = getQuestionError(errors, question.key, mineral.key, question.perMineral)\n void error // Suppress unused variable warning - error display not yet implemented\n const required = requiredByQuestion?.get(question.key)?.get(mineral.key) === true\n const cellHandler = getCellHandler(question.key, mineral.key, question.perMineral)\n const commentHandler = getCommentHandler(question.key, mineral.key, question.perMineral)\n const options = getOptions(question.key, mineral.key, question.perMineral)\n\n return (\n <div key={mineral.key} className=\"question-matrix-grid\">\n {/* 金属名称 */}\n <Typography.Text\n className=\"question-matrix-label\"\n type={isDisabled ? 'secondary' : undefined}\n >\n {mineral.label ?? t(mineral.labelKey)}\n </Typography.Text>\n\n <div className=\"question-matrix-answer\">\n <Select\n value={currentValue || undefined}\n onChange={cellHandler}\n onKeyDown={createKeyDownHandler(options, cellHandler, isDisabled)}\n options={options}\n placeholder={t('placeholders.select')}\n disabled={isDisabled}\n allowClear\n className={!isDisabled && required && !currentValue ? 'field-required-empty' : undefined}\n data-field-path={\n question.perMineral\n ? `questions.${question.key}.${mineral.key}`\n : `questions.${question.key}`\n }\n />\n </div>\n\n <div className=\"question-matrix-comment\">\n <Input.TextArea\n value={currentComment || undefined}\n onChange={(e) => commentHandler?.(e.target.value)}\n placeholder={t('placeholders.comments')}\n disabled={isDisabled}\n autoSize={{ minRows: 1, maxRows: 2 }}\n rows={1}\n style={{ resize: 'none' }}\n data-field-path={\n question.perMineral\n ? `questionComments.${question.key}.${mineral.key}`\n : `questionComments.${question.key}`\n }\n />\n </div>\n </div>\n )\n })}\n </Flex>\n </Flex>\n </div>\n )\n}\n\n/**\n * 辅助函数:创建键盘快捷键处理器(Y/N/U 快速选择)\n */\nfunction createKeyDownHandler(\n options: QuestionOptionItem[],\n handler: ((value: string) => void) | undefined,\n disabled: boolean\n) {\n return (e: React.KeyboardEvent) => {\n if (disabled || !handler) return\n const key = e.key.toLowerCase()\n if (key !== 'y' && key !== 'n' && key !== 'u') return\n const matched = options.find((opt) => opt.value.toLowerCase().startsWith(key))\n if (matched) {\n e.preventDefault()\n handler(matched.value)\n }\n }\n}\n\n// 辅助函数:判断问题是否在 gating 下禁用\nfunction getQuestionDisabled(questionKey: string, gating?: GatingResult): boolean {\n if (!gating) return false\n if (questionKey === 'Q1') return false\n if (questionKey === 'Q2') return !gating.q2Enabled\n return !gating.laterQuestionsEnabled\n}\n\n// 辅助函数:获取问题当前值(支持 perMineral/全局)\nfunction getQuestionValue(\n values: Record<string, Record<string, string> | string>,\n questionKey: string,\n mineralKey: string,\n perMineral: boolean\n): string {\n const questionValue = values[questionKey]\n if (perMineral && typeof questionValue === 'object') {\n return questionValue[mineralKey] || ''\n }\n if (typeof questionValue === 'string') {\n return questionValue\n }\n return ''\n}\n\n// 辅助函数:获取问题错误(支持 perMineral/全局)\nfunction getQuestionError(\n errors: Record<string, Record<string, ErrorKey> | ErrorKey>,\n questionKey: string,\n mineralKey: string,\n perMineral: boolean\n): ErrorKey | undefined {\n const questionError = errors[questionKey]\n if (perMineral && typeof questionError === 'object') {\n return questionError[mineralKey]\n }\n if (typeof questionError === 'string') {\n return questionError\n }\n return undefined\n}\n","/**\n * @file ui/theme/spacing.ts\n * @description 统一的间距常量定义,用于保持 UI 布局的一致性。\n */\n\n/**\n * 基础间距单位 (4px)\n * 所有间距值都基于此单位的倍数\n */\nconst BASE = 4\n\n/**\n * 间距常量\n * - xs: 4px - 紧凑元素内部间距(如标签与图标)\n * - sm: 8px - 小间距(如按钮组、行内元素)\n * - md: 12px - 中等间距(如列表项、表单控件)\n * - lg: 16px - 标准间距(如卡片间距、模块间距)\n * - xl: 20px - 大间距(如区块间距)\n * - xxl: 24px - 超大间距(如页面区域)\n */\nexport const SPACING = {\n /** 4px - 紧凑元素内部间距 */\n xs: BASE,\n /** 8px - 小间距(按钮组、行内元素) */\n sm: BASE * 2,\n /** 12px - 中等间距(列表项、表单控件) */\n md: BASE * 3,\n /** 16px - 标准间距(卡片间距、模块间距) */\n lg: BASE * 4,\n /** 20px - 大间距(区块间距) */\n xl: BASE * 5,\n /** 24px - 超大间距(页面区域) */\n xxl: BASE * 6,\n} as const\n\n/**\n * 页面布局相关间距\n */\nexport const LAYOUT = {\n /** 页面内容区域内边距 */\n pagePadding: SPACING.lg,\n /** 页面模块之间的间距 */\n sectionGap: SPACING.lg,\n /** 表单卡片内边距 */\n cardPadding: SPACING.xxl,\n /** 表格卡片头部内边距 */\n cardHeaderPadding: `${SPACING.md}px ${SPACING.lg}px`,\n} as const\n\n/**\n * 组件内部间距\n */\nexport const COMPONENT = {\n /** Flex 行内元素小间距 */\n inlineGapSm: SPACING.sm,\n /** Flex 行内元素中间距 */\n inlineGapMd: SPACING.md,\n /** 垂直列表项间距 */\n listGap: SPACING.md,\n /** 表单字段间距 */\n fieldGap: SPACING.lg,\n} as const\n","/**\n * @file app/pages/useFieldFocus.ts\n * @description 页面组件。\n */\n\n// 说明:页面组件\nimport { useOptionalNavigation } from '@shell/navigation/useNavigation'\nimport { useCreation } from 'ahooks'\nimport { useEffect } from 'react'\n\n/** 根据 URL 中的 focus 参数定位并高亮表单字段。 */\nexport function useFieldFocus() {\n const navigation = useOptionalNavigation()\n /** 优先使用路由上下文 searchParams,缺失时回退到 window。 */\n const searchParams = useCreation(() => {\n if (navigation) return navigation.state.searchParams\n if (typeof window !== 'undefined') {\n return new URLSearchParams(window.location.search)\n }\n return new URLSearchParams()\n }, [navigation])\n\n useEffect(() => {\n const fieldPath = searchParams.get('focus')\n if (!fieldPath) return\n\n // 找到字段容器并滚动到可见位置。\n const target = document.querySelector(`[data-field-path=\"${fieldPath}\"]`)\n if (!target) return\n\n target.scrollIntoView({ behavior: 'smooth', block: 'center' })\n\n // 聚焦输入控件并添加短暂高亮。\n const input = target.querySelector('input, textarea, .ant-select-selector') as\n | HTMLElement\n | null\n input?.focus()\n target.classList.add('app-field-focus')\n\n const timeout = window.setTimeout(() => {\n target.classList.remove('app-field-focus')\n }, 1500)\n\n return () => window.clearTimeout(timeout)\n }, [searchParams])\n}\n","/**\n * @file app/pages/DeclarationPage.tsx\n * @description 页面组件。\n */\n\n// 说明:页面组件\nimport {\n useMineralReconcileNotice,\n useTemplateActions,\n useTemplateDerived,\n useTemplateErrors,\n useTemplateState,\n} from '@shell/store'\nimport { CompanyInfoForm } from '@ui/forms/CompanyInfoForm'\nimport { CompanyQuestionsForm } from '@ui/forms/CompanyQuestionsForm'\nimport { MineralScopeForm } from '@ui/forms/MineralScopeForm'\nimport { QuestionMatrixForm } from '@ui/forms/QuestionMatrixForm'\nimport { useT } from '@ui/i18n/useT'\nimport { LAYOUT } from '@ui/theme/spacing'\nimport { Alert, Button, Flex } from 'antd'\n\nimport { useFieldFocus } from './useFieldFocus'\n\n/** Declaration 页面:汇总公司信息、矿产范围、问题矩阵与公司问题。 */\nexport function DeclarationPage() {\n const { meta, form } = useTemplateState()\n const { versionDef } = meta\n const {\n companyInfo,\n selectedMinerals,\n customMinerals,\n questions,\n questionComments,\n companyQuestions,\n } = form\n const reconcileNotice = useMineralReconcileNotice()\n const errors = useTemplateErrors()\n const {\n setCompanyInfoField,\n setSelectedMinerals,\n setCustomMinerals,\n setQuestionValue,\n setQuestionComment,\n setCompanyQuestionValue,\n clearMineralReconcileNotice,\n } = useTemplateActions()\n const { t } = useT()\n\n // 规则派生:用于必填校验和 gating 控制。\n const { gatingByMineral, requiredFields, viewModels } = useTemplateDerived()\n\n // 页面派生数据:集中输出\"展示矿产 + 公司问题 gating\"的结果,页面只消费渲染。\n const { displayMinerals } = viewModels.declaration\n const showReconcileNotice =\n reconcileNotice !== null &&\n versionDef.templateType === 'emrt' &&\n (versionDef.version.id === '2.0' || versionDef.version.id === '2.1')\n\n const removedMineralsLabel =\n reconcileNotice?.removedMinerals\n .map((mineralKey) => {\n const mineral = versionDef.mineralScope.minerals.find((item) => item.key === mineralKey)\n return mineral ? t(mineral.labelKey) : mineralKey\n })\n .join(', ') ?? ''\n\n useFieldFocus()\n\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n {showReconcileNotice && (\n <Alert\n type=\"warning\"\n showIcon\n message={t('hints.emrtMineralDeleteReconcileTitle')}\n description={t('hints.emrtMineralDeleteReconcileDesc', {\n minerals: removedMineralsLabel,\n })}\n action={\n <Button size=\"small\" onClick={clearMineralReconcileNotice}>\n {t('actions.markChecked')}\n </Button>\n }\n />\n )}\n\n <CompanyInfoForm\n versionDef={versionDef}\n values={companyInfo}\n onChange={setCompanyInfoField}\n requiredFields={requiredFields.companyInfo}\n errors={errors.companyInfo}\n dateFormatHint={t('hints.authorizationDate')}\n />\n\n <MineralScopeForm\n versionDef={versionDef}\n selectedMinerals={selectedMinerals}\n onMineralsChange={setSelectedMinerals}\n customMinerals={customMinerals}\n onCustomMineralsChange={setCustomMinerals}\n errors={{\n selection: errors.mineralsScope,\n custom: errors.customMinerals,\n }}\n />\n\n\t <QuestionMatrixForm\n\t versionDef={versionDef}\n\t minerals={displayMinerals}\n\t values={questions}\n\t commentValues={questionComments}\n\t onChange={setQuestionValue}\n\t onCommentChange={setQuestionComment}\n\t gatingByMineral={gatingByMineral}\n\t requiredByQuestion={requiredFields.questions}\n\t errors={errors.questions}\n\t />\n\n\t <CompanyQuestionsForm\n\t questions={versionDef.companyQuestions}\n\t questionDefs={versionDef.questions}\n\t minerals={displayMinerals}\n\t values={companyQuestions}\n\t onChange={setCompanyQuestionValue}\n\t gatingByMineral={gatingByMineral}\n\t gatingCondition={versionDef.gating.companyQuestionsGating}\n requiredByQuestion={requiredFields.companyQuestions}\n errors={errors.companyQuestions}\n />\n </Flex>\n )\n}\n","/**\n * @file app/pages/Placeholder.tsx\n * @description 页面组件。\n */\n\nimport { useT } from '@ui/i18n/useT'\nimport { SPACING } from '@ui/theme/spacing'\nimport { Flex, Typography } from 'antd'\n\nconst { Title, Text } = Typography\n\n/** PlaceholderPage Props。 */\ninterface PlaceholderProps {\n title: string\n}\n\n/**\n * 页面组件:PlaceholderPage(用于未实现页面的统一占位)。\n */\nexport function PlaceholderPage({ title }: PlaceholderProps) {\n const { t } = useT()\n return (\n <Flex justify=\"center\" align=\"center\" style={{ height: 256 }}>\n <Text type=\"secondary\" style={{ fontSize: 18 }}>\n {t('common.comingSoon', { title })}\n </Text>\n </Flex>\n )\n}\n\n/**\n * 页面组件:HomePage(入口占位页)。\n */\nexport function HomePage() {\n const { t } = useT()\n return (\n <Flex vertical justify=\"center\" align=\"center\" gap={SPACING.lg} style={{ height: 256 }}>\n <Title level={3} style={{ margin: 0 }}>{t('common.homeTitle')}</Title>\n <Text type=\"secondary\">{t('common.homeSubtitle')}</Text>\n </Flex>\n )\n}\n\n/** TemplatePage Props。 */\ninterface TemplatePageProps {\n page: string\n}\n\n/**\n * 页面组件:TemplatePage(路由 fallback 占位)。\n */\nexport function TemplatePage({ page }: TemplatePageProps) {\n return <PlaceholderPage title={page} />\n}\n","/**\n * @file app/pages/useDocStatus.ts\n * @description 页面组件。\n */\n// 说明:页面组件\nimport type { I18nKey } from '@core/i18n'\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport { type DocStatusData } from '@core/rules/docStatus'\nimport { getDisplayMinerals } from '@core/template/minerals'\nimport { useTemplateDerived, useTemplateState } from '@shell/store'\nimport { useT } from '@ui/i18n/useT'\nimport { compact } from 'lodash-es'\n\nimport type { DocSectionKey } from './docTypes'\n\n/**\n * 导出类型:DocStatusTone。\n */\nexport type DocStatusTone = 'info' | 'success' | 'warning'\n\n/**\n * 导出接口类型:DocStatus。\n */\nexport interface DocStatus {\n tone: DocStatusTone\n text: string\n}\n\ntype StatusMapEntry = {\n tone: DocStatusTone\n key: I18nKey\n withMetalsKey?: I18nKey\n}\n\n/** DocStatus 类型到展示文案的映射表。 */\nconst STATUS_TEXT_MAP: Record<string, StatusMapEntry> = {\n productListRequired: { tone: 'success', key: 'docStatus.productListRequired' },\n productListNotRequired: { tone: 'info', key: 'docStatus.productListNotRequired' },\n productListUnknown: { tone: 'warning', key: 'docStatus.productListUnknown' },\n smelterListUnknown: { tone: 'warning', key: 'docStatus.smelterListUnknown' },\n smelterListNotRequired: { tone: 'info', key: 'docStatus.smelterListNotRequired' },\n smelterListPending: { tone: 'warning', key: 'docStatus.smelterListPending' },\n smelterListRequired: {\n tone: 'success',\n key: 'docStatus.smelterListRequired',\n withMetalsKey: 'docStatus.smelterListRequiredWithMetals',\n },\n mineListAvailable: { tone: 'info', key: 'docStatus.mineListAvailable' },\n mineListNotAvailable: { tone: 'info', key: 'docStatus.mineListNotAvailable' },\n}\n\n/** 计算文档章节状态提示(产品/冶炼厂/矿山)。 */\nexport function useDocStatus(section: DocSectionKey): DocStatus | null {\n const { meta, form } = useTemplateState()\n const { versionDef } = meta\n const { selectedMinerals, customMinerals } = form\n const { docStatusBySection } = useTemplateDerived()\n const { t } = useT()\n /** 规则引擎输出的章节状态(按 section 分类)。 */\n const statusBySection = docStatusBySection\n\n if (section === 'productList') {\n return resolveStatus(statusBySection.productList, t)\n }\n\n if (section === 'smelterList') {\n return resolveStatus(\n statusBySection.smelterList,\n t,\n versionDef,\n selectedMinerals,\n customMinerals\n )\n }\n\n if (section === 'mineList') {\n return resolveStatus(statusBySection.mineList, t)\n }\n\n return null\n}\n\n/** 将规则状态映射为展示文案与语气。 */\nfunction resolveStatus(\n status: DocStatusData,\n t: (key: I18nKey, options?: Record<string, unknown>) => string,\n versionDef?: TemplateVersionDef,\n selectedMinerals: string[] = [],\n customMinerals: string[] = []\n): DocStatus {\n const entry = STATUS_TEXT_MAP[status.type]\n if (!entry) {\n return { tone: 'info', text: t('docStatus.productListNotRequired') }\n }\n\n let key = entry.key\n const params: Record<string, unknown> = {}\n\n if (status.type === 'smelterListPending') {\n const metalLabels = versionDef\n ? getMetalLabels(\n versionDef,\n selectedMinerals,\n customMinerals,\n status.metals ?? [],\n t\n )\n : []\n params.metals = metalLabels.join(', ')\n params.questions = status.questions ?? 'Q1/Q2'\n }\n\n if (status.type === 'smelterListRequired') {\n const metalLabels = versionDef\n ? getMetalLabels(\n versionDef,\n selectedMinerals,\n customMinerals,\n status.metals ?? [],\n t\n )\n : []\n if (metalLabels.length > 0 && entry.withMetalsKey) {\n key = entry.withMetalsKey\n params.metals = metalLabels.join(', ')\n }\n }\n\n return { tone: entry.tone, text: t(key, params) }\n}\n\n/** 解析矿产 key -> 展示 label(优先自定义矿产名)。 */\nfunction getMetalLabels(\n versionDef: TemplateVersionDef,\n selectedMinerals: string[],\n customMinerals: string[],\n keys: string[],\n t: (key: I18nKey) => string\n): string[] {\n const displayMinerals = getDisplayMinerals(versionDef, selectedMinerals, customMinerals)\n const labelByKey = new Map(\n displayMinerals.map((mineral) => [\n mineral.key,\n mineral.label ?? t(mineral.labelKey),\n ])\n )\n return compact(keys.map((key) => labelByKey.get(key)))\n}\n","/**\n * @file app/pages/DocContent.tsx\n * @description 文档内容组件,使用 Ant Design Card 和 Alert 实现。\n */\n\nimport type { I18nKey } from '@core/i18n'\nimport { getDefaultVersion } from '@core/registry'\nimport type { TemplateType } from '@core/registry/types'\nimport { useTemplateState } from '@shell/store'\nimport { useT } from '@ui/i18n/useT'\nimport { LAYOUT, SPACING } from '@ui/theme/spacing'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { Alert, Card, Flex, Typography } from 'antd'\nimport { compact } from 'lodash-es'\n\nimport type { DocSectionKey } from './docTypes'\nimport { PlaceholderPage } from './Placeholder'\nimport { useDocStatus, type DocStatus } from './useDocStatus'\n\nconst { Title, Paragraph, Text } = Typography\n\n/** 术语定义项结构。 */\ninterface DefinitionEntry {\n term: string\n definition: string\n}\n\n/** 根据模板/版本与章节解析 doc key,当前版本不存在则回退到默认版本。 */\nfunction resolveDocKey(\n templateType: TemplateType,\n versionId: string,\n section: DocSectionKey,\n exists: (key: string) => boolean\n) {\n const directKey = `docs.${templateType}.${versionId}.${section}`\n if (exists(directKey)) return directKey\n const fallbackKey = `docs.${templateType}.${getDefaultVersion(templateType)}.${section}`\n return fallbackKey\n}\n\n/** 解析文档 key:基于模板/版本,并监听 locale 确保切换语言后重算。 */\nfunction useDocKey(section: DocSectionKey): I18nKey {\n const { meta } = useTemplateState()\n const { templateType, versionId } = meta\n const { locale, i18n } = useT()\n const exists = useMemoizedFn((key: string) => i18n.exists(key))\n return useCreation(\n () => resolveDocKey(templateType, versionId, section, exists) as I18nKey,\n [templateType, versionId, section, exists, locale]\n )\n}\n\n/** 获取文档段落:从 i18n 数组读取并过滤空值。 */\nfunction useDocParagraphs(section: DocSectionKey): string[] {\n const { t } = useT()\n const key = useDocKey(section)\n return useCreation(() => {\n const value = t(key, { returnObjects: true, defaultValue: [] })\n if (!Array.isArray(value)) return []\n return compact(\n value.map((item) =>\n typeof item === 'string' && item.trim().length > 0 ? item : null\n )\n )\n }, [key, t])\n}\n\n/** 获取定义列表:仅保留 term/definition 均为字符串的条目。 */\nfunction useDocDefinitions(): DefinitionEntry[] {\n const { t } = useT()\n const key = useDocKey('definitions')\n return useCreation(() => {\n const value = t(key, { returnObjects: true, defaultValue: [] })\n if (!Array.isArray(value)) return []\n return compact(\n value.map((item) => {\n if (!item || typeof item !== 'object') return null\n if (!('term' in item) || !('definition' in item)) return null\n const entry = item as DefinitionEntry\n if (typeof entry.term !== 'string' || typeof entry.definition !== 'string') return null\n return entry\n })\n )\n }, [key, t])\n}\n\n/** DocNote Props。 */\ninterface DocNoteProps {\n section: DocSectionKey\n}\n\n/** 渲染状态提示块:使用 Ant Design Alert 组件。 */\nfunction renderStatus(status: DocStatus) {\n const alertType =\n status.tone === 'success'\n ? 'success'\n : status.tone === 'warning'\n ? 'warning'\n : 'info'\n return (\n <Alert\n type={alertType}\n message={status.text}\n showIcon\n style={{ marginBottom: SPACING.sm }}\n />\n )\n}\n\n/** 章节提示(可含状态信息):使用 Ant Design Card 组件。 */\nexport function DocNote({ section }: DocNoteProps) {\n const paragraphs = useDocParagraphs(section)\n const status = useDocStatus(section)\n if (paragraphs.length === 0) return null\n return (\n <Card>\n {status ? renderStatus(status) : null}\n <Typography>\n {paragraphs.map((text, index) => (\n <Paragraph\n key={`${section}-${index}`}\n style={{ marginBottom: index < paragraphs.length - 1 ? SPACING.sm : 0, whiteSpace: 'pre-line' }}\n type=\"secondary\"\n >\n {text}\n </Paragraph>\n ))}\n </Typography>\n </Card>\n )\n}\n\n/** DocPage Props。 */\ninterface DocPageProps {\n titleKey: I18nKey\n section: DocSectionKey\n}\n\n/** 文档页面:支持普通段落或 definitions 列表,使用 Ant Design Card。 */\nexport function DocPage({ titleKey, section }: DocPageProps) {\n const { t } = useT()\n const paragraphs = useDocParagraphs(section)\n const entries = useDocDefinitions()\n const status = useDocStatus(section)\n\n if (section === 'definitions') {\n if (entries.length === 0) {\n return <PlaceholderPage title={t(titleKey)} />\n }\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n <Title level={4} style={{ margin: 0 }}>{t(titleKey)}</Title>\n {entries.map((entry, index) => (\n <Card key={`definition-${index}`}>\n <Text strong>{entry.term}</Text>\n <Paragraph\n type=\"secondary\"\n style={{ marginTop: SPACING.xs, marginBottom: 0, whiteSpace: 'pre-line' }}\n >\n {entry.definition}\n </Paragraph>\n </Card>\n ))}\n </Flex>\n )\n }\n\n if (paragraphs.length === 0) {\n return <PlaceholderPage title={t(titleKey)} />\n }\n\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n <Title level={4} style={{ margin: 0 }}>{t(titleKey)}</Title>\n {status ? renderStatus(status) : null}\n <Typography>\n {paragraphs.map((text, index) => (\n <Paragraph\n key={`${section}-${index}`}\n type=\"secondary\"\n style={{ marginBottom: index < paragraphs.length - 1 ? SPACING.md : 0, whiteSpace: 'pre-line' }}\n >\n {text}\n </Paragraph>\n ))}\n </Typography>\n </Flex>\n )\n}\n","/**\n * @file ui/helpers/fieldRequired.tsx\n * @description 必填字段包裹组件:在表格/表单中标记黄色必填背景。\n *\n * 该函数在 4 个组件中重复出现,提取到此处统一管理:\n * - SmelterListTable\n * - ProductListTable\n * - MineListTable\n * - MineralsScopeReasonsForm\n */\n\nimport type { ReactNode } from 'react'\n\n/**\n * 条件包裹必填字段样式。\n *\n * @param required - 是否必填(false 时直接返回 node,无包裹)\n * @param node - 需要被包裹的内容\n * @returns 包裹后的 JSX 或原始 node\n */\nexport function wrapRequired(required: boolean, node: ReactNode): ReactNode {\n if (!required) return node\n return <div className=\"field-required\">{node}</div>\n}\n","/**\n * @file ui/tables/MineListTable.tsx\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport { PlusOutlined, DeleteOutlined } from '@ant-design/icons'\nimport type { MineralDef, MineListConfig } from '@core/registry/types'\nimport type { MineRow } from '@core/types/tableRows'\nimport { wrapRequired } from '@ui/helpers/fieldRequired'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n/useT'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { AutoComplete, Button, Card, Flex, Table, Select, Input, Tag, Typography } from 'antd'\nimport type { ColumnsType } from 'antd/es/table'\nimport type { ChangeEvent } from 'react'\n\ninterface MineListTableProps {\n config: MineListConfig\n availableMetals: Array<MineralDef & { label?: string }>\n rows: MineRow[]\n onChange: (rows: MineRow[]) => void\n countryOptions?: Array<{ value: string; label: string }>\n smelterOptions?: Array<{ value: string; label: string }>\n smelterOptionsByMetal?: Record<string, Array<{ value: string; label: string }>>\n}\n\nconst INPUT_FIELDS = [\n 'smelterName',\n 'mineName',\n 'mineId',\n 'mineIdSource',\n 'mineStreet',\n 'mineCity',\n 'mineProvince',\n 'mineContactName',\n 'mineContactEmail',\n 'proposedNextSteps',\n 'comments',\n] as const\n\nconst SELECT_FIELDS = ['metal', 'smelterName', 'mineCountry'] as const\n\n/** 矿山清单表格:支持增删行与行内编辑。 */\nexport function MineListTable({\n config,\n availableMetals,\n rows,\n onChange,\n countryOptions = [],\n smelterOptions = [],\n smelterOptionsByMetal = {},\n}: MineListTableProps) {\n const { t } = useT()\n /** 行索引缓存:避免频繁全表 map/filter。 */\n const rowIndexMap = useCreation(\n () => new Map(rows.map((row, index) => [row.id, index])),\n [rows]\n )\n\n // wrapRequired 已提取到 @ui/helpers/fieldRequired\n /** 添加空行(保持字段结构完整)。 */\n const handleAddRow = useMemoizedFn(() => {\n const newRow: MineRow = {\n id: `mine-${Date.now()}`,\n metal: '',\n smelterName: '',\n mineName: '',\n mineCountry: '',\n mineId: '',\n mineIdSource: '',\n mineStreet: '',\n mineCity: '',\n mineProvince: '',\n mineDistrict: '',\n mineContactName: '',\n mineContactEmail: '',\n proposedNextSteps: '',\n comments: '',\n }\n onChange([...rows, newRow])\n })\n\n /** 删除指定行(基于缓存索引定位)。 */\n const handleRemoveRow = useMemoizedFn((id: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const next = rows.slice()\n next.splice(index, 1)\n onChange(next)\n })\n\n /** 更新单元格(值不变则不触发更新)。 */\n const handleCellChange = useMemoizedFn((id: string, field: keyof MineRow, value: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const row = rows[index]\n if (!row || row[field] === value) return\n const next = rows.slice()\n next[index] = { ...row, [field]: value }\n onChange(next)\n })\n\n /** 缓存输入回调,减少表格内联函数开销。 */\n const getInputHandler = useHandlerMap(() => {\n const map = new Map<string, (event: ChangeEvent<HTMLInputElement>) => void>()\n rows.forEach((row) => {\n INPUT_FIELDS.forEach((field) => {\n map.set(`${row.id}:${field}`, (event) =>\n handleCellChange(row.id, field, event.target.value)\n )\n })\n })\n return map\n }, [rows, handleCellChange])\n\n /** 缓存下拉回调。 */\n const getSelectHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n rows.forEach((row) => {\n SELECT_FIELDS.forEach((field) => {\n map.set(`${row.id}:${field}`, (value) => handleCellChange(row.id, field, value))\n })\n })\n return map\n }, [rows, handleCellChange])\n\n /** 缓存删除按钮回调。 */\n const getRemoveHandler = useHandlerMap(() => {\n const map = new Map<string, () => void>()\n rows.forEach((row) => {\n map.set(row.id, () => handleRemoveRow(row.id))\n })\n return map\n }, [rows, handleRemoveRow])\n\n const metalOptions = useCreation(\n () =>\n availableMetals.map((m) => ({\n value: m.key,\n label: m.label ?? t(m.labelKey),\n })),\n [availableMetals, t]\n )\n /** 统一的下拉搜索过滤逻辑,避免多处重复定义。 */\n const filterOptionByLabel = useMemoizedFn((input: string, option?: { label?: string }) =>\n (option?.label ?? '').toLowerCase().includes(input.toLowerCase())\n )\n\n const columns = useCreation<ColumnsType<MineRow>>(() => [\n {\n title: t('tables.metal'),\n dataIndex: 'metal',\n key: 'metal',\n width: 150,\n render: (value: string, record: MineRow) => (\n wrapRequired(\n true,\n <Select\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:metal`)}\n options={metalOptions}\n placeholder={t('placeholders.select')}\n className=\"w-full\"\n />\n )\n ),\n },\n {\n title: t('tables.mineSmelterName'),\n dataIndex: 'smelterName',\n key: 'smelterName',\n width: 220,\n render: (value: string, record: MineRow) => {\n const filteredOptions = record.metal\n ? smelterOptionsByMetal[record.metal] ?? []\n : smelterOptions\n const required = Boolean(record.metal)\n return config.smelterNameMode === 'dropdown'\n ? wrapRequired(\n required,\n <Select\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:smelterName`)}\n options={filteredOptions}\n placeholder={t('placeholders.mineSmelterSelect')}\n showSearch\n filterOption={filterOptionByLabel}\n className=\"w-full\"\n />\n )\n : wrapRequired(\n required,\n <AutoComplete\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:smelterName`)}\n placeholder={t('placeholders.mineSmelterInput')}\n options={filteredOptions}\n allowClear\n filterOption={filterOptionByLabel}\n className=\"w-full\"\n />\n )\n },\n },\n {\n title: t('tables.mineName'),\n dataIndex: 'mineName',\n key: 'mineName',\n width: 180,\n render: (value: string, record: MineRow) => (\n wrapRequired(\n Boolean(record.metal),\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineName`)}\n placeholder={t('placeholders.mineName')}\n />\n )\n ),\n },\n {\n title: t('tables.mineId'),\n dataIndex: 'mineId',\n key: 'mineId',\n width: 160,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineId`)}\n placeholder={t('placeholders.mineId')}\n />\n ),\n },\n {\n title: t('tables.mineSourceId'),\n dataIndex: 'mineIdSource',\n key: 'mineIdSource',\n width: 180,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineIdSource`)}\n placeholder={t('placeholders.mineSourceId')}\n />\n ),\n },\n {\n title: t('tables.country'),\n dataIndex: 'mineCountry',\n key: 'mineCountry',\n width: 160,\n render: (value: string, record: MineRow) => (\n wrapRequired(\n Boolean(record.metal),\n <Select\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:mineCountry`)}\n options={countryOptions}\n placeholder={t('placeholders.mineCountry')}\n showSearch\n filterOption={filterOptionByLabel}\n className=\"w-full\"\n />\n )\n ),\n },\n {\n title: t('tables.street'),\n dataIndex: 'mineStreet',\n key: 'mineStreet',\n width: 200,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineStreet`)}\n placeholder={t('placeholders.mineStreet')}\n />\n ),\n },\n {\n title: t('tables.city'),\n dataIndex: 'mineCity',\n key: 'mineCity',\n width: 160,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineCity`)}\n placeholder={t('placeholders.mineCity')}\n />\n ),\n },\n {\n title: t('tables.stateProvince'),\n dataIndex: 'mineProvince',\n key: 'mineProvince',\n width: 170,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineProvince`)}\n placeholder={t('placeholders.mineState')}\n />\n ),\n },\n {\n title: t('tables.contactName'),\n dataIndex: 'mineContactName',\n key: 'mineContactName',\n width: 180,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineContactName`)}\n placeholder={t('placeholders.mineContactName')}\n />\n ),\n },\n {\n title: t('tables.contactEmail'),\n dataIndex: 'mineContactEmail',\n key: 'mineContactEmail',\n width: 200,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineContactEmail`)}\n placeholder={t('placeholders.mineContactEmail')}\n />\n ),\n },\n {\n title: t('tables.proposedNextSteps'),\n dataIndex: 'proposedNextSteps',\n key: 'proposedNextSteps',\n width: 200,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:proposedNextSteps`)}\n placeholder={t('placeholders.mineNextSteps')}\n />\n ),\n },\n {\n title: t('tables.comments'),\n dataIndex: 'comments',\n key: 'comments',\n width: 180,\n render: (value: string, record: MineRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:comments`)}\n placeholder={t('placeholders.mineComments')}\n />\n ),\n },\n {\n title: '',\n key: 'actions',\n width: 60,\n render: (_: unknown, record: MineRow) => (\n <Button\n type=\"text\"\n danger\n icon={<DeleteOutlined />}\n onClick={getRemoveHandler(record.id)}\n />\n ),\n },\n ], [\n config.smelterNameMode,\n countryOptions,\n filterOptionByLabel,\n getInputHandler,\n getRemoveHandler,\n getSelectHandler,\n metalOptions,\n smelterOptions,\n t,\n ])\n\n if (!config.available) return null\n\n return (\n <Card\n title={\n <Flex align=\"center\" justify=\"space-between\" style={{ width: '100%' }}>\n <Flex align=\"center\" gap={8}>\n <Typography.Title level={5} style={{ margin: 0 }}>\n {t('tabs.mineList')}\n </Typography.Title>\n <Tag color=\"blue\">{t('badges.recordCount', { count: rows.length })}</Tag>\n </Flex>\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddRow}>\n {t('actions.addRow')}\n </Button>\n </Flex>\n }\n >\n <Table\n columns={columns}\n dataSource={rows}\n rowKey=\"id\"\n pagination={false}\n scroll={{ x: 'max-content' }}\n bordered\n />\n </Card>\n )\n}\n","/**\n * @file app/pages/MineListPage.tsx\n * @description 页面组件。\n */\n\nimport { useTemplateActions, useTemplateDerived, useTemplateState } from '@shell/store'\nimport { MineListTable } from '@ui/tables/MineListTable'\nimport { LAYOUT } from '@ui/theme/spacing'\nimport { Flex, Typography } from 'antd'\n\nimport { DocNote } from './DocContent'\nimport { useFieldFocus } from './useFieldFocus'\n\n/** Mine List 页面:渲染矿山清单表格与下拉联动。 */\nexport function MineListPage() {\n const { meta, lists } = useTemplateState()\n const { versionDef } = meta\n const { mineList: rows } = lists\n const { setMineList } = useTemplateActions()\n const { viewModels } = useTemplateDerived()\n\n const { availableMetals, countryOptions, smelterOptions, smelterOptionsByMetal } =\n viewModels.mineList\n\n useFieldFocus()\n\n if (!versionDef.mineList.available) {\n return (\n <Typography.Text type=\"secondary\">\n <DocNote section=\"mineList\" />\n </Typography.Text>\n )\n }\n\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n <DocNote section=\"mineList\" />\n <MineListTable\n config={versionDef.mineList}\n availableMetals={availableMetals}\n rows={rows}\n onChange={setMineList}\n countryOptions={countryOptions}\n smelterOptions={smelterOptions}\n smelterOptionsByMetal={smelterOptionsByMetal}\n />\n </Flex>\n )\n}\n","/**\n * @file ui/forms/MineralsScopeReasonsForm.tsx\n * @description 模块实现。\n */\n\n// 说明:AMRT Minerals Scope(矿物范围原因)表单。\nimport { DeleteOutlined } from '@ant-design/icons'\nimport type { MineralDef, TemplateVersionDef } from '@core/registry/types'\nimport { getDisplayMinerals } from '@core/template/minerals'\nimport type { MineralsScopeRow } from '@core/types/tableRows'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { wrapRequired } from '@ui/helpers/fieldRequired'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n/useT'\nimport { LAYOUT } from '@ui/theme/spacing'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { Button, Flex, Input, Select, Table, Tag, Typography } from 'antd'\nimport type { ColumnsType } from 'antd/es/table'\nimport type { ChangeEvent } from 'react'\n\ninterface MineralsScopeReasonsFormProps {\n versionDef: TemplateVersionDef\n rows: MineralsScopeRow[]\n /** 已选择的矿种 key(用于限定下拉范围)。 */\n selectedMinerals: string[]\n /** 其他/自定义矿种名称(用于生成动态矿种选项)。 */\n customMinerals: string[]\n onChange: (rows: MineralsScopeRow[]) => void\n errors?: Record<number, { mineral?: ErrorKey; reason?: ErrorKey }>\n}\n\n/**\n * Minerals Scope 表单(AMRT):填写矿种与纳入原因。\n */\nexport function MineralsScopeReasonsForm({\n versionDef,\n rows,\n selectedMinerals,\n customMinerals,\n onChange,\n errors = {},\n}: MineralsScopeReasonsFormProps) {\n const { t } = useT()\n\n const mineralOptions = useCreation(\n () => {\n const activeMinerals = getDisplayMinerals(versionDef, selectedMinerals, customMinerals)\n const sortedMinerals =\n versionDef.templateType === 'amrt'\n ? [...activeMinerals].sort((a, b) => {\n const left = (a.label ?? t(a.labelKey)).trim()\n const right = (b.label ?? t(b.labelKey)).trim()\n const result = left.localeCompare(right)\n return result !== 0 ? result : a.key.localeCompare(b.key)\n })\n : activeMinerals\n return sortedMinerals.map((mineral: MineralDef & { label?: string }) => ({\n value: mineral.key,\n label: mineral.label ?? t(mineral.labelKey),\n }))\n },\n [versionDef, selectedMinerals, customMinerals, t]\n )\n\n const rowIndexMap = useCreation(\n () => new Map(rows.map((row, index) => [row.id, index])),\n [rows]\n )\n\n // wrapRequired 已提取到 @ui/helpers/fieldRequired(此组件始终传 required=true)\n\n const handleAddRow = useMemoizedFn(() => {\n const newRow: MineralsScopeRow = {\n id: `minerals-scope-${Date.now()}`,\n mineral: '',\n reason: '',\n }\n onChange([...rows, newRow])\n })\n\n const handleRemoveRow = useMemoizedFn((id: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const next = rows.slice()\n next.splice(index, 1)\n onChange(next)\n })\n\n const handleCellChange = useMemoizedFn(\n (id: string, field: keyof MineralsScopeRow, value: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const row = rows[index]\n if (!row || row[field] === value) return\n const next = rows.slice()\n next[index] = { ...row, [field]: value }\n onChange(next)\n }\n )\n\n const getInputHandler = useHandlerMap(() => {\n const map = new Map<string, (event: ChangeEvent<HTMLInputElement>) => void>()\n rows.forEach((row) => {\n map.set(row.id, (event) =>\n handleCellChange(row.id, 'reason', event.target.value)\n )\n })\n return map\n }, [rows, handleCellChange])\n\n const getSelectHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n rows.forEach((row) => {\n map.set(row.id, (value) => handleCellChange(row.id, 'mineral', value))\n })\n return map\n }, [rows, handleCellChange])\n\n const columns = useCreation<ColumnsType<MineralsScopeRow>>(\n () => [\n {\n title: t('tables.metal'),\n dataIndex: 'mineral',\n key: 'mineral',\n width: 220,\n render: (value: string, record: MineralsScopeRow) => {\n const error = errors[rowIndexMap.get(record.id) ?? -1]?.mineral\n return wrapRequired(\n true,\n <Select\n value={value || undefined}\n onChange={getSelectHandler(record.id)}\n options={mineralOptions}\n placeholder={t('placeholders.select')}\n className=\"w-full\"\n status={error ? 'error' : undefined}\n />,\n )\n },\n },\n {\n title:\n versionDef.templateType === 'amrt'\n ? t(versionDef.version.id === '1.1' ? 'tables.mineralsScopeReasonPrt' : 'tables.mineralsScopeReasonAmrt')\n : t('tables.mineralsScopeReason'),\n dataIndex: 'reason',\n key: 'reason',\n render: (value: string, record: MineralsScopeRow) => {\n const error = errors[rowIndexMap.get(record.id) ?? -1]?.reason\n return wrapRequired(\n true,\n <Input\n value={value || undefined}\n onChange={getInputHandler(record.id)}\n placeholder={t('placeholders.mineralsScopeReason')}\n status={error ? 'error' : undefined}\n />,\n )\n },\n },\n {\n title: '',\n key: 'actions',\n width: 60,\n render: (_: unknown, record: MineralsScopeRow) => (\n <Button\n type=\"text\"\n danger\n icon={<DeleteOutlined />}\n onClick={() => handleRemoveRow(record.id)}\n />\n ),\n },\n ],\n [t, mineralOptions, errors, rowIndexMap, getSelectHandler, getInputHandler, handleRemoveRow]\n )\n\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n <Flex align=\"center\" justify=\"space-between\">\n <Flex wrap align=\"center\" gap={8}>\n <Typography.Title level={5} style={{ margin: 0 }}>{t('tabs.mineralsScope')}</Typography.Title>\n <Tag color=\"blue\">\n {t('badges.recordCount', { count: rows.length })}\n </Tag>\n </Flex>\n <Button type=\"primary\" onClick={handleAddRow}>\n {t('actions.addRow')}\n </Button>\n </Flex>\n <Table\n columns={columns}\n dataSource={rows}\n rowKey=\"id\"\n pagination={false}\n scroll={{ x: 'max-content' }}\n bordered\n />\n {rows.length === 0 && (\n <Typography.Text type=\"secondary\" style={{ display: 'block', textAlign: 'center', padding: '32px 0' }}>\n {t('tables.noData')}\n </Typography.Text>\n )}\n </Flex>\n )\n}\n","/**\n * @file app/pages/MineralsScopePage.tsx\n * @description 页面组件。\n */\n\n// 说明:页面组件\nimport { useTemplateActions, useTemplateErrors, useTemplateState } from '@shell/store'\nimport { MineralsScopeReasonsForm } from '@ui/forms/MineralsScopeReasonsForm'\n\n/** Minerals Scope 页面:仅呈现矿产范围选择表单。 */\nexport function MineralsScopePage() {\n const { meta, form, lists } = useTemplateState()\n const { versionDef } = meta\n const { selectedMinerals, customMinerals } = form\n const { mineralsScope } = lists\n const { setMineralsScope } = useTemplateActions()\n const errors = useTemplateErrors()\n\n // 页面只负责渲染表单,不做额外派生计算。\n return (\n <MineralsScopeReasonsForm\n versionDef={versionDef}\n rows={mineralsScope}\n selectedMinerals={selectedMinerals}\n customMinerals={customMinerals}\n onChange={setMineralsScope}\n errors={errors.mineralsScopeRows}\n />\n )\n}\n","/**\n * @file ui/tables/ProductListTable.tsx\n * @description 产品清单表格:支持增删行、行内编辑、外部选择与批量操作。\n */\n\nimport { PlusOutlined, DeleteOutlined, CloseOutlined } from '@ant-design/icons'\nimport type { ProductListConfig, TemplateType, TemplateVersionDef } from '@core/registry/types'\nimport type { ProductRow } from '@core/types/tableRows'\nimport type {\n ExternalAddMode,\n ProductListIntegration,\n ProductPickContext,\n} from '@lib/public/integrations'\nimport { wrapRequired } from '@ui/helpers/fieldRequired'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n/useT'\nimport { useBoolean, useCreation, useLatest, useMemoizedFn } from 'ahooks'\nimport { Button, Card, Flex, Modal, Table, Input, Tag, Typography } from 'antd'\nimport type { ColumnsType } from 'antd/es/table'\nimport type { TableRowSelection } from 'antd/es/table/interface'\nimport type { ChangeEvent } from 'react'\nimport { memo, useState } from 'react'\n\ninterface ProductListTableProps {\n templateType: TemplateType\n versionId: string\n versionDef: TemplateVersionDef\n config: ProductListConfig\n rows: ProductRow[]\n onChange: (rows: ProductRow[]) => void\n required?: boolean\n /**\n * 是否展示 requester 列。\n * - 默认使用模板版本配置:config.hasRequesterColumns\n * - 宿主如需强制展示可显式传入 true(不建议用于非该模板版本)。\n */\n showRequesterColumns?: boolean\n integration?: ProductListIntegration\n}\n\nconst INPUT_FIELDS = [\n 'productNumber',\n 'productName',\n 'requesterNumber',\n 'requesterName',\n 'comments',\n] as const\n\n/** 产品清单表格:支持增删行、行内编辑与外部选择。 */\nexport const ProductListTable = memo(function ProductListTable({\n templateType,\n versionId,\n versionDef,\n config,\n rows,\n onChange,\n required = false,\n showRequesterColumns,\n integration,\n}: ProductListTableProps) {\n const { t, locale } = useT()\n /** 批量选择状态(受控)。 */\n const [selectedRowKeys, setSelectedRowKeys] = useState<string[]>([])\n const [externalPicking, { setTrue: startPicking, setFalse: stopPicking }] = useBoolean(false)\n const rowsRef = useLatest(rows)\n const validSelectedRowKeys = useCreation(() => {\n const valid = new Set(rows.map((r) => r.id))\n return selectedRowKeys.filter((k) => valid.has(k))\n }, [rows, selectedRowKeys])\n\n /** 行索引缓存:避免频繁全表 map/filter。 */\n const rowIndexMap = useCreation(() => new Map(rows.map((row, index) => [row.id, index])), [rows])\n\n // wrapRequired 已提取到 @ui/helpers/fieldRequired\n /** 添加空行(保持字段结构完整)。 */\n const handleAddRow = useMemoizedFn(() => {\n const newRow: ProductRow = {\n id: `product-${Date.now()}`,\n productNumber: '',\n productName: '',\n comments: '',\n }\n onChange([...rows, newRow])\n })\n\n const integrationAddMode: ExternalAddMode = integration?.addMode ?? 'append-empty-row'\n const showExternalPick = Boolean(integration) && integrationAddMode !== 'append-empty-row'\n const showAddRow = integrationAddMode !== 'external-only'\n const externalPickLabel = integration?.label ?? t('actions.pickExternal')\n const showLoadingIndicator = integration?.showLoadingIndicator ?? false\n\n const normalizeExternalProductRow = useMemoizedFn(\n (partial: Partial<ProductRow>, seq: number): ProductRow => {\n const idBase = `product-${Date.now()}-${seq}`\n return {\n ...(partial as Record<string, string | undefined>),\n id: typeof partial.id === 'string' && partial.id.trim() ? partial.id : idBase,\n productNumber: partial.productNumber ?? '',\n productName: partial.productName ?? '',\n requesterNumber: partial.requesterNumber ?? '',\n requesterName: partial.requesterName ?? '',\n comments: partial.comments ?? '',\n }\n },\n )\n\n const getCurrentRowsSnapshot = useMemoizedFn(() => rowsRef.current.map((row) => ({ ...row })))\n\n const handleExternalPick = useMemoizedFn(async () => {\n if (!integration || externalPicking) return\n const currentRows = getCurrentRowsSnapshot()\n const ctx: ProductPickContext = {\n templateType,\n versionId,\n locale,\n versionDef,\n config,\n currentRows,\n }\n startPicking()\n try {\n const result = await integration.onPickProducts(ctx)\n const items = result?.items ?? []\n if (items.length === 0) return\n const normalized = items.map((item, index) => normalizeExternalProductRow(item, index))\n onChange([...rowsRef.current, ...normalized])\n } catch {\n Modal.error({\n title: t('errors.externalPickFailedTitle'),\n content: t('errors.externalPickFailedContent'),\n })\n } finally {\n stopPicking()\n }\n })\n\n /** 删除指定行(基于缓存索引定位)。 */\n const handleRemoveRow = useMemoizedFn((id: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const next = rows.slice()\n next.splice(index, 1)\n onChange(next)\n })\n\n /** 更新单元格(值不变则不触发更新)。 */\n const handleCellChange = useMemoizedFn((id: string, field: keyof ProductRow, value: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const row = rows[index]\n if (!row || row[field] === value) return\n const next = rows.slice()\n next[index] = { ...row, [field]: value }\n onChange(next)\n })\n\n /** 缓存输入项 onChange 处理器,避免表格内联函数扩散。 */\n const getInputHandler = useHandlerMap(() => {\n const map = new Map<string, (event: ChangeEvent<HTMLInputElement>) => void>()\n rows.forEach((row) => {\n INPUT_FIELDS.forEach((field) => {\n map.set(`${row.id}:${field}`, (event) =>\n handleCellChange(row.id, field, event.target.value),\n )\n })\n })\n return map\n }, [rows, handleCellChange])\n\n const handleRemoveRowWithSelection = useMemoizedFn((id: string) => {\n setSelectedRowKeys((prev) => prev.filter((k) => k !== id))\n handleRemoveRow(id)\n })\n\n /** 缓存删除按钮 handler。 */\n const getRemoveHandler = useHandlerMap(() => {\n const map = new Map<string, () => void>()\n rows.forEach((row) => {\n map.set(row.id, () => handleRemoveRowWithSelection(row.id))\n })\n return map\n }, [rows, handleRemoveRowWithSelection])\n\n /** 批量删除处理 */\n const handleBatchDelete = useMemoizedFn(() => {\n if (validSelectedRowKeys.length === 0) return\n Modal.confirm({\n title: t('confirm.batchDelete'),\n content: t('confirm.batchDeleteContent', { count: validSelectedRowKeys.length }),\n okText: t('actions.batchDelete'),\n okType: 'danger',\n cancelText: t('actions.cancelSelection'),\n onOk: () => {\n const selectedSet = new Set(validSelectedRowKeys)\n onChange(rows.filter((row) => !selectedSet.has(row.id)))\n setSelectedRowKeys([])\n },\n })\n })\n\n /** 取消选择 */\n const handleCancelSelection = useMemoizedFn(() => {\n setSelectedRowKeys([])\n })\n\n /** 行选择配置 */\n const rowSelection: TableRowSelection<ProductRow> = {\n selectedRowKeys: validSelectedRowKeys,\n onChange: (keys) => setSelectedRowKeys(keys as string[]),\n }\n\n const columns = useCreation<ColumnsType<ProductRow>>(() => {\n const base: ColumnsType<ProductRow> = [\n {\n title: t(config.productNumberLabelKey),\n dataIndex: 'productNumber',\n key: 'productNumber',\n width: 180,\n fixed: 'left',\n render: (value: string, record: ProductRow) =>\n wrapRequired(\n required,\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:productNumber`)}\n placeholder={t('productPlaceholders.productNumber')}\n />,\n ),\n },\n {\n title: t(config.productNameLabelKey),\n dataIndex: 'productName',\n key: 'productName',\n width: 200,\n render: (value: string, record: ProductRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:productName`)}\n placeholder={t('productPlaceholders.productName')}\n />\n ),\n },\n ]\n\n const enableRequesterColumns = showRequesterColumns ?? config.hasRequesterColumns\n if (enableRequesterColumns) {\n base.push(\n {\n title: t('tables.requesterNumber'),\n dataIndex: 'requesterNumber',\n key: 'requesterNumber',\n width: 180,\n render: (value: string, record: ProductRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:requesterNumber`)}\n placeholder={t('productPlaceholders.requesterNumber')}\n />\n ),\n },\n {\n title: t('tables.requesterName'),\n dataIndex: 'requesterName',\n key: 'requesterName',\n width: 200,\n render: (value: string, record: ProductRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:requesterName`)}\n placeholder={t('productPlaceholders.requesterName')}\n />\n ),\n },\n )\n }\n\n base.push({\n title: t(config.commentLabelKey),\n dataIndex: 'comments',\n key: 'comments',\n width: 200,\n render: (value: string, record: ProductRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:comments`)}\n placeholder={t('productPlaceholders.comments')}\n />\n ),\n })\n\n base.push({\n title: '',\n key: 'actions',\n width: 60,\n fixed: 'right',\n render: (_: unknown, record: ProductRow) => (\n <Button\n type=\"text\"\n danger\n icon={<DeleteOutlined />}\n onClick={getRemoveHandler(record.id)}\n />\n ),\n })\n\n return base\n }, [config, getInputHandler, getRemoveHandler, required, showRequesterColumns, t, wrapRequired])\n\n const emptyLocale = {\n emptyText: (\n <Flex vertical align=\"center\" gap={16} className=\"py-8\">\n <Typography.Text type=\"secondary\" className=\"text-sm\">\n {t('tables.noData')}\n </Typography.Text>\n <Flex align=\"center\" gap={8}>\n {showAddRow && (\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddRow}>\n {t('actions.addRow')}\n </Button>\n )}\n {showExternalPick && (\n <Button\n type={showAddRow ? 'default' : 'primary'}\n icon={<PlusOutlined />}\n onClick={handleExternalPick}\n loading={showLoadingIndicator && externalPicking}\n disabled={externalPicking}\n >\n {externalPickLabel}\n </Button>\n )}\n </Flex>\n </Flex>\n ),\n }\n\n return (\n <Card\n title={\n <Flex vertical gap={8} style={{ width: '100%' }}>\n <Flex align=\"center\" justify=\"space-between\">\n <Flex align=\"center\" gap={8}>\n <Typography.Title level={5} style={{ margin: 0 }}>\n {t('tabs.productList')}\n </Typography.Title>\n <Tag color=\"blue\">{t('badges.recordCount', { count: rows.length })}</Tag>\n </Flex>\n <Flex align=\"center\" gap={8}>\n {showAddRow && (\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddRow}>\n {t('actions.addRow')}\n </Button>\n )}\n {showExternalPick && (\n <Button\n type={showAddRow ? 'default' : 'primary'}\n icon={<PlusOutlined />}\n onClick={handleExternalPick}\n loading={showLoadingIndicator && externalPicking}\n disabled={externalPicking}\n >\n {externalPickLabel}\n </Button>\n )}\n </Flex>\n </Flex>\n {validSelectedRowKeys.length > 0 && (\n <Flex\n align=\"center\"\n gap={12}\n style={{\n padding: '8px 12px',\n background: 'var(--ant-color-primary-bg)',\n borderRadius: 6,\n }}\n >\n <Typography.Text strong>\n {t('selection.selected', { count: validSelectedRowKeys.length })}\n </Typography.Text>\n <Button\n type=\"primary\"\n danger\n size=\"small\"\n icon={<DeleteOutlined />}\n onClick={handleBatchDelete}\n >\n {t('actions.batchDelete')}\n </Button>\n <Button\n type=\"text\"\n size=\"small\"\n icon={<CloseOutlined />}\n onClick={handleCancelSelection}\n >\n {t('actions.cancelSelection')}\n </Button>\n </Flex>\n )}\n </Flex>\n }\n >\n <Table\n columns={columns}\n dataSource={rows}\n rowKey=\"id\"\n rowSelection={rowSelection}\n pagination={false}\n scroll={{ x: 'max-content', y: rows.length > 20 ? 600 : undefined }}\n virtual={rows.length > 50}\n bordered\n locale={emptyLocale}\n />\n </Card>\n )\n})\n","/**\n * @file app/pages/ProductListPage.tsx\n * @description 页面组件。\n */\n\n// 说明:页面组件\nimport { useTemplateActions, useTemplateDerived, useTemplateIntegrations, useTemplateState } from '@shell/store'\nimport { ProductListTable } from '@ui/tables/ProductListTable'\nimport { LAYOUT } from '@ui/theme/spacing'\nimport { Flex } from 'antd'\n\nimport { DocNote } from './DocContent'\nimport { useFieldFocus } from './useFieldFocus'\n\n/** Product List 页面:渲染产品清单表格。 */\nexport function ProductListPage() {\n const { meta, lists } = useTemplateState()\n const { versionDef } = meta\n const { productList: rows } = lists\n const { setProductList } = useTemplateActions()\n const { requiredFields } = useTemplateDerived()\n const integrations = useTemplateIntegrations()\n\n useFieldFocus()\n\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n {/* 文档提示:用于展示产品清单的状态与补充说明。 */}\n <DocNote section=\"productList\" />\n <ProductListTable\n templateType={meta.templateType}\n versionId={meta.versionId}\n versionDef={versionDef}\n config={versionDef.productList}\n rows={rows}\n onChange={setProductList}\n required={requiredFields.productListRequired}\n showRequesterColumns={versionDef.productList.hasRequesterColumns}\n integration={integrations?.productList}\n />\n </Flex>\n )\n}\n","/**\n * @file app/pages/RevisionPage.tsx\n * @description 页面组件。\n */\n\nimport { getTemplateDefinition } from '@core/registry'\nimport { useTemplateState } from '@shell/store'\nimport { useT } from '@ui/i18n/useT'\nimport { LAYOUT, SPACING } from '@ui/theme/spacing'\nimport { useMemoizedFn } from 'ahooks'\nimport { Card, Descriptions, Flex, List, Tag, Typography } from 'antd'\n\nconst { Title, Text } = Typography\n\n/** Revision 页面:展示模板版本信息与历史列表。 */\nexport function RevisionPage() {\n const { meta } = useTemplateState()\n const { templateType, versionId } = meta\n const { t } = useT()\n const definition = getTemplateDefinition(templateType)\n const versions = definition.versions\n /** 是否展示发布时间列(任一版本含 releaseDate 即展示)。 */\n const showReleaseDate = versions.some((version) => Boolean(version.releaseDate))\n /** 统一版本行渲染函数,避免 List 内联函数。 */\n const renderVersionItem = useMemoizedFn((version: typeof versions[number]) => (\n <List.Item>\n <Flex align=\"center\" justify=\"space-between\" style={{ width: '100%' }}>\n <Flex align=\"center\" gap={SPACING.sm}>\n <Text strong>{version.label}</Text>\n {version.id === versionId && <Tag color=\"blue\">{t('revision.currentTag')}</Tag>}\n {version.id === definition.defaultVersion && (\n <Tag color=\"gold\">{t('revision.defaultTag')}</Tag>\n )}\n </Flex>\n {showReleaseDate && version.releaseDate ? (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>{version.releaseDate}</Text>\n ) : null}\n </Flex>\n </List.Item>\n ))\n\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n <div>\n <Title level={4} style={{ margin: 0 }}>{t('tabs.revision')}</Title>\n <Text type=\"secondary\">{t('revision.subtitle')}</Text>\n </div>\n\n <Card>\n <Descriptions column={{ xs: 1, md: 2 }}>\n <Descriptions.Item label={t('revision.templateName')}>\n <Text strong>{t(definition.fullNameKey)}</Text>\n </Descriptions.Item>\n <Descriptions.Item label={t('revision.currentVersion')}>\n <Text strong>{versionId}</Text>\n </Descriptions.Item>\n <Descriptions.Item label={t('revision.defaultVersion')}>\n <Text strong>{definition.defaultVersion}</Text>\n </Descriptions.Item>\n <Descriptions.Item label={t('revision.totalVersions')}>\n <Text strong>{versions.length}</Text>\n </Descriptions.Item>\n </Descriptions>\n </Card>\n\n <Card title={t('revision.availableVersions')}>\n <List dataSource={versions} renderItem={renderVersionItem} />\n </Card>\n </Flex>\n )\n}\n","/**\n * @file core/data/lookups.ts\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport type { TemplateType } from '@core/registry/types'\n\n/**\n * 常量:SMELTER_LOOKUP_META。\n */\nexport const SMELTER_LOOKUP_META = {\n placeholder: 'Select from list…',\n notListed: 'Smelter not listed',\n notYetIdentified: 'Smelter not yet identified',\n separator: '---',\n}\n\nconst BASE_SMELTER_LOOKUP = [\n SMELTER_LOOKUP_META.placeholder,\n SMELTER_LOOKUP_META.notListed,\n SMELTER_LOOKUP_META.notYetIdentified,\n SMELTER_LOOKUP_META.separator,\n 'Ningxia Orient Tantalum Industry Co., Ltd.',\n 'Malaysia Smelting Corporation',\n 'Xiamen Tungsten Co., Ltd.',\n 'Metalor Technologies SA',\n]\n\nconst AMRT_SMELTER_LOOKUP = [\n SMELTER_LOOKUP_META.placeholder,\n SMELTER_LOOKUP_META.notListed,\n SMELTER_LOOKUP_META.notYetIdentified,\n SMELTER_LOOKUP_META.separator,\n 'Example Smelter A',\n 'Example Smelter B',\n 'Example Smelter C',\n]\n\nconst SMELTER_LOOKUP_BY_TEMPLATE: Record<TemplateType, string[]> = {\n cmrt: BASE_SMELTER_LOOKUP,\n emrt: BASE_SMELTER_LOOKUP,\n crt: BASE_SMELTER_LOOKUP,\n amrt: AMRT_SMELTER_LOOKUP,\n}\n\n/**\n * 导出接口类型:SmelterLookupRecord。\n */\nexport interface SmelterLookupRecord {\n smelterId: string\n sourceId: string\n country: string\n street: string\n city: string\n state: string\n}\n\n/**\n * 常量:SMELTER_LOOKUP_DATA。\n */\nexport const SMELTER_LOOKUP_DATA: Record<string, SmelterLookupRecord> = {\n 'Ningxia Orient Tantalum Industry Co., Ltd.': {\n smelterId: 'CID001277',\n sourceId: 'RMI-Ta-001',\n country: 'China',\n street: '123 Industrial Road',\n city: 'Shizuishan',\n state: 'Ningxia',\n },\n 'Malaysia Smelting Corporation': {\n smelterId: 'CID001105',\n sourceId: 'RMI-Sn-002',\n country: 'Malaysia',\n street: '88 Smelter Ave',\n city: 'Butterworth',\n state: 'Penang',\n },\n 'Xiamen Tungsten Co., Ltd.': {\n smelterId: 'CID002082',\n sourceId: 'RMI-W-003',\n country: 'China',\n street: '56 Tungsten Blvd',\n city: 'Xiamen',\n state: 'Fujian',\n },\n 'Metalor Technologies SA': {\n smelterId: 'CID001149',\n sourceId: 'RMI-Au-004',\n country: 'Switzerland',\n street: '2 Metalor Strasse',\n city: 'Marin-Epagnier',\n state: 'Neuchatel',\n },\n}\n\n/**\n * 导出函数:getSmelterLookupOptions。\n */\nexport function getSmelterLookupOptions(templateType: TemplateType): string[] {\n return SMELTER_LOOKUP_BY_TEMPLATE[templateType] ?? BASE_SMELTER_LOOKUP\n}\n","/**\n * @file ui/tables/SmelterListTable.tsx\n * @description 冶炼厂清单表格:支持 lookup 自动填充、行内编辑、外部选择与批量操作。\n */\n\nimport { PlusOutlined, DeleteOutlined, CloseOutlined } from '@ant-design/icons'\nimport type { SmelterLookupRecord } from '@core/data/lookups'\nimport type {\n MineralDef,\n SmelterListConfig,\n TemplateType,\n TemplateVersionDef,\n} from '@core/registry/types'\nimport { isSmelterNotIdentified, isSmelterNotListed, normalizeSmelterLookup } from '@core/transform'\nimport type { SmelterRow } from '@core/types/tableRows'\nimport type {\n ExternalAddMode,\n SmelterListIntegration,\n SmelterPickContext,\n SmelterRowPickContext,\n SmelterLookupMode,\n} from '@lib/public/integrations'\nimport { wrapRequired } from '@ui/helpers/fieldRequired'\nimport { useHandlerMap } from '@ui/hooks/useHandlerMap'\nimport { useT } from '@ui/i18n/useT'\nimport { useBoolean, useCreation, useLatest, useMemoizedFn } from 'ahooks'\nimport {\n AutoComplete,\n Button,\n Card,\n Flex,\n Modal,\n Table,\n Select,\n Input,\n Tag,\n Typography,\n} from 'antd'\nimport type { ColumnsType } from 'antd/es/table'\nimport type { TableRowSelection } from 'antd/es/table/interface'\nimport type { ChangeEvent } from 'react'\nimport { memo, useState } from 'react'\n\ninterface SmelterListTableProps {\n templateType: TemplateType\n versionId: string\n versionDef: TemplateVersionDef\n config: SmelterListConfig\n availableMetals: Array<MineralDef & { label?: string }>\n rows: SmelterRow[]\n onChange: (rows: SmelterRow[]) => void\n countryOptions?: Array<{ value: string; label: string }>\n smelterLookupRecords?: Record<string, SmelterLookupRecord>\n smelterLookupMeta?: {\n notListed: string\n notYetIdentified: string\n }\n showNotYetIdentifiedCountryHint?: boolean\n integration?: SmelterListIntegration\n}\n\nconst INPUT_FIELDS = [\n 'smelterId',\n 'smelterName',\n 'smelterIdentification',\n 'sourceId',\n 'smelterStreet',\n 'smelterCity',\n 'smelterState',\n 'smelterContactName',\n 'smelterContactEmail',\n 'proposedNextSteps',\n 'mineName',\n 'comments',\n 'combinedSmelter',\n] as const\n\nconst SELECT_FIELDS = [\n 'metal',\n 'smelterLookup',\n 'smelterCountry',\n 'mineCountry',\n 'recycledScrap',\n 'combinedMetal',\n] as const\n\n/** 冶炼厂清单表格:支持 lookup 自动填充、行内编辑与外部选择。 */\nexport const SmelterListTable = memo(function SmelterListTable({\n templateType,\n versionId,\n versionDef,\n config,\n availableMetals,\n rows,\n onChange,\n countryOptions = [],\n smelterLookupRecords,\n smelterLookupMeta,\n showNotYetIdentifiedCountryHint = false,\n integration,\n}: SmelterListTableProps) {\n const { t, locale } = useT()\n /** 批量选择状态(受控)。 */\n const [selectedRowKeys, setSelectedRowKeys] = useState<string[]>([])\n const [externalPicking, { setTrue: startPicking, setFalse: stopPicking }] = useBoolean(false)\n const rowsRef = useLatest(rows)\n const [rowPickingId, setRowPickingId] = useState<string | null>(null)\n const validSelectedRowKeys = useCreation(() => {\n const valid = new Set(rows.map((r) => r.id))\n return selectedRowKeys.filter((k) => valid.has(k))\n }, [rows, selectedRowKeys])\n\n /** 行索引缓存:避免频繁全表 map/filter。 */\n const rowIndexMap = useCreation(() => new Map(rows.map((row, index) => [row.id, index])), [rows])\n\n /** 判断:lookup 选择为“未列出”。 */\n const isNotListed = (value: string) => Boolean(smelterLookupMeta && isSmelterNotListed(value))\n /** 判断:lookup 选择为“尚未识别”。 */\n const isNotYetIdentified = (value: string) =>\n Boolean(smelterLookupMeta && isSmelterNotIdentified(value))\n /** 判断:lookup 值来自已识别记录。 */\n const isFromLookup = (value: string) => {\n if (!value) return false\n if (isNotListed(value) || isNotYetIdentified(value)) return false\n const normalized = normalizeSmelterLookup(value)\n return Boolean(smelterLookupRecords?.[normalized])\n }\n /** “Smelter not listed” 是否要求名称+国家(默认 true)。 */\n const notListedRequiresNameCountry = config.notListedRequireNameCountry ?? true\n\n /** 计算 “Smelter not yet identified” 的默认国家值。 */\n const resolveNotYetIdentifiedCountry = (metalKey: string) => {\n const byMetal = config.notYetIdentifiedCountryByMetal?.[metalKey]\n if (typeof byMetal === 'string') return byMetal\n return config.notYetIdentifiedCountryDefault ?? 'Unknown'\n }\n\n // wrapRequired 已提取到 @ui/helpers/fieldRequired\n /** 添加空行(保持字段结构完整)。 */\n const handleAddRow = useMemoizedFn(() => {\n const newRow: SmelterRow = {\n id: `smelter-${Date.now()}`,\n metal: '',\n smelterLookup: '',\n smelterName: '',\n smelterCountry: '',\n combinedMetal: '',\n combinedSmelter: '',\n smelterId: '',\n smelterIdentification: '',\n sourceId: '',\n smelterStreet: '',\n smelterCity: '',\n smelterState: '',\n smelterContactName: '',\n smelterContactEmail: '',\n proposedNextSteps: '',\n mineName: '',\n mineCountry: '',\n recycledScrap: '',\n comments: '',\n }\n onChange([...rows, newRow])\n })\n\n const integrationAddMode: ExternalAddMode = integration?.addMode ?? 'append-empty-row'\n const showExternalPick =\n Boolean(integration?.onPickSmelters) && integrationAddMode !== 'append-empty-row'\n const showAddRow = integrationAddMode !== 'external-only'\n const externalPickLabel = integration?.label ?? t('actions.pickExternal')\n const showLoadingIndicator = integration?.showLoadingIndicator ?? false\n const smelterLookupMode: SmelterLookupMode = integration?.lookupMode ?? 'internal'\n const useExternalLookup = smelterLookupMode === 'external' || smelterLookupMode === 'hybrid'\n\n const getCurrentRowsSnapshot = useMemoizedFn(() => rowsRef.current.map((r) => ({ ...r })))\n\n const normalizeExternalSmelterRow = useMemoizedFn(\n (partial: Partial<SmelterRow>, seq: number): SmelterRow => {\n const idBase = `smelter-${Date.now()}-${seq}`\n return {\n ...(partial as Record<string, string | undefined>),\n id: typeof partial.id === 'string' && partial.id.trim() ? partial.id : idBase,\n metal: partial.metal ?? '',\n smelterLookup: partial.smelterLookup ?? '',\n smelterName: partial.smelterName ?? '',\n smelterCountry: partial.smelterCountry ?? '',\n combinedMetal: partial.combinedMetal ?? '',\n combinedSmelter: partial.combinedSmelter ?? '',\n smelterId: partial.smelterId ?? '',\n smelterIdentification: partial.smelterIdentification ?? '',\n sourceId: partial.sourceId ?? '',\n smelterStreet: partial.smelterStreet ?? '',\n smelterCity: partial.smelterCity ?? '',\n smelterState: partial.smelterState ?? '',\n smelterContactName: partial.smelterContactName ?? '',\n smelterContactEmail: partial.smelterContactEmail ?? '',\n proposedNextSteps: partial.proposedNextSteps ?? '',\n mineName: partial.mineName ?? '',\n mineCountry: partial.mineCountry ?? '',\n recycledScrap: partial.recycledScrap ?? '',\n comments: partial.comments ?? '',\n }\n },\n )\n\n const handleExternalPick = useMemoizedFn(async () => {\n if (!integration || !integration.onPickSmelters || externalPicking) return\n const currentRows = getCurrentRowsSnapshot()\n const ctx: SmelterPickContext = {\n templateType,\n versionId,\n locale,\n versionDef,\n config,\n currentRows,\n }\n startPicking()\n try {\n const result = await integration.onPickSmelters(ctx)\n const items = result?.items ?? []\n if (items.length === 0) return\n const normalized = items.map((item, index) => normalizeExternalSmelterRow(item, index))\n onChange([...rowsRef.current, ...normalized])\n } catch {\n Modal.error({\n title: t('errors.externalPickFailedTitle'),\n content: t('errors.externalPickFailedContent'),\n })\n } finally {\n stopPicking()\n }\n })\n\n const applyExternalPickToRow = useMemoizedFn(\n (row: SmelterRow, partial: Partial<SmelterRow>): SmelterRow => {\n const merged: SmelterRow = {\n ...row,\n ...(partial as Record<string, string | undefined>),\n id: row.id,\n metal: row.metal,\n }\n if (!merged.smelterLookup) return merged\n if (!smelterLookupMeta) return merged\n const mergedWithName: SmelterRow =\n !merged.smelterName &&\n !isNotListed(merged.smelterLookup) &&\n !isNotYetIdentified(merged.smelterLookup)\n ? { ...merged, smelterName: merged.smelterLookup }\n : merged\n if (isFromLookup(mergedWithName.smelterLookup)) {\n return applySmelterLookup(mergedWithName, mergedWithName.smelterLookup)\n }\n return mergedWithName\n },\n )\n\n const updateRowById = useMemoizedFn((id: string, nextRow: SmelterRow) => {\n const currentRows = rowsRef.current\n const index = currentRows.findIndex((r) => r.id === id)\n if (index < 0) return\n const next = currentRows.slice()\n next[index] = nextRow\n onChange(next)\n })\n\n const handleExternalPickForRow = useMemoizedFn(async (id: string) => {\n if (!integration?.onPickSmelterForRow || rowPickingId) return\n const currentRows = rowsRef.current\n const row = currentRows.find((r) => r.id === id)\n if (!row || !row.metal) return\n const ctx: SmelterRowPickContext = {\n templateType,\n versionId,\n locale,\n versionDef,\n config,\n currentRows: getCurrentRowsSnapshot(),\n rowId: id,\n row: { ...row },\n metal: row.metal,\n }\n setRowPickingId(id)\n try {\n const result = await integration.onPickSmelterForRow(ctx)\n const picked = result?.items?.[0]\n if (!picked) return\n updateRowById(id, applyExternalPickToRow(row, picked))\n } catch {\n Modal.error({\n title: t('errors.externalPickFailedTitle'),\n content: t('errors.externalPickFailedContent'),\n })\n } finally {\n setRowPickingId(null)\n }\n })\n\n /** 删除指定行(基于缓存索引定位)。 */\n const handleRemoveRow = useMemoizedFn((id: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const next = rows.slice()\n next.splice(index, 1)\n onChange(next)\n })\n\n const handleRemoveRowWithSelection = useMemoizedFn((id: string) => {\n setSelectedRowKeys((prev) => prev.filter((k) => k !== id))\n handleRemoveRow(id)\n })\n\n /**\n * lookup 变更时同步填充/清空相关字段。\n *\n * 业务逻辑:\n * - \"Smelter not listed\" → 清空所有 ID/地址字段,要求手动填写名称和国家\n * - \"Smelter not yet identified\" → 填入 Unknown 值,按 metal 自动匹配国家\n * - 内部 lookup 模式 → 以 lookup 值作为名称\n * - 外部 lookup 模式 → 从 smelterLookupRecords 匹配并填充完整信息\n */\n const applySmelterLookup = (row: SmelterRow, value: string) => {\n const normalizedValue = normalizeSmelterLookup(value)\n const next: SmelterRow = { ...row, smelterLookup: normalizedValue }\n if (!smelterLookupMeta || !value) return next\n if (isSmelterNotListed(normalizedValue)) {\n return {\n ...next,\n smelterId: '',\n smelterName: '',\n smelterCountry: '',\n smelterIdentification: '',\n sourceId: '',\n smelterStreet: '',\n smelterCity: '',\n smelterState: '',\n }\n }\n if (isSmelterNotIdentified(normalizedValue)) {\n const country = resolveNotYetIdentifiedCountry(row.metal)\n return {\n ...next,\n smelterName: 'Unknown',\n smelterCountry: country,\n smelterId: 'Unknown',\n smelterIdentification: 'Unknown',\n sourceId: '',\n smelterStreet: '',\n smelterCity: '',\n smelterState: '',\n }\n }\n\n // internal:不再使用内置 smelter lookup 选项;允许 free text 并同步到 Smelter Name。\n if (!useExternalLookup) {\n return {\n ...next,\n smelterName: normalizedValue,\n }\n }\n\n const record = smelterLookupRecords?.[normalizedValue]\n if (!record) return next\n return {\n ...next,\n smelterName: normalizedValue,\n smelterId: record.smelterId,\n smelterIdentification: record.smelterId,\n sourceId: record.sourceId,\n smelterCountry: record.country,\n smelterStreet: record.street,\n smelterCity: record.city,\n smelterState: record.state,\n }\n }\n\n /**\n * 更新单元格值(lookup / metal 字段有联动逻辑)。\n *\n * 特殊处理:\n * - smelterLookup 变更 → 走 applySmelterLookup 联动\n * - metal 变更 + 当前为 \"not yet identified\" → 同步更新国家\n * - combinedMetal 变更 → 同时更新 metal\n * - 其它字段 → 直接更新\n */\n const handleCellChange = useMemoizedFn((id: string, field: keyof SmelterRow, value: string) => {\n const index = rowIndexMap.get(id)\n if (index === undefined) return\n const row = rows[index]\n if (!row) return\n const nextRow = (() => {\n if (field === 'smelterLookup') {\n return applySmelterLookup(row, value)\n }\n if (field === 'metal' && isNotYetIdentified(row.smelterLookup)) {\n const country = resolveNotYetIdentifiedCountry(value)\n return {\n ...row,\n metal: value,\n smelterName: row.smelterName || 'Unknown',\n smelterCountry: country,\n smelterIdentification: row.smelterIdentification || 'Unknown',\n }\n }\n if (row[field] === value) return row\n return { ...row, [field]: value }\n })()\n if (nextRow === row) return\n const next = rows.slice()\n next[index] = nextRow\n onChange(next)\n })\n\n /** 缓存输入回调,减少表格内联函数开销。 */\n const getInputHandler = useHandlerMap(() => {\n const map = new Map<string, (event: ChangeEvent<HTMLInputElement>) => void>()\n rows.forEach((row) => {\n INPUT_FIELDS.forEach((field) => {\n map.set(`${row.id}:${field}`, (event) =>\n handleCellChange(row.id, field, event.target.value),\n )\n })\n })\n return map\n }, [rows, handleCellChange])\n\n /** 缓存下拉回调。 */\n const getSelectHandler = useHandlerMap(() => {\n const map = new Map<string, (value: string) => void>()\n rows.forEach((row) => {\n SELECT_FIELDS.forEach((field) => {\n map.set(`${row.id}:${field}`, (value) => handleCellChange(row.id, field, value))\n })\n })\n return map\n }, [rows, handleCellChange])\n\n /** 缓存删除按钮回调。 */\n const getRemoveHandler = useHandlerMap(() => {\n const map = new Map<string, () => void>()\n rows.forEach((row) => {\n map.set(row.id, () => handleRemoveRowWithSelection(row.id))\n })\n return map\n }, [rows, handleRemoveRowWithSelection])\n\n /** 批量删除处理 */\n const handleBatchDelete = useMemoizedFn(() => {\n if (validSelectedRowKeys.length === 0) return\n Modal.confirm({\n title: t('confirm.batchDelete'),\n content: t('confirm.batchDeleteContent', { count: validSelectedRowKeys.length }),\n okText: t('actions.batchDelete'),\n okType: 'danger',\n cancelText: t('actions.cancelSelection'),\n onOk: () => {\n const selectedSet = new Set(validSelectedRowKeys)\n onChange(rows.filter((row) => !selectedSet.has(row.id)))\n setSelectedRowKeys([])\n },\n })\n })\n\n /** 取消选择 */\n const handleCancelSelection = useMemoizedFn(() => {\n setSelectedRowKeys([])\n })\n\n /** 行选择配置 */\n const rowSelection: TableRowSelection<SmelterRow> = {\n selectedRowKeys: validSelectedRowKeys,\n onChange: (keys) => setSelectedRowKeys(keys as string[]),\n }\n\n const metalOptions = useCreation(\n () =>\n availableMetals.map((m) => ({\n value: m.key,\n label: m.label ?? t(m.labelKey),\n })),\n [availableMetals, t],\n )\n const yesNoUnknownOptions = useCreation(\n () => [\n { value: 'Yes', label: t('options.yes') },\n { value: 'No', label: t('options.no') },\n { value: 'Unknown', label: t('options.unknown') },\n ],\n [t],\n )\n const yesNoOptions = useCreation(\n () => [\n { value: 'Yes', label: t('options.yes') },\n { value: 'No', label: t('options.no') },\n ],\n [t],\n )\n const recycledScrapOptions =\n config.recycledScrapOptions === 'yes-no' ? yesNoOptions : yesNoUnknownOptions\n /** 统一的下拉搜索过滤逻辑,避免多处重复定义。 */\n const filterOptionByLabel = useMemoizedFn((input: string, option?: { label?: string }) =>\n (option?.label ?? '').toLowerCase().includes(input.toLowerCase()),\n )\n\n // ---------------------------------------------------------------------------\n // 列定义(约 430 行)\n // 按业务逻辑顺序构建:metal → smelterLookup/smelterName → smelterId →\n // country → identification → sourceId → 地址字段 → recycledScrap → comments → 操作\n // 每列的 render 函数负责行内编辑(Input/Select/AutoComplete)和必填标记。\n // ---------------------------------------------------------------------------\n const columns = useCreation<ColumnsType<SmelterRow>>(() => {\n const columns: ColumnsType<SmelterRow> = []\n\n columns.push({\n title: t('tables.metal'),\n dataIndex: 'metal',\n key: 'metal',\n width: 140,\n fixed: 'left',\n render: (value: string, record: SmelterRow) =>\n wrapRequired(\n true,\n <Select\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:metal`)}\n options={metalOptions}\n placeholder={t('placeholders.select')}\n className=\"w-full\"\n />,\n ),\n })\n\n if (config.hasLookup) {\n columns.push({\n title: t('tables.smelterName'),\n dataIndex: 'smelterLookup',\n key: 'smelterLookup',\n width: 220,\n fixed: 'left',\n render: (value: string, record: SmelterRow) =>\n wrapRequired(\n Boolean(record.metal),\n useExternalLookup && integration?.onPickSmelterForRow ? (\n <Flex align=\"center\" gap={8}>\n {isNotListed(record.smelterLookup) && notListedRequiresNameCountry ? (\n <Input\n value={record.smelterName || undefined}\n onChange={getInputHandler(`${record.id}:smelterName`)}\n placeholder={t('placeholders.smelterNameRequired')}\n />\n ) : record.smelterLookup ? (\n <>\n <Typography.Text ellipsis style={{ maxWidth: 150 }}>\n {record.smelterLookup}\n </Typography.Text>\n <Button\n type=\"link\"\n size=\"small\"\n onClick={() => handleExternalPickForRow(record.id)}\n disabled={!record.metal || rowPickingId === record.id}\n loading={showLoadingIndicator && rowPickingId === record.id}\n >\n {t('actions.edit')}\n </Button>\n </>\n ) : (\n <Button\n type=\"link\"\n size=\"small\"\n onClick={() => handleExternalPickForRow(record.id)}\n disabled={!record.metal || rowPickingId === record.id}\n loading={showLoadingIndicator && rowPickingId === record.id}\n >\n {t('actions.chooseSmelter')}\n </Button>\n )}\n {smelterLookupMode === 'hybrid' && (\n <Typography.Text type=\"secondary\" style={{ fontSize: 12 }}>\n {t('actions.pickExternal')}\n </Typography.Text>\n )}\n </Flex>\n ) : (\n <Flex vertical gap={4}>\n <AutoComplete\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:smelterLookup`)}\n options={\n smelterLookupMeta\n ? [\n {\n value: smelterLookupMeta.notListed,\n label: smelterLookupMeta.notListed,\n },\n {\n value: smelterLookupMeta.notYetIdentified,\n label: smelterLookupMeta.notYetIdentified,\n },\n ]\n : []\n }\n placeholder={t('placeholders.smelterName')}\n allowClear\n className=\"w-full\"\n />\n {isNotListed(record.smelterLookup) && notListedRequiresNameCountry && (\n <Input\n value={record.smelterName || undefined}\n onChange={getInputHandler(`${record.id}:smelterName`)}\n placeholder={t('placeholders.smelterNameRequired')}\n />\n )}\n </Flex>\n ),\n ),\n })\n }\n\n // Smelter ID input column (if configured) - keep after metal + lookup/name\n if (config.hasIdColumn) {\n columns.push({\n title: t('tables.smelterId'),\n dataIndex: 'smelterId',\n key: 'smelterId',\n width: 180,\n fixed: 'left',\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterId`)}\n placeholder={t('placeholders.smelterIdInput')}\n className=\"font-mono text-xs\"\n disabled={useExternalLookup && isFromLookup(record.smelterLookup)}\n />\n ),\n })\n }\n\n const hideSmelterNameColumn = Boolean(config.hasLookup)\n\n if (!hideSmelterNameColumn) {\n columns.push({\n title: t('tables.smelterName'),\n dataIndex: 'smelterName',\n key: 'smelterName',\n width: 200,\n render: (value: string, record: SmelterRow) => {\n const notListed = isNotListed(record.smelterLookup) && notListedRequiresNameCountry\n const notYetIdentified = isNotYetIdentified(record.smelterLookup)\n const fromLookup = isFromLookup(record.smelterLookup)\n const placeholder = notListed\n ? t('placeholders.smelterNameRequired')\n : notYetIdentified\n ? t('placeholders.smelterNameOptional')\n : t('placeholders.smelterName')\n return wrapRequired(\n notListed,\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterName`)}\n placeholder={placeholder}\n disabled={useExternalLookup && fromLookup}\n />,\n )\n },\n })\n }\n\n columns.push(\n {\n title: t('tables.country'),\n dataIndex: 'smelterCountry',\n key: 'smelterCountry',\n width: 180,\n render: (value: string, record: SmelterRow) => {\n const notListed = isNotListed(record.smelterLookup) && notListedRequiresNameCountry\n const notYetIdentified = isNotYetIdentified(record.smelterLookup)\n const fromLookup = isFromLookup(record.smelterLookup)\n const placeholder = notListed\n ? t('placeholders.smelterCountryRequired')\n : t('placeholders.smelterCountry')\n const showHint = notYetIdentified && showNotYetIdentifiedCountryHint\n return wrapRequired(\n notListed,\n <Flex vertical gap={4}>\n <Select\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:smelterCountry`)}\n options={countryOptions}\n placeholder={placeholder}\n showSearch\n filterOption={filterOptionByLabel}\n className=\"w-full\"\n disabled={useExternalLookup && fromLookup}\n />\n {showHint && (\n <Typography.Text type=\"secondary\" style={{ fontSize: 12 }}>\n {t('hints.smelterNotYetIdentifiedCountry')}\n </Typography.Text>\n )}\n </Flex>,\n )\n },\n },\n {\n title: t('tables.smelterIdentification'),\n dataIndex: 'smelterIdentification',\n key: 'smelterIdentification',\n width: 180,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterIdentification`)}\n placeholder={t('placeholders.smelterIdentification')}\n disabled={useExternalLookup && isFromLookup(record.smelterLookup)}\n />\n ),\n },\n {\n title: t('tables.sourceId'),\n dataIndex: 'sourceId',\n key: 'sourceId',\n width: 180,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:sourceId`)}\n placeholder={t('placeholders.smelterSourceId')}\n disabled={useExternalLookup && isFromLookup(record.smelterLookup)}\n />\n ),\n },\n {\n title: t('tables.street'),\n dataIndex: 'smelterStreet',\n key: 'smelterStreet',\n width: 200,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterStreet`)}\n placeholder={t('placeholders.smelterStreet')}\n disabled={useExternalLookup && isFromLookup(record.smelterLookup)}\n />\n ),\n },\n {\n title: t('tables.city'),\n dataIndex: 'smelterCity',\n key: 'smelterCity',\n width: 160,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterCity`)}\n placeholder={t('placeholders.smelterCity')}\n disabled={useExternalLookup && isFromLookup(record.smelterLookup)}\n />\n ),\n },\n {\n title: t('tables.stateProvince'),\n dataIndex: 'smelterState',\n key: 'smelterState',\n width: 170,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterState`)}\n placeholder={t('placeholders.smelterState')}\n disabled={useExternalLookup && isFromLookup(record.smelterLookup)}\n />\n ),\n },\n {\n title: t('tables.contactName'),\n dataIndex: 'smelterContactName',\n key: 'smelterContactName',\n width: 180,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterContactName`)}\n placeholder={t('placeholders.smelterContactName')}\n />\n ),\n },\n {\n title: t('tables.contactEmail'),\n dataIndex: 'smelterContactEmail',\n key: 'smelterContactEmail',\n width: 200,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:smelterContactEmail`)}\n placeholder={t('placeholders.smelterContactEmail')}\n />\n ),\n },\n {\n title: t('tables.proposedNextSteps'),\n dataIndex: 'proposedNextSteps',\n key: 'proposedNextSteps',\n width: 200,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:proposedNextSteps`)}\n placeholder={t('placeholders.smelterNextSteps')}\n />\n ),\n },\n {\n title: t('tables.mineName'),\n dataIndex: 'mineName',\n key: 'mineName',\n width: 180,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:mineName`)}\n placeholder={t('placeholders.smelterMineName')}\n />\n ),\n },\n {\n title: t('tables.mineCountry'),\n dataIndex: 'mineCountry',\n key: 'mineCountry',\n width: 240,\n render: (value: string, record: SmelterRow) => (\n <AutoComplete\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:mineCountry`)}\n placeholder={t('placeholders.smelterMineCountry')}\n options={countryOptions}\n allowClear\n className=\"w-full\"\n />\n ),\n },\n {\n title: t('tables.recycledScrap'),\n dataIndex: 'recycledScrap',\n key: 'recycledScrap',\n width: 260,\n render: (value: string, record: SmelterRow) => (\n <Select\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:recycledScrap`)}\n options={recycledScrapOptions}\n placeholder={t('placeholders.select')}\n className=\"w-full\"\n />\n ),\n },\n {\n title: t('tables.comments'),\n dataIndex: 'comments',\n key: 'comments',\n width: 200,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:comments`)}\n placeholder={t('placeholders.smelterComments')}\n />\n ),\n },\n )\n\n if (config.hasCombinedColumn) {\n columns.push(\n {\n title: t('tables.combinedMetal'),\n dataIndex: 'combinedMetal',\n key: 'combinedMetal',\n width: 180,\n render: (value: string, record: SmelterRow) => (\n <Select\n value={value || undefined}\n onChange={getSelectHandler(`${record.id}:combinedMetal`)}\n options={metalOptions}\n placeholder={t('placeholders.smelterCombinedMetal')}\n className=\"w-full\"\n />\n ),\n },\n {\n title: t('tables.combinedSmelter'),\n dataIndex: 'combinedSmelter',\n key: 'combinedSmelter',\n width: 220,\n render: (value: string, record: SmelterRow) => (\n <Input\n value={value || undefined}\n onChange={getInputHandler(`${record.id}:combinedSmelter`)}\n placeholder={t('placeholders.smelterCombinedSmelter')}\n />\n ),\n },\n )\n }\n\n // Actions column\n columns.push({\n title: '',\n key: 'actions',\n width: 60,\n fixed: 'right',\n render: (_: unknown, record: SmelterRow) => (\n <Button\n type=\"text\"\n danger\n icon={<DeleteOutlined />}\n onClick={getRemoveHandler(record.id)}\n />\n ),\n })\n\n return columns\n }, [\n config,\n countryOptions,\n handleCellChange,\n handleExternalPickForRow,\n handleRemoveRow,\n integration,\n metalOptions,\n notListedRequiresNameCountry,\n rowPickingId,\n showLoadingIndicator,\n smelterLookupMeta,\n smelterLookupMode,\n t,\n useExternalLookup,\n yesNoUnknownOptions,\n yesNoOptions,\n recycledScrapOptions,\n ])\n\n const emptyLocale = {\n emptyText: (\n <Flex vertical align=\"center\" gap={16} className=\"py-8\">\n <Typography.Text type=\"secondary\" className=\"text-sm\">\n {t('tables.noData')}\n </Typography.Text>\n <Flex align=\"center\" gap={8}>\n {showAddRow && (\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddRow}>\n {t('actions.addRow')}\n </Button>\n )}\n {showExternalPick && (\n <Button\n type={showAddRow ? 'default' : 'primary'}\n icon={<PlusOutlined />}\n onClick={handleExternalPick}\n loading={showLoadingIndicator && externalPicking}\n disabled={externalPicking}\n >\n {externalPickLabel}\n </Button>\n )}\n </Flex>\n </Flex>\n ),\n }\n\n const rowClassName = integration?.rowClassName\n\n return (\n <Card\n title={\n <Flex vertical gap={8} style={{ width: '100%' }}>\n <Flex align=\"center\" justify=\"space-between\">\n <Flex align=\"center\" gap={8}>\n <Typography.Title level={5} style={{ margin: 0 }}>\n {t('tabs.smelterList')}\n </Typography.Title>\n <Tag color=\"blue\">{t('badges.recordCount', { count: rows.length })}</Tag>\n </Flex>\n <Flex align=\"center\" gap={8}>\n {showAddRow && (\n <Button type=\"primary\" icon={<PlusOutlined />} onClick={handleAddRow}>\n {t('actions.addRow')}\n </Button>\n )}\n {showExternalPick && (\n <Button\n type={showAddRow ? 'default' : 'primary'}\n icon={<PlusOutlined />}\n onClick={handleExternalPick}\n loading={showLoadingIndicator && externalPicking}\n disabled={externalPicking}\n >\n {externalPickLabel}\n </Button>\n )}\n </Flex>\n </Flex>\n {validSelectedRowKeys.length > 0 && (\n <Flex\n align=\"center\"\n gap={12}\n style={{\n padding: '8px 12px',\n background: 'var(--ant-color-primary-bg)',\n borderRadius: 6,\n }}\n >\n <Typography.Text strong>\n {t('selection.selected', { count: validSelectedRowKeys.length })}\n </Typography.Text>\n <Button\n type=\"primary\"\n danger\n size=\"small\"\n icon={<DeleteOutlined />}\n onClick={handleBatchDelete}\n >\n {t('actions.batchDelete')}\n </Button>\n <Button\n type=\"text\"\n size=\"small\"\n icon={<CloseOutlined />}\n onClick={handleCancelSelection}\n >\n {t('actions.cancelSelection')}\n </Button>\n </Flex>\n )}\n </Flex>\n }\n >\n <Table\n className=\"smelter-list-table\"\n columns={columns}\n dataSource={rows}\n rowKey=\"id\"\n rowClassName={rowClassName ? (record, index) => rowClassName(record, index) : undefined}\n rowSelection={rowSelection}\n pagination={false}\n scroll={{ x: 'max-content', y: rows.length > 20 ? 600 : undefined }}\n virtual={rows.length > 50}\n bordered\n locale={emptyLocale}\n />\n </Card>\n )\n})\n","/**\n * @file app/pages/SmelterListPage.tsx\n * @description 页面组件。\n */\n\n// 说明:页面组件\nimport {\n SMELTER_LOOKUP_DATA,\n SMELTER_LOOKUP_META,\n} from '@core/data/lookups'\nimport { useTemplateActions, useTemplateDerived, useTemplateIntegrations, useTemplateState } from '@shell/store'\nimport { SmelterListTable } from '@ui/tables/SmelterListTable'\nimport { LAYOUT } from '@ui/theme/spacing'\nimport { Flex } from 'antd'\n\nimport { DocNote } from './DocContent'\nimport { useFieldFocus } from './useFieldFocus'\n\n/** Smelter List 页面:渲染冶炼厂清单与辅助选项。 */\nexport function SmelterListPage() {\n const { meta, lists } = useTemplateState()\n const { versionDef } = meta\n const { smelterList: rows } = lists\n const { setSmelterList } = useTemplateActions()\n const { viewModels } = useTemplateDerived()\n const integrations = useTemplateIntegrations()\n\n // 页面派生数据:输出可选金属/国家/lookup 选项,页面只负责渲染表格。\n const {\n availableMetals,\n countryOptions,\n showNotYetIdentifiedCountryHint,\n } = viewModels.smelterList\n\n useFieldFocus()\n\n return (\n <Flex vertical gap={LAYOUT.sectionGap}>\n <DocNote section=\"smelterList\" />\n <SmelterListTable\n templateType={meta.templateType}\n versionId={meta.versionId}\n versionDef={versionDef}\n config={versionDef.smelterList}\n availableMetals={availableMetals}\n rows={rows}\n onChange={setSmelterList}\n countryOptions={countryOptions}\n smelterLookupRecords={SMELTER_LOOKUP_DATA}\n smelterLookupMeta={SMELTER_LOOKUP_META}\n showNotYetIdentifiedCountryHint={showNotYetIdentifiedCountryHint}\n integration={integrations?.smelterList}\n />\n </Flex>\n )\n}\n","/**\n * @file core/template/workflow.ts\n * @description 模板工作流页面序列。\n */\n\n// 说明:根据 PRD 定义工作流步骤(用于 stepper 与上下页)。\nimport type { PageDef, TemplateVersionDef } from '@core/registry/types'\n\nconst WORKFLOW_KEYS_BY_TEMPLATE: Record<\n TemplateVersionDef['templateType'],\n Array<PageDef['key']>\n> = {\n cmrt: ['declaration', 'smelter-list', 'product-list', 'checker'],\n crt: ['declaration', 'smelter-list', 'product-list', 'checker'],\n emrt: ['declaration', 'smelter-list', 'mine-list', 'product-list', 'checker'],\n amrt: ['declaration', 'minerals-scope', 'smelter-list', 'mine-list', 'product-list', 'checker'],\n}\n\n/**\n * 导出函数:getWorkflowPages(按 PRD 获取步骤页顺序)。\n */\nexport function getWorkflowPages(versionDef: TemplateVersionDef): PageDef[] {\n const pageMap = new Map(versionDef.pages.map((page) => [page.key, page]))\n const baseKeys = WORKFLOW_KEYS_BY_TEMPLATE[versionDef.templateType] ?? []\n\n return baseKeys\n .map((key) => pageMap.get(key))\n .filter((page): page is PageDef => Boolean(page && page.available))\n}\n","/**\n * @file ui/layout/Sidebar.tsx\n * @description 模块实现。\n */\n\n// 说明:模块实现\nimport {\n FileTextOutlined,\n UnorderedListOutlined,\n CheckCircleOutlined,\n ShoppingOutlined,\n SearchOutlined,\n BookOutlined,\n InfoCircleOutlined,\n} from '@ant-design/icons'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport { Layout, Menu } from 'antd'\nimport type { MenuProps } from 'antd'\nimport type { ReactNode } from 'react'\n\nconst { Sider } = Layout\n\n/**\n * 导出接口类型:SidebarTab。\n */\nexport interface SidebarTab {\n key: string\n label: string\n icon?: ReactNode\n}\n\ninterface SidebarProps {\n tabs?: SidebarTab[]\n collapsed?: boolean\n onCollapse?: (collapsed: boolean) => void\n selectedKey?: string\n onSelect?: (key: string) => void\n}\n\nconst defaultTabs: SidebarTab[] = [\n { key: 'declaration', label: 'Declaration', icon: <FileTextOutlined /> },\n { key: 'smelter-list', label: 'Smelter List', icon: <UnorderedListOutlined /> },\n { key: 'checker', label: 'Checker', icon: <CheckCircleOutlined /> },\n { key: 'product-list', label: 'Product List', icon: <ShoppingOutlined /> },\n { key: 'smelter-lookup', label: 'Smelter Look-up', icon: <SearchOutlined /> },\n { key: 'definitions', label: 'Definitions', icon: <BookOutlined /> },\n { key: 'instructions', label: 'Instructions', icon: <InfoCircleOutlined /> },\n]\n\n/**\n * 导出函数:Sidebar(页面导航菜单)。\n */\nexport function Sidebar({\n tabs = defaultTabs,\n collapsed = false,\n onCollapse,\n selectedKey,\n onSelect,\n}: SidebarProps) {\n /** 菜单项列表:基于 tabs 构建,避免每次渲染重建。 */\n const menuItems: MenuProps['items'] = useCreation(\n () =>\n tabs.map((tab) => ({\n key: tab.key,\n icon: tab.icon,\n label: tab.label,\n })),\n [tabs]\n )\n\n /** 菜单点击回调:保持引用稳定。 */\n const handleMenuClick = useMemoizedFn((info: { key: string }) => {\n onSelect?.(info.key)\n })\n /** 折叠状态变化回调:保持引用稳定。 */\n const handleCollapse = useMemoizedFn((nextCollapsed: boolean) => {\n onCollapse?.(nextCollapsed)\n })\n\n const activeKey = selectedKey ?? tabs[0]?.key\n\n return (\n <Sider\n collapsible\n collapsed={collapsed}\n onCollapse={handleCollapse}\n theme=\"light\"\n className=\"border-r border-gray-200 bg-white\"\n width={200}\n >\n <Menu\n mode=\"inline\"\n selectedKeys={activeKey ? [activeKey] : []}\n items={menuItems}\n onClick={handleMenuClick}\n className=\"h-full border-r-0 px-2 py-2\"\n />\n </Sider>\n )\n}\n","/**\n * @file ui/layout/StepNav.tsx\n * @description 工作流步骤导航组件,使用 Ant Design Steps 组件实现。\n */\n\nimport { CheckCircleOutlined } from '@ant-design/icons'\nimport { useMemoizedFn } from 'ahooks'\nimport { Steps, Tag } from 'antd'\n\nexport interface StepProgress {\n total: number\n completed: number\n}\n\nexport interface StepNavItem {\n key: string\n label: string\n progress?: StepProgress\n}\n\ninterface StepNavProps {\n steps: StepNavItem[]\n currentKey?: string\n onChange?: (key: string) => void\n}\n\n/**\n * StepNav:使用 Ant Design Steps 的步骤进度指示器。\n */\nexport function StepNav({ steps, currentKey, onChange }: StepNavProps) {\n const currentIndex = steps.findIndex((step) => step.key === currentKey)\n\n const handleChange = useMemoizedFn((index: number) => {\n const step = steps[index]\n if (step) {\n onChange?.(step.key)\n }\n })\n\n if (steps.length === 0) return null\n\n const items = steps.map((step, index) => {\n const isComplete = step.progress && step.progress.completed === step.progress.total && step.progress.total > 0\n const hasProgress = step.progress && step.progress.total > 0\n\n return {\n key: step.key,\n title: (\n <span className=\"flex items-center gap-1.5\">\n <span>{step.label}</span>\n {hasProgress && (\n <Tag\n color={isComplete ? 'success' : 'default'}\n className=\"text-xs ml-1\"\n style={{ margin: 0 }}\n >\n {step.progress!.completed}/{step.progress!.total}\n </Tag>\n )}\n </span>\n ),\n // 完成的步骤显示勾选图标,其他使用默认数字\n icon: isComplete ? (\n <CheckCircleOutlined style={{ color: 'var(--ant-color-success)' }} />\n ) : undefined,\n status:\n isComplete\n ? ('finish' as const)\n : index < currentIndex\n ? ('finish' as const)\n : index === currentIndex\n ? ('process' as const)\n : ('wait' as const),\n }\n })\n\n return (\n <div className=\"step-nav-container\">\n <div className=\"step-nav-inner\">\n <Steps\n current={currentIndex >= 0 ? currentIndex : 0}\n items={items}\n onChange={handleChange}\n type=\"default\"\n className=\"step-nav-steps\"\n />\n </div>\n </div>\n )\n}\n","/**\n * @file ui/layout/AppLayout.tsx\n * @description 应用级页面框架,包含 StepNav、Sidebar 和内容区域。\n */\n\nimport { LAYOUT } from '@ui/theme/spacing'\nimport { useMemoizedFn } from 'ahooks'\nimport { Card, Flex, Layout } from 'antd'\nimport type { ReactNode } from 'react'\nimport { useState } from 'react'\n\nimport { Sidebar, type SidebarTab } from './Sidebar'\nimport { StepNav, type StepNavItem } from './StepNav'\n\nconst { Content } = Layout\n\ninterface AppLayoutProps {\n /** 侧边栏标签页(与 steps 互斥) */\n tabs?: SidebarTab[]\n /** 工作流步骤(与 tabs 互斥,优先使用) */\n steps?: StepNavItem[]\n /** 顶部横幅区域(如全局错误提示) */\n topBanner?: ReactNode\n /** 底部插槽(如分页操作) */\n bottomSlot?: ReactNode\n /** 当前激活的标签页 key */\n currentTabKey?: string\n /** 标签页切换回调 */\n onTabChange?: (key: string) => void\n /** 当前激活的步骤 key */\n currentStepKey?: string\n /** 步骤切换回调 */\n onStepChange?: (key: string) => void\n /** 页面内容 */\n children?: ReactNode\n /** 内容区域最大宽度(可选,不设置则填充父容器) */\n maxContentWidth?: number\n /** 自定义类名 */\n className?: string\n /** 自定义样式 */\n style?: React.CSSProperties\n}\n\n/**\n * AppLayout:应用级页面框架。\n * 实现原型设计中的整体布局结构,包含步骤导航和内容区域。\n */\nexport function AppLayout({\n tabs,\n steps,\n topBanner,\n bottomSlot,\n currentTabKey,\n onTabChange,\n currentStepKey,\n onStepChange,\n children,\n maxContentWidth,\n className,\n style,\n}: AppLayoutProps) {\n const [collapsed, setCollapsed] = useState(false)\n\n const handleCollapse = useMemoizedFn((nextCollapsed: boolean) => {\n setCollapsed(nextCollapsed)\n })\n\n // 优先使用 steps,其次使用 tabs 作为侧边栏\n const useStepNav = Boolean(steps && steps.length > 0)\n const showSidebar = Boolean(tabs && tabs.length > 0 && !useStepNav)\n\n const layoutStyle = maxContentWidth\n ? ({\n ...(style ?? {}),\n '--cm-content-max-width': `${maxContentWidth}px`,\n } as React.CSSProperties)\n : style\n\n return (\n <Layout className={`h-full min-h-full bg-gray-100 ${className ?? ''}`} style={layoutStyle}>\n {/* 步骤导航条 */}\n {useStepNav && (\n <StepNav steps={steps!} currentKey={currentStepKey} onChange={onStepChange} />\n )}\n\n {/* 顶部横幅(如全局错误提示) */}\n {topBanner}\n\n {/* 主内容区域 */}\n <Layout>\n {/* 侧边栏(仅在无步骤导航时显示) */}\n {showSidebar && (\n <Sidebar\n tabs={tabs}\n collapsed={collapsed}\n onCollapse={handleCollapse}\n selectedKey={currentTabKey}\n onSelect={onTabChange}\n />\n )}\n\n {/* 内容区域 */}\n <Layout style={{ padding: LAYOUT.pagePadding, display: 'flex', flexDirection: 'column' }}>\n <Content style={{ flex: 1, overflow: 'auto' }}>\n <Flex\n vertical\n gap={LAYOUT.sectionGap}\n className=\"animate-fade-in w-full\"\n style={maxContentWidth ? { maxWidth: maxContentWidth, margin: '0 auto' } : undefined}\n >\n {children}\n </Flex>\n </Content>\n {/* 底部导航栏 - 粘性定位,始终可见 */}\n {bottomSlot && (\n <div\n className=\"sticky-bottom-nav\"\n style={{\n position: 'sticky',\n bottom: 0,\n zIndex: 10,\n marginTop: LAYOUT.sectionGap,\n maxWidth: maxContentWidth,\n marginLeft: maxContentWidth ? 'auto' : undefined,\n marginRight: maxContentWidth ? 'auto' : undefined,\n width: '100%',\n }}\n >\n <Card>{bottomSlot}</Card>\n </div>\n )}\n </Layout>\n </Layout>\n </Layout>\n )\n}\n","/**\n * @file ui/layout/RequiredHintBanner.tsx\n * @description 使用 Ant Design Alert 实现的必填字段提示横幅。\n */\n\nimport { RightOutlined } from '@ant-design/icons'\nimport { useT } from '@ui/i18n/useT'\nimport { Alert, Button } from 'antd'\n\ninterface RequiredHintBannerProps {\n className?: string\n /** 未完成的必填项数量,0 或 undefined 表示全部完成 */\n errorCount?: number\n /** 点击\"前往 Checker\"的回调 */\n onGoToChecker?: () => void\n}\n\n/**\n * RequiredHintBanner:必填字段提示横幅。\n * - 有未完成项时:warning 类型,显示错误计数和跳转操作\n * - 全部完成时:success 类型\n */\nexport function RequiredHintBanner({ className, errorCount = 0, onGoToChecker }: RequiredHintBannerProps) {\n const { t } = useT()\n\n if (errorCount === 0) {\n return (\n <Alert\n type=\"success\"\n showIcon\n className={className}\n message={t('checker.globalSuccessBar')}\n />\n )\n }\n\n return (\n <Alert\n type=\"warning\"\n showIcon\n className={className}\n message={t('checker.globalErrorBar', { count: errorCount })}\n action={\n onGoToChecker ? (\n <Button type=\"link\" size=\"small\" onClick={onGoToChecker}>\n {t('checker.globalErrorAction')} <RightOutlined className=\"text-xs\" />\n </Button>\n ) : undefined\n }\n />\n )\n}\n","/**\n * @file app/pages/PageActions.tsx\n * @description 页面组件。\n */\n\nimport { CheckCircleOutlined, ExclamationCircleOutlined, WarningOutlined } from '@ant-design/icons'\nimport type { PageDef, PageKey } from '@core/registry/types'\nimport type { CheckerError } from '@core/rules/checker'\nimport { getPageKeyForFieldPath } from '@core/rules/fieldPath'\nimport type { CheckerSummary } from '@core/rules/summary'\nimport type { ErrorKey } from '@core/validation/errorKeys'\nimport { useOptionalNavigation } from '@shell/navigation/useNavigation'\nimport { buildTemplatePath } from '@shell/routing/resolveTemplateRoute'\nimport { useTemplateState } from '@shell/store'\nimport { useT } from '@ui/i18n/useT'\nimport { useBoolean, useCreation, useMemoizedFn } from 'ahooks'\nimport { Button, Flex, List, Modal, Progress, Result, Typography } from 'antd'\n\nconst { Text } = Typography\n\n/** PageActions Props。 */\ninterface PageActionsProps {\n currentPageKey: PageKey\n onNavigatePage: (pageKey: PageKey) => void\n pageOrder?: PageDef[]\n checkerErrors: CheckerError[]\n checkerSummary?: CheckerSummary\n}\n\n/** 页面上下页动作条。 */\nexport function PageActions({\n currentPageKey,\n onNavigatePage,\n pageOrder,\n checkerErrors,\n checkerSummary,\n}: PageActionsProps) {\n const { meta } = useTemplateState()\n const { templateType, versionId, versionDef } = meta\n const navigation = useOptionalNavigation()\n const { t } = useT()\n const [submitOpen, { setTrue: openSubmit, setFalse: closeSubmit }] = useBoolean(false)\n\n /** 基于当前页计算上一页/下一页(仅包含可用页面)。 */\n const { prev, next } = useCreation(() => {\n const pages =\n pageOrder && pageOrder.length > 0\n ? pageOrder\n : versionDef.pages.filter((page) => page.available)\n const index = pages.findIndex((page) => page.key === currentPageKey)\n if (index < 0) return { prev: null, next: null }\n\n return {\n prev: pages[index - 1] ?? null,\n next: pages[index + 1] ?? null,\n }\n }, [currentPageKey, pageOrder, versionDef.pages])\n const isReview = currentPageKey === 'checker'\n\n const handlePrev = useMemoizedFn(() => {\n if (prev) onNavigatePage(prev.key)\n })\n\n const handleNext = useMemoizedFn(() => {\n if (next) onNavigatePage(next.key)\n })\n\n const handleFixErrors = useMemoizedFn(() => {\n const firstError = checkerErrors[0]\n closeSubmit()\n if (!firstError) return\n const pageKey = getPageKeyForFieldPath(firstError.fieldPath)\n const targetPath = buildTemplatePath({\n template: templateType,\n version: versionId,\n page: pageKey,\n })\n const target = `${targetPath}?focus=${encodeURIComponent(firstError.fieldPath)}`\n if (navigation) {\n navigation.actions.navigate(target)\n return\n }\n onNavigatePage(pageKey)\n })\n\n const translateError = useMemoizedFn(\n (key: ErrorKey, values?: Record<string, string | undefined>) => t(key, values),\n )\n const completion = checkerSummary?.completion ?? (checkerErrors.length ? 0 : 100)\n const totalRequired = checkerSummary?.totalRequired ?? 0\n const completedRequired = checkerSummary?.completedRequired ?? 0\n\n if (!prev && !next && !isReview) return null\n\n return (\n <Flex align=\"center\" justify=\"space-between\">\n <Button onClick={handlePrev} disabled={!prev} style={{ minWidth: 96 }}>\n {t('actions.prev')}\n </Button>\n {isReview ? (\n <>\n <Button type=\"primary\" onClick={openSubmit} className=\"min-w-24\">\n {t('actions.submit')}\n </Button>\n <Modal\n open={submitOpen}\n onCancel={closeSubmit}\n footer={null}\n title={t('checker.submitTitle')}\n width={480}\n >\n {checkerErrors.length === 0 ? (\n // 成功状态 - 使用 Result 组件\n <Result\n status=\"success\"\n icon={<CheckCircleOutlined />}\n title={t('checker.submitAllPass')}\n subTitle={t('checker.progressDetail', {\n done: completedRequired,\n total: totalRequired,\n })}\n extra={\n <Button type=\"primary\" onClick={closeSubmit}>\n {t('actions.close')}\n </Button>\n }\n />\n ) : (\n // 有错误状态 - 改进的信息层次\n <Flex vertical gap={20}>\n {/* 进度环 */}\n <Flex align=\"center\" gap={24}>\n <Progress\n type=\"circle\"\n percent={completion}\n size={80}\n status={completion === 100 ? 'success' : 'exception'}\n strokeColor={\n completion === 100\n ? undefined\n : { '0%': 'var(--ant-color-warning)', '100%': 'var(--ant-color-error)' }\n }\n />\n <Flex vertical gap={4}>\n <Text style={{ fontSize: 16 }}>\n {t('checker.progressDetail', {\n done: completedRequired,\n total: totalRequired,\n })}\n </Text>\n <Flex align=\"center\" gap={6}>\n <ExclamationCircleOutlined style={{ color: 'var(--ant-color-error)' }} />\n <Text type=\"danger\" strong>\n {t('checker.submitErrors')}: {checkerErrors.length}\n </Text>\n </Flex>\n </Flex>\n </Flex>\n\n {/* 错误列表 */}\n <div\n style={{\n background: 'var(--ant-color-error-bg)',\n borderRadius: 6,\n padding: '12px 16px',\n border: '1px solid var(--ant-color-error-border)',\n }}\n >\n <Flex align=\"center\" gap={6} style={{ marginBottom: 8 }}>\n <WarningOutlined style={{ color: 'var(--ant-color-warning)' }} />\n <Text strong style={{ fontSize: 13 }}>\n {t('checker.submitFixTop')}\n </Text>\n </Flex>\n <List\n size=\"small\"\n dataSource={checkerErrors.slice(0, 5)}\n renderItem={(error) => (\n <List.Item\n key={`${error.code}-${error.fieldPath}`}\n style={{ padding: '6px 0', borderBottom: 'none' }}\n >\n <Text style={{ fontSize: 13 }}>\n •{' '}\n {translateError(error.messageKey, {\n field: error.fieldLabelKey ? t(error.fieldLabelKey) : undefined,\n ...(error.messageValues ?? {}),\n })}\n </Text>\n </List.Item>\n )}\n />\n {checkerErrors.length > 5 && (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n … {t('checker.andMoreErrors', { count: checkerErrors.length - 5 })}\n </Text>\n )}\n </div>\n\n {/* 按钮 */}\n <Flex justify=\"flex-end\" gap={12}>\n <Button onClick={closeSubmit}>{t('actions.close')}</Button>\n <Button type=\"primary\" onClick={handleFixErrors}>\n {t('checker.submitFix')}\n </Button>\n </Flex>\n </Flex>\n )}\n </Modal>\n </>\n ) : (\n <Button type=\"primary\" onClick={handleNext} disabled={!next} style={{ minWidth: 96 }}>\n {t('actions.next')}\n </Button>\n )}\n </Flex>\n )\n}\n","/**\n * @file app/pages/TemplateShell.tsx\n * @description 模板壳组件,提供模板上下文并渲染布局。\n */\n\nimport type { PageKey, TemplateType } from '@core/registry/types'\nimport { getWorkflowPages } from '@core/template/workflow'\nimport type { CMReportingIntegrations } from '@lib/public/integrations'\nimport { TemplateProvider, useTemplateDerived, useTemplateState } from '@shell/store'\nimport { useT } from '@ui/i18n/useT'\nimport { AppLayout } from '@ui/layout/AppLayout'\nimport { RequiredHintBanner } from '@ui/layout/RequiredHintBanner'\nimport { useCreation, useMemoizedFn } from 'ahooks'\nimport type { ReactNode } from 'react'\n\nimport { PageActions } from './PageActions'\n\n/** TemplateShell Props。 */\nexport interface TemplateShellProps {\n templateType: TemplateType\n versionId: string\n pageKey: PageKey\n onNavigatePage: (pageKey: PageKey) => void\n renderPage: (pageKey: PageKey) => ReactNode\n integrations?: CMReportingIntegrations\n /** 内容区域最大宽度(可选,不设置则填充父容器) */\n maxContentWidth?: number\n /** 插入点:用于对外门面组件做 snapshot/export 绑定(不作为 public API 承诺)。 */\n children?: ReactNode\n}\n\n/** 判断是否为合法 PageKey。 */\nfunction isPageKey(value: string, availableKeys: PageKey[]): value is PageKey {\n return availableKeys.includes(value as PageKey)\n}\n\n/** 模板壳:提供模板上下文并渲染布局。 */\nexport function TemplateShell({\n templateType,\n versionId,\n pageKey,\n onNavigatePage,\n renderPage,\n integrations,\n maxContentWidth,\n children,\n}: TemplateShellProps) {\n return (\n <TemplateProvider templateType={templateType} versionId={versionId} integrations={integrations}>\n {children}\n <TemplateScaffold\n pageKey={pageKey}\n onNavigatePage={onNavigatePage}\n renderPage={renderPage}\n maxContentWidth={maxContentWidth}\n />\n </TemplateProvider>\n )\n}\n\n/** TemplateScaffold Props。 */\ninterface TemplateScaffoldProps {\n pageKey: PageKey\n onNavigatePage: (pageKey: PageKey) => void\n renderPage: (pageKey: PageKey) => ReactNode\n maxContentWidth?: number\n}\n\n/** 模板页面骨架:负责 tabs/versions 计算与布局。 */\nfunction TemplateScaffold({\n pageKey,\n onNavigatePage,\n renderPage,\n maxContentWidth,\n}: TemplateScaffoldProps) {\n const { meta } = useTemplateState()\n const { versionDef } = meta\n const { t, locale, i18n } = useT()\n const { checkerErrors, checkerSummary } = useTemplateDerived()\n\n /** 工作流页面集合(用于 stepper 与上下页)。 */\n const workflowPages = useCreation(() => getWorkflowPages(versionDef), [versionDef])\n\n /** 获取每个页面的进度(合并多个 section 的进度)。 */\n const getPageProgress = (pageKey: string) => {\n const { sections } = checkerSummary\n switch (pageKey) {\n case 'declaration':\n return {\n total:\n sections.companyInfo.total +\n sections.questionMatrix.total +\n sections.companyQuestions.total,\n completed:\n sections.companyInfo.completed +\n sections.questionMatrix.completed +\n sections.companyQuestions.completed,\n }\n case 'smelterList':\n return sections.smelterList\n case 'productList':\n return sections.productList\n default:\n return undefined\n }\n }\n\n const workflowSteps = useCreation(\n () =>\n workflowPages.map((page) => ({\n key: page.key,\n label: t(page.labelKey),\n progress: getPageProgress(page.key),\n })),\n [workflowPages, t, locale, i18n.isInitialized, checkerSummary]\n )\n const workflowPageKeys = useCreation(\n () => workflowPages.map((page) => page.key),\n [workflowPages]\n )\n\n /** 切换 step 时仅允许工作流页面。 */\n const handleStepChange = useMemoizedFn((key: string) => {\n if (isPageKey(key, workflowPageKeys)) onNavigatePage(key)\n })\n const handleGoToChecker = useMemoizedFn(() => {\n onNavigatePage('checker')\n })\n\n return (\n <AppLayout\n steps={workflowSteps}\n currentStepKey={pageKey}\n onStepChange={handleStepChange}\n maxContentWidth={maxContentWidth}\n bottomSlot={\n <PageActions\n currentPageKey={pageKey}\n onNavigatePage={onNavigatePage}\n pageOrder={workflowPages}\n checkerErrors={checkerErrors}\n checkerSummary={checkerSummary}\n />\n }\n >\n {pageKey !== 'checker' && (\n <RequiredHintBanner\n errorCount={checkerErrors.length}\n onGoToChecker={handleGoToChecker}\n />\n )}\n {renderPage(pageKey)}\n </AppLayout>\n )\n}\n","/**\n * @file lib/CMReportingApp.tsx\n * @description 主入口组件,接收 templateType、versionId 等 props。\n */\n\nimport type { PageKey, TemplateType } from '@core/registry/types'\nimport { NavigationProvider } from '@shell/navigation/NavigationContext'\nimport { CheckerPage } from '@shell/pages/CheckerPage'\nimport { DeclarationPage } from '@shell/pages/DeclarationPage'\nimport { DocPage } from '@shell/pages/DocContent'\nimport { MineListPage } from '@shell/pages/MineListPage'\nimport { MineralsScopePage } from '@shell/pages/MineralsScopePage'\nimport { ProductListPage } from '@shell/pages/ProductListPage'\nimport { RevisionPage } from '@shell/pages/RevisionPage'\nimport { SmelterListPage } from '@shell/pages/SmelterListPage'\nimport { TemplateShell } from '@shell/pages/TemplateShell'\nimport { buildTemplatePath } from '@shell/routing/resolveTemplateRoute'\nimport { compact } from 'lodash-es'\nimport { useCallback, useMemo, useState } from 'react'\nimport type { ReactNode } from 'react'\n\nimport type { CMReportingIntegrations } from './public/integrations'\n\n/**\n * CMReportingApp Props。\n */\nexport interface CMReportingAppProps {\n /** 模板类型 */\n templateType: TemplateType\n /** 版本 ID */\n versionId: string\n /** 当前页面(受控模式) */\n pageKey?: PageKey\n /** 页面导航回调(受控模式) */\n onNavigatePage?: (pageKey: PageKey) => void\n /** 内容区域最大宽度(可选,不设置则填充父容器) */\n maxContentWidth?: number\n /** 宿主扩展点:外部选择/回写列表等。 */\n integrations?: CMReportingIntegrations\n /** 插入点:用于对外门面组件做 snapshot/export 绑定(不作为 public API 承诺)。 */\n children?: ReactNode\n}\n\nconst DEFAULT_PAGE: PageKey = 'declaration'\n\n/**\n * CMReportingApp:主入口组件。\n * 接收 templateType、versionId 作为 props,内部管理页面导航状态。\n */\nexport function CMReportingApp({\n templateType,\n versionId,\n pageKey: controlledPageKey,\n onNavigatePage,\n maxContentWidth,\n integrations,\n children,\n}: CMReportingAppProps) {\n // 内部页面状态(非受控模式)\n const [internalPageKey, setInternalPageKey] = useState<PageKey>(DEFAULT_PAGE)\n const [searchParams, setSearchParams] = useState(new URLSearchParams())\n\n // 使用受控或非受控模式\n const pageKey = controlledPageKey ?? internalPageKey\n const handleNavigatePage = useCallback((nextPage: PageKey) => {\n if (onNavigatePage) {\n onNavigatePage(nextPage)\n } else {\n setInternalPageKey(nextPage)\n }\n setSearchParams(new URLSearchParams())\n }, [onNavigatePage])\n\n // 构建导航上下文\n const navigationValue = useMemo(() => {\n return {\n state: {\n pathname: buildTemplatePath({ template: templateType, version: versionId, page: pageKey }),\n params: {\n template: templateType,\n version: versionId,\n page: pageKey,\n },\n searchParams,\n },\n actions: {\n navigate: (to: string) => {\n const url = new URL(to, 'http://app.local')\n const segments = compact(url.pathname.split('/'))\n const nextPage = (segments[2] || pageKey) as PageKey\n handleNavigatePage(nextPage)\n setSearchParams(new URLSearchParams(url.search))\n },\n },\n }\n }, [pageKey, searchParams, templateType, versionId, handleNavigatePage])\n\n // 渲染页面内容\n const renderPage = useCallback((page: PageKey) => {\n switch (page) {\n case 'revision':\n return <RevisionPage />\n case 'instructions':\n return <DocPage titleKey=\"tabs.instructions\" section=\"instructions\" />\n case 'definitions':\n return <DocPage titleKey=\"tabs.definitions\" section=\"definitions\" />\n case 'declaration':\n return <DeclarationPage />\n case 'minerals-scope':\n return <MineralsScopePage />\n case 'smelter-list':\n return <SmelterListPage />\n case 'checker':\n return (\n <CheckerPage\n onNavigateToField={(targetPage, fieldPath) => {\n handleNavigatePage(targetPage)\n setSearchParams(new URLSearchParams({ focus: fieldPath }))\n }}\n />\n )\n case 'mine-list':\n return <MineListPage />\n case 'product-list':\n return <ProductListPage />\n case 'smelter-lookup':\n return <DocPage titleKey=\"tabs.smelterLookup\" section=\"smelterLookup\" />\n default:\n return <DeclarationPage />\n }\n }, [handleNavigatePage])\n\n return (\n <NavigationProvider value={navigationValue}>\n <TemplateShell\n templateType={templateType}\n versionId={versionId}\n pageKey={pageKey}\n onNavigatePage={handleNavigatePage}\n renderPage={renderPage}\n maxContentWidth={maxContentWidth}\n integrations={integrations}\n >\n {children}\n </TemplateShell>\n </NavigationProvider>\n )\n}\n\nexport default CMReportingApp\n","/**\n * @file core/i18n/initI18n.ts\n * @description i18n 延迟初始化函数,供 CMReportingProvider 使用。\n */\n\nimport i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\n\nimport enUS from './locales/en-US.json'\nimport zhCN from './locales/zh-CN.json'\n\nimport type { Locale } from './index'\n\nconst resources = {\n 'en-US': { translation: enUS },\n 'zh-CN': { translation: zhCN },\n}\n\nconst ensureReactI18nextBound = () => {\n i18n.use(initReactI18next)\n initReactI18next.init(i18n)\n}\n\n/**\n * 初始化 i18n 实例。\n * 如果已初始化,则补齐 react-i18next 绑定、资源并切换语言。\n */\nexport function initI18n(locale: Locale = 'en-US') {\n // HMR/StrictMode 下避免用模块内变量作为真值来源:以 i18next 实例状态为准。\n if (i18n.isInitialized) {\n ensureReactI18nextBound()\n Object.entries(resources).forEach(([language, value]) => {\n i18n.addResourceBundle(language, 'translation', value.translation, true, false)\n })\n if (i18n.language !== locale) i18n.changeLanguage(locale)\n return i18n\n }\n\n i18n.use(initReactI18next).init({\n resources,\n lng: locale,\n fallbackLng: 'en-US',\n // 同步初始化,避免首次渲染时 i18n 实例尚未注入 react-i18next\n initImmediate: false,\n interpolation: {\n escapeValue: false,\n },\n })\n\n return i18n\n}\n\n/**\n * 检查 i18n 是否已初始化。\n */\nexport function isI18nInitialized(): boolean {\n return i18n.isInitialized\n}\n","/**\n * @file ui/theme/index.ts\n * @description CM Reporting 主题配置模块。\n * 提供主题配置类型定义和工具函数,支持外部覆盖样式。\n */\n\nimport type { ThemeConfig } from 'antd'\nimport type { CSSProperties } from 'react'\n\n// 导出间距常量\nexport { SPACING, LAYOUT, COMPONENT } from './spacing'\n\n// 导出 AppThemeScope 组件\nexport { AppThemeScope } from './AppThemeScope'\n\n/**\n * CM 自定义 CSS 变量配置。\n * 用于覆盖 lib/variables.css 中定义的默认值。\n */\nexport interface CMCSSVariables {\n /** 布局相关 */\n layout?: {\n /** 内容区域最大宽度 */\n contentMaxWidth?: string\n /** 页面内边距 */\n pagePadding?: string\n /** 区块之间的间距 */\n sectionGap?: string\n /** 步骤导航内边距 */\n stepNavPadding?: string\n }\n\n /** 必填字段高亮 */\n fieldRequired?: {\n /** 背景色 */\n background?: string\n /** 边框色 */\n border?: string\n }\n\n /** 字段聚焦高亮 */\n fieldFocus?: {\n /** 阴影颜色 */\n shadowColor?: string\n }\n\n /** 动画配置 */\n animation?: {\n /** 过渡时长 */\n duration?: string\n /** 缓动函数 */\n easing?: string\n }\n\n /** 字体尺寸 */\n fontSize?: {\n /** 超小字体 */\n xs?: string\n /** 小字体 */\n sm?: string\n /** 基础字体 */\n base?: string\n /** 大字体 */\n lg?: string\n }\n\n /** 组件尺寸 */\n component?: {\n /** 按钮最小宽度 */\n buttonMinWidth?: string\n /** 加载占位区域高度 */\n placeholderHeight?: string\n /** 表单控件最大宽度 */\n formControlMaxWidth?: string\n }\n\n /** 表格/表单网格列宽 */\n grid?: {\n /** 问题矩阵 - 标签列宽度 */\n questionMatrixLabelWidth?: string\n /** 问题矩阵 - 答案列宽度 */\n questionMatrixAnswerWidth?: string\n /** 公司问题 - 标签列宽度 */\n companyQuestionLabelWidth?: string\n /** 公司问题 - 答案列宽度 */\n companyQuestionAnswerWidth?: string\n }\n\n /** 间距预设 */\n spacing?: {\n /** 列表项垂直间距 */\n listItemPadding?: string\n /** 空状态区域内边距 */\n emptyStatePadding?: string\n }\n}\n\n/**\n * CM 主题配置。\n * 结合 Ant Design 主题和 CM 自定义 CSS 变量。\n */\nexport interface CMThemeConfig {\n /** Ant Design 主题配置 */\n antd?: ThemeConfig\n /** CM 自定义 CSS 变量 */\n cssVariables?: CMCSSVariables\n}\n\n/**\n * 将 CMCSSVariables 转换为 CSS 变量对象。\n * 用于通过 style 属性注入到 DOM 中。\n */\nexport function cssVariablesToStyle(variables: CMCSSVariables): CSSProperties {\n const style: Record<string, string> = {}\n\n // 布局\n if (variables.layout?.contentMaxWidth) {\n style['--cm-content-max-width'] = variables.layout.contentMaxWidth\n }\n if (variables.layout?.pagePadding) {\n style['--cm-page-padding'] = variables.layout.pagePadding\n }\n if (variables.layout?.sectionGap) {\n style['--cm-section-gap'] = variables.layout.sectionGap\n }\n if (variables.layout?.stepNavPadding) {\n style['--cm-step-nav-padding'] = variables.layout.stepNavPadding\n }\n\n // 必填字段高亮\n if (variables.fieldRequired?.background) {\n style['--cm-field-required-bg'] = variables.fieldRequired.background\n }\n if (variables.fieldRequired?.border) {\n style['--cm-field-required-border'] = variables.fieldRequired.border\n }\n\n // 字段聚焦高亮\n if (variables.fieldFocus?.shadowColor) {\n style['--cm-field-focus-shadow-color'] = variables.fieldFocus.shadowColor\n }\n\n // 动画\n if (variables.animation?.duration) {\n style['--cm-transition-duration'] = variables.animation.duration\n }\n if (variables.animation?.easing) {\n style['--cm-transition-easing'] = variables.animation.easing\n }\n\n // 字体尺寸\n if (variables.fontSize?.xs) {\n style['--cm-font-size-xs'] = variables.fontSize.xs\n }\n if (variables.fontSize?.sm) {\n style['--cm-font-size-sm'] = variables.fontSize.sm\n }\n if (variables.fontSize?.base) {\n style['--cm-font-size-base'] = variables.fontSize.base\n }\n if (variables.fontSize?.lg) {\n style['--cm-font-size-lg'] = variables.fontSize.lg\n }\n\n // 组件尺寸\n if (variables.component?.buttonMinWidth) {\n style['--cm-button-min-width'] = variables.component.buttonMinWidth\n }\n if (variables.component?.placeholderHeight) {\n style['--cm-placeholder-height'] = variables.component.placeholderHeight\n }\n if (variables.component?.formControlMaxWidth) {\n style['--cm-form-control-max-width'] = variables.component.formControlMaxWidth\n }\n\n // 表格/表单网格列宽\n if (variables.grid?.questionMatrixLabelWidth) {\n style['--cm-question-matrix-label-width'] = variables.grid.questionMatrixLabelWidth\n }\n if (variables.grid?.questionMatrixAnswerWidth) {\n style['--cm-question-matrix-answer-width'] = variables.grid.questionMatrixAnswerWidth\n }\n if (variables.grid?.companyQuestionLabelWidth) {\n style['--cm-company-question-label-width'] = variables.grid.companyQuestionLabelWidth\n }\n if (variables.grid?.companyQuestionAnswerWidth) {\n style['--cm-company-question-answer-width'] = variables.grid.companyQuestionAnswerWidth\n }\n\n // 间距预设\n if (variables.spacing?.listItemPadding) {\n style['--cm-list-item-padding'] = variables.spacing.listItemPadding\n }\n if (variables.spacing?.emptyStatePadding) {\n style['--cm-empty-state-padding'] = variables.spacing.emptyStatePadding\n }\n\n return style as CSSProperties\n}\n\n/**\n * 默认 Ant Design 主题配置。\n */\nexport const defaultAntdTheme: ThemeConfig = {\n cssVar: { prefix: 'ant' },\n token: {\n // 主色系统 - 与原型设计对齐\n colorPrimary: '#1565c0',\n colorPrimaryHover: '#1976d2',\n colorPrimaryActive: '#0d47a1',\n colorPrimaryBg: '#e3f2fd',\n colorPrimaryBorder: '#90caf9',\n\n // 状态颜色\n colorSuccess: '#2e7d32',\n colorSuccessBg: '#e8f5e9',\n colorSuccessBorder: '#4caf50',\n colorWarning: '#f57c00',\n colorWarningBg: '#fff3e0',\n colorWarningBorder: '#ff9800',\n colorError: '#c62828',\n colorErrorBg: '#ffebee',\n colorErrorBorder: '#ef5350',\n colorInfo: '#0288d1',\n colorInfoBg: '#e1f5fe',\n colorInfoBorder: '#03a9f4',\n\n // 文本颜色\n colorText: '#212121',\n colorTextSecondary: '#757575',\n colorTextTertiary: '#9e9e9e',\n colorTextHeading: '#212121',\n colorTextDescription: '#757575',\n\n // 背景颜色\n colorBgLayout: '#f5f5f5',\n colorBgContainer: '#ffffff',\n colorBgElevated: '#ffffff',\n\n // 边框颜色\n colorBorder: '#e0e0e0',\n colorBorderSecondary: '#eeeeee',\n\n // 填充颜色\n colorFillSecondary: '#eeeeee',\n colorFillTertiary: '#f5f5f5',\n colorFillQuaternary: '#fafafa',\n\n // 圆角 - 更保守的值,避免过度圆润\n borderRadius: 6,\n borderRadiusLG: 8,\n borderRadiusSM: 4,\n borderRadiusXS: 2,\n\n // 字体\n fontFamily: \"'IBM Plex Sans', 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontFamilyCode: \"'JetBrains Mono', 'Fira Code', 'Consolas', monospace\",\n fontSize: 14,\n\n // 阴影\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n boxShadowSecondary: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n },\n}\n\n/**\n * 合并主题配置。\n * 将用户提供的配置与默认配置深度合并。\n */\nexport function mergeThemeConfig(\n customTheme?: ThemeConfig,\n defaultTheme: ThemeConfig = defaultAntdTheme\n): ThemeConfig {\n if (!customTheme) return defaultTheme\n\n return {\n ...defaultTheme,\n ...customTheme,\n cssVar: {\n ...defaultTheme.cssVar,\n ...customTheme.cssVar,\n },\n token: {\n ...defaultTheme.token,\n ...customTheme.token,\n },\n components: {\n ...defaultTheme.components,\n ...customTheme.components,\n },\n }\n}\n","/**\n * @file ui/theme/AppThemeScope.tsx\n * @description 应用主题作用域组件,负责注入 Ant Design 和 CM 自定义 CSS 变量。\n */\n\nimport { theme } from 'antd'\nimport type { CSSProperties, ReactNode } from 'react'\n\nimport type { CMCSSVariables } from './index'\nimport { cssVariablesToStyle } from './index'\n\nconst { useToken } = theme\n\n/**\n * AppThemeScope Props。\n */\nexport interface AppThemeScopeProps {\n /** 子组件 */\n children: ReactNode\n /** CM 自定义 CSS 变量配置 */\n cssVariables?: CMCSSVariables\n}\n\n/**\n * AppThemeScope:应用主题作用域组件。\n * 将 Ant Design token 转换为 CSS 变量,并支持注入 CM 自定义 CSS 变量。\n */\nexport function AppThemeScope({ children, cssVariables }: AppThemeScopeProps) {\n const { cssVar } = useToken()\n\n // Ant Design token 映射的 CSS 变量\n const appStyle = {\n '--app-bg-layout': `var(${cssVar.colorBgLayout})`,\n '--app-bg-container': `var(${cssVar.colorBgContainer})`,\n '--app-bg-elevated': `var(${cssVar.colorBgElevated})`,\n '--app-text': `var(${cssVar.colorText})`,\n '--app-text-secondary': `var(${cssVar.colorTextSecondary})`,\n '--app-text-tertiary': `var(${cssVar.colorTextTertiary})`,\n '--app-text-heading': `var(${cssVar.colorTextHeading})`,\n '--app-text-description': `var(${cssVar.colorTextDescription})`,\n '--app-border': `var(${cssVar.colorBorder})`,\n '--app-border-secondary': `var(${cssVar.colorBorderSecondary})`,\n '--app-split': `var(${cssVar.colorSplit})`,\n '--app-primary': `var(${cssVar.colorPrimary})`,\n '--app-primary-bg': `var(${cssVar.colorPrimaryBg})`,\n '--app-primary-border': `var(${cssVar.colorPrimaryBorder})`,\n '--app-info': `var(${cssVar.colorInfo})`,\n '--app-info-bg': `var(${cssVar.colorInfoBg})`,\n '--app-info-border': `var(${cssVar.colorInfoBorder})`,\n '--app-success': `var(${cssVar.colorSuccess})`,\n '--app-success-bg': `var(${cssVar.colorSuccessBg})`,\n '--app-success-border': `var(${cssVar.colorSuccessBorder})`,\n '--app-warning': `var(${cssVar.colorWarning})`,\n '--app-warning-bg': `var(${cssVar.colorWarningBg})`,\n '--app-warning-border': `var(${cssVar.colorWarningBorder})`,\n '--app-error': `var(${cssVar.colorError})`,\n '--app-error-bg': `var(${cssVar.colorErrorBg})`,\n '--app-error-border': `var(${cssVar.colorErrorBorder})`,\n '--app-fill-secondary': `var(${cssVar.colorFillSecondary})`,\n '--app-fill-tertiary': `var(${cssVar.colorFillTertiary})`,\n '--app-fill-quaternary': `var(${cssVar.colorFillQuaternary})`,\n '--app-bg-text-hover': `var(${cssVar.colorBgTextHover})`,\n '--app-bg-text-active': `var(${cssVar.colorBgTextActive})`,\n } as CSSProperties\n\n // 合并 Ant Design 变量和 CM 自定义变量\n const cmStyle = cssVariables ? cssVariablesToStyle(cssVariables) : {}\n const combinedStyle = { ...appStyle, ...cmStyle }\n\n return (\n <div style={combinedStyle}>\n {children}\n </div>\n )\n}\n","function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nconst locale = {\n // Options\n items_per_page: '/ page',\n jump_to: 'Go to',\n jump_to_confirm: 'confirm',\n page: 'Page',\n // Pagination\n prev_page: 'Previous Page',\n next_page: 'Next Page',\n prev_5: 'Previous 5 Pages',\n next_5: 'Next 5 Pages',\n prev_3: 'Previous 3 Pages',\n next_3: 'Next 3 Pages',\n page_size: 'Page Size'\n};\nvar _default = exports.default = locale;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.commonLocale = void 0;\nvar commonLocale = exports.commonLocale = {\n yearFormat: 'YYYY',\n dayFormat: 'D',\n cellMeridiemFormat: 'A',\n monthBeforeYear: true\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _common = require(\"./common\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar locale = _objectSpread(_objectSpread({}, _common.commonLocale), {}, {\n locale: 'en_US',\n today: 'Today',\n now: 'Now',\n backToToday: 'Back to today',\n ok: 'OK',\n clear: 'Clear',\n week: 'Week',\n month: 'Month',\n year: 'Year',\n timeSelect: 'select time',\n dateSelect: 'select date',\n weekSelect: 'Choose a week',\n monthSelect: 'Choose a month',\n yearSelect: 'Choose a year',\n decadeSelect: 'Choose a decade',\n previousMonth: 'Previous month (PageUp)',\n nextMonth: 'Next month (PageDown)',\n previousYear: 'Last year (Control + left)',\n nextYear: 'Next year (Control + right)',\n previousDecade: 'Last decade',\n nextDecade: 'Next decade',\n previousCentury: 'Last century',\n nextCentury: 'Next century'\n});\nvar _default = exports.default = locale;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nconst locale = {\n placeholder: 'Select time',\n rangePlaceholder: ['Start time', 'End time']\n};\nvar _default = exports.default = locale;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _en_US = _interopRequireDefault(require(\"@rc-component/picker/locale/en_US\"));\nvar _en_US2 = _interopRequireDefault(require(\"../../time-picker/locale/en_US\"));\n// Merge into a locale object\nconst locale = {\n lang: {\n placeholder: 'Select date',\n yearPlaceholder: 'Select year',\n quarterPlaceholder: 'Select quarter',\n monthPlaceholder: 'Select month',\n weekPlaceholder: 'Select week',\n rangePlaceholder: ['Start date', 'End date'],\n rangeYearPlaceholder: ['Start year', 'End year'],\n rangeQuarterPlaceholder: ['Start quarter', 'End quarter'],\n rangeMonthPlaceholder: ['Start month', 'End month'],\n rangeWeekPlaceholder: ['Start week', 'End week'],\n ..._en_US.default\n },\n timePickerLocale: {\n ..._en_US2.default\n }\n};\n// All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\nvar _default = exports.default = locale;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _en_US = _interopRequireDefault(require(\"../../date-picker/locale/en_US\"));\nvar _default = exports.default = _en_US.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _en_US = _interopRequireDefault(require(\"@rc-component/pagination/lib/locale/en_US\"));\nvar _en_US2 = _interopRequireDefault(require(\"../calendar/locale/en_US\"));\nvar _en_US3 = _interopRequireDefault(require(\"../date-picker/locale/en_US\"));\nvar _en_US4 = _interopRequireDefault(require(\"../time-picker/locale/en_US\"));\nconst typeTemplate = '${label} is not a valid ${type}';\nconst localeValues = {\n locale: 'en',\n Pagination: _en_US.default,\n DatePicker: _en_US3.default,\n TimePicker: _en_US4.default,\n Calendar: _en_US2.default,\n global: {\n placeholder: 'Please select',\n close: 'Close',\n sortable: 'sortable'\n },\n Table: {\n filterTitle: 'Filter menu',\n filterConfirm: 'OK',\n filterReset: 'Reset',\n filterEmptyText: 'No filters',\n filterCheckAll: 'Select all items',\n filterSearchPlaceholder: 'Search in filters',\n emptyText: 'No data',\n selectAll: 'Select current page',\n selectInvert: 'Invert current page',\n selectNone: 'Clear all data',\n selectionAll: 'Select all data',\n sortTitle: 'Sort',\n expand: 'Expand row',\n collapse: 'Collapse row',\n triggerDesc: 'Click to sort descending',\n triggerAsc: 'Click to sort ascending',\n cancelSort: 'Click to cancel sorting'\n },\n Tour: {\n Next: 'Next',\n Previous: 'Previous',\n Finish: 'Finish'\n },\n Modal: {\n okText: 'OK',\n cancelText: 'Cancel',\n justOkText: 'OK'\n },\n Popconfirm: {\n okText: 'OK',\n cancelText: 'Cancel'\n },\n Transfer: {\n titles: ['', ''],\n searchPlaceholder: 'Search here',\n itemUnit: 'item',\n itemsUnit: 'items',\n remove: 'Remove',\n selectCurrent: 'Select current page',\n removeCurrent: 'Remove current page',\n selectAll: 'Select all data',\n deselectAll: 'Deselect all data',\n removeAll: 'Remove all data',\n selectInvert: 'Invert current page'\n },\n Upload: {\n uploading: 'Uploading...',\n removeFile: 'Remove file',\n uploadError: 'Upload error',\n previewFile: 'Preview file',\n downloadFile: 'Download file'\n },\n Empty: {\n description: 'No data'\n },\n Icon: {\n icon: 'icon'\n },\n Text: {\n edit: 'Edit',\n copy: 'Copy',\n copied: 'Copied',\n expand: 'Expand',\n collapse: 'Collapse'\n },\n Form: {\n optional: '(optional)',\n defaultValidateMessages: {\n default: 'Field validation error for ${label}',\n required: 'Please enter ${label}',\n enum: '${label} must be one of [${enum}]',\n whitespace: '${label} cannot be a blank character',\n date: {\n format: '${label} date format is invalid',\n parse: '${label} cannot be converted to a date',\n invalid: '${label} is an invalid date'\n },\n types: {\n string: typeTemplate,\n method: typeTemplate,\n array: typeTemplate,\n object: typeTemplate,\n number: typeTemplate,\n date: typeTemplate,\n boolean: typeTemplate,\n integer: typeTemplate,\n float: typeTemplate,\n regexp: typeTemplate,\n email: typeTemplate,\n url: typeTemplate,\n hex: typeTemplate\n },\n string: {\n len: '${label} must be ${len} characters',\n min: '${label} must be at least ${min} characters',\n max: '${label} must be up to ${max} characters',\n range: '${label} must be between ${min}-${max} characters'\n },\n number: {\n len: '${label} must be equal to ${len}',\n min: '${label} must be minimum ${min}',\n max: '${label} must be maximum ${max}',\n range: '${label} must be between ${min}-${max}'\n },\n array: {\n len: 'Must be ${len} ${label}',\n min: 'At least ${min} ${label}',\n max: 'At most ${max} ${label}',\n range: 'The amount of ${label} must be between ${min}-${max}'\n },\n pattern: {\n mismatch: '${label} does not match the pattern ${pattern}'\n }\n }\n },\n QRCode: {\n expired: 'QR code expired',\n refresh: 'Refresh',\n scanned: 'Scanned'\n },\n ColorPicker: {\n presetEmpty: 'Empty',\n transparent: 'Transparent',\n singleColor: 'Single',\n gradientColor: 'Gradient'\n }\n};\nvar _default = exports.default = localeValues;","module.exports = require('../lib/locale/en_US');","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nconst locale = {\n // Options\n items_per_page: '条/页',\n jump_to: '跳至',\n jump_to_confirm: '确定',\n page: '页',\n // Pagination\n prev_page: '上一页',\n next_page: '下一页',\n prev_5: '向前 5 页',\n next_5: '向后 5 页',\n prev_3: '向前 3 页',\n next_3: '向后 3 页',\n page_size: '页码'\n};\nvar _default = exports.default = locale;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _common = require(\"./common\");\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar locale = _objectSpread(_objectSpread({}, _common.commonLocale), {}, {\n locale: 'zh_CN',\n today: '今天',\n now: '此刻',\n backToToday: '返回今天',\n ok: '确定',\n timeSelect: '选择时间',\n dateSelect: '选择日期',\n weekSelect: '选择周',\n clear: '清除',\n week: '周',\n month: '月',\n year: '年',\n previousMonth: '上个月 (翻页上键)',\n nextMonth: '下个月 (翻页下键)',\n monthSelect: '选择月份',\n yearSelect: '选择年份',\n decadeSelect: '选择年代',\n previousYear: '上一年 (Control键加左方向键)',\n nextYear: '下一年 (Control键加右方向键)',\n previousDecade: '上一年代',\n nextDecade: '下一年代',\n previousCentury: '上一世纪',\n nextCentury: '下一世纪',\n yearFormat: 'YYYY年',\n cellDateFormat: 'D',\n monthBeforeYear: false\n});\nvar _default = exports.default = locale;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nconst locale = {\n placeholder: '请选择时间',\n rangePlaceholder: ['开始时间', '结束时间']\n};\nvar _default = exports.default = locale;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _zh_CN = _interopRequireDefault(require(\"@rc-component/picker/locale/zh_CN\"));\nvar _zh_CN2 = _interopRequireDefault(require(\"../../time-picker/locale/zh_CN\"));\n// 统一合并为完整的 Locale\nconst locale = {\n lang: {\n placeholder: '请选择日期',\n yearPlaceholder: '请选择年份',\n quarterPlaceholder: '请选择季度',\n monthPlaceholder: '请选择月份',\n weekPlaceholder: '请选择周',\n rangePlaceholder: ['开始日期', '结束日期'],\n rangeYearPlaceholder: ['开始年份', '结束年份'],\n rangeMonthPlaceholder: ['开始月份', '结束月份'],\n rangeQuarterPlaceholder: ['开始季度', '结束季度'],\n rangeWeekPlaceholder: ['开始周', '结束周'],\n ..._zh_CN.default\n },\n timePickerLocale: {\n ..._zh_CN2.default\n }\n};\n// should add whitespace between char in Button\nlocale.lang.ok = '确定';\n// All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\nvar _default = exports.default = locale;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _zh_CN = _interopRequireDefault(require(\"../../date-picker/locale/zh_CN\"));\nvar _default = exports.default = _zh_CN.default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\").default;\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _zh_CN = _interopRequireDefault(require(\"@rc-component/pagination/lib/locale/zh_CN\"));\nvar _zh_CN2 = _interopRequireDefault(require(\"../calendar/locale/zh_CN\"));\nvar _zh_CN3 = _interopRequireDefault(require(\"../date-picker/locale/zh_CN\"));\nvar _zh_CN4 = _interopRequireDefault(require(\"../time-picker/locale/zh_CN\"));\nconst typeTemplate = '${label}不是一个有效的${type}';\nconst localeValues = {\n locale: 'zh-cn',\n Pagination: _zh_CN.default,\n DatePicker: _zh_CN3.default,\n TimePicker: _zh_CN4.default,\n Calendar: _zh_CN2.default,\n // locales for all components\n global: {\n placeholder: '请选择',\n close: '关闭',\n sortable: '可排序'\n },\n Table: {\n filterTitle: '筛选',\n filterConfirm: '确定',\n filterReset: '重置',\n filterEmptyText: '无筛选项',\n filterCheckAll: '全选',\n filterSearchPlaceholder: '在筛选项中搜索',\n emptyText: '暂无数据',\n selectAll: '全选当页',\n selectInvert: '反选当页',\n selectNone: '清空所有',\n selectionAll: '全选所有',\n sortTitle: '排序',\n expand: '展开行',\n collapse: '关闭行',\n triggerDesc: '点击降序',\n triggerAsc: '点击升序',\n cancelSort: '取消排序'\n },\n Modal: {\n okText: '确定',\n cancelText: '取消',\n justOkText: '知道了'\n },\n Tour: {\n Next: '下一步',\n Previous: '上一步',\n Finish: '结束导览'\n },\n Popconfirm: {\n cancelText: '取消',\n okText: '确定'\n },\n Transfer: {\n titles: ['', ''],\n searchPlaceholder: '请输入搜索内容',\n itemUnit: '项',\n itemsUnit: '项',\n remove: '删除',\n selectCurrent: '全选当页',\n removeCurrent: '删除当页',\n selectAll: '全选所有',\n deselectAll: '取消全选',\n removeAll: '删除全部',\n selectInvert: '反选当页'\n },\n Upload: {\n uploading: '文件上传中',\n removeFile: '删除文件',\n uploadError: '上传错误',\n previewFile: '预览文件',\n downloadFile: '下载文件'\n },\n Empty: {\n description: '暂无数据'\n },\n Icon: {\n icon: '图标'\n },\n Text: {\n edit: '编辑',\n copy: '复制',\n copied: '复制成功',\n expand: '展开',\n collapse: '收起'\n },\n Form: {\n optional: '(可选)',\n defaultValidateMessages: {\n default: '字段验证错误${label}',\n required: '请输入${label}',\n enum: '${label}必须是其中一个[${enum}]',\n whitespace: '${label}不能为空字符',\n date: {\n format: '${label}日期格式无效',\n parse: '${label}不能转换为日期',\n invalid: '${label}是一个无效日期'\n },\n types: {\n string: typeTemplate,\n method: typeTemplate,\n array: typeTemplate,\n object: typeTemplate,\n number: typeTemplate,\n date: typeTemplate,\n boolean: typeTemplate,\n integer: typeTemplate,\n float: typeTemplate,\n regexp: typeTemplate,\n email: typeTemplate,\n url: typeTemplate,\n hex: typeTemplate\n },\n string: {\n len: '${label}须为${len}个字符',\n min: '${label}最少${min}个字符',\n max: '${label}最多${max}个字符',\n range: '${label}须在${min}-${max}字符之间'\n },\n number: {\n len: '${label}必须等于${len}',\n min: '${label}最小值为${min}',\n max: '${label}最大值为${max}',\n range: '${label}须在${min}-${max}之间'\n },\n array: {\n len: '须为${len}个${label}',\n min: '最少${min}个${label}',\n max: '最多${max}个${label}',\n range: '${label}数量须在${min}-${max}之间'\n },\n pattern: {\n mismatch: '${label}与模式不匹配${pattern}'\n }\n }\n },\n QRCode: {\n expired: '二维码过期',\n refresh: '点击刷新',\n scanned: '已扫描'\n },\n ColorPicker: {\n presetEmpty: '暂无',\n transparent: '无色',\n singleColor: '单色',\n gradientColor: '渐变色'\n }\n};\nvar _default = exports.default = localeValues;","module.exports = require('../lib/locale/zh_CN');","!function(e,_){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=_(require(\"dayjs\")):\"function\"==typeof define&&define.amd?define([\"dayjs\"],_):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_locale_zh_cn=_(e.dayjs)}(this,(function(e){\"use strict\";function _(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var t=_(e),d={name:\"zh-cn\",weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"周日_周一_周二_周三_周四_周五_周六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),ordinal:function(e,_){return\"W\"===_?e+\"周\":e+\"日\"},weekStart:1,yearStart:4,formats:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日Ah点mm分\",LLLL:\"YYYY年M月D日ddddAh点mm分\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},relativeTime:{future:\"%s内\",past:\"%s前\",s:\"几秒\",m:\"1 分钟\",mm:\"%d 分钟\",h:\"1 小时\",hh:\"%d 小时\",d:\"1 天\",dd:\"%d 天\",M:\"1 个月\",MM:\"%d 个月\",y:\"1 年\",yy:\"%d 年\"},meridiem:function(e,_){var t=100*e+_;return t<600?\"凌晨\":t<900?\"早上\":t<1100?\"上午\":t<1300?\"中午\":t<1800?\"下午\":\"晚上\"}};return t.default.locale(d,null,!0),d}));","/**\n * @file lib/providers/CMReportingProvider.tsx\n * @description 顶层 Provider,负责 i18n 初始化和 Ant Design 配置。\n */\n\nimport i18n, { initI18n, isI18nInitialized, type Locale } from '@core/i18n'\nimport { AppThemeScope } from '@ui/theme/AppThemeScope'\nimport type { CMCSSVariables } from '@ui/theme/index'\nimport { defaultAntdTheme } from '@ui/theme/index'\nimport { App as AntApp, ConfigProvider, Flex, Spin } from 'antd'\nimport type { ThemeConfig } from 'antd'\nimport enUS from 'antd/locale/en_US'\nimport zhCN from 'antd/locale/zh_CN'\nimport dayjs from 'dayjs'\nimport 'dayjs/locale/zh-cn'\nimport type { ReactNode } from 'react'\nimport { Suspense, useEffect, useRef } from 'react'\n\n// 确保 react-i18next 在任何组件渲染前就拿到已注册的 i18n 实例(避免在 render 阶段 init 导致订阅组件更新)。\nif (!isI18nInitialized()) initI18n('en-US')\n\nconst ANT_LOCALE_BY_APP: Record<Locale, typeof enUS> = {\n 'en-US': enUS,\n 'zh-CN': zhCN,\n}\n\nconst DAYJS_LOCALE_BY_APP: Record<Locale, string> = {\n 'en-US': 'en',\n 'zh-CN': 'zh-cn',\n}\n\nconst applyLocale = (nextLocale: Locale) => {\n initI18n(nextLocale)\n dayjs.locale(DAYJS_LOCALE_BY_APP[nextLocale] ?? 'en')\n}\n\n/**\n * CMReportingProvider Props。\n */\nexport interface CMReportingProviderProps {\n /** 初始语言,默认 'en-US' */\n locale?: Locale\n /** 语言变化回调 */\n onLocaleChange?: (locale: Locale) => void\n /** 可选覆盖 Ant Design 主题 */\n theme?: ThemeConfig\n /** CM 自定义 CSS 变量配置 */\n cssVariables?: CMCSSVariables\n /** 子组件 */\n children: ReactNode\n /** 加载中显示的内容 */\n fallback?: ReactNode\n}\n\n/**\n * CMReportingProvider:顶层 Provider。\n * 负责 i18n 初始化、Ant Design 配置和 Suspense 边界。\n */\nexport function CMReportingProvider({\n locale = 'en-US',\n onLocaleChange,\n theme = defaultAntdTheme,\n cssVariables,\n children,\n fallback,\n}: CMReportingProviderProps) {\n const notifiedLocaleRef = useRef<Locale>(locale)\n\n // 在首轮 render 前同步应用语言,确保 SSR 与首屏输出和传入 locale 一致。\n const expectedDayjsLocale = DAYJS_LOCALE_BY_APP[locale] ?? 'en'\n const missingResourceBundles =\n !i18n.hasResourceBundle('en-US', 'translation') ||\n !i18n.hasResourceBundle('zh-CN', 'translation')\n\n if (missingResourceBundles || i18n.language !== locale || dayjs.locale() !== expectedDayjsLocale) {\n applyLocale(locale)\n }\n\n useEffect(() => {\n if (notifiedLocaleRef.current !== locale) {\n notifiedLocaleRef.current = locale\n onLocaleChange?.(locale)\n }\n }, [locale, onLocaleChange])\n\n const loadingFallback = fallback ?? (\n <Flex justify=\"center\" align=\"center\" style={{ height: 256 }}>\n <Spin size=\"large\" />\n </Flex>\n )\n\n return (\n <ConfigProvider theme={theme} locale={ANT_LOCALE_BY_APP[locale]}>\n <AntApp>\n <AppThemeScope cssVariables={cssVariables}>\n <Suspense fallback={loadingFallback}>{children}</Suspense>\n </AppThemeScope>\n </AntApp>\n </ConfigProvider>\n )\n}\n\nexport default CMReportingProvider\n","/**\n * @file public/_xlsx.ts\n * @description xlsx 最小 patch 工具:基于原始模板写入值,尽量不触碰其它结构。\n *\n * 目标:导出后的文件在 Excel 中保持 DV/格式/公式/隐藏 sheet 行为一致。\n * 非目标:zip 内容字节级一致(重新打包不可避免产生差异)。\n */\n\nimport type { Unzipped } from 'fflate'\n\ntype SheetPathByName = Map<string, string>\n\nexport interface XlsxContext {\n files: Unzipped\n sharedStrings: string[]\n sheetPathByName: SheetPathByName\n}\n\nfunction decodeXmlText(text: string): string {\n return text\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n}\n\nfunction encodeXmlText(text: string): string {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n}\n\nfunction uint8ToUtf8(u8: Uint8Array): string {\n return new TextDecoder().decode(u8)\n}\n\nfunction utf8ToUint8(text: string): Uint8Array {\n return new TextEncoder().encode(text)\n}\n\nfunction getFileText(files: Unzipped, path: string): string {\n const file = files[path]\n if (!file) throw new Error(`xlsx missing file: ${path}`)\n return uint8ToUtf8(file as Uint8Array)\n}\n\nfunction setFileText(files: Unzipped, path: string, text: string) {\n files[path] = utf8ToUint8(text) as unknown as Unzipped[string]\n}\n\nfunction parseSharedStringsXml(xml: string): string[] {\n // sharedStrings.xml 可以包含富文本:<si><r><t>..</t></r>..</si>\n const items: string[] = []\n const siRe = /<si\\b[^>]*>([\\s\\S]*?)<\\/si>/g\n let m: RegExpExecArray | null\n while ((m = siRe.exec(xml))) {\n const si = m[1] ?? ''\n const ts: string[] = []\n const tRe = /<t\\b[^>]*>([\\s\\S]*?)<\\/t>/g\n let mt: RegExpExecArray | null\n while ((mt = tRe.exec(si))) {\n ts.push(decodeXmlText(mt[1] ?? ''))\n }\n items.push(ts.join(''))\n }\n return items\n}\n\nfunction buildSheetPathByName(workbookXml: string, relsXml: string): SheetPathByName {\n // workbook.xml: <sheet name=\"Declaration\" ... r:id=\"rId3\"/>\n const rIdBySheetName = new Map<string, string>()\n const sheetRe = /<sheet\\b[^>]*\\bname=\"([^\"]+)\"[^>]*\\br:id=\"([^\"]+)\"[^>]*\\/?>/g\n let m: RegExpExecArray | null\n while ((m = sheetRe.exec(workbookXml))) {\n rIdBySheetName.set(decodeXmlText(m[1] ?? ''), m[2] ?? '')\n }\n\n // workbook.xml.rels: <Relationship Id=\"rId3\" Target=\"worksheets/sheet3.xml\" .../>\n const targetByRid = new Map<string, string>()\n const relRe = /<Relationship\\b[^>]*\\bId=\"([^\"]+)\"[^>]*\\bTarget=\"([^\"]+)\"[^>]*\\/?>/g\n let mr: RegExpExecArray | null\n while ((mr = relRe.exec(relsXml))) {\n targetByRid.set(mr[1] ?? '', decodeXmlText(mr[2] ?? ''))\n }\n\n const result: SheetPathByName = new Map()\n for (const [name, rid] of rIdBySheetName.entries()) {\n const target = targetByRid.get(rid)\n if (!target) continue\n const path = target.startsWith('/') ? target.slice(1) : `xl/${target}`\n result.set(name, path)\n }\n return result\n}\n\nfunction findCellElement(xml: string, cellRef: string): { start: number; end: number; openTag: string; body: string } | null {\n const needle = `r=\"${cellRef}\"`\n const idx = xml.indexOf(needle)\n if (idx < 0) return null\n const cStart = xml.lastIndexOf('<c', idx)\n if (cStart < 0) return null\n const tagEnd = xml.indexOf('>', idx)\n if (tagEnd < 0) return null\n const openTag = xml.slice(cStart, tagEnd + 1)\n // self-closing: <c .../>\n if (openTag.endsWith('/>')) {\n return { start: cStart, end: tagEnd + 1, openTag, body: '' }\n }\n const cEnd = xml.indexOf('</c>', tagEnd + 1)\n if (cEnd < 0) return null\n const body = xml.slice(tagEnd + 1, cEnd)\n return { start: cStart, end: cEnd + 4, openTag, body }\n}\n\nfunction stripAttr(openTag: string, attrName: string): string {\n // remove attrName=\"...\"\n const re = new RegExp(`\\\\s+${attrName}=\"[^\"]*\"`, 'g')\n return openTag.replace(re, '')\n}\n\nexport function isFormulaCell(sheetXml: string, cellRef: string): boolean {\n const found = findCellElement(sheetXml, cellRef)\n if (!found) return false\n return /<f[\\s>]/.test(found.body)\n}\n\nexport function readCellText(sheetXml: string, cellRef: string, sharedStrings: string[]): string | null {\n const found = findCellElement(sheetXml, cellRef)\n if (!found) return null\n const { openTag, body } = found\n\n const tMatch = /\\bt=\"([^\"]+)\"/.exec(openTag)\n const t = tMatch?.[1]\n\n if (t === 'inlineStr') {\n const tRe = /<t\\b[^>]*>([\\s\\S]*?)<\\/t>/\n const mt = tRe.exec(body)\n return mt ? decodeXmlText(mt[1] ?? '') : ''\n }\n\n const vRe = /<v>([\\s\\S]*?)<\\/v>/\n const mv = vRe.exec(body)\n if (!mv) return ''\n const raw = decodeXmlText(mv[1] ?? '')\n\n if (t === 's') {\n const idx = Number(raw)\n return Number.isFinite(idx) ? (sharedStrings[idx] ?? '') : ''\n }\n\n return raw\n}\n\nexport function writeCellInlineStr(sheetXml: string, cellRef: string, value: string): string {\n return writeCellInlineStrImpl(sheetXml, cellRef, value, { allowOverwriteFormula: false })\n}\n\n/**\n * 写入 inlineStr,允许覆盖公式单元格(等价于用户在 Excel 中直接输入,从而替换掉公式)。\n *\n * 注意:仅应在“模板允许用户编辑的输入列”使用;否则会破坏模板行为。\n */\nexport function writeCellInlineStrOverwriteFormula(sheetXml: string, cellRef: string, value: string): string {\n return writeCellInlineStrImpl(sheetXml, cellRef, value, { allowOverwriteFormula: true })\n}\n\nfunction writeCellInlineStrImpl(\n sheetXml: string,\n cellRef: string,\n value: string,\n opts: { allowOverwriteFormula: boolean }\n): string {\n const found = findCellElement(sheetXml, cellRef)\n if (!found) {\n // 模板应当已经为可编辑单元格预置了带样式的 <c>,避免我们创建 cell 破坏样式/列宽等。\n throw new Error(`cell not found in template: ${cellRef}`)\n }\n\n const { start, end, openTag, body } = found\n if (!opts.allowOverwriteFormula && /<f[\\s>]/.test(body)) {\n throw new Error(`refusing to overwrite formula cell: ${cellRef}`)\n }\n\n let nextOpen = openTag\n nextOpen = stripAttr(nextOpen, 't')\n // Normalize self-closing <c .../> into <c ...> before injecting attributes/body.\n nextOpen = nextOpen.replace(/\\s*\\/>$/, '>')\n // 强制 inlineStr(避免写 sharedStrings,减少对模板结构触碰)\n nextOpen = nextOpen.replace(/>$/, ' t=\"inlineStr\">')\n nextOpen = nextOpen.replace(/\\s+t=\"inlineStr\"\\s+t=\"inlineStr\"/g, ' t=\"inlineStr\"')\n\n const trimmed = value ?? ''\n const nextCell = trimmed\n ? `${nextOpen}<is><t xml:space=\"preserve\">${encodeXmlText(trimmed)}</t></is></c>`\n : (() => {\n const stripped = stripAttr(openTag, 't')\n // If the template cell is already self-closing (<c .../>), keep it as-is.\n if (stripped.endsWith('/>')) return stripped\n return stripped.replace(/>$/, '/>')\n })()\n\n return sheetXml.slice(0, start) + nextCell + sheetXml.slice(end)\n}\n\nexport async function loadXlsxContext(input: ArrayBuffer): Promise<XlsxContext> {\n const { unzipSync } = await import('fflate')\n const files = unzipSync(new Uint8Array(input)) as Unzipped\n\n const workbookXml = getFileText(files, 'xl/workbook.xml')\n const relsXml = getFileText(files, 'xl/_rels/workbook.xml.rels')\n\n const sharedStringsXml = files['xl/sharedStrings.xml']\n ? getFileText(files, 'xl/sharedStrings.xml')\n : ''\n const sharedStrings = sharedStringsXml ? parseSharedStringsXml(sharedStringsXml) : []\n\n return {\n files,\n sharedStrings,\n sheetPathByName: buildSheetPathByName(workbookXml, relsXml),\n }\n}\n\nexport function setFullCalcOnLoad(files: Unzipped) {\n const workbookPath = 'xl/workbook.xml'\n let xml = getFileText(files, workbookPath)\n\n if (/<calcPr\\b/.test(xml)) {\n // ensure fullCalcOnLoad=\"1\"\n xml = xml.replace(/<calcPr\\b([^>]*)\\/>/, (_m, attrs) => {\n const has = /\\bfullCalcOnLoad=/.test(attrs)\n if (has) {\n const nextAttrs = String(attrs).replace(/fullCalcOnLoad=\"[^\"]*\"/, 'fullCalcOnLoad=\"1\"')\n return `<calcPr${nextAttrs}/>`\n }\n return `<calcPr${attrs} fullCalcOnLoad=\"1\"/>`\n })\n } else {\n // insert near </workbook> end\n xml = xml.replace(/<\\/workbook>/, '<calcPr fullCalcOnLoad=\"1\"/></workbook>')\n }\n\n setFileText(files, workbookPath, xml)\n}\n\nexport function removeCalcChain(files: Unzipped) {\n if (files['xl/calcChain.xml']) {\n delete files['xl/calcChain.xml']\n }\n\n const ctPath = '[Content_Types].xml'\n if (files[ctPath]) {\n let ct = getFileText(files, ctPath)\n ct = ct.replace(/<Override\\b[^>]*PartName=\"\\/xl\\/calcChain\\.xml\"[^>]*\\/>\\s*/g, '')\n setFileText(files, ctPath, ct)\n }\n\n // Some templates also carry a Relationship entry for calcChain; remove it to avoid dangling rels.\n const relsPath = 'xl/_rels/workbook.xml.rels'\n if (files[relsPath]) {\n let rels = getFileText(files, relsPath)\n // remove by Target\n rels = rels.replace(/<Relationship\\b[^>]*\\bTarget=\"calcChain\\.xml\"[^>]*\\/>\\s*/g, '')\n rels = rels.replace(/<Relationship\\b[^>]*\\bTarget=\"\\/xl\\/calcChain\\.xml\"[^>]*\\/>\\s*/g, '')\n // remove by Type (order-insensitive)\n rels = rels.replace(\n /<Relationship\\b[^>]*\\bType=\"http:\\/\\/schemas\\.openxmlformats\\.org\\/officeDocument\\/2006\\/relationships\\/calcChain\"[^>]*\\/>\\s*/g,\n ''\n )\n setFileText(files, relsPath, rels)\n }\n}\n\nexport async function zipXlsx(files: Unzipped): Promise<Uint8Array> {\n const { zipSync } = await import('fflate')\n return zipSync(files, { level: 6 }) as Uint8Array\n}\n\nexport function getSheetXml(ctx: XlsxContext, sheetName: string): string {\n const path = ctx.sheetPathByName.get(sheetName)\n if (!path) throw new Error(`xlsx missing sheet: ${sheetName}`)\n return getFileText(ctx.files, path)\n}\n\nexport function setSheetXml(ctx: XlsxContext, sheetName: string, xml: string) {\n const path = ctx.sheetPathByName.get(sheetName)\n if (!path) throw new Error(`xlsx missing sheet: ${sheetName}`)\n setFileText(ctx.files, path, xml)\n}\n","// This file is auto-generated by scripts/generate-excel-mapping.js\n// Do not edit manually.\n\nexport const EXCEL_TEMPLATE_ANCHORS = {\n \"cmrt\": {\n \"6.01\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61,\n \"8\": 67\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 5,\n \"8\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 75,\n \"B\": 77,\n \"C\": 79,\n \"D\": 81,\n \"E\": 83,\n \"F\": 85,\n \"G\": 87,\n \"H\": 89\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"6.1\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61,\n \"8\": 67\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 5,\n \"8\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 75,\n \"B\": 77,\n \"C\": 79,\n \"D\": 81,\n \"E\": 83,\n \"F\": 85,\n \"G\": 87,\n \"H\": 89\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"6.22\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61,\n \"8\": 67\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 5,\n \"8\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 75,\n \"B\": 77,\n \"C\": 79,\n \"D\": 81,\n \"E\": 83,\n \"F\": 85,\n \"G\": 87,\n \"H\": 89\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"6.31\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61,\n \"8\": 67\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 5,\n \"8\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 75,\n \"B\": 77,\n \"C\": 79,\n \"D\": 81,\n \"E\": 83,\n \"F\": 85,\n \"G\": 87,\n \"H\": 89\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"6.4\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61,\n \"8\": 67\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 5,\n \"8\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 75,\n \"B\": 77,\n \"C\": 79,\n \"D\": 81,\n \"E\": 83,\n \"F\": 85,\n \"G\": 87,\n \"H\": 89\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"6.5\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61,\n \"8\": 67\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 5,\n \"8\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 75,\n \"B\": 77,\n \"C\": 79,\n \"D\": 81,\n \"E\": 83,\n \"F\": 85,\n \"G\": 87,\n \"H\": 89\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n }\n },\n \"emrt\": {\n \"1.1\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 69,\n \"B\": 71,\n \"C\": 73,\n \"D\": 77,\n \"E\": 79,\n \"F\": 81,\n \"G\": 83\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 3,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 36\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"1.11\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 69,\n \"B\": 71,\n \"C\": 73,\n \"D\": 77,\n \"E\": 79,\n \"F\": 81,\n \"G\": 83\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 3,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 36\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"1.2\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 69,\n \"B\": 71,\n \"C\": 73,\n \"D\": 77,\n \"E\": 79,\n \"F\": 81,\n \"G\": 83\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 3,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 36\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"1.3\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55,\n \"7\": 61\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 5,\n \"7\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 69,\n \"B\": 71,\n \"C\": 73,\n \"D\": 77,\n \"E\": 79,\n \"F\": 81,\n \"G\": 83\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 3,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 36\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"2.0\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 29,\n \"2\": 41,\n \"3\": 53,\n \"4\": 65,\n \"5\": 77,\n \"6\": 89,\n \"7\": 101\n },\n \"questionSpanByNumber\": {\n \"1\": 11,\n \"2\": 11,\n \"3\": 11,\n \"4\": 11,\n \"5\": 11,\n \"6\": 11,\n \"7\": 13\n },\n \"companyHeaderRowByKey\": {\n \"A\": 115,\n \"B\": 117,\n \"C\": 119,\n \"D\": 131,\n \"E\": 133,\n \"F\": 135,\n \"G\": 137\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 11,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 50\n },\n \"amrtQ1Row\": 29,\n \"amrtQ2Row\": 41,\n \"amrtQ3Row\": 53\n },\n \"2.1\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 29,\n \"2\": 41,\n \"3\": 53,\n \"4\": 65,\n \"5\": 77,\n \"6\": 89,\n \"7\": 101\n },\n \"questionSpanByNumber\": {\n \"1\": 11,\n \"2\": 11,\n \"3\": 11,\n \"4\": 11,\n \"5\": 11,\n \"6\": 11,\n \"7\": 13\n },\n \"companyHeaderRowByKey\": {\n \"A\": 115,\n \"B\": 117,\n \"C\": 119,\n \"D\": 131,\n \"E\": 133,\n \"F\": 135,\n \"G\": 137\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 11,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 50\n },\n \"amrtQ1Row\": 29,\n \"amrtQ2Row\": 41,\n \"amrtQ3Row\": 53\n }\n },\n \"crt\": {\n \"2.2\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 63,\n \"B\": 65,\n \"C\": 67,\n \"D\": 69,\n \"E\": 71,\n \"F\": 73,\n \"G\": 75,\n \"H\": 77,\n \"I\": 79\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 1,\n \"I\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n },\n \"2.21\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 25,\n \"2\": 31,\n \"3\": 37,\n \"4\": 43,\n \"5\": 49,\n \"6\": 55\n },\n \"questionSpanByNumber\": {\n \"1\": 5,\n \"2\": 5,\n \"3\": 5,\n \"4\": 5,\n \"5\": 5,\n \"6\": 7\n },\n \"companyHeaderRowByKey\": {\n \"A\": 63,\n \"B\": 65,\n \"C\": 67,\n \"D\": 69,\n \"E\": 71,\n \"F\": 73,\n \"G\": 75,\n \"H\": 77,\n \"I\": 79\n },\n \"companySpanByKey\": {\n \"A\": 1,\n \"B\": 1,\n \"C\": 1,\n \"D\": 1,\n \"E\": 1,\n \"F\": 1,\n \"G\": 1,\n \"H\": 1,\n \"I\": 21\n },\n \"amrtQ1Row\": 25,\n \"amrtQ2Row\": 31,\n \"amrtQ3Row\": 37\n }\n },\n \"amrt\": {\n \"1.1\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 27,\n \"2\": 39\n },\n \"questionSpanByNumber\": {\n \"1\": 11,\n \"2\": 29\n },\n \"companyHeaderRowByKey\": {},\n \"companySpanByKey\": {},\n \"amrtQ1Row\": 27,\n \"amrtQ2Row\": 39,\n \"amrtQ3Row\": null\n },\n \"1.2\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 27,\n \"2\": 39\n },\n \"questionSpanByNumber\": {\n \"1\": 11,\n \"2\": 29\n },\n \"companyHeaderRowByKey\": {},\n \"companySpanByKey\": {},\n \"amrtQ1Row\": 27,\n \"amrtQ2Row\": 39,\n \"amrtQ3Row\": null\n },\n \"1.3\": {\n \"questionHeaderRowByNumber\": {\n \"1\": 30,\n \"2\": 42\n },\n \"questionSpanByNumber\": {\n \"1\": 11,\n \"2\": 37\n },\n \"companyHeaderRowByKey\": {},\n \"companySpanByKey\": {},\n \"amrtQ1Row\": 30,\n \"amrtQ2Row\": 42,\n \"amrtQ3Row\": null\n }\n }\n} as const\n","import type { TemplateType } from '@core/registry'\n\nimport { EXCEL_TEMPLATE_ANCHORS } from './excelMappings.generated'\n\nexport interface ExcelDeclarationAnchors {\n questionHeaderRowByNumber: Record<string, number>\n questionSpanByNumber: Record<string, number>\n companyHeaderRowByKey: Record<string, number>\n companySpanByKey: Record<string, number>\n amrtQ1Row: number | null\n amrtQ2Row: number | null\n amrtQ3Row: number | null\n}\n\nexport function getExcelDeclarationAnchors(type: TemplateType, versionId: string): ExcelDeclarationAnchors {\n const byType = (EXCEL_TEMPLATE_ANCHORS as Record<TemplateType, Record<string, ExcelDeclarationAnchors> | undefined>)[type]\n const hit = byType?.[versionId]\n if (!hit) {\n // Fail-fast: for open-source consumers, missing mapping is a bug in our release pipeline.\n throw new Error(`Missing Excel anchor mapping for ${type}@${versionId}. Run pnpm generate:excel-mapping.`)\n }\n return hit\n}\n","/**\n * @file public/excel.ts\n * @description 对外稳定的 Excel 导出入口(基于模板赋值后导出)。\n *\n * 说明:严格 1:1 保留模板的 DV/格式/公式/隐藏 sheet 等,必须采用“基于原始模板最小 patch”的实现。\n */\n\nimport { getVersionDef } from '@core/registry'\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport { normalizeSmelterLookup, toDisplayDate } from '@core/transform'\n\nimport {\n getSheetXml,\n loadXlsxContext,\n removeCalcChain,\n setFullCalcOnLoad,\n setSheetXml,\n isFormulaCell,\n writeCellInlineStr,\n writeCellInlineStrOverwriteFormula,\n zipXlsx,\n readCellText,\n} from './_xlsx'\nimport { getExcelDeclarationAnchors } from './excelMapping'\nimport type { ReportSnapshotV1 } from './snapshot'\n\nexport interface ExportExcelInput {\n /** 原始 RMI 模板文件内容(.xlsx),推荐来自包内 templates 或宿主自有存储。 */\n templateXlsx: ArrayBuffer\n snapshot: ReportSnapshotV1\n}\n\nfunction cell(col: string, row: number): string {\n return `${col}${row}`\n}\n\nfunction normalizeToken(input: string): string {\n return input.toLowerCase().replace(/[^a-z0-9]+/g, '')\n}\n\nfunction humanizeMineralKey(key: string): string {\n // rough: rareEarthElements -> Rare Earth Elements\n const spaced = key\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .trim()\n if (!spaced) return ''\n return spaced[0]!.toUpperCase() + spaced.slice(1)\n}\n\nfunction toExcelScopeValue(raw: string, options: string[]): string {\n // internal: 'A'|'B'|'C' ; excel: \"A. Company ...\" (来自模板 DV 列表)\n const prefix = raw?.trim()\n if (!prefix) return ''\n const hit = options.find((o) => o.trim().startsWith(`${prefix}.`))\n return hit ?? raw\n}\n\nfunction buildAmrtMineralOptionMap(\n declXml: string,\n sharedStrings: string[],\n versionDef: TemplateVersionDef\n): Map<string, string> {\n // AMRT 下拉选项来源:Declaration!B68:B80(模板内定义),包含 \"Other [specify below]\" 等精确文案。\n const options: string[] = []\n for (let r = 68; r <= 90; r += 1) {\n const v = readCellText(declXml, cell('B', r), sharedStrings)\n if (v && v.trim()) options.push(v.trim())\n }\n\n const map = new Map<string, string>()\n const otherOpt = options.find((o) => o.toLowerCase().includes('other'))\n if (otherOpt) map.set('other', otherOpt)\n\n const aliasesByKey: Record<string, string[]> = {\n aluminum: ['Aluminum', 'Aluminium'],\n sodaAsh: ['Soda Ash'],\n rareEarthElements: ['Rare Earth Elements'],\n }\n\n for (const mineral of versionDef.mineralScope.minerals) {\n if (mineral.key === 'other') continue\n const aliases = aliasesByKey[mineral.key] ?? [humanizeMineralKey(mineral.key)]\n const norms = aliases.map(normalizeToken)\n const hit = options.find((opt) => norms.includes(normalizeToken(opt)))\n if (hit) {\n map.set(mineral.key, hit)\n continue\n }\n // fallback: keep readable value; DV 可能提示无效,但导出不崩溃\n map.set(mineral.key, aliases[0] ?? mineral.key)\n }\n\n return map\n}\n\nfunction writeCompanyInfo(declXml: string, versionDef: TemplateVersionDef, snapshot: ReportSnapshotV1, readDvOptions: (cellRef: string) => string[]): string {\n const info = snapshot.data.companyInfo ?? {}\n\n const templateType = versionDef.templateType\n const base: Record<string, string> = {\n companyName: 'D8',\n declarationScope: 'D9',\n scopeDescription: 'D10',\n }\n\n const afterScopeBaseRow =\n templateType === 'emrt' ? 16 :\n templateType === 'amrt' ? 17 :\n 12 // cmrt/crt\n\n const restKeys = [\n 'companyId',\n 'companyAuthId',\n 'address',\n 'contactName',\n 'contactEmail',\n 'contactPhone',\n 'authorizerName',\n 'authorizerTitle',\n 'authorizerEmail',\n 'authorizerPhone',\n 'authorizationDate',\n ]\n\n restKeys.forEach((k, idx) => {\n base[k] = cell('D', afterScopeBaseRow + idx)\n })\n\n let next = declXml\n for (const field of versionDef.companyInfoFields) {\n const key = field.key\n const target = base[key]\n if (!target) continue\n const raw = info[key] ?? ''\n if (!raw) continue\n\n if (key === 'authorizationDate') {\n next = writeCellInlineStr(next, target, toDisplayDate(raw))\n continue\n }\n if (key === 'declarationScope') {\n const options = readDvOptions(target)\n next = writeCellInlineStr(next, target, toExcelScopeValue(raw, options))\n continue\n }\n next = writeCellInlineStr(next, target, raw)\n }\n\n return next\n}\n\nfunction writeListSheetRows(\n sheetXml: string,\n startRow: number,\n rows: Array<Record<string, string | undefined>>,\n colByKey: Record<string, string>,\n valueTransform?: (key: string, value: string) => string\n): string {\n let next = sheetXml\n rows.forEach((row, index) => {\n const excelRow = startRow + index\n for (const [key, col] of Object.entries(colByKey)) {\n const raw = row[key]\n if (!raw) continue\n const v = valueTransform ? valueTransform(key, raw) : raw\n next = writeCellInlineStr(next, cell(col, excelRow), v)\n }\n })\n return next\n}\n\nfunction writeEmrtMineralSelection(\n declXml: string,\n versionDef: TemplateVersionDef,\n snapshot: ReportSnapshotV1,\n sharedStrings: string[]\n): string {\n if (versionDef.templateType !== 'emrt') return declXml\n if (versionDef.mineralScope.mode !== 'dynamic-dropdown') return declXml\n\n // EMRT v2 模板:通过选择 \"(Delete X)\" 来移除矿种\n const slots = ['D12', 'E12', 'G12', 'D13', 'E13', 'G13']\n const selected = new Set(snapshot.data.selectedMinerals ?? [])\n\n let next = declXml\n versionDef.mineralScope.minerals.forEach((mineral, index) => {\n const slot = slots[index]\n if (!slot) return\n const keep = readCellText(declXml, slot, sharedStrings) ?? humanizeMineralKey(mineral.key)\n const deleteLabel =\n readCellText(declXml, cell('C', 175 + index), sharedStrings) ??\n `(Delete ${keep})`\n next = writeCellInlineStr(next, slot, selected.has(mineral.key) ? keep : deleteLabel)\n })\n\n return next\n}\n\nfunction writeAmrtMineralSelection(\n declXml: string,\n versionDef: TemplateVersionDef,\n snapshot: ReportSnapshotV1,\n sharedStrings: string[]\n): string {\n if (versionDef.templateType !== 'amrt') return declXml\n if (versionDef.mineralScope.mode !== 'dynamic-dropdown') return declXml\n\n const optionByKey = buildAmrtMineralOptionMap(declXml, sharedStrings, versionDef)\n\n // 选择区:D12:I13(12 个槽位,但业务约束 maxCount=10)\n const selectionSlots = [\n 'D12', 'E12', 'F12', 'G12', 'H12', 'I12',\n 'D13', 'E13', 'F13', 'G13', 'H13', 'I13',\n ]\n const selected = (snapshot.data.selectedMinerals ?? []).filter(Boolean)\n const maxCount = versionDef.mineralScope.maxCount ?? 10\n const baseSelected = selected.filter((k) => k !== 'other').slice(0, maxCount)\n const hasOtherSelected = selected.includes('other')\n const otherNamesByIndex = (snapshot.data.customMinerals ?? []).map((s) => s.trim())\n\n const slotCount = selectionSlots.length\n const selectionKeysBySlot = Array.from({ length: slotCount }, () => '')\n const otherNameBySlot = Array.from({ length: slotCount }, () => '')\n\n let filledCount = 0\n\n // Other slots: keep index semantics (customMinerals[i] -> slot i)\n if (hasOtherSelected) {\n for (let i = 0; i < slotCount && filledCount < maxCount; i += 1) {\n const label = otherNamesByIndex[i] ?? ''\n if (!label) continue\n selectionKeysBySlot[i] = 'other'\n otherNameBySlot[i] = label\n filledCount += 1\n }\n // If \"other\" is selected but user didn't provide any labels (invalid snapshot),\n // still mark one Other slot so template logic can react.\n if (filledCount === 0 && maxCount > 0) {\n selectionKeysBySlot[0] = 'other'\n filledCount = 1\n }\n }\n\n // Base minerals: fill the remaining empty selection slots in order\n for (const key of baseSelected) {\n if (filledCount >= maxCount) break\n const idx = selectionKeysBySlot.findIndex((v) => !v)\n if (idx < 0) break\n selectionKeysBySlot[idx] = key\n filledCount += 1\n }\n\n let next = declXml\n selectionSlots.forEach((slot, idx) => {\n const key = selectionKeysBySlot[idx] ?? ''\n const value = key ? (optionByKey.get(key) ?? humanizeMineralKey(key)) : ''\n next = writeCellInlineStr(next, slot, value)\n })\n\n // 其他矿种文本输入区:D15:I16(12 槽位)\n const otherSlots = [\n 'D15', 'E15', 'F15', 'G15', 'H15', 'I15',\n 'D16', 'E16', 'F16', 'G16', 'H16', 'I16',\n ]\n otherSlots.forEach((slot, idx) => {\n const label = selectionKeysBySlot[idx] === 'other' ? (otherNameBySlot[idx] ?? '') : ''\n next = writeCellInlineStr(next, slot, label)\n })\n\n return next\n}\n\nfunction writeDeclarationQuestionsAndCompany(\n declXml: string,\n versionDef: TemplateVersionDef,\n snapshot: ReportSnapshotV1,\n anchors: ReturnType<typeof getExcelDeclarationAnchors>\n): string {\n // AMRT 的问题矩阵在 Excel 中依赖选择区动态生成(AA 列),布局与当前 UI 数据结构不一一对应;\n // 先避免错误写入导致覆盖/错位。AMRT 的问答导出后续单独实现。\n if (versionDef.templateType === 'amrt') return declXml\n\n // 坐标由离线脚本生成(scripts/generate-excel-mapping.js),运行时不再扫描模板内容。\n const answers = snapshot.data.questions ?? {}\n const comments = snapshot.data.questionComments ?? {}\n const companyAnswers = snapshot.data.companyQuestions ?? {}\n\n const answerCol = 'D'\n const commentCol = 'G'\n\n let next = declXml\n\n // Questions: by number -> versionDef.questions order\n for (let n = 1; n <= versionDef.questions.length; n += 1) {\n const def = versionDef.questions[n - 1]\n if (!def) continue\n const row = (anchors.questionHeaderRowByNumber as Record<string, number | undefined>)[String(n)]\n if (!row) continue\n if (def.perMineral) {\n const minerals = versionDef.mineralScope.minerals\n const span = (anchors.questionSpanByNumber as Record<string, number | undefined>)[String(n)] ?? 0\n const maxRows = Math.max(0, span)\n minerals.slice(0, maxRows).forEach((mineral, idx) => {\n const rr = row + 1 + idx\n const qv = answers[def.key]\n const cv = comments[def.key]\n const value =\n qv && typeof qv === 'object' ? (qv as Record<string, string>)[mineral.key] ?? '' : ''\n const comment =\n cv && typeof cv === 'object' ? (cv as Record<string, string>)[mineral.key] ?? '' : ''\n if (value) next = writeCellInlineStr(next, cell(answerCol, rr), value)\n if (comment) next = writeCellInlineStr(next, cell(commentCol, rr), comment)\n })\n } else {\n const qv = answers[def.key]\n const cv = comments[def.key]\n const value = typeof qv === 'string' ? qv : ''\n const comment = typeof cv === 'string' ? cv : ''\n if (value) next = writeCellInlineStr(next, cell(answerCol, row + 1), value)\n if (comment) next = writeCellInlineStr(next, cell(commentCol, row + 1), comment)\n }\n }\n\n // Company questions: find row per letter, then maybe perMineral subrows\n const companyByKey = new Map(versionDef.companyQuestions.map((q) => [q.key, q]))\n for (const [key, row] of Object.entries(anchors.companyHeaderRowByKey as Record<string, number>)) {\n const def = companyByKey.get(key as string)\n if (!def) continue\n\n if (def.perMineral) {\n const minerals = versionDef.mineralScope.minerals\n const span = (anchors.companySpanByKey as Record<string, number | undefined>)[key] ?? 0\n const maxRows = Math.max(0, span)\n const commentKey = `${key}_comment`\n minerals.slice(0, maxRows).forEach((mineral, idx) => {\n const rr = row + 1 + idx\n const v = companyAnswers[key]\n const value =\n v && typeof v === 'object' ? (v as Record<string, string>)[mineral.key] ?? '' : ''\n if (value) next = writeCellInlineStr(next, cell(answerCol, rr), value)\n\n if (!def.hasCommentField) return\n const c = companyAnswers[commentKey]\n const comment =\n c && typeof c === 'object' ? (c as Record<string, string>)[mineral.key] ?? '' : ''\n if (comment) next = writeCellInlineStr(next, cell(commentCol, rr), comment)\n })\n continue\n }\n\n const v = companyAnswers[key]\n const value = typeof v === 'string' ? v : ''\n if (value) next = writeCellInlineStr(next, cell(answerCol, row), value)\n\n const commentKey = `${key}_comment`\n const c = companyAnswers[commentKey]\n const comment = typeof c === 'string' ? c : ''\n if (comment) next = writeCellInlineStr(next, cell(commentCol, row), comment)\n }\n\n return next\n}\n\nfunction writeAmrtQuestions(\n declXml: string,\n versionDef: TemplateVersionDef,\n snapshot: ReportSnapshotV1,\n sharedStrings: string[],\n anchors: ReturnType<typeof getExcelDeclarationAnchors>\n): string {\n if (versionDef.templateType !== 'amrt') return declXml\n\n const questions = snapshot.data.questions ?? {}\n const questionComments = snapshot.data.questionComments ?? {}\n\n const q1Row = anchors.amrtQ1Row as number | null\n const q2Row = anchors.amrtQ2Row as number | null\n if (!q1Row || !q2Row) return declXml\n\n const optionByKey = buildAmrtMineralOptionMap(declXml, sharedStrings, versionDef)\n const selected = (snapshot.data.selectedMinerals ?? []).filter(Boolean)\n const hasOther = selected.includes('other')\n const custom = hasOther\n ? (snapshot.data.customMinerals ?? []).map((s) => s.trim()).filter(Boolean)\n : []\n\n const minerals = selected\n .filter((k) => k !== 'other')\n .map((k) => ({\n key: k,\n label: optionByKey.get(k) ?? humanizeMineralKey(k) ?? k,\n }))\n\n const rows = [\n ...minerals,\n ...custom.map((label, index) => ({ key: `custom-${index}`, label })),\n ]\n .filter((x) => x.label.trim())\n .sort((a, b) => {\n const left = a.label.trim()\n const right = b.label.trim()\n const res = left.localeCompare(right)\n return res !== 0 ? res : a.key.localeCompare(b.key)\n })\n .slice(0, 10)\n\n const writeBlock = (\n baseXml: string,\n questionKey: string,\n startRow: number,\n endRow: number,\n answerCol: string,\n commentCol: string\n ) => {\n let next = baseXml\n const max = Math.min(rows.length, Math.max(0, endRow - startRow + 1))\n for (let i = 0; i < max; i += 1) {\n const rr = startRow + i\n const mineralKey = rows[i]!.key\n if (!mineralKey.startsWith('custom-')) {\n const qv = questions[questionKey]\n const cv = questionComments[questionKey]\n const value =\n qv && typeof qv === 'object' ? (qv as Record<string, string>)[mineralKey] ?? '' : ''\n const comment =\n cv && typeof cv === 'object' ? (cv as Record<string, string>)[mineralKey] ?? '' : ''\n if (value) next = writeCellInlineStr(next, cell(answerCol, rr), value)\n if (comment) next = writeCellInlineStr(next, cell(commentCol, rr), comment)\n }\n }\n return next\n }\n\n // Q1 mineral rows: q1Row+1 ... q2Row-1\n let next = declXml\n next = writeBlock(next, 'Q1', q1Row + 1, q2Row - 1, 'D', 'G')\n\n // Q2 mineral rows: q2Row+1 ... next header - 1 (or cap 10 rows)\n const q3Row = anchors.amrtQ3Row as number | null\n const end2 = q3Row ? q3Row - 1 : q2Row + 10\n next = writeBlock(next, 'Q2', q2Row + 1, end2, 'D', 'G')\n return next\n}\n\n// ---------------------------------------------------------------------------\n// 单元格写入辅助:根据是否为公式单元格选择覆盖策略\n// ---------------------------------------------------------------------------\n\n/** 智能写入:有公式时根据 allowOverwrite 决定是否覆盖,否则直接写入。 */\nfunction writeSmart(\n baseXml: string,\n cellRef: string,\n value: string,\n allowOverwriteFormula: boolean\n): string {\n if (!value) return baseXml\n if (isFormulaCell(baseXml, cellRef)) {\n return allowOverwriteFormula\n ? writeCellInlineStrOverwriteFormula(baseXml, cellRef, value)\n : baseXml\n }\n return writeCellInlineStr(baseXml, cellRef, value)\n}\n\n// ---------------------------------------------------------------------------\n// 各 sheet 写入函数\n// ---------------------------------------------------------------------------\n\n/** 写入 Smelter List sheet(每行根据是否有 smelterId 决定覆盖策略)。 */\nfunction writeSmelterListSheet(\n sheetXml: string,\n versionDef: TemplateVersionDef,\n rows: Array<Record<string, string | undefined>>,\n toMineralLabel: (key: string) => string\n): string {\n let next = sheetXml\n rows.forEach((row, index) => {\n const r = 5 + index\n const smelterId = (row.smelterId ?? '').trim()\n const hasId = Boolean(smelterId)\n const allow = !hasId\n\n // 优先\"方案 A\":写入 Smelter ID(A 列),让模板公式自动填充\n if (versionDef.smelterList.hasIdColumn && hasId) {\n next = writeCellInlineStr(next, cell('A', r), smelterId)\n }\n\n // 无 ID 时模拟用户输入:覆盖公式单元格\n const metal = row.metal?.trim()\n if (metal) next = writeSmart(next, cell('B', r), toMineralLabel(metal), allow)\n\n const lookup = row.smelterLookup?.trim()\n if (versionDef.smelterList.hasLookup && lookup) {\n next = writeSmart(next, cell('C', r), normalizeSmelterLookup(lookup), allow)\n }\n\n // 逐列写入(公式/输入共存列)\n const fieldColMap: Array<[string, string]> = [\n ['smelterName', 'D'], ['smelterCountry', 'E'], ['smelterIdentification', 'F'],\n ['sourceId', 'G'], ['smelterStreet', 'H'], ['smelterCity', 'I'],\n ['smelterState', 'J'], ['smelterContactName', 'K'], ['smelterContactEmail', 'L'],\n ['proposedNextSteps', 'M'], ['mineName', 'N'], ['mineCountry', 'O'],\n ['recycledScrap', 'P'], ['comments', 'Q'],\n ]\n for (const [key, col] of fieldColMap) {\n const v = row[key]?.trim()\n if (v) next = writeSmart(next, cell(col, r), v, allow)\n }\n\n // Combined 列(仅部分模板版本有)\n if (versionDef.smelterList.hasCombinedColumn) {\n const combinedMetal = row.combinedMetal?.trim()\n if (combinedMetal) next = writeSmart(next, cell('R', r), toMineralLabel(combinedMetal), allow)\n const combinedSmelter = row.combinedSmelter?.trim()\n if (combinedSmelter) next = writeSmart(next, cell('S', r), combinedSmelter, allow)\n }\n })\n return next\n}\n\n/** 写入 Mine List sheet。 */\nfunction writeMineListSheet(\n sheetXml: string,\n rows: Array<Record<string, string | undefined>>,\n toMineralLabel: (key: string) => string\n): string {\n const colByKey: Record<string, string> = {\n metal: 'A', smelterName: 'B', mineName: 'C', mineId: 'D',\n mineIdSource: 'E', mineCountry: 'F', mineStreet: 'G', mineCity: 'H',\n mineProvince: 'I', mineContactName: 'J', mineContactEmail: 'K',\n proposedNextSteps: 'L', comments: 'M',\n }\n return writeListSheetRows(sheetXml, 5, rows, colByKey, (k, v) => k === 'metal' ? toMineralLabel(v) : v)\n}\n\n/** 写入 Product List sheet。 */\nfunction writeProductListSheet(\n sheetXml: string,\n rows: Array<Record<string, string | undefined>>,\n hasRequesterColumns: boolean\n): string {\n const colByKey: Record<string, string> = hasRequesterColumns\n ? { productNumber: 'B', productName: 'C', requesterNumber: 'D', requesterName: 'E', comments: 'F' }\n : { productNumber: 'B', productName: 'C', comments: 'D' }\n return writeListSheetRows(sheetXml, 6, rows, colByKey)\n}\n\n/** 写入 Minerals Scope sheet(AMRT 专用)。 */\nfunction writeMineralsScopeSheet(\n sheetXml: string,\n snapshot: ReportSnapshotV1,\n toMineralLabel: (key: string) => string\n): string {\n const resolveMineral = (key: string) => {\n if (key.startsWith('other-')) {\n const index = Number(key.slice('other-'.length))\n return snapshot.data.customMinerals?.[index]?.trim() ?? ''\n }\n return toMineralLabel(key)\n }\n const rows = (snapshot.data.mineralsScope ?? []).map((r) => ({\n mineral: resolveMineral(r.mineral),\n reason: r.reason,\n }))\n return writeListSheetRows(sheetXml, 8, rows, { mineral: 'B', reason: 'C' })\n}\n\n// ---------------------------------------------------------------------------\n// 导出主入口\n// ---------------------------------------------------------------------------\n\n/** 将 snapshot 写入模板并导出 .xlsx(严格保留模板行为)。 */\nexport async function exportToExcel({ templateXlsx, snapshot }: ExportExcelInput): Promise<Blob> {\n const versionDef = getVersionDef(snapshot.templateType, snapshot.versionId)\n const anchors = getExcelDeclarationAnchors(snapshot.templateType, snapshot.versionId)\n const ctx = await loadXlsxContext(templateXlsx)\n\n const readDeclCell = (cellRef: string) =>\n readCellText(getSheetXml(ctx, 'Declaration'), cellRef, ctx.sharedStrings)\n\n const readDvOptions = (cellRef: string): string[] => {\n // 仅用于少数“内部值与模板 DV 文本不一致”的字段(当前:declarationScope)。\n // 从模板里读取该 cell 对应的 DV formula1 并解析 options。\n // 这里走最小实现:已知 CMRT/CRT/EMRT/AMRT 的 declarationScope 都使用 P/Q/R 同行。\n if (cellRef === 'D9') {\n const opts = [readDeclCell('P9'), readDeclCell('Q9'), readDeclCell('R9')].filter(\n (v): v is string => Boolean(v && v.trim())\n )\n return opts\n }\n return []\n }\n\n // Declaration\n let declXml = getSheetXml(ctx, 'Declaration')\n declXml = writeEmrtMineralSelection(declXml, versionDef, snapshot, ctx.sharedStrings)\n declXml = writeAmrtMineralSelection(declXml, versionDef, snapshot, ctx.sharedStrings)\n declXml = writeCompanyInfo(declXml, versionDef, snapshot, readDvOptions)\n declXml = writeDeclarationQuestionsAndCompany(\n declXml,\n versionDef,\n snapshot,\n anchors\n )\n declXml = writeAmrtQuestions(declXml, versionDef, snapshot, ctx.sharedStrings, anchors)\n setSheetXml(ctx, 'Declaration', declXml)\n\n const amrtOptionMap =\n versionDef.templateType === 'amrt'\n ? buildAmrtMineralOptionMap(declXml, ctx.sharedStrings, versionDef)\n : null\n const toMineralLabel = (key: string) =>\n amrtOptionMap?.get(key) ?? humanizeMineralKey(key) ?? key\n\n // ── Smelter List sheet ──\n if (snapshot.data.smelterList?.length) {\n const xml = getSheetXml(ctx, 'Smelter List')\n const patched = writeSmelterListSheet(xml, versionDef, snapshot.data.smelterList as Array<Record<string, string | undefined>>, toMineralLabel)\n setSheetXml(ctx, 'Smelter List', patched)\n }\n\n // ── Mine List sheet ──\n if (snapshot.data.mineList?.length && ctx.sheetPathByName.has('Mine List')) {\n const xml = getSheetXml(ctx, 'Mine List')\n const patched = writeMineListSheet(xml, snapshot.data.mineList as Array<Record<string, string | undefined>>, toMineralLabel)\n setSheetXml(ctx, 'Mine List', patched)\n }\n\n // ── Product List sheet ──\n if (snapshot.data.productList?.length) {\n const xml = getSheetXml(ctx, 'Product List')\n const patched = writeProductListSheet(xml, snapshot.data.productList as Array<Record<string, string | undefined>>, versionDef.productList.hasRequesterColumns)\n setSheetXml(ctx, 'Product List', patched)\n }\n\n // ── Minerals Scope sheet(AMRT)──\n if (snapshot.templateType === 'amrt' && snapshot.data.mineralsScope?.length && ctx.sheetPathByName.has('Minerals Scope')) {\n const xml = getSheetXml(ctx, 'Minerals Scope')\n const patched = writeMineralsScopeSheet(xml, snapshot, toMineralLabel)\n setSheetXml(ctx, 'Minerals Scope', patched)\n }\n\n setFullCalcOnLoad(ctx.files)\n removeCalcChain(ctx.files)\n\n const out = await zipXlsx(ctx.files)\n const outBuf = out.buffer.slice(out.byteOffset, out.byteOffset + out.byteLength) as ArrayBuffer\n return new Blob([outBuf], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n })\n}\n","/**\n * @file public/snapshot.ts\n * @description 对外稳定的数据快照(全量 JSON)契约。\n */\n\nimport type { Locale } from '@core/i18n'\nimport type { TemplateType } from '@core/registry/types'\nimport type { FormData } from '@core/schema'\nimport { z } from 'zod/v4'\n\nexport const REPORT_SNAPSHOT_SCHEMA_VERSION = 1 as const\n\nexport interface ReportSnapshotV1 {\n schemaVersion: typeof REPORT_SNAPSHOT_SCHEMA_VERSION\n templateType: TemplateType\n versionId: string\n locale?: Locale\n /** 全量表单数据(与 UI 内部状态一致)。 */\n data: FormData\n}\n\nconst templateTypeSchema = z.enum(['cmrt', 'emrt', 'crt', 'amrt'])\nconst localeSchema = z.enum(['en-US', 'zh-CN'])\n\nconst mineralsScopeRowSchema = z.object({ id: z.string(), mineral: z.string(), reason: z.string() })\n\nconst smelterRowSchema = z.object({\n id: z.string(),\n metal: z.string(),\n smelterLookup: z.string(),\n smelterName: z.string(),\n smelterCountry: z.string(),\n combinedMetal: z.string().optional(),\n combinedSmelter: z.string().optional(),\n smelterId: z.string().optional(),\n smelterIdentification: z.string().optional(),\n sourceId: z.string().optional(),\n smelterStreet: z.string().optional(),\n smelterCity: z.string().optional(),\n smelterState: z.string().optional(),\n smelterContactName: z.string().optional(),\n smelterContactEmail: z.string().optional(),\n proposedNextSteps: z.string().optional(),\n mineName: z.string().optional(),\n mineCountry: z.string().optional(),\n recycledScrap: z.string().optional(),\n comments: z.string().optional(),\n}).catchall(z.string().optional())\n\nconst mineRowSchema = z.object({\n id: z.string(),\n metal: z.string(),\n smelterName: z.string(),\n mineName: z.string(),\n mineCountry: z.string(),\n mineId: z.string().optional(),\n mineIdSource: z.string().optional(),\n mineStreet: z.string().optional(),\n mineCity: z.string().optional(),\n mineProvince: z.string(),\n mineDistrict: z.string(),\n mineContactName: z.string().optional(),\n mineContactEmail: z.string().optional(),\n proposedNextSteps: z.string().optional(),\n comments: z.string(),\n}).catchall(z.string().optional())\n\nconst productRowSchema = z.object({\n id: z.string(),\n productNumber: z.string(),\n productName: z.string(),\n requesterNumber: z.string().optional(),\n requesterName: z.string().optional(),\n comments: z.string(),\n}).catchall(z.string().optional())\n\n// 注意:这里做“结构级”校验(顶层 keys/类型),不做“按模板版本”细粒度校验。\nconst snapshotV1Schema: z.ZodType<ReportSnapshotV1> = z.object({\n schemaVersion: z.literal(REPORT_SNAPSHOT_SCHEMA_VERSION),\n templateType: templateTypeSchema,\n versionId: z.string().min(1),\n locale: localeSchema.optional(),\n data: z.object({\n companyInfo: z.record(z.string(), z.string()),\n selectedMinerals: z.array(z.string()),\n customMinerals: z.array(z.string()),\n questions: z.record(z.string(), z.union([z.string(), z.record(z.string(), z.string())])),\n questionComments: z.record(z.string(), z.union([z.string(), z.record(z.string(), z.string())])),\n companyQuestions: z.record(z.string(), z.union([z.string(), z.record(z.string(), z.string())])),\n mineralsScope: z.array(mineralsScopeRowSchema),\n smelterList: z.array(smelterRowSchema),\n mineList: z.array(mineRowSchema),\n productList: z.array(productRowSchema),\n }),\n})\n\nexport function parseSnapshot(input: unknown): ReportSnapshotV1 {\n return snapshotV1Schema.parse(input)\n}\n\nexport function stringifySnapshot(snapshot: ReportSnapshotV1): string {\n // 预留:未来若要 canonical JSON(稳定 key 顺序)可在这里实现。\n return JSON.stringify(snapshot)\n}\n","/**\n * @file CMReporting.tsx\n * @description 对外唯一推荐的开箱即用入口组件(UI + JSON/Excel 导出契约)。\n */\n\nimport type { Locale } from '@core/i18n'\nimport type { TemplateType } from '@core/registry/types'\nimport type { ReactNode } from 'react'\nimport { forwardRef, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef } from 'react'\n\nimport { CMReportingApp } from './CMReportingApp'\nimport { CMReportingProvider } from './providers/CMReportingProvider'\nimport type { CMReportingProviderProps } from './providers/CMReportingProvider'\nimport type { ExportExcelInput } from './public/excel'\nimport { exportToExcel } from './public/excel'\nimport type { CMReportingIntegrations } from './public/integrations'\nimport type { ReportSnapshotV1 } from './public/snapshot'\nimport { stringifySnapshot } from './public/snapshot'\nimport { useTemplateActions, useTemplateState } from './shell/store'\n\nexport interface CMReportingRef {\n getSnapshot: () => ReportSnapshotV1\n setSnapshot: (snapshot: ReportSnapshotV1) => void\n exportJson: () => string\n exportExcel: (input: Omit<ExportExcelInput, 'snapshot'>) => Promise<Blob>\n validate: () => Promise<boolean>\n}\n\nexport interface CMReportingProps {\n templateType: TemplateType\n versionId: string\n locale?: Locale\n onLocaleChange?: (locale: Locale) => void\n theme?: CMReportingProviderProps['theme']\n cssVariables?: CMReportingProviderProps['cssVariables']\n maxContentWidth?: number\n /** 宿主扩展点:外部选择/回写列表等。 */\n integrations?: CMReportingIntegrations\n /** 初始全量快照(用于“编辑旧报告”)。 */\n initialSnapshot?: ReportSnapshotV1\n /** 任意字段变化时回调全量快照(建议宿主自行节流/落库)。 */\n onSnapshotChange?: (snapshot: ReportSnapshotV1) => void\n /** 加载态内容(传给 Provider 的 Suspense fallback)。 */\n fallback?: ReactNode\n}\n\nfunction SnapshotController({\n templateType,\n versionId,\n locale,\n initialSnapshot,\n onSnapshotChange,\n controllerRef,\n}: {\n templateType: TemplateType\n versionId: string\n locale: Locale | undefined\n initialSnapshot?: ReportSnapshotV1\n onSnapshotChange?: (snapshot: ReportSnapshotV1) => void\n controllerRef: React.Ref<CMReportingRef>\n}) {\n const { meta, form, lists } = useTemplateState()\n const { setFormData, validateForm } = useTemplateActions()\n const importedSnapshotRef = useRef<ReportSnapshotV1 | null>(null)\n const hydratedRef = useRef<boolean>(!initialSnapshot)\n\n const snapshot = useMemo<ReportSnapshotV1>(() => {\n return {\n schemaVersion: 1,\n templateType: meta.templateType,\n versionId: meta.versionId,\n locale,\n data: {\n ...form,\n ...lists,\n },\n }\n }, [meta.templateType, meta.versionId, form, lists, locale])\n\n // 在首帧绘制前完成 “编辑旧报告” 的快照导入,避免宿主在 useLayoutEffect 里读取 ref 时拿到旧数据。\n useLayoutEffect(() => {\n if (!initialSnapshot) {\n hydratedRef.current = true\n return\n }\n if (importedSnapshotRef.current === initialSnapshot) return\n hydratedRef.current = false\n setFormData(initialSnapshot.data)\n importedSnapshotRef.current = initialSnapshot\n hydratedRef.current = true\n }, [initialSnapshot, setFormData])\n\n useEffect(() => {\n if (!hydratedRef.current) return\n onSnapshotChange?.(snapshot)\n }, [snapshot, onSnapshotChange])\n\n useImperativeHandle(\n controllerRef,\n (): CMReportingRef => ({\n getSnapshot: () => snapshot,\n setSnapshot: (next) => {\n if (next.templateType !== templateType || next.versionId !== versionId) {\n throw new Error('snapshot does not match templateType/versionId')\n }\n setFormData(next.data)\n },\n exportJson: () => stringifySnapshot(snapshot),\n exportExcel: async (input) => exportToExcel({ ...input, snapshot }),\n validate: () => validateForm(),\n }),\n [snapshot, setFormData, validateForm, templateType, versionId]\n )\n\n return null\n}\n\n/**\n * CMReporting:对外唯一推荐入口。\n * - UI:开箱即用渲染整套流程\n * - 数据:全量 JSON snapshot 导入/导出\n * - 导出:Excel(基于模板赋值后导出)\n */\nexport const CMReporting = forwardRef<CMReportingRef, CMReportingProps>(function CMReporting(\n {\n templateType,\n versionId,\n locale = 'en-US',\n onLocaleChange,\n theme,\n cssVariables,\n maxContentWidth,\n integrations,\n initialSnapshot,\n onSnapshotChange,\n fallback,\n },\n ref\n) {\n if (\n initialSnapshot &&\n (initialSnapshot.templateType !== templateType || initialSnapshot.versionId !== versionId)\n ) {\n throw new Error('initialSnapshot does not match templateType/versionId')\n }\n\n return (\n <CMReportingProvider\n locale={locale}\n onLocaleChange={onLocaleChange}\n theme={theme}\n cssVariables={cssVariables}\n fallback={fallback}\n >\n <CMReportingApp\n templateType={templateType}\n versionId={versionId}\n maxContentWidth={maxContentWidth}\n integrations={integrations}\n >\n <SnapshotController\n controllerRef={ref}\n templateType={templateType}\n versionId={versionId}\n locale={locale}\n initialSnapshot={initialSnapshot}\n onSnapshotChange={onSnapshotChange}\n />\n </CMReportingApp>\n </CMReportingProvider>\n )\n})\n","/**\n * @file public/useCMReporting.ts\n * @description 对外稳定 hook:获取/回填全量 JSON、触发校验、导出 JSON/Excel。\n */\n\nimport { useMemo } from 'react'\n\nimport { useTemplateActions, useTemplateState } from '../shell/store'\nimport { useT } from '../ui/i18n/useT'\n\nimport type { ExportExcelInput } from './excel'\nimport { exportToExcel } from './excel'\nimport type { ReportSnapshotV1 } from './snapshot'\nimport { stringifySnapshot } from './snapshot'\n\nexport interface CMReportingApi {\n snapshot: ReportSnapshotV1\n getSnapshot: () => ReportSnapshotV1\n setSnapshot: (snapshot: ReportSnapshotV1) => void\n exportJson: () => string\n exportExcel: (input: Omit<ExportExcelInput, 'snapshot'>) => Promise<Blob>\n validate: () => Promise<boolean>\n}\n\nexport function useCMReporting(): CMReportingApi {\n const { meta, form, lists } = useTemplateState()\n const { setFormData, validateForm } = useTemplateActions()\n const { locale } = useT()\n\n const snapshot = useMemo<ReportSnapshotV1>(() => {\n return {\n schemaVersion: 1,\n templateType: meta.templateType,\n versionId: meta.versionId,\n locale,\n data: { ...form, ...lists },\n }\n }, [meta.templateType, meta.versionId, form, lists, locale])\n\n return useMemo(\n () => ({\n snapshot,\n getSnapshot: () => snapshot,\n setSnapshot: (next) => {\n if (next.templateType !== meta.templateType || next.versionId !== meta.versionId) {\n throw new Error('snapshot does not match templateType/versionId')\n }\n setFormData(next.data)\n },\n exportJson: () => stringifySnapshot(snapshot),\n exportExcel: (input) => exportToExcel({ ...input, snapshot }),\n validate: () => validateForm(),\n }),\n [meta.templateType, meta.versionId, setFormData, snapshot, validateForm]\n )\n}\n","import { z } from 'zod/v4'\n\nexport const templateTypeSchema = z.enum(['cmrt', 'emrt', 'crt', 'amrt'])\n\nconst nullableString = z.string().nullable()\n\nconst cmtCompanySchema = z\n .object({\n companyName: nullableString.optional(),\n species: nullableString.optional(),\n rangeDescription: nullableString.optional(),\n identify: nullableString.optional(),\n authorization: nullableString.optional(),\n address: nullableString.optional(),\n contactName: nullableString.optional(),\n contactEmail: nullableString.optional(),\n contactPhone: nullableString.optional(),\n authorizerName: nullableString.optional(),\n authorizerJobTitle: nullableString.optional(),\n authorizerEmail: nullableString.optional(),\n authorizerPhone: nullableString.optional(),\n effectiveDate: z.union([z.string(), z.number()]).nullable().optional(),\n })\n .passthrough()\n\nconst cmtRangeQuestionSchema = z\n .object({\n type: z.number(),\n question: z.string(),\n answer: nullableString.optional(),\n remark: nullableString.optional(),\n })\n .passthrough()\n\nconst cmtCompanyQuestionSchema = z\n .object({\n question: z.string(),\n answer: nullableString.optional(),\n remark: nullableString.optional(),\n type: nullableString.optional(),\n })\n .passthrough()\n\nconst cmtSmelterSchema = z\n .object({\n id: z.union([z.string(), z.number()]).optional(),\n metal: nullableString.optional(),\n smelterLookUp: nullableString.optional(),\n standardSmelterName: nullableString.optional(),\n smelterNumber: nullableString.optional(),\n smelterName: nullableString.optional(),\n smelterCountry: nullableString.optional(),\n smelterProvince: nullableString.optional(),\n smelterCity: nullableString.optional(),\n smelterStreet: nullableString.optional(),\n smelterIdentification: nullableString.optional(),\n smelterContact: nullableString.optional(),\n smelterEmail: nullableString.optional(),\n suggest: nullableString.optional(),\n mineName: nullableString.optional(),\n mineCountry: nullableString.optional(),\n isRecycle: nullableString.optional(),\n remark: nullableString.optional(),\n smelterId: nullableString.optional(),\n sourceId: nullableString.optional(),\n })\n .passthrough()\n\nconst mineFacilitySchema = z\n .object({\n smelterId: nullableString.optional(),\n metal: nullableString.optional(),\n smelterName: nullableString.optional(),\n mineFacilityName: nullableString.optional(),\n mineIdentification: nullableString.optional(),\n mineIdentificationNumber: nullableString.optional(),\n mineFacilityCountry: nullableString.optional(),\n mineFacilityStreet: nullableString.optional(),\n mineFacilityCity: nullableString.optional(),\n mineFacilityProvince: nullableString.optional(),\n mineFacilityContact: nullableString.optional(),\n mineFacilityEmail: nullableString.optional(),\n proposedNextSteps: nullableString.optional(),\n comments: nullableString.optional(),\n })\n .passthrough()\n\nconst cmtPartSchema = z\n .object({\n id: z.union([z.string(), z.number()]).optional(),\n partId: z.union([z.string(), z.number()]).nullable().optional(),\n productNumber: nullableString.optional(),\n partNumber: nullableString.optional(),\n productName: nullableString.optional(),\n partName: nullableString.optional(),\n requesterNumber: nullableString.optional(),\n requestPartNumber: nullableString.optional(),\n requesterName: nullableString.optional(),\n requestPartName: nullableString.optional(),\n comments: nullableString.optional(),\n remark: nullableString.optional(),\n })\n .passthrough()\n\nconst amrtReasonSchema = z\n .object({\n id: z.union([z.string(), z.number()]).optional(),\n metal: nullableString.optional(),\n reason: nullableString.optional(),\n })\n .passthrough()\n\nexport const cirsGpmLegacyReportSchema = z\n .object({\n name: z.string().optional(),\n questionnaireType: z.number().optional(),\n type: z.string().optional(),\n version: z.string().optional(),\n\n cmtCompany: cmtCompanySchema.optional(),\n cmtRangeQuestions: z.array(cmtRangeQuestionSchema).optional(),\n cmtCompanyQuestions: z.array(cmtCompanyQuestionSchema).optional(),\n cmtSmelters: z.array(cmtSmelterSchema).optional(),\n minList: z.array(mineFacilitySchema).optional(),\n cmtParts: z.array(cmtPartSchema).optional(),\n amrtReasonList: z.array(amrtReasonSchema).optional(),\n })\n .passthrough()\n\nexport type CirsGpmLegacyReport = z.infer<typeof cirsGpmLegacyReportSchema>\n\nexport interface NullableFieldState {\n exists: boolean\n wasNull: boolean\n wasString: boolean\n wasNumber: boolean\n}\n\nexport interface CirsGpmLegacyRoundtripContext {\n templateType: z.infer<typeof templateTypeSchema>\n versionId: string\n original: CirsGpmLegacyReport\n\n companyFieldStates: Map<string, NullableFieldState>\n effectiveDate: {\n exists: boolean\n originalValue: string | number | null | undefined\n originalType: 'string' | 'number' | 'null' | 'undefined' | 'missing' | 'other'\n derivedAuthorizationDate: string\n }\n\n rangeQuestionIndexByKey: Map<string, number>\n rangeQuestionFieldStatesByIndex: Map<number, { answer: NullableFieldState; remark: NullableFieldState }>\n\n companyQuestionIndexByKey: Map<string, number>\n companyQuestionFieldStatesByIndex: Map<number, { answer: NullableFieldState; remark: NullableFieldState }>\n\n mineralLabelByKey: Map<string, string>\n\n smelterLegacyIndexByInternalId: Map<string, number>\n smelterFieldStatesByIndex: Map<number, Map<string, NullableFieldState>>\n /** 当 legacy.smelterName 为 null 时,内部为满足必填使用的 fallback(如 standardSmelterName)。 */\n smelterNameFallbackByIndex: Map<number, string>\n\n mineLegacyIndexByInternalId: Map<string, number>\n mineFieldStatesByIndex: Map<number, Map<string, NullableFieldState>>\n\n productLegacyIndexByInternalId: Map<string, number>\n productFieldStatesByIndex: Map<number, Map<string, NullableFieldState>>\n productLegacyKeyByInternalKeyByIndex: Map<number, Map<'productNumber' | 'productName' | 'requesterNumber' | 'requesterName' | 'comments', string>>\n\n amrtReasonIndexByInternalId: Map<string, number>\n amrtReasonFieldStatesByIndex: Map<number, Map<string, NullableFieldState>>\n}\n","import { getVersionDef } from '@core/registry'\nimport type { TemplateType } from '@core/registry/types'\n\nimport { cirsGpmLegacyReportSchema, templateTypeSchema } from './types'\nimport type { CirsGpmLegacyReport } from './types'\n\nexport interface ParsedCirsGpmLegacyReport {\n legacy: CirsGpmLegacyReport\n templateType: TemplateType\n versionId: string\n}\n\nconst VERSION_RE = /RMI_(CMRT|EMRT|CRT|AMRT)_([0-9.]+)/i\n\nfunction normalizeTemplateType(value: string): TemplateType | null {\n const lower = value.toLowerCase()\n const parsed = templateTypeSchema.safeParse(lower)\n return parsed.success ? (parsed.data as TemplateType) : null\n}\n\nfunction parseFromNameOrVersion(value: string): { templateType: TemplateType; versionId: string } | null {\n const match = value.match(VERSION_RE)\n if (!match) return null\n const tt = normalizeTemplateType(match[1]!)\n if (!tt) return null\n return { templateType: tt, versionId: match[2]! }\n}\n\nexport function parseCirsGpmLegacyReport(input: unknown): ParsedCirsGpmLegacyReport {\n const legacy = cirsGpmLegacyReportSchema.parse(input)\n\n const fromType = legacy.type ? normalizeTemplateType(legacy.type) : null\n const fromName = legacy.name ? parseFromNameOrVersion(legacy.name) : null\n const fromVersion = legacy.version ? parseFromNameOrVersion(legacy.version) : null\n\n const inferred = fromName ?? fromVersion\n const templateType = fromType ?? inferred?.templateType\n const versionId = inferred?.versionId\n\n if (!templateType || !versionId) {\n throw new Error('cannot infer templateType/versionId from legacy report')\n }\n if (fromType && inferred && fromType !== inferred.templateType) {\n throw new Error('legacy report templateType mismatch between type and name/version')\n }\n\n try {\n getVersionDef(templateType, versionId)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n throw new Error(`unsupported template/version: ${templateType}@${versionId} (${message})`)\n }\n\n return { legacy, templateType, versionId }\n}\n","/**\n * @file adapters/cirsGpmLegacyAdapter/adapterUtils.ts\n * @description CIRS GPM legacy adapter 共享工具函数。\n *\n * 从 toInternal.ts / toExternal.ts 中提取的重复逻辑:\n * - normalizeLegacyYesNoUnknown:Yes/No/Unknown 格式标准化\n * - writeNullableString:按字段原始状态决定写回值(保留 null / '' / 不存在的区分)\n * - writeLegacyField:对单个 legacy 字段执行 writeNullableString 并处理 delete\n */\n\nimport type { NullableFieldState } from './types'\n\n// ---------------------------------------------------------------------------\n// Yes/No/Unknown 标准化\n// ---------------------------------------------------------------------------\n\n/**\n * 将 legacy 格式的 Yes/No/Unknown 值标准化为统一内部表示。\n *\n * 输入举例:'1' / 'yes' / 'Yes' / 'y' / 'true' → 'Yes'\n * '0' / 'no' / 'No' / 'n' / 'false' → 'No'\n * 'unknown' / 'unk' → 'Unknown'\n */\nexport function normalizeLegacyYesNoUnknown(value: unknown): string {\n if (value === null || value === undefined) return ''\n const raw = String(value).trim()\n if (!raw) return ''\n const lower = raw.toLowerCase()\n if (lower === '1' || lower === 'yes' || lower === 'y' || lower === 'true') return 'Yes'\n if (lower === '0' || lower === 'no' || lower === 'n' || lower === 'false') return 'No'\n if (lower === 'unknown' || lower === 'unk') return 'Unknown'\n return raw\n}\n\n// ---------------------------------------------------------------------------\n// 可空字段写回\n// ---------------------------------------------------------------------------\n\n/**\n * 根据原始字段状态(是否存在、是否为 null、是否为 string)决定写回值。\n *\n * 规则:\n * - 新值非空 → 直接返回新值\n * - 新值为空:\n * - 原本不存在 → undefined(不写入)\n * - 原本为 null → null\n * - 其它 → ''\n */\nexport function writeNullableString(state: NullableFieldState, next: string): unknown {\n const trimmed = next ?? ''\n if (!trimmed) {\n if (!state.exists) return undefined\n if (state.wasNull) return null\n return ''\n }\n return trimmed\n}\n\n/**\n * 对单个 legacy 字段执行写回操作(合并 state 查询 + writeNullableString + delete)。\n *\n * 该函数消除了 patchSmelters / patchMines / patchProducts / patchAmrtReasons 中\n * 重复 4 次的 `const write = (key, value) => {...}` 闭包。\n */\nexport function writeLegacyField(\n item: Record<string, unknown>,\n states: Map<string, NullableFieldState>,\n key: string,\n value: string,\n) {\n const state = states.get(key) ?? {\n exists: key in item,\n wasNull: item[key] === null,\n wasString: typeof item[key] === 'string',\n wasNumber: typeof item[key] === 'number',\n }\n const written = writeNullableString(state, value)\n if (written === undefined) {\n if (state.exists) delete item[key]\n return\n }\n item[key] = written\n}\n","import { getVersionDef } from '@core/registry'\nimport type { TemplateType, TemplateVersionDef } from '@core/registry/types'\n\nexport interface CirsGpmLegacyPlan {\n templateType: TemplateType\n versionId: string\n versionDef: TemplateVersionDef\n questionKeyByType: Map<number, string>\n mineralKeyByLabel: Map<string, string>\n preferredMineralLabelByKey: Map<string, string>\n legacyCompanyKeyByInternalKey: Map<string, string>\n}\n\nconst cache = new Map<string, CirsGpmLegacyPlan>()\n\nfunction cacheKey(templateType: TemplateType, versionId: string): string {\n return `${templateType}@${versionId}`\n}\n\nfunction normalize(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '')\n}\n\nfunction splitCamel(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .trim()\n}\n\nfunction toTitleCase(value: string): string {\n return value\n .split(/\\s+/)\n .filter(Boolean)\n .map((part) => part[0]!.toUpperCase() + part.slice(1))\n .join(' ')\n}\n\nfunction mineralCandidates(mineralKey: string): string[] {\n const spaced = splitCamel(mineralKey)\n return [\n mineralKey,\n spaced,\n toTitleCase(spaced),\n ]\n}\n\nconst MINERAL_LABEL_OVERRIDES: Record<string, string> = {\n rareEarthElements: 'Rare Earth Elements',\n sodaAsh: 'Soda Ash',\n}\n\nfunction buildMineralMaps(versionDef: TemplateVersionDef) {\n const mineralKeyByLabel = new Map<string, string>()\n const preferredMineralLabelByKey = new Map<string, string>()\n\n for (const mineral of versionDef.mineralScope.minerals) {\n const key = mineral.key\n const preferred = MINERAL_LABEL_OVERRIDES[key] ?? toTitleCase(splitCamel(key))\n preferredMineralLabelByKey.set(key, preferred)\n\n for (const c of mineralCandidates(key)) {\n mineralKeyByLabel.set(normalize(c), key)\n }\n mineralKeyByLabel.set(normalize(preferred), key)\n }\n\n return { mineralKeyByLabel, preferredMineralLabelByKey }\n}\n\nfunction buildQuestionKeyByType(versionDef: TemplateVersionDef) {\n const questionKeyByType = new Map<number, string>()\n for (const question of versionDef.questions) {\n const match = /^Q(\\d+)$/.exec(question.key)\n if (!match) continue\n const type = Number(match[1]!)\n if (!Number.isFinite(type)) continue\n questionKeyByType.set(type, question.key)\n }\n return questionKeyByType\n}\n\nfunction buildCompanyKeyMap(): Map<string, string> {\n return new Map<string, string>([\n ['companyName', 'companyName'],\n ['declarationScope', 'species'],\n ['scopeDescription', 'rangeDescription'],\n ['companyId', 'identify'],\n ['companyAuthId', 'authorization'],\n ['address', 'address'],\n ['contactName', 'contactName'],\n ['contactEmail', 'contactEmail'],\n ['contactPhone', 'contactPhone'],\n ['authorizerName', 'authorizerName'],\n ['authorizerTitle', 'authorizerJobTitle'],\n ['authorizerEmail', 'authorizerEmail'],\n ['authorizerPhone', 'authorizerPhone'],\n ['authorizationDate', 'effectiveDate'],\n ])\n}\n\nexport function getCirsGpmLegacyPlan(templateType: TemplateType, versionId: string): CirsGpmLegacyPlan {\n const key = cacheKey(templateType, versionId)\n const cached = cache.get(key)\n if (cached) return cached\n\n const versionDef = getVersionDef(templateType, versionId)\n const questionKeyByType = buildQuestionKeyByType(versionDef)\n const { mineralKeyByLabel, preferredMineralLabelByKey } = buildMineralMaps(versionDef)\n const legacyCompanyKeyByInternalKey = buildCompanyKeyMap()\n\n const plan: CirsGpmLegacyPlan = {\n templateType,\n versionId,\n versionDef,\n questionKeyByType,\n mineralKeyByLabel,\n preferredMineralLabelByKey,\n legacyCompanyKeyByInternalKey,\n }\n cache.set(key, plan)\n return plan\n}\n\nexport function normalizeMineralLabel(value: string): string {\n return normalize(value)\n}\n","/**\n * @file adapters/cirsGpmLegacyAdapter/toExternal.ts\n * @description 内部 Snapshot → CIRS GPM Legacy 格式转换。\n *\n * 核心流程:\n * 1. 深拷贝原始 legacy 对象(保留未映射字段)\n * 2. 按模块 patch:companyInfo → rangeQuestions → companyQuestions →\n * smelters → mines → products → amrtReasons\n * 3. 每个 patch 函数使用 writeLegacyField 还原字段的原始 null/string/missing 状态\n * 4. 对 perMineral 数据:只写入活跃矿种,裁剪已取消的矿种行\n */\n\nimport type { TemplateVersionDef } from '@core/registry/types'\nimport type { FormData } from '@core/schema'\nimport { getActiveMineralKeys, parseOtherMineralKey } from '@core/template/minerals'\nimport { deepCloneJson } from '@core/template/strings'\n\nimport type { ReportSnapshotV1 } from '../../snapshot'\n\nimport { normalizeLegacyYesNoUnknown, writeLegacyField, writeNullableString } from './adapterUtils'\nimport { getCirsGpmLegacyPlan, normalizeMineralLabel } from './planCache'\nimport type { CirsGpmLegacyReport, CirsGpmLegacyRoundtripContext } from './types'\n\nfunction isEmpty(value: unknown): boolean {\n return value === '' || value === null || value === undefined\n}\n\nfunction dateStringToEpochMsUtc(value: string): number | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value)\n if (!match) return null\n const y = Number(match[1]!)\n const m = Number(match[2]!)\n const d = Number(match[3]!)\n if (!Number.isFinite(y) || !Number.isFinite(m) || !Number.isFinite(d)) return null\n return Date.UTC(y, m - 1, d, 0, 0, 0, 0)\n}\n\n// writeNullableString 已提取到 adapterUtils.ts\n\nfunction getString(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction getAnyString(value: unknown): string {\n if (value === null || value === undefined) return ''\n const raw = typeof value === 'string' ? value : String(value)\n return raw.trim()\n}\n\n// normalizeLegacyYesNoUnknown 已提取到 adapterUtils.ts\n\nfunction toLegacyYesNoUnknown(value: string): string {\n const raw = getString(value).trim()\n if (!raw) return ''\n const lower = raw.toLowerCase()\n if (lower === 'yes' || lower === 'y' || lower === 'true') return '1'\n if (lower === 'no' || lower === 'n' || lower === 'false') return '0'\n if (lower === 'unknown') return 'Unknown'\n return raw\n}\n\nfunction resolveMineralLabel(\n plan: ReturnType<typeof getCirsGpmLegacyPlan>,\n ctx: CirsGpmLegacyRoundtripContext,\n value: string,\n customMinerals: string[]\n): string {\n const raw = getString(value)\n if (!raw) return ''\n const otherIndex = parseOtherMineralKey(raw)\n if (otherIndex !== null) {\n const label = customMinerals[otherIndex]?.trim()\n if (label) return label\n }\n const direct = ctx.mineralLabelByKey.get(raw)\n if (direct) return direct\n const key = plan.mineralKeyByLabel.get(normalizeMineralLabel(raw))\n if (!key) return raw\n return ctx.mineralLabelByKey.get(key) ?? plan.preferredMineralLabelByKey.get(key) ?? raw\n}\n\nfunction getNestedString(\n value: Record<string, Record<string, string> | string>,\n key: string,\n subKey: string | null\n): string {\n const v = value[key]\n if (subKey) {\n if (typeof v === 'object' && v) return typeof (v as Record<string, unknown>)[subKey] === 'string' ? (v as Record<string, string>)[subKey] : ''\n return ''\n }\n return typeof v === 'string' ? v : ''\n}\n\nfunction epochForWrite(ctx: CirsGpmLegacyRoundtripContext, authorizationDate: string): string | number | null | undefined {\n const originalValue = ctx.effectiveDate.originalValue\n const originalType = ctx.effectiveDate.originalType\n\n if (authorizationDate === ctx.effectiveDate.derivedAuthorizationDate) {\n return originalValue\n }\n\n if (!authorizationDate) {\n if (originalType === 'missing') return undefined\n if (originalType === 'null') return null\n if (originalType === 'number') return 0\n return ''\n }\n\n const ms = dateStringToEpochMsUtc(authorizationDate)\n if (ms === null) return originalValue\n if (originalType === 'number') return ms\n return String(ms)\n}\n\nfunction patchCompanyInfo(out: CirsGpmLegacyReport, data: FormData, ctx: CirsGpmLegacyRoundtripContext, versionDef: TemplateVersionDef) {\n const companyInfo = data.companyInfo ?? {}\n const companyObj = (out.cmtCompany ?? {}) as Record<string, unknown>\n\n const plan = getCirsGpmLegacyPlan(ctx.templateType, ctx.versionId)\n for (const field of versionDef.companyInfoFields) {\n const legacyKey = plan.legacyCompanyKeyByInternalKey.get(field.key) ?? field.key\n if (legacyKey === 'effectiveDate') continue\n\n const nextValue = companyInfo[field.key] ?? ''\n const state = ctx.companyFieldStates.get(legacyKey) ?? { exists: false, wasNull: false, wasString: false, wasNumber: false }\n const written = writeNullableString(state, nextValue)\n if (written === undefined) {\n if (state.exists) {\n delete companyObj[legacyKey]\n }\n continue\n }\n companyObj[legacyKey] = written\n }\n\n // effectiveDate\n const authDate = companyInfo.authorizationDate ?? ''\n const nextEffective = epochForWrite(ctx, authDate)\n if (nextEffective === undefined) {\n if (ctx.effectiveDate.originalType !== 'missing') delete companyObj.effectiveDate\n } else {\n companyObj.effectiveDate = nextEffective as unknown\n }\n\n if (!out.cmtCompany && (Object.keys(companyObj).length > 0 || ctx.companyFieldStates.size > 0 || ctx.effectiveDate.originalType !== 'missing')) {\n out.cmtCompany = companyObj as unknown as CirsGpmLegacyReport['cmtCompany']\n } else if (out.cmtCompany) {\n out.cmtCompany = companyObj as unknown as CirsGpmLegacyReport['cmtCompany']\n }\n}\n\nfunction patchRangeQuestions(out: CirsGpmLegacyReport, data: FormData, ctx: CirsGpmLegacyRoundtripContext, versionDef: TemplateVersionDef) {\n const plan = getCirsGpmLegacyPlan(ctx.templateType, ctx.versionId)\n const range = (out.cmtRangeQuestions ?? []) as Array<Record<string, unknown>>\n const existing = out.cmtRangeQuestions ? range : null\n\n const questionsByKey = new Map(versionDef.questions.map((q) => [q.key, q]))\n const activeMineralKeys = getActiveMineralKeys(\n versionDef,\n data.selectedMinerals ?? [],\n data.customMinerals ?? []\n )\n const activeMineralKeySet = new Set(activeMineralKeys)\n\n const labelToKeyFromCtx = new Map<string, string>()\n for (const [key, label] of ctx.mineralLabelByKey.entries()) {\n const norm = normalizeMineralLabel(label)\n if (!norm || labelToKeyFromCtx.has(norm)) continue\n labelToKeyFromCtx.set(norm, key)\n }\n\n const labelForMineralKey = (mineralKey: string): string => {\n const otherIndex = parseOtherMineralKey(mineralKey)\n if (otherIndex !== null) {\n const label = data.customMinerals?.[otherIndex]?.trim()\n if (label) return label\n }\n const fromCtx = ctx.mineralLabelByKey.get(mineralKey)\n if (fromCtx) return fromCtx\n const preferred = plan.preferredMineralLabelByKey.get(mineralKey)\n if (preferred) return preferred\n return mineralKey\n }\n\n const ensure = () => {\n if (!out.cmtRangeQuestions) out.cmtRangeQuestions = [] as unknown as NonNullable<CirsGpmLegacyReport['cmtRangeQuestions']>\n return out.cmtRangeQuestions as unknown as Array<Record<string, unknown>>\n }\n\n for (const [type, qKey] of plan.questionKeyByType.entries()) {\n const def = questionsByKey.get(qKey)\n if (!def) continue\n\n if (def.perMineral) {\n for (const mineralKey of activeMineralKeys) {\n const label = labelForMineralKey(mineralKey)\n const originalLabelForIndex = ctx.mineralLabelByKey.get(mineralKey) ?? label\n const idxKey = `${type}|${originalLabelForIndex}`\n const idx = ctx.rangeQuestionIndexByKey.get(idxKey)\n\n const nextAnswer = getNestedString(data.questions, qKey, mineralKey)\n const nextRemark = getNestedString(data.questionComments, qKey, mineralKey)\n\n if (idx === undefined) {\n if (isEmpty(nextAnswer) && isEmpty(nextRemark)) continue\n const target = ensure()\n target.push({ type, question: label, answer: nextAnswer ?? '', remark: nextRemark ?? '' })\n continue\n }\n\n const item = range[idx]!\n const state = ctx.rangeQuestionFieldStatesByIndex.get(idx)\n const answerState = state?.answer ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n const remarkState = state?.remark ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n\n const writtenAnswer = writeNullableString(answerState, nextAnswer)\n const writtenRemark = writeNullableString(remarkState, nextRemark)\n if (writtenAnswer !== undefined) item.answer = writtenAnswer\n if (writtenRemark !== undefined) item.remark = writtenRemark\n item.type = type\n item.question = label\n }\n continue\n }\n\n const idxKeyAny = Array.from(ctx.rangeQuestionIndexByKey.entries()).find(([k]) => k.startsWith(`${type}|`))\n const idx = idxKeyAny ? idxKeyAny[1] : undefined\n const nextAnswer = getString(data.questions[qKey])\n const nextRemark = getString(data.questionComments[qKey])\n if (idx === undefined) {\n if (isEmpty(nextAnswer) && isEmpty(nextRemark)) continue\n const target = ensure()\n const firstMineralKey = versionDef.mineralScope.minerals[0]?.key ?? ''\n const label = firstMineralKey\n ? ctx.mineralLabelByKey.get(firstMineralKey) ?? plan.preferredMineralLabelByKey.get(firstMineralKey) ?? firstMineralKey\n : ''\n target.push({ type, question: label, answer: nextAnswer, remark: nextRemark })\n continue\n }\n const item = range[idx]!\n const state = ctx.rangeQuestionFieldStatesByIndex.get(idx)\n const answerState = state?.answer ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n const remarkState = state?.remark ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n const writtenAnswer = writeNullableString(answerState, nextAnswer)\n const writtenRemark = writeNullableString(remarkState, nextRemark)\n if (writtenAnswer !== undefined) item.answer = writtenAnswer\n if (writtenRemark !== undefined) item.remark = writtenRemark\n item.type = type\n }\n\n if (!existing && out.cmtRangeQuestions && out.cmtRangeQuestions.length === 0) {\n delete out.cmtRangeQuestions\n }\n\n // Prune perMineral legacy rows that no longer belong to active minerals\n if (out.cmtRangeQuestions) {\n const pruned = (out.cmtRangeQuestions as unknown as Array<Record<string, unknown>>).filter((item) => {\n const type = typeof item.type === 'number' ? item.type : Number(item.type)\n const qKey = Number.isFinite(type) ? plan.questionKeyByType.get(type) : undefined\n if (!qKey) return true\n const def = questionsByKey.get(qKey)\n if (!def?.perMineral) return true\n const q = typeof item.question === 'string' ? item.question : String(item.question ?? '')\n const norm = normalizeMineralLabel(q)\n const mineralKey = plan.mineralKeyByLabel.get(norm) ?? labelToKeyFromCtx.get(norm)\n if (!mineralKey) return true\n return activeMineralKeySet.has(mineralKey)\n })\n out.cmtRangeQuestions = pruned as unknown as CirsGpmLegacyReport['cmtRangeQuestions']\n\n if (!existing && pruned.length === 0) {\n delete out.cmtRangeQuestions\n }\n }\n}\n\nfunction patchCompanyQuestions(out: CirsGpmLegacyReport, data: FormData, ctx: CirsGpmLegacyRoundtripContext, versionDef: TemplateVersionDef) {\n const plan = getCirsGpmLegacyPlan(ctx.templateType, ctx.versionId)\n const list = (out.cmtCompanyQuestions ?? []) as Array<Record<string, unknown>>\n const existing = out.cmtCompanyQuestions ? list : null\n\n const activeMineralKeys = getActiveMineralKeys(\n versionDef,\n data.selectedMinerals ?? [],\n data.customMinerals ?? []\n )\n const activeMineralKeySet = new Set(activeMineralKeys)\n\n const labelToKeyFromCtx = new Map<string, string>()\n for (const [key, label] of ctx.mineralLabelByKey.entries()) {\n const norm = normalizeMineralLabel(label)\n if (!norm || labelToKeyFromCtx.has(norm)) continue\n labelToKeyFromCtx.set(norm, key)\n }\n\n const labelForMineralKey = (mineralKey: string): string => {\n const otherIndex = parseOtherMineralKey(mineralKey)\n if (otherIndex !== null) {\n const label = data.customMinerals?.[otherIndex]?.trim()\n if (label) return label\n }\n const fromCtx = ctx.mineralLabelByKey.get(mineralKey)\n if (fromCtx) return fromCtx\n const preferred = plan.preferredMineralLabelByKey.get(mineralKey)\n if (preferred) return preferred\n return mineralKey\n }\n\n const ensure = () => {\n if (!out.cmtCompanyQuestions) out.cmtCompanyQuestions = [] as unknown as NonNullable<CirsGpmLegacyReport['cmtCompanyQuestions']>\n return out.cmtCompanyQuestions as unknown as Array<Record<string, unknown>>\n }\n\n for (const def of versionDef.companyQuestions) {\n if (def.perMineral) {\n for (const mineralKey of activeMineralKeys) {\n const typeLabel = labelForMineralKey(mineralKey)\n const originalTypeLabelForIndex = ctx.mineralLabelByKey.get(mineralKey) ?? typeLabel\n const idxKey = `${def.key}|${originalTypeLabelForIndex}`\n const idx = ctx.companyQuestionIndexByKey.get(idxKey)\n\n const nextAnswer = getNestedString(data.companyQuestions, def.key, mineralKey)\n const nextRemark = getNestedString(data.companyQuestions, `${def.key}_comment`, mineralKey)\n\n if (idx === undefined) {\n if (isEmpty(nextAnswer) && isEmpty(nextRemark)) continue\n const target = ensure()\n target.push({ question: def.key, type: typeLabel, answer: nextAnswer ?? '', remark: nextRemark ?? '' })\n continue\n }\n\n const item = list[idx]!\n const state = ctx.companyQuestionFieldStatesByIndex.get(idx)\n const answerState = state?.answer ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n const remarkState = state?.remark ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n const writtenAnswer = writeNullableString(answerState, nextAnswer)\n const writtenRemark = writeNullableString(remarkState, nextRemark)\n if (writtenAnswer !== undefined) item.answer = writtenAnswer\n if (writtenRemark !== undefined) item.remark = writtenRemark\n item.question = def.key\n item.type = typeLabel\n }\n continue\n }\n\n const idxKey = `${def.key}|`\n const idx = ctx.companyQuestionIndexByKey.get(idxKey)\n const nextAnswer = getString(data.companyQuestions[def.key])\n const nextRemark = getString(data.companyQuestions[`${def.key}_comment`])\n if (idx === undefined) {\n if (isEmpty(nextAnswer) && isEmpty(nextRemark)) continue\n const target = ensure()\n target.push({ question: def.key, type: null, answer: nextAnswer, remark: nextRemark })\n continue\n }\n const item = list[idx]!\n const state = ctx.companyQuestionFieldStatesByIndex.get(idx)\n const answerState = state?.answer ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n const remarkState = state?.remark ?? { exists: true, wasNull: false, wasString: true, wasNumber: false }\n const writtenAnswer = writeNullableString(answerState, nextAnswer)\n const writtenRemark = writeNullableString(remarkState, nextRemark)\n if (writtenAnswer !== undefined) item.answer = writtenAnswer\n if (writtenRemark !== undefined) item.remark = writtenRemark\n item.question = def.key\n if ('type' in item) item.type = null\n }\n\n if (!existing && out.cmtCompanyQuestions && out.cmtCompanyQuestions.length === 0) {\n delete out.cmtCompanyQuestions\n }\n\n // Prune perMineral legacy rows that no longer belong to active minerals\n if (out.cmtCompanyQuestions) {\n const pruned = (out.cmtCompanyQuestions as unknown as Array<Record<string, unknown>>).filter((item) => {\n const questionKey = typeof item.question === 'string' ? item.question : String(item.question ?? '')\n const def = versionDef.companyQuestions.find((q) => q.key === questionKey)\n if (!def?.perMineral) return true\n const typeLabel = typeof item.type === 'string' ? item.type : item.type == null ? '' : String(item.type)\n const norm = normalizeMineralLabel(typeLabel)\n const mineralKey = plan.mineralKeyByLabel.get(norm) ?? labelToKeyFromCtx.get(norm)\n if (!mineralKey) return true\n return activeMineralKeySet.has(mineralKey)\n })\n out.cmtCompanyQuestions = pruned as unknown as CirsGpmLegacyReport['cmtCompanyQuestions']\n\n if (!existing && pruned.length === 0) {\n delete out.cmtCompanyQuestions\n }\n }\n}\n\nfunction patchSmelters(out: CirsGpmLegacyReport, data: FormData, ctx: CirsGpmLegacyRoundtripContext, plan: ReturnType<typeof getCirsGpmLegacyPlan>) {\n const original = (out.cmtSmelters ?? []) as Array<Record<string, unknown>>\n const next: Array<Record<string, unknown>> = []\n\n for (const row of data.smelterList ?? []) {\n const legacyIndex = ctx.smelterLegacyIndexByInternalId.get(row.id)\n if (legacyIndex !== undefined) {\n const item = deepCloneJson(original[legacyIndex] ?? {}) as Record<string, unknown>\n const states = ctx.smelterFieldStatesByIndex.get(legacyIndex) ?? new Map()\n /** 简写:使用共享 writeLegacyField 写回单字段。 */\n const write = (key: string, value: string) => writeLegacyField(item, states, key, value)\n\n const originalItem = original[legacyIndex] ?? {}\n const originalLookup = getAnyString((originalItem as Record<string, unknown>).smelterLookUp)\n const originalName = getAnyString((originalItem as Record<string, unknown>).smelterName)\n const originalStandardName = getAnyString((originalItem as Record<string, unknown>).standardSmelterName)\n const derivedLookup = originalLookup || originalName || originalStandardName\n const derivedName = originalStandardName || originalName\n const originalNumber = getAnyString((originalItem as Record<string, unknown>).smelterNumber)\n const originalLegacyId = getAnyString((originalItem as Record<string, unknown>).smelterId)\n const originalIdentification = getAnyString((originalItem as Record<string, unknown>).smelterIdentification)\n const derivedId = originalNumber || originalLegacyId\n const derivedIdentification = originalNumber || originalLegacyId\n const derivedSourceId = originalIdentification\n const derivedRecycled = normalizeLegacyYesNoUnknown((originalItem as Record<string, unknown>).isRecycle)\n\n write('metal', resolveMineralLabel(plan, ctx, row.metal, data.customMinerals ?? []))\n if ((row.smelterLookup ?? '') !== derivedLookup) {\n write('smelterLookUp', row.smelterLookup)\n }\n if ((row.smelterName ?? '') !== derivedName) {\n if (originalStandardName) {\n write('standardSmelterName', row.smelterName)\n } else {\n // smelterName can be null in legacy\n const originalNameState = states.get('smelterName')\n const fallback = ctx.smelterNameFallbackByIndex.get(legacyIndex) ?? null\n if (originalNameState?.wasNull && fallback && row.smelterName === fallback) {\n item.smelterName = null\n } else {\n write('smelterName', row.smelterName)\n }\n }\n }\n write('smelterCountry', row.smelterCountry)\n const rowSmelterId = row.smelterId ?? ''\n const rowSmelterIdentification = row.smelterIdentification ?? ''\n const idChanged = rowSmelterId !== derivedId\n const identificationChanged = rowSmelterIdentification !== derivedIdentification\n if (idChanged || identificationChanged) {\n const nextNumber = idChanged ? rowSmelterId : rowSmelterIdentification\n const idTargetField = originalNumber ? 'smelterNumber' : (originalLegacyId ? 'smelterId' : 'smelterNumber')\n write(idTargetField, nextNumber)\n }\n if ((row.sourceId ?? '') !== derivedSourceId) {\n write('smelterIdentification', row.sourceId ?? '')\n }\n write('smelterStreet', row.smelterStreet ?? '')\n write('smelterCity', row.smelterCity ?? '')\n write('smelterProvince', row.smelterState ?? '')\n write('smelterContact', row.smelterContactName ?? '')\n write('smelterEmail', row.smelterContactEmail ?? '')\n write('suggest', row.proposedNextSteps ?? '')\n write('mineName', row.mineName ?? '')\n write('mineCountry', row.mineCountry ?? '')\n if ((row.recycledScrap ?? '') !== derivedRecycled) {\n write('isRecycle', toLegacyYesNoUnknown(row.recycledScrap ?? ''))\n }\n write('remark', row.comments ?? '')\n\n item.id = item.id ?? row.id\n next.push(item)\n continue\n }\n\n // New row\n const created: Record<string, unknown> = { id: row.id }\n const metalLabel = resolveMineralLabel(plan, ctx, row.metal, data.customMinerals ?? [])\n if (!isEmpty(metalLabel)) created.metal = metalLabel\n if (!isEmpty(row.smelterLookup)) created.smelterLookUp = row.smelterLookup\n if (!isEmpty(row.smelterName)) {\n created.smelterName = row.smelterName\n if (!isEmpty(row.smelterLookup)) {\n created.standardSmelterName = row.smelterName\n }\n }\n if (!isEmpty(row.smelterCountry)) created.smelterCountry = row.smelterCountry\n const nextNumber = row.smelterIdentification || row.smelterId\n if (!isEmpty(nextNumber)) created.smelterNumber = nextNumber\n if (!isEmpty(row.sourceId)) created.smelterIdentification = row.sourceId\n const legacyRecycled = toLegacyYesNoUnknown(row.recycledScrap ?? '')\n if (!isEmpty(legacyRecycled)) created.isRecycle = legacyRecycled\n if (!isEmpty(row.comments)) created.remark = row.comments\n next.push(created)\n }\n\n if (out.cmtSmelters || next.length > 0) {\n out.cmtSmelters = next as unknown as CirsGpmLegacyReport['cmtSmelters']\n }\n}\n\nfunction patchMines(out: CirsGpmLegacyReport, data: FormData, ctx: CirsGpmLegacyRoundtripContext, plan: ReturnType<typeof getCirsGpmLegacyPlan>) {\n const original = (out.minList ?? []) as Array<Record<string, unknown>>\n const next: Array<Record<string, unknown>> = []\n\n for (const row of data.mineList ?? []) {\n const legacyIndex = ctx.mineLegacyIndexByInternalId.get(row.id)\n if (legacyIndex !== undefined) {\n const item = deepCloneJson(original[legacyIndex] ?? {}) as Record<string, unknown>\n const states = ctx.mineFieldStatesByIndex.get(legacyIndex) ?? new Map()\n const write = (key: string, value: string) => writeLegacyField(item, states, key, value)\n\n write('metal', resolveMineralLabel(plan, ctx, row.metal, data.customMinerals ?? []))\n write('smelterName', row.smelterName)\n write('mineFacilityName', row.mineName)\n write('mineFacilityCountry', row.mineCountry)\n write('mineFacilityStreet', row.mineStreet ?? '')\n write('mineFacilityCity', row.mineCity ?? '')\n write('mineFacilityProvince', row.mineProvince ?? '')\n write('mineIdentificationNumber', row.mineId ?? '')\n write('mineIdentification', row.mineIdSource ?? '')\n write('mineFacilityContact', row.mineContactName ?? '')\n write('mineFacilityEmail', row.mineContactEmail ?? '')\n write('proposedNextSteps', row.proposedNextSteps ?? '')\n write('comments', row.comments ?? '')\n\n next.push(item)\n continue\n }\n\n const created: Record<string, unknown> = {}\n const metalLabel = resolveMineralLabel(plan, ctx, row.metal, data.customMinerals ?? [])\n if (!isEmpty(metalLabel)) created.metal = metalLabel\n if (!isEmpty(row.smelterName)) created.smelterName = row.smelterName\n if (!isEmpty(row.mineName)) created.mineFacilityName = row.mineName\n if (!isEmpty(row.mineCountry)) created.mineFacilityCountry = row.mineCountry\n if (!isEmpty(row.comments)) created.comments = row.comments\n next.push(created)\n }\n\n if (out.minList || next.length > 0) {\n out.minList = next as unknown as CirsGpmLegacyReport['minList']\n }\n}\n\nfunction patchProducts(out: CirsGpmLegacyReport, data: FormData, ctx: CirsGpmLegacyRoundtripContext) {\n const original = (out.cmtParts ?? []) as Array<Record<string, unknown>>\n const next: Array<Record<string, unknown>> = []\n\n const defaultLegacyKeys = (() => {\n for (const mapping of ctx.productLegacyKeyByInternalKeyByIndex.values()) return mapping\n return null\n })()\n const keyFor = (\n mapping: Map<'productNumber' | 'productName' | 'requesterNumber' | 'requesterName' | 'comments', string> | null | undefined,\n internalKey: 'productNumber' | 'productName' | 'requesterNumber' | 'requesterName' | 'comments',\n fallback: string\n ): string => mapping?.get(internalKey) ?? fallback\n\n for (const row of data.productList ?? []) {\n const legacyIndex = ctx.productLegacyIndexByInternalId.get(row.id)\n if (legacyIndex !== undefined) {\n const item = deepCloneJson(original[legacyIndex] ?? {}) as Record<string, unknown>\n const states = ctx.productFieldStatesByIndex.get(legacyIndex) ?? new Map()\n const mapping = ctx.productLegacyKeyByInternalKeyByIndex.get(legacyIndex) ?? null\n const write = (key: string, value: string) => writeLegacyField(item, states, key, value)\n\n write(keyFor(mapping, 'productNumber', 'productNumber'), row.productNumber)\n write(keyFor(mapping, 'productName', 'productName'), row.productName)\n write(keyFor(mapping, 'requesterNumber', 'requesterNumber'), row.requesterNumber ?? '')\n write(keyFor(mapping, 'requesterName', 'requesterName'), row.requesterName ?? '')\n write(keyFor(mapping, 'comments', 'comments'), row.comments ?? '')\n next.push(item)\n continue\n }\n\n const created: Record<string, unknown> = { id: row.id }\n const map = defaultLegacyKeys\n const numberKey = keyFor(map, 'productNumber', 'productNumber')\n const nameKey = keyFor(map, 'productName', 'productName')\n const requesterNumberKey = keyFor(map, 'requesterNumber', 'requesterNumber')\n const requesterNameKey = keyFor(map, 'requesterName', 'requesterName')\n const commentsKey = keyFor(map, 'comments', 'comments')\n\n if (!isEmpty(row.productNumber)) created[numberKey] = row.productNumber\n if (!isEmpty(row.productName)) created[nameKey] = row.productName\n if (!isEmpty(row.requesterNumber)) created[requesterNumberKey] = row.requesterNumber\n if (!isEmpty(row.requesterName)) created[requesterNameKey] = row.requesterName\n if (!isEmpty(row.comments)) created[commentsKey] = row.comments\n next.push(created)\n }\n\n if (out.cmtParts || next.length > 0) {\n out.cmtParts = next as unknown as CirsGpmLegacyReport['cmtParts']\n }\n}\n\nfunction patchAmrtReasons(out: CirsGpmLegacyReport, data: FormData, ctx: CirsGpmLegacyRoundtripContext, plan: ReturnType<typeof getCirsGpmLegacyPlan>) {\n const original = (out.amrtReasonList ?? []) as Array<Record<string, unknown>>\n const next: Array<Record<string, unknown>> = []\n\n for (const row of data.mineralsScope ?? []) {\n const legacyIndex = ctx.amrtReasonIndexByInternalId.get(row.id)\n if (legacyIndex !== undefined) {\n const item = deepCloneJson(original[legacyIndex] ?? {}) as Record<string, unknown>\n const states = ctx.amrtReasonFieldStatesByIndex.get(legacyIndex) ?? new Map()\n const write = (key: string, value: string) => writeLegacyField(item, states, key, value)\n\n write('metal', resolveMineralLabel(plan, ctx, row.mineral, data.customMinerals ?? []))\n write('reason', row.reason)\n item.id = item.id ?? row.id\n next.push(item)\n continue\n }\n\n const created: Record<string, unknown> = { id: row.id }\n const metalLabel = resolveMineralLabel(plan, ctx, row.mineral, data.customMinerals ?? [])\n if (!isEmpty(metalLabel)) created.metal = metalLabel\n if (!isEmpty(row.reason)) created.reason = row.reason\n next.push(created)\n }\n\n if (out.amrtReasonList || next.length > 0) {\n out.amrtReasonList = next as unknown as CirsGpmLegacyReport['amrtReasonList']\n }\n}\n\nexport function internalToCirsGpmLegacy(snapshot: ReportSnapshotV1, ctx: CirsGpmLegacyRoundtripContext): CirsGpmLegacyReport {\n if (snapshot.templateType !== ctx.templateType || snapshot.versionId !== ctx.versionId) {\n throw new Error('snapshot does not match ctx templateType/versionId')\n }\n\n const out = deepCloneJson(ctx.original)\n const plan = getCirsGpmLegacyPlan(ctx.templateType, ctx.versionId)\n const versionDef = plan.versionDef\n const data = snapshot.data\n\n patchCompanyInfo(out, data, ctx, versionDef)\n patchRangeQuestions(out, data, ctx, versionDef)\n patchCompanyQuestions(out, data, ctx, versionDef)\n patchSmelters(out, data, ctx, plan)\n patchMines(out, data, ctx, plan)\n patchProducts(out, data, ctx)\n patchAmrtReasons(out, data, ctx, plan)\n\n return out\n}\n","/**\n * @file adapters/cirsGpmLegacyAdapter/toInternal.ts\n * @description CIRS GPM Legacy 格式 → 内部 Snapshot 转换。\n *\n * 核心流程:\n * 1. 解析原始 legacy JSON,识别 templateType / versionId\n * 2. 以 createEmptyFormData 构造空白表单,再按模块填充\n * 3. 矿种识别:从 legacy 标签还原内部 mineralKey,支持 dynamic-dropdown / free-text\n * 4. 记录字段原始状态(NullableFieldState / mineralLabelByKey 等)用于写回时还原\n */\n\nimport { createEmptyFormData } from '@core/template/formDefaults'\nimport { deepCloneJson } from '@core/template/strings'\nimport type { MineRow, MineralsScopeRow, ProductRow, SmelterRow } from '@core/types/tableRows'\n\nimport type { ReportSnapshotV1 } from '../../snapshot'\n\nimport { normalizeLegacyYesNoUnknown } from './adapterUtils'\nimport { parseCirsGpmLegacyReport } from './parse'\nimport { getCirsGpmLegacyPlan, normalizeMineralLabel } from './planCache'\nimport type { CirsGpmLegacyRoundtripContext, NullableFieldState } from './types'\n\nfunction readFieldState(obj: Record<string, unknown> | undefined, key: string): NullableFieldState {\n if (!obj) return { exists: false, wasNull: false, wasString: false, wasNumber: false }\n const exists = Object.prototype.hasOwnProperty.call(obj, key)\n if (!exists) return { exists: false, wasNull: false, wasString: false, wasNumber: false }\n const value = obj[key]\n return {\n exists: true,\n wasNull: value === null,\n wasString: typeof value === 'string',\n wasNumber: typeof value === 'number',\n }\n}\n\nfunction toNullableString(value: unknown): string {\n return typeof value === 'string' ? value : ''\n}\n\nfunction toAnyString(value: unknown): string {\n if (typeof value === 'string') return value\n if (typeof value === 'number' && Number.isFinite(value)) return String(value)\n return ''\n}\n\nfunction pickLegacyKey(obj: Record<string, unknown>, keys: string[]): string {\n for (const k of keys) {\n if (Object.prototype.hasOwnProperty.call(obj, k)) return k\n }\n return keys[0] ?? ''\n}\n\nfunction normalizeLegacyAnswer(templateType: string, questionKey: string, value: unknown): string {\n if (typeof value !== 'string') return ''\n const trimmed = value.trim()\n if (!trimmed) return ''\n if (templateType === 'crt' && questionKey === 'Q4' && /^100\\s*%$/.test(trimmed)) {\n return '1'\n }\n return trimmed\n}\n\nfunction epochMsToDateString(value: string | number | null | undefined): string {\n if (value === null || value === undefined) return ''\n const ms = typeof value === 'number' ? value : Number(value)\n if (!Number.isFinite(ms)) return ''\n const d = new Date(ms)\n const y = d.getUTCFullYear()\n const m = String(d.getUTCMonth() + 1).padStart(2, '0')\n const day = String(d.getUTCDate()).padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\n// humanizeKey / createEmptyFormData / deepCloneJson 已提取到 @core/template/strings.ts 和 @core/template/formDefaults.ts\n\nfunction coerceId(value: unknown, fallback: string): string {\n if (typeof value === 'string' && value.trim()) return value\n if (typeof value === 'number' && Number.isFinite(value)) return String(value)\n return fallback\n}\n\nfunction ensureObjectRecord(value: Record<string, Record<string, string> | string>, key: string): Record<string, string> {\n const current = value[key]\n if (typeof current === 'object' && current !== null) return current as Record<string, string>\n const next: Record<string, string> = {}\n value[key] = next\n return next\n}\n\n// normalizeLegacyYesNoUnknown 已提取到 adapterUtils.ts\n\nexport function cirsGpmLegacyToInternal(input: unknown): { snapshot: ReportSnapshotV1; ctx: CirsGpmLegacyRoundtripContext } {\n const parsed = parseCirsGpmLegacyReport(input)\n const plan = getCirsGpmLegacyPlan(parsed.templateType, parsed.versionId)\n const versionDef = plan.versionDef\n\n const legacy = parsed.legacy\n const original = deepCloneJson(legacy)\n\n const companyFieldStates = new Map<string, NullableFieldState>()\n const companyObj = (legacy.cmtCompany ?? undefined) as Record<string, unknown> | undefined\n for (const [, legacyKey] of plan.legacyCompanyKeyByInternalKey.entries()) {\n if (legacyKey === 'effectiveDate') continue\n companyFieldStates.set(legacyKey, readFieldState(companyObj, legacyKey))\n }\n\n const effectiveState = readFieldState(companyObj, 'effectiveDate')\n const rawEffective = companyObj ? (companyObj.effectiveDate as unknown) : undefined\n const originalType: CirsGpmLegacyRoundtripContext['effectiveDate']['originalType'] = !effectiveState.exists\n ? 'missing'\n : rawEffective === null\n ? 'null'\n : rawEffective === undefined\n ? 'undefined'\n : typeof rawEffective === 'string'\n ? 'string'\n : typeof rawEffective === 'number'\n ? 'number'\n : 'other'\n\n const derivedAuthorizationDate = epochMsToDateString(\n (rawEffective as string | number | null | undefined)\n )\n\n const data = createEmptyFormData(versionDef)\n\n // company info\n for (const field of versionDef.companyInfoFields) {\n const legacyKey = plan.legacyCompanyKeyByInternalKey.get(field.key) ?? field.key\n if (legacyKey === 'effectiveDate') {\n data.companyInfo[field.key] = derivedAuthorizationDate\n continue\n }\n const value = companyObj ? companyObj[legacyKey] : undefined\n data.companyInfo[field.key] = toNullableString(value)\n }\n\n // minerals label map from legacy (for stable write-back)\n const mineralLabelByKey = new Map<string, string>()\n const mineralLabelToKey = new Map<string, string>()\n const resolveMineralValue = (raw: unknown): string => {\n const label = typeof raw === 'string' ? raw : raw == null ? '' : String(raw)\n if (!label) return ''\n const norm = normalizeMineralLabel(label)\n const key = plan.mineralKeyByLabel.get(norm) ?? mineralLabelToKey.get(norm)\n if (key && !mineralLabelByKey.has(key)) {\n mineralLabelByKey.set(key, label)\n }\n return key ?? label\n }\n\n const range = legacy.cmtRangeQuestions ?? []\n if (versionDef.mineralScope.mode !== 'fixed') {\n const mode = versionDef.mineralScope.mode\n const type1Labels: string[] = []\n for (const item of range) {\n if (!item || item.type !== 1) continue\n const label = typeof item.question === 'string' ? item.question.trim() : ''\n if (label) type1Labels.push(label)\n }\n const hasOther = versionDef.mineralScope.minerals.some((m) => m.key === 'other')\n\n if (mode === 'dynamic-dropdown') {\n const selectedByRange = new Set<string>()\n const customLabels: string[] = []\n const maxOther = versionDef.mineralScope.otherSlotCount ?? 0\n for (const label of type1Labels) {\n const norm = normalizeMineralLabel(label)\n const mineralKey = plan.mineralKeyByLabel.get(norm)\n if (mineralKey) {\n selectedByRange.add(mineralKey)\n mineralLabelByKey.set(mineralKey, label)\n mineralLabelToKey.set(norm, mineralKey)\n continue\n }\n if (hasOther && maxOther > 0 && customLabels.length < maxOther) {\n customLabels.push(label)\n }\n }\n if (customLabels.length > 0 && hasOther && maxOther > 0) {\n selectedByRange.add('other')\n data.customMinerals = customLabels\n customLabels.forEach((label, index) => {\n const key = `other-${index}`\n const norm = normalizeMineralLabel(label)\n mineralLabelToKey.set(norm, key)\n mineralLabelByKey.set(key, label)\n })\n }\n if (selectedByRange.size > 0 || data.customMinerals.length > 0) {\n data.selectedMinerals = Array.from(selectedByRange)\n }\n } else if (mode === 'free-text') {\n if (type1Labels.length > 0) {\n const maxSlots = versionDef.mineralScope.maxCount ?? type1Labels.length\n const nextCustom = type1Labels.slice(0, maxSlots)\n data.customMinerals = nextCustom\n const minerals = versionDef.mineralScope.minerals\n for (let i = 0; i < nextCustom.length && i < minerals.length; i++) {\n const key = minerals[i]?.key\n const label = nextCustom[i]\n if (!key || !label) continue\n mineralLabelByKey.set(key, label)\n mineralLabelToKey.set(normalizeMineralLabel(label), key)\n }\n }\n }\n }\n\n // range questions\n const rangeQuestionIndexByKey = new Map<string, number>()\n const rangeQuestionFieldStatesByIndex = new Map<number, { answer: NullableFieldState; remark: NullableFieldState }>()\n\n const questionDefByKey = new Map(versionDef.questions.map((q) => [q.key, q]))\n for (let i = 0; i < range.length; i++) {\n const item = range[i]!\n const qKey = plan.questionKeyByType.get(item.type)\n if (!qKey) continue\n\n const qDef = questionDefByKey.get(qKey)\n if (!qDef) continue\n\n const key = `${item.type}|${item.question}`\n rangeQuestionIndexByKey.set(key, i)\n rangeQuestionFieldStatesByIndex.set(i, {\n answer: readFieldState(item as unknown as Record<string, unknown>, 'answer'),\n remark: readFieldState(item as unknown as Record<string, unknown>, 'remark'),\n })\n\n if (qDef.perMineral) {\n const labelNorm = normalizeMineralLabel(item.question)\n const mineralKey = plan.mineralKeyByLabel.get(labelNorm) ?? mineralLabelToKey.get(labelNorm)\n if (!mineralKey) continue\n if (!mineralLabelByKey.has(mineralKey)) {\n mineralLabelByKey.set(mineralKey, item.question)\n }\n const record = ensureObjectRecord(data.questions, qKey)\n record[mineralKey] = normalizeLegacyAnswer(parsed.templateType, qKey, item.answer)\n const commentRecord = ensureObjectRecord(data.questionComments, qKey)\n commentRecord[mineralKey] = item.remark ?? ''\n continue\n }\n data.questions[qKey] = normalizeLegacyAnswer(parsed.templateType, qKey, item.answer)\n data.questionComments[qKey] = item.remark ?? ''\n }\n\n // company questions\n const companyQuestionIndexByKey = new Map<string, number>()\n const companyQuestionFieldStatesByIndex = new Map<number, { answer: NullableFieldState; remark: NullableFieldState }>()\n const companyQuestions = legacy.cmtCompanyQuestions ?? []\n const companyDefByKey = new Map(versionDef.companyQuestions.map((q) => [q.key, q]))\n\n for (let i = 0; i < companyQuestions.length; i++) {\n const item = companyQuestions[i]!\n const questionKey = item.question\n const def = companyDefByKey.get(questionKey)\n const typeKey = item.type ?? ''\n const idxKey = `${questionKey}|${typeKey}`\n companyQuestionIndexByKey.set(idxKey, i)\n companyQuestionFieldStatesByIndex.set(i, {\n answer: readFieldState(item as unknown as Record<string, unknown>, 'answer'),\n remark: readFieldState(item as unknown as Record<string, unknown>, 'remark'),\n })\n\n if (!def) continue\n\n if (def.perMineral) {\n const labelNorm = normalizeMineralLabel(String(item.type ?? ''))\n const mineralKey = plan.mineralKeyByLabel.get(labelNorm) ?? mineralLabelToKey.get(labelNorm)\n if (!mineralKey) continue\n mineralLabelByKey.set(mineralKey, String(item.type ?? ''))\n const record = ensureObjectRecord(data.companyQuestions, questionKey)\n record[mineralKey] = item.answer ?? ''\n const commentKey = `${questionKey}_comment`\n const commentRecord = ensureObjectRecord(data.companyQuestions, commentKey)\n commentRecord[mineralKey] = item.remark ?? ''\n continue\n }\n data.companyQuestions[questionKey] = item.answer ?? ''\n const commentKey = `${questionKey}_comment`\n if (commentKey in data.companyQuestions) {\n data.companyQuestions[commentKey] = item.remark ?? ''\n }\n }\n\n // smelters\n const smelterLegacyIndexByInternalId = new Map<string, number>()\n const smelterFieldStatesByIndex = new Map<number, Map<string, NullableFieldState>>()\n const smelterNameFallbackByIndex = new Map<number, string>()\n const legacySmelters = legacy.cmtSmelters ?? []\n const smelterList: SmelterRow[] = []\n for (let i = 0; i < legacySmelters.length; i++) {\n const item = legacySmelters[i]!\n const internalId = coerceId(item.id, `smelter-${i}`)\n smelterLegacyIndexByInternalId.set(internalId, i)\n const stateMap = new Map<string, NullableFieldState>()\n for (const key of ['smelterName', 'smelterLookUp', 'smelterCountry', 'smelterId', 'remark', 'isRecycle', 'mineName', 'mineCountry', 'suggest']) {\n stateMap.set(key, readFieldState(item as unknown as Record<string, unknown>, key))\n }\n smelterFieldStatesByIndex.set(i, stateMap)\n\n const metal = resolveMineralValue(item.metal)\n const legacyLookup = item.smelterLookUp ?? ''\n const legacyName = item.smelterName ?? ''\n const legacyStandardName = item.standardSmelterName ?? ''\n const lookup = legacyLookup || legacyName || legacyStandardName\n const name = legacyStandardName || legacyName\n if (item.smelterName === null) {\n smelterNameFallbackByIndex.set(i, legacyStandardName)\n }\n const country = item.smelterCountry ?? ''\n const legacyNumber = item.smelterNumber ?? ''\n const legacyId = item.smelterId ?? ''\n const legacyIdentification = item.smelterIdentification ?? ''\n\n smelterList.push({\n id: internalId,\n metal,\n smelterLookup: lookup,\n smelterName: name,\n smelterCountry: country,\n smelterId: legacyNumber || legacyId || undefined,\n smelterIdentification: legacyNumber || legacyId || undefined,\n sourceId: legacyIdentification || undefined,\n smelterStreet: item.smelterStreet ?? undefined,\n smelterCity: item.smelterCity ?? undefined,\n smelterState: item.smelterProvince ?? undefined,\n smelterContactName: item.smelterContact ?? undefined,\n smelterContactEmail: item.smelterEmail ?? undefined,\n proposedNextSteps: item.suggest ?? undefined,\n mineName: item.mineName ?? undefined,\n mineCountry: item.mineCountry ?? undefined,\n recycledScrap: normalizeLegacyYesNoUnknown(item.isRecycle) || undefined,\n comments: item.remark ?? undefined,\n })\n }\n data.smelterList = smelterList\n\n // mines\n const mineLegacyIndexByInternalId = new Map<string, number>()\n const mineFieldStatesByIndex = new Map<number, Map<string, NullableFieldState>>()\n const legacyMines = legacy.minList ?? []\n const mineList: MineRow[] = []\n for (let i = 0; i < legacyMines.length; i++) {\n const item = legacyMines[i]!\n const internalId = `mine-${i}`\n mineLegacyIndexByInternalId.set(internalId, i)\n const stateMap = new Map<string, NullableFieldState>()\n for (const key of ['mineFacilityName', 'mineFacilityCountry', 'mineFacilityProvince', 'comments']) {\n stateMap.set(key, readFieldState(item as unknown as Record<string, unknown>, key))\n }\n mineFieldStatesByIndex.set(i, stateMap)\n\n mineList.push({\n id: internalId,\n metal: resolveMineralValue(item.metal),\n smelterName: item.smelterName ?? '',\n mineName: item.mineFacilityName ?? '',\n mineCountry: item.mineFacilityCountry ?? '',\n mineId: item.mineIdentificationNumber ?? undefined,\n mineIdSource: item.mineIdentification ?? undefined,\n mineStreet: item.mineFacilityStreet ?? undefined,\n mineCity: item.mineFacilityCity ?? undefined,\n mineProvince: item.mineFacilityProvince ?? '',\n mineDistrict: '',\n mineContactName: item.mineFacilityContact ?? undefined,\n mineContactEmail: item.mineFacilityEmail ?? undefined,\n proposedNextSteps: item.proposedNextSteps ?? undefined,\n comments: item.comments ?? '',\n })\n }\n data.mineList = mineList\n\n // products\n const productLegacyIndexByInternalId = new Map<string, number>()\n const productFieldStatesByIndex = new Map<number, Map<string, NullableFieldState>>()\n const productLegacyKeyByInternalKeyByIndex = new Map<\n number,\n Map<'productNumber' | 'productName' | 'requesterNumber' | 'requesterName' | 'comments', string>\n >()\n const legacyProducts = legacy.cmtParts ?? []\n const productList: ProductRow[] = []\n for (let i = 0; i < legacyProducts.length; i++) {\n const item = legacyProducts[i]!\n const obj = item as unknown as Record<string, unknown>\n const internalId = coerceId(obj.id ?? obj.partId, `product-${i}`)\n productLegacyIndexByInternalId.set(internalId, i)\n const stateMap = new Map<string, NullableFieldState>()\n for (const key of [\n 'productNumber',\n 'partNumber',\n 'productName',\n 'partName',\n 'requesterNumber',\n 'requestPartNumber',\n 'requesterName',\n 'requestPartName',\n 'comments',\n 'remark',\n ]) {\n stateMap.set(key, readFieldState(item as unknown as Record<string, unknown>, key))\n }\n productFieldStatesByIndex.set(i, stateMap)\n\n const legacyKeyByInternal = new Map<\n 'productNumber' | 'productName' | 'requesterNumber' | 'requesterName' | 'comments',\n string\n >()\n legacyKeyByInternal.set('productNumber', pickLegacyKey(obj, ['productNumber', 'partNumber']))\n legacyKeyByInternal.set('productName', pickLegacyKey(obj, ['productName', 'partName']))\n legacyKeyByInternal.set('requesterNumber', pickLegacyKey(obj, ['requesterNumber', 'requestPartNumber']))\n legacyKeyByInternal.set('requesterName', pickLegacyKey(obj, ['requesterName', 'requestPartName']))\n legacyKeyByInternal.set('comments', pickLegacyKey(obj, ['comments', 'remark']))\n productLegacyKeyByInternalKeyByIndex.set(i, legacyKeyByInternal)\n\n const numValue = toAnyString(obj[legacyKeyByInternal.get('productNumber')!])\n const nameValue = toAnyString(obj[legacyKeyByInternal.get('productName')!])\n const requesterNumberKey = legacyKeyByInternal.get('requesterNumber')!\n const requesterNameKey = legacyKeyByInternal.get('requesterName')!\n const requesterNumberValue = toAnyString(obj[requesterNumberKey])\n const requesterNameValue = toAnyString(obj[requesterNameKey])\n const commentsValue = toAnyString(obj[legacyKeyByInternal.get('comments')!])\n\n productList.push({\n id: internalId,\n productNumber: numValue,\n productName: nameValue,\n requesterNumber: requesterNumberValue ? requesterNumberValue : undefined,\n requesterName: requesterNameValue ? requesterNameValue : undefined,\n comments: commentsValue,\n })\n }\n data.productList = productList\n\n // AMRT reasons\n const amrtReasonIndexByInternalId = new Map<string, number>()\n const amrtReasonFieldStatesByIndex = new Map<number, Map<string, NullableFieldState>>()\n const legacyReasons = legacy.amrtReasonList ?? []\n const reasons: MineralsScopeRow[] = []\n for (let i = 0; i < legacyReasons.length; i++) {\n const item = legacyReasons[i]!\n const internalId = coerceId(item.id, `minerals-scope-${i}`)\n amrtReasonIndexByInternalId.set(internalId, i)\n const stateMap = new Map<string, NullableFieldState>()\n for (const key of ['metal', 'reason']) {\n stateMap.set(key, readFieldState(item as unknown as Record<string, unknown>, key))\n }\n amrtReasonFieldStatesByIndex.set(i, stateMap)\n reasons.push({ id: internalId, mineral: resolveMineralValue(item.metal), reason: item.reason ?? '' })\n }\n data.mineralsScope = reasons\n\n const snapshot: ReportSnapshotV1 = {\n schemaVersion: 1,\n templateType: parsed.templateType,\n versionId: parsed.versionId,\n data,\n }\n\n const ctx: CirsGpmLegacyRoundtripContext = {\n templateType: parsed.templateType,\n versionId: parsed.versionId,\n original,\n companyFieldStates,\n effectiveDate: {\n exists: effectiveState.exists,\n originalValue: (rawEffective as string | number | null | undefined),\n originalType,\n derivedAuthorizationDate,\n },\n rangeQuestionIndexByKey,\n rangeQuestionFieldStatesByIndex,\n companyQuestionIndexByKey,\n companyQuestionFieldStatesByIndex,\n mineralLabelByKey,\n smelterLegacyIndexByInternalId,\n smelterFieldStatesByIndex,\n smelterNameFallbackByIndex,\n mineLegacyIndexByInternalId,\n mineFieldStatesByIndex,\n productLegacyIndexByInternalId,\n productFieldStatesByIndex,\n productLegacyKeyByInternalKeyByIndex,\n amrtReasonIndexByInternalId,\n amrtReasonFieldStatesByIndex,\n }\n\n return { snapshot, ctx }\n}\n","import type { TemplateType } from '@core/registry/types'\n\nimport type { ReportSnapshotV1 } from '../../snapshot'\n\nimport { parseCirsGpmLegacyReport } from './parse'\nimport { internalToCirsGpmLegacy } from './toExternal'\nimport { cirsGpmLegacyToInternal } from './toInternal'\nimport type { CirsGpmLegacyReport, CirsGpmLegacyRoundtripContext } from './types'\n\nfunction resolveQuestionnaireType(templateType: TemplateType): number | undefined {\n if (templateType === 'cmrt') return 1\n if (templateType === 'emrt') return 2\n if (templateType === 'amrt') return 3\n return undefined\n}\n\nexport const cirsGpmLegacyAdapter = {\n parse: parseCirsGpmLegacyReport,\n toInternal: cirsGpmLegacyToInternal,\n toExternal: internalToCirsGpmLegacy,\n /**\n * 从“纯内部 snapshot”导出 legacy JSON(不依赖导入得到的 ctx)。\n *\n * 语义:\n * - `toExternal(snapshot, ctx)`:用于 legacy JSON → internal → legacy JSON 的精确回写(尽量保留 missing/null/number/string 等历史细节)。\n * - `toExternalLoose(snapshot)`:用于“未导入 legacy JSON,但希望导出 legacy schema”的场景;只保证输出符合 legacy schema,\n * 不承诺 byte-level roundtrip,也不承诺完全复刻某个历史系统的字段缺失/类型细节。\n */\n toExternalLoose: (snapshot: ReportSnapshotV1): CirsGpmLegacyReport => {\n const ctx = createScratchRoundtripContext(snapshot.templateType, snapshot.versionId)\n return internalToCirsGpmLegacy(snapshot, ctx)\n },\n} as const\n\nexport function createScratchRoundtripContext(\n templateType: TemplateType,\n versionId: string\n): CirsGpmLegacyRoundtripContext {\n // 通过最小 legacy “骨架”构造 ctx:用于 loose 导出时提供版本/字段计划与类型回写策略。\n // 注意:这不是从真实 legacy JSON 导入得到的 ctx,因此不能用于要求“原样回吐”的 roundtrip 场景。\n const upper = templateType.toUpperCase()\n const legacy: CirsGpmLegacyReport =\n templateType === 'crt'\n ? {\n type: 'crt',\n version: `RMI_${upper}_${versionId}`,\n cmtCompany: {},\n cmtRangeQuestions: [],\n cmtCompanyQuestions: [],\n cmtSmelters: [],\n minList: [],\n cmtParts: [],\n }\n : {\n name: `RMI_${upper}_${versionId}`,\n questionnaireType: resolveQuestionnaireType(templateType),\n cmtCompany: {},\n cmtRangeQuestions: [],\n cmtCompanyQuestions: [],\n cmtSmelters: [],\n minList: [],\n cmtParts: [],\n ...(templateType === 'amrt' ? { amrtReasonList: [] } : {}),\n }\n return cirsGpmLegacyToInternal(legacy).ctx\n}\n\nexport type { CirsGpmLegacyReport, CirsGpmLegacyRoundtripContext } from './types'\nexport type { ParsedCirsGpmLegacyReport } from './parse'\n"],"names":["NavigationContext","createContext","NavigationProvider","value","children","jsx","PREFIX_TO_PAGE","getPageKeyForFieldPath","fieldPath","prefix","item","useOptionalNavigation","useContext","assertVersion","versions","versionId","templateName","createVersionMap","items","map","AMRT_MINERALS_V11_PREFILL","AMRT_V12_PREFILL_LABELS","AMRT_V11_PREFILL_LABELS","AMRT_MINERALS_V12_PREFILL","AMRT_MINERALS_V13","YES_NO","AMRT_Q1_OPTIONS","AMRT_Q2_OPTIONS","AMRT_QUESTIONS","AMRT_COMPANY_FIELDS","buildAmrtPages","pages","buildAmrtVersionDef","override","AMRT_VERSION_IDS","AMRT_DEFAULT_VERSION","AMRT_VERSION_ENTRIES","id","amrt_1_1","amrt_1_2","amrt_1_3","AMRT_VERSION_OVERRIDES","AMRT_VERSION_MAP","amrtDefinition","getAmrtVersionDef","CMRT_MINERALS","YES_NO_UNKNOWN","YES_IPC1755_OTHER_NO","YES_SEC_EU_NO","CMRT_Q6_OPTIONS_V6_22_AND_BELOW","CMRT_Q6_OPTIONS_V6_31_AND_ABOVE","buildCmrtQuestions","q6Options","CMRT_COMPANY_QUESTIONS","CMRT_COMPANY_FIELDS","CMRT_PAGES","buildCmrtVersionDef","CMRT_VERSION_IDS","CMRT_DEFAULT_VERSION","CMRT_VERSION_ENTRIES","cmrt_6_01","cmrt_6_1","cmrt_6_22","cmrt_6_31","cmrt_6_4","cmrt_6_5","CMRT_VERSION_OVERRIDES","CMRT_VERSION_MAP","cmrtDefinition","getCmrtVersionDef","CRT_MINERALS","CRT_Q2_OPTIONS_DEFAULT","CRT_Q2_OPTIONS_221","buildCrtQuestions","q2Options","buildCrtCompanyQuestions","CRT_COMPANY_FIELDS","CRT_PAGES","buildCrtVersionDef","CRT_VERSION_IDS","CRT_DEFAULT_VERSION","CRT_VERSION_ENTRIES","crt_2_2","crt_2_21","CRT_VERSION_OVERRIDES","CRT_VERSION_MAP","crtDefinition","getCrtVersionDef","EMRT_MINERALS_V1","EMRT_MINERALS_V2","EMRT_YES_NO_OPTIONS","EMRT_Q1_OPTIONS_V1","EMRT_Q1_OPTIONS_V2","EMRT_Q2_OPTIONS","EMRT_Q3_OPTIONS_V1_COBALT","EMRT_Q3_OPTIONS_V1_MICA","EMRT_Q5_OPTIONS_V1","EMRT_Q5_OPTIONS_V2","EMRT_COMPANY_QUESTION_C_OPTIONS_V2","EMRT_COMPANY_QUESTION_E_OPTIONS","EMRT_V1_QUESTION_LABELS","EMRT_V2_QUESTION_LABELS","EMRT_V11_COMPANY_LABELS","EMRT_V1_COMPANY_LABELS","EMRT_V2_COMPANY_LABELS","EMRT_COMPANY_FIELDS","buildEmrtQuestions","q","buildEmrtCompanyQuestions","labelKey","key","options","buildEmrtPages","buildEmrtVersionDef","q1Negatives","EMRT_VERSION_IDS","EMRT_DEFAULT_VERSION","EMRT_VERSION_ENTRIES","emrt_1_1","emrt_1_11","emrt_1_2","emrt_1_3","emrt_2_0","emrt_2_1","EMRT_VERSION_OVERRIDES","EMRT_VERSION_MAP","emrtDefinition","getEmrtVersionDef","templateDefinitions","versionDefGetters","getTemplateDefinition","type","def","getVersionDef","getter","getDefaultVersion","normalizeBasePath","basePath","trimmed","buildTemplatePath","template","version","page","getAnswer","answers","mineral","entry","evaluateCondition","condition","calculateGating","versionDef","gating","calculateAllGating","mineralKeys","result","$constructor","name","initializer","params","init","inst","_","proto","keys","i","k","Parent","Definition","_a","fn","$ZodAsyncError","$ZodEncodeError","globalConfig","config","newConfig","getEnumValues","entries","numericValues","v","jsonStringifyReplacer","cached","nullish","input","cleanRegex","source","start","end","floatSafeRemainder","val","step","valDecCount","stepString","stepDecCount","match","decCount","valInt","stepInt","EVALUATING","defineLazy","object","assignProp","target","prop","mergeDefs","defs","mergedDescriptors","descriptors","esc","str","slugify","captureStackTrace","_args","isObject","data","allowsEval","F","isPlainObject","o","ctor","prot","shallowClone","propertyKeyTypes","escapeRegex","clone","cl","normalizeParams","_params","optionalKeys","shape","NUMBER_FORMAT_RANGES","pick","schema","mask","currDef","checks","newShape","omit","extend","existingShape","_shape","safeExtend","merge","a","b","partial","Class","oldShape","required","aborted","x","startIndex","prefixIssues","path","issues","iss","unwrapMessage","message","finalizeIssue","ctx","full","getLengthableOrigin","issue","args","util.jsonStringifyReplacer","$ZodError","$ZodRealError","flattenError","error","mapper","fieldErrors","formErrors","sub","formatError","processError","curr","el","_parse","_Err","_ctx","core.$ZodAsyncError","e","util.finalizeIssue","core.config","util.captureStackTrace","_parseAsync","_safeParse","errors.$ZodError","safeParse","errors.$ZodRealError","_safeParseAsync","safeParseAsync","_encode","_decode","_encodeAsync","_decodeAsync","_safeEncode","_safeDecode","_safeEncodeAsync","_safeDecodeAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","uuid","email","_emoji","emoji","ipv4","ipv6","cidrv4","cidrv6","base64","base64url","e164","dateSource","date","timeSource","hhmm","time","datetime","opts","timeRegex","string","regex","integer","number","lowercase","uppercase","$ZodCheck","core.$constructor","numericOriginMap","$ZodCheckLessThan","origin","bag","payload","$ZodCheckGreaterThan","$ZodCheckMultipleOf","util.floatSafeRemainder","$ZodCheckNumberFormat","isInt","minimum","maximum","util.NUMBER_FORMAT_RANGES","regexes.integer","$ZodCheckMaxLength","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","length","tooBig","$ZodCheckStringFormat","_b","$ZodCheckRegex","$ZodCheckLowerCase","regexes.lowercase","$ZodCheckUpperCase","regexes.uppercase","$ZodCheckIncludes","escapedRegex","util.escapeRegex","pattern","$ZodCheckStartsWith","$ZodCheckEndsWith","$ZodCheckOverwrite","Doc","arg","lines","minIndent","dedented","line","$ZodType","ch","runChecks","isAborted","util.aborted","asyncResult","currLen","handleCanaryResult","canary","checkResult","util.defineLazy","r","$ZodString","regexes.string","$ZodStringFormat","checks.$ZodCheckStringFormat","$ZodGUID","regexes.guid","$ZodUUID","regexes.uuid","$ZodEmail","regexes.email","$ZodURL","url","$ZodEmoji","regexes.emoji","$ZodNanoID","regexes.nanoid","$ZodCUID","regexes.cuid","$ZodCUID2","regexes.cuid2","$ZodULID","regexes.ulid","$ZodXID","regexes.xid","$ZodKSUID","regexes.ksuid","$ZodISODateTime","regexes.datetime","$ZodISODate","regexes.date","$ZodISOTime","regexes.time","$ZodISODuration","regexes.duration","$ZodIPv4","regexes.ipv4","$ZodIPv6","regexes.ipv6","$ZodCIDRv4","regexes.cidrv4","$ZodCIDRv6","regexes.cidrv6","parts","address","prefixNum","isValidBase64","$ZodBase64","regexes.base64","isValidBase64URL","regexes.base64url","c","padded","$ZodBase64URL","$ZodE164","regexes.e164","isValidJWT","token","algorithm","tokensParts","header","parsedHeader","$ZodJWT","$ZodNumber","regexes.number","received","$ZodNumberFormat","checks.$ZodCheckNumberFormat","$ZodUnknown","$ZodNever","handleArrayResult","final","index","util.prefixIssues","$ZodArray","proms","handlePropertyResult","isOptionalOut","normalizeDef","okeys","util.optionalKeys","handleCatchall","unrecognized","keySet","_catchall","t","$ZodObject","sh","newSh","_normalized","util.cached","propValues","field","util.isObject","catchall","$ZodObjectJIT","superParse","generateFastpass","doc","normalized","parseStr","util.esc","ids","counter","fastpass","jit","core.globalConfig","fastEnabled","util.allowsEval","handleUnionResults","results","nonaborted","$ZodUnion","option","patterns","p","util.cleanRegex","single","first","async","$ZodIntersection","left","right","handleIntersectionResults","mergeValues","util.isPlainObject","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","unrecKeys","unrecIssue","bothKeys","f","merged","$ZodRecord","values","recordKeys","keyResult","retryResult","$ZodEnum","util.getEnumValues","valuesSet","util.propertyKeyTypes","$ZodLiteral","$ZodTransform","core.$ZodEncodeError","_out","output","handleOptionalResult","$ZodOptional","$ZodExactOptional","$ZodNullable","$ZodDefault","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","$ZodPipe","handlePipeResult","next","$ZodReadonly","handleReadonlyResult","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","util.issue","$ZodRegistry","_meta","meta","pm","registry","globalRegistry","_string","util.normalizeParams","_email","_guid","_uuid","_uuidv4","_uuidv6","_uuidv7","_url","_nanoid","_cuid","_cuid2","_ulid","_xid","_ksuid","_ipv4","_ipv6","_cidrv4","_cidrv6","_base64","_base64url","_e164","_jwt","_isoDateTime","_isoDate","_isoTime","_isoDuration","_number","_int","_unknown","_never","_lt","checks.$ZodCheckLessThan","_lte","_gt","checks.$ZodCheckGreaterThan","_gte","_multipleOf","checks.$ZodCheckMultipleOf","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","_length","checks.$ZodCheckLengthEquals","_regex","checks.$ZodCheckRegex","_lowercase","checks.$ZodCheckLowerCase","_uppercase","checks.$ZodCheckUpperCase","_includes","includes","checks.$ZodCheckIncludes","_startsWith","checks.$ZodCheckStartsWith","_endsWith","suffix","checks.$ZodCheckEndsWith","_overwrite","tx","checks.$ZodCheckOverwrite","_normalize","form","_trim","_toLowerCase","_toUpperCase","_slugify","util.slugify","_array","element","_refine","_superRefine","_check","_issue","initializeContext","process","seen","overrideSchema","_json","processor","parent","isTransforming","extractDefs","root","idToSchema","existing","makeURI","defsSegment","externalId","uriGenerator","defUriPrefix","defId","extractToDef","ref","ext","finalize","flattenRef","zodSchema","_cached","refSeen","refSchema","parentSeen","finalized","createStandardJSONSchemaMethod","_schema","createToJSONSchemaMethod","processors","io","libraryOptions","formatMap","stringProcessor","json","format","contentEncoding","regexes","numberProcessor","multipleOf","exclusiveMaximum","exclusiveMinimum","neverProcessor","unknownProcessor","enumProcessor","literalProcessor","vals","customProcessor","transformProcessor","arrayProcessor","objectProcessor","allKeys","requiredKeys","unionProcessor","isExclusive","intersectionProcessor","isSimpleIntersection","allOf","recordProcessor","keyType","valueSchema","keyValues","validKeyValues","nullableProcessor","inner","nonoptionalProcessor","defaultProcessor","prefaultProcessor","catchProcessor","catchValue","pipeProcessor","innerType","readonlyProcessor","optionalProcessor","ZodISODateTime","core.$ZodISODateTime","schemas.ZodStringFormat","core._isoDateTime","ZodISODate","core.$ZodISODate","core._isoDate","ZodISOTime","core.$ZodISOTime","core._isoTime","ZodISODuration","core.$ZodISODuration","core._isoDuration","core.formatError","core.flattenError","ZodRealError","parse","core._parse","parseAsync","core._parseAsync","core._safeParse","core._safeParseAsync","encode","core._encode","decode","core._decode","encodeAsync","core._encodeAsync","decodeAsync","core._decodeAsync","safeEncode","core._safeEncode","safeDecode","core._safeDecode","safeEncodeAsync","core._safeEncodeAsync","safeDecodeAsync","core._safeDecodeAsync","ZodType","core.$ZodType","util.mergeDefs","core.clone","reg","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","check","refine","refinement","superRefine","checks.overwrite","optional","exactOptional","nullable","nonoptional","array","union","intersection","pipe","transform","_default","prefault","_catch","readonly","description","core.globalRegistry","_ZodString","core.$ZodString","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","ZodString","core._email","ZodEmail","core._url","ZodURL","core._jwt","ZodJWT","core._emoji","ZodEmoji","core._guid","ZodGUID","core._uuid","ZodUUID","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","ZodNanoID","core._cuid","ZodCUID","core._cuid2","ZodCUID2","core._ulid","ZodULID","core._base64","ZodBase64","core._base64url","ZodBase64URL","core._xid","ZodXID","core._ksuid","ZodKSUID","core._ipv4","ZodIPv4","core._ipv6","ZodIPv6","core._cidrv4","ZodCIDRv4","core._cidrv6","ZodCIDRv6","core._e164","ZodE164","iso.datetime","iso.date","iso.time","iso.duration","core._string","ZodStringFormat","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","ZodNumber","core.$ZodNumber","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","int","checks.multipleOf","core._number","ZodNumberFormat","core.$ZodNumberFormat","core._int","ZodUnknown","core.$ZodUnknown","processors.unknownProcessor","unknown","core._unknown","ZodNever","core.$ZodNever","processors.neverProcessor","never","core._never","ZodArray","core.$ZodArray","processors.arrayProcessor","minLength","maxLength","len","core._array","ZodObject","core.$ZodObjectJIT","processors.objectProcessor","_enum","incoming","util.extend","util.safeExtend","other","util.merge","util.pick","util.omit","util.partial","ZodOptional","util.required","ZodNonOptional","ZodUnion","core.$ZodUnion","processors.unionProcessor","ZodIntersection","core.$ZodIntersection","processors.intersectionProcessor","ZodRecord","core.$ZodRecord","processors.recordProcessor","record","valueType","ZodEnum","core.$ZodEnum","processors.enumProcessor","newEntries","ZodLiteral","core.$ZodLiteral","processors.literalProcessor","literal","ZodTransform","core.$ZodTransform","processors.transformProcessor","core.$ZodOptional","processors.optionalProcessor","ZodExactOptional","core.$ZodExactOptional","ZodNullable","core.$ZodNullable","processors.nullableProcessor","ZodDefault","core.$ZodDefault","processors.defaultProcessor","defaultValue","util.shallowClone","ZodPrefault","core.$ZodPrefault","processors.prefaultProcessor","core.$ZodNonOptional","processors.nonoptionalProcessor","ZodCatch","core.$ZodCatch","processors.catchProcessor","ZodPipe","core.$ZodPipe","processors.pipeProcessor","in_","out","ZodReadonly","core.$ZodReadonly","processors.readonlyProcessor","ZodCustom","core.$ZodCustom","processors.customProcessor","core._refine","core._superRefine","ZodIssueCode","ERROR_KEYS","NOT_AVAILABLE_EMAIL","EMAIL_FORMAT_SCHEMA","z.string","isNotAvailableEmail","emailSchema","isValidEmail","dateSchema","buildFieldSchema","base","buildCompanyInfoSchema","z.object","buildQuestionMatrixSchema","question","mineralShape","buildQuestionMatrixCommentSchema","buildCompanyQuestionsSchema","cq","requiredWhen","commentKey","valueRecord","commentRecord","z.ZodIssueCode","commentValue","buildSmelterRowSchema","buildMineRowSchema","buildProductRowSchema","_versionDef","validateDynamicDropdownMinerals","maxCount","otherSelected","otherNames","baseCount","validateFreeTextMinerals","validateAmrtMineralsScopeRows","row","reason","buildFormSchema","mineRowSchema","mineralsScopeRowSchema","z.array","humanizeKey","part","deepCloneJson","createEmptyFormData","companyInfo","questions","questionComments","perMineral","companyQuestions","perMineralComment","allMinerals","m","selectedMinerals","customMinerals","defaults","NOTHING","DRAFTABLE","DRAFT_STATE","errors","plugin","thing","die","msg","isFunction","O","getPrototypeOf","CONSTRUCTOR","PROTOTYPE","CONFIGURABLE","ENUMERABLE","WRITABLE","VALUE","isDraft","isDraftable","isArray","isMap","isSet","objectCtorString","cachedCtorStrings","isObjectish","Ctor","ctorString","each","obj","iter","strict","getArchtype","state","has","get","set","propOrOldValue","is","y","isBoolean","isArrayIndex","n","getProxyDraft","latest","getValue","proxyDraft","getFinalValue","shallowCopy","isPlain","desc","freeze","deep","isFrozen","dontMutateMethodOverride","_key","dontMutateFrozenCollections","PluginMapSet","PluginPatches","PluginArrayMethods","plugins","getPlugin","pluginKey","isPluginLoaded","loadPlugin","implementation","currentScope","getCurrentScope","createScope","parent_","immer_","usePatchesInScope","scope","patchListener","revokeScope","leaveScope","revokeDraft","enterScope","immer2","draft","processResult","baseDraft","patchPlugin_","maybeFreeze","rootScope","handleValue","isSameScope","callbacks_","generatePatchesAndFinalize","markStateFinalized","EMPTY_LOCATIONS_RESULT","updateDraftInParent","draftValue","finalizedValue","originalKey","parentCopy","parentType","draftLocations","locations","location","registerChildFinalizationCallback","child","handleCrossReference","scope_","prepareCopy","targetCopy","handledSet","updatedValue","createProxyProxy","baseIsArray","traps","objectTraps","arrayTraps","revoke","proxy","arrayPlugin","isArrayWithStringProp","readPropFromProto","peek","childKey","childDraft","createProxy","getDescriptorFromProto","current2","currentState","markChanged","owner","Immer2","recipe","defaultBase","self","base2","hasError","ip","patches","inversePatches","current","patch","applyPatchesImpl","rootScope2","currentImpl","copy","childValue","enableMapSet","DraftMap","assertUnrevoked","prepareMapCopy","cb","thisArg","_value","_map","iterator","proxyMap_","DraftSet","prepareSetCopy","proxySet_","set2","fixSetContents","immer","produce","createStoreImpl","createState","listeners","setState","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","useStore","selector","slice","React","immerImpl","store","updater","buildMineralReconcileNotice","previous","nextSet","removed","TemplateStoreContext","useTemplateStore","EMPTY_ERRORS","writeNestedField","subKey","writeQuestionField","questionKey","mineralKey","mapZodErrors","rest","idx","qKey","mKey","cqKey","getFormData","s","createTemplateStore","templateType","integrations","defaultState","questionDefsByKey","questionKeyOrder","runValidationSync","validationPending","scheduleValidation","applyGatingCascade","nextQuestions","cur","q2Index","laterKeys","clearQuestion","d","qv","cv","minerals","rows","TemplateProvider","currentKey","prevKey","setPrevKey","useState","setStore","useEffect","handler","event","unsubscribe","isIterable","hasIterableEntries","compareEntries","valueA","valueB","mapA","mapB","compareIterables","iteratorA","iteratorB","nextA","nextB","shallow","useShallow","prev","selectMeta","selectForm","selectLists","selectErrors","selectIntegrations","selectMineralReconcileNotice","selectActions","useTemplateState","lists","useMemo","useTemplateErrors","useTemplateActions","useTemplateIntegrations","useMineralReconcileNotice","freeGlobal","freeSelf","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","isObjectLike","symbolTag","isSymbol","arrayMap","iteratee","symbolProto","symbolToString","baseToString","asyncTag","funcTag","genTag","proxyTag","coreJsData","maskSrcKey","uid","isMasked","func","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","getNative","WeakMap","apply","noop","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","baseSetToString","setToString","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","MAX_SAFE_INTEGER","reIsUint","isIndex","baseAssignValue","eq","nativeMax","overRest","otherArgs","baseRest","isLength","isArrayLike","isPrototype","baseTimes","argsTag","baseIsArguments","propertyIsEnumerable","isArguments","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","arrayTag","boolTag","dateTag","errorTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","freeProcess","nodeUtil","types","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","overArg","nativeKeys","baseKeys","reIsDeepProp","reIsPlainProp","isKey","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","listCacheClear","assocIndexOf","arrayProto","splice","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","Map","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","size","MapCache","FUNC_ERROR_TEXT","memoize","resolver","memoized","cache","MAX_MEMOIZE_SIZE","memoizeCapped","rePropName","reEscapeChar","stringToPath","quote","subString","toString","castPath","toKey","baseGet","arrayPush","offset","stackClear","stackDelete","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","arrayFilter","resIndex","stubArray","nativeGetSymbols","getSymbols","symbol","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","DataView","Promise","Set","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","Uint8Array","compact","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","mapToArray","setToArray","symbolValueOf","equalByTag","convert","stacked","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objValue","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","property","baseIteratee","arrayAggregator","setter","accumulator","createBaseFor","iterable","props","baseFor","baseForOwn","createBaseEach","eachFunc","collection","baseEach","baseAggregator","createAggregator","isArrayLikeObject","last","groupBy","nativeMin","baseIntersection","arrays","comparator","caches","outer","computed","castArrayLikeObject","intersectionBy","mapped","baseSum","baseSome","some","guard","sumBy","INFINITY","createSet","baseUniq","isCommon","seenIndex","uniq","OTHER_MINERAL_PREFIX","buildOtherMineralKey","getOtherMineralKeys","label","buildOtherMinerals","parseOtherMineralKey","getAnswerForMineral","getMetalsForSource","getActiveMinerals","getCustomMineralLabels","labels","getActiveMineralKeys","otherKeys","otherMinerals","getDisplayMinerals","active","MONTH_NAMES","toDisplayDate","isoDate","year","month","day","monthIndex","SMELTER_NOT_LISTED_VARIANTS","SMELTER_NOT_IDENTIFIED_VARIANTS","normalizeSmelterLookup","lower","isSmelterNotListed","isSmelterNotIdentified","buildMineralLabelMap","getQuestionAnswerValue","getRequiredSmelterMinerals","activeMinerals","gatingByMineral","buildRequiredContext","formState","getActiveMineralKeysFromTemplate","calculateRequiredFields","calculateRequiredFieldsWithContext","context","mineralsForRequired","isFieldRequired","mineralMap","companyQuestionsRequired","smelterListRequired","productListRequired","runChecker","formData","checkCompanyInfo","checkQuestions","checkCompanyQuestions","checkSmelterList","checkProductList","checkMineralsScope","checkMineList","checkEmailFormat","pushError","isQuestionRequired","firstMineralKey","checkSingleCompanyQuestion","asText","fieldSuffix","extractNestedValue","mineralLabelMap","mineralLabelOverrides","requiredMinerals","emailFields","fieldLabelKey","messageKey","messageValues","getDocStatusData","requiredContext","requiredFields","productList","missingGatingMetals","getMissingGatingMetals","smelterList","getGatingQuestionLabel","mineList","needsQ1","needsQ2","missing","q1","q2","buildCheckerSummary","totalRequired","completedRequired","passedItems","addPassed","declarationLabel","smelterLabel","productLabel","mineralLabelByKey","companyRequired","companyCompleted","questionsRequired","questionsCompleted","requiredMap","isRequired","mineralLabelKey","mineralLabel","companyQuestionsCompleted","rawValue","overrideLabel","rawComment","smelterRequired","smelterCompleted","productRequired","productCompleted","contactEmail","authorizerEmail","BASE_COUNTRIES","CRT_COUNTRIES","COUNTRIES_BY_TEMPLATE","getCountryOptions","buildDeclarationViewModel","buildSmelterListViewModel","questionAnswers","labelOverrides","availableMetals","countryOptions","showNotYetIdentifiedCountryHint","buildMineListViewModel","smelterNames","smelterOptions","smelterOptionsByMetal","metalKey","bucket","names","__read","ar","isDev","useMemoizedFn","fnRef","useRef","memoizedFn","_i","depsAreSame","oldDeps","deps","useCreation","factory","useLatest","useToggle","reverseValue","actions","reverseValueOrigin","toggle","setLeft","setRight","useBoolean","setTrue","setFalse","module","this","u","h","l","$","M","g","D","S","w","useT","rawT","i18n","useTranslation","locale","buildRuleInput","buildDataInput","useTemplateDerived","ruleInput","dataInput","checkerErrors","checkerSummaryResult","docStatusBySection","declarationViewModel","smelterListViewModel","mineListViewModel","CMRT_GROUP_ORDER","DEFAULT_GROUP_ORDER","getGroupOrder","getGroupKey","parseIndex","buildOrderMap","buildSortKeyFactory","_groupKey","companyInfoOrder","questionOrder","mineralOrder","companyQuestionOrder","groupKey","questionIndex","mineralIndex","keyWithSuffix","isComment","groupCheckerErrors","grouped","sortKeyFactory","group","sorted","useHandlerMap","Text","Title","Typography","extractMineralKeyFromPath","getMineralLabelKey","CheckerPanel","summary","onGoToField","translateError","hasErrors","showPassedDetails","togglePassedDetails","passedLabel","groupedErrors","handleGoToField","getGoToFieldHandler","passedBodyStyle","jsxs","Flex","Card","Tag","Collapse","errorKey","Button","List","CheckerPage","onNavigateToField","checkerSummary","checkerPassedItems","navigation","pageKey","resolveErrorMessage","TextField","onChange","placeholder","hint","disabled","multiline","className","style","autoComplete","spellCheck","resolvedPlaceholder","handleChange","errorText","validateStatus","inputClassName","Form","Input","SelectField","allowClear","nextValue","handleKeyDown","matchedOption","opt","normalizedValue","selectClassName","Select","DISPLAY_FORMAT","STORAGE_FORMAT","DateField","formatHint","minDate","maxDate","dayjsValue","dayjs","displayHint","displayPlaceholder","disabledDate","pickerClassName","DatePicker","SCOPE_OPTIONS","COMPANY_FIELD_KEYS","CONTACT_FIELD_KEYS","AUTHORIZER_FIELD_KEYS","PLACEHOLDER_KEYS","AUTOCOMPLETE_KEYS","SPELLCHECK_DISABLED_KEYS","CompanyInfoForm","dateFormatHint","showPrompts","scopeType","getFieldHandler","getPlaceholder","fieldKey","renderField","span","fieldHandler","content","resolvedDateHint","Col","companyFields","contactFields","authorizerFields","fieldGroups","companyFieldsRaw","requiredTotal","requiredCompleted","sectionHeaderStyle","handleCopyContactToAuthorizer","hasContactInfo","Row","Fragment","CopyOutlined","CompanyQuestionsForm","questionDefs","gatingCondition","requiredByQuestion","questionDefsSignature","optionLabelsByQuestion","optionMap","isOptional","requiredHint","buildCompanyQuestionsRequiredHint","questionSignature","optionsByQuestion","getSelectHandler","getPerMineralHandler","getCommentHandler","getPerMineralCommentHandler","renderPerMineralQuestionRow","renderCompanyQuestionRow","selectError","getCompanyQuestionError","selectHandler","commentHandler","commentRequiredWhen","mainValue","getCompanyQuestionValue","commentError","getCompanyQuestionCommentError","questionRequired","shouldRequireComment","commentRequired","getCompanyQuestionCommentValue","perMineralCommentHandler","questionError","resolveGatingConditionLabel","resolveOptionLabel","formatLabels","MineralScopeForm","onMineralsChange","onCustomMineralsChange","mineralScope","maxSlots","otherSlotCount","freeTextSlots","otherSlots","maxCountHint","maxCountReachedHint","getMineralScopeHints","selectionError","customErrors","resolveErrorRecord","handleMineralToggle","checked","handleCustomMineralChange","customSlots","getCheckboxHandler","getCustomInputHandler","isSelected","isDisabled","checkbox","Checkbox","Tooltip","buildOptionSignature","buildOptionsByMineralSignature","optionsByMineral","QuestionMatrixForm","mineralsOverride","commentValues","onCommentChange","rawMinerals","mineralSignature","optionsByKey","toOptions","handleCommentChange","getCellHandlerByKey","getCommentHandlerByKey","getCellHandler","getOptions","handleBatchSet","QuestionRow","onBatchSet","rowDisabled","getQuestionDisabled","showBatchFill","commonOptions","allOptionSets","acc","currentValue","getQuestionValue","currentComment","getQuestionError","cellHandler","createKeyDownHandler","matched","questionValue","BASE","SPACING","LAYOUT","useFieldFocus","searchParams","timeout","DeclarationPage","reconcileNotice","setCompanyInfoField","setSelectedMinerals","setCustomMinerals","setQuestionValue","setQuestionComment","setCompanyQuestionValue","clearMineralReconcileNotice","viewModels","displayMinerals","showReconcileNotice","removedMineralsLabel","Alert","PlaceholderPage","title","STATUS_TEXT_MAP","useDocStatus","section","statusBySection","resolveStatus","status","metalLabels","getMetalLabels","labelByKey","Paragraph","resolveDocKey","exists","directKey","useDocKey","useDocParagraphs","useDocDefinitions","renderStatus","alertType","DocNote","paragraphs","text","DocPage","titleKey","wrapRequired","node","INPUT_FIELDS","SELECT_FIELDS","MineListTable","rowIndexMap","handleAddRow","newRow","handleRemoveRow","handleCellChange","getInputHandler","getRemoveHandler","metalOptions","filterOptionByLabel","columns","filteredOptions","AutoComplete","DeleteOutlined","PlusOutlined","Table","MineListPage","setMineList","MineralsScopeReasonsForm","mineralOptions","MineralsScopePage","mineralsScope","setMineralsScope","ProductListTable","memo","showRequesterColumns","integration","selectedRowKeys","setSelectedRowKeys","externalPicking","startPicking","stopPicking","rowsRef","validSelectedRowKeys","valid","integrationAddMode","showExternalPick","showAddRow","externalPickLabel","showLoadingIndicator","normalizeExternalProductRow","seq","idBase","getCurrentRowsSnapshot","handleExternalPick","currentRows","Modal","handleRemoveRowWithSelection","handleBatchDelete","selectedSet","handleCancelSelection","rowSelection","emptyLocale","CloseOutlined","ProductListPage","setProductList","RevisionPage","definition","showReleaseDate","renderVersionItem","Descriptions","SMELTER_LOOKUP_META","SMELTER_LOOKUP_DATA","SmelterListTable","smelterLookupRecords","smelterLookupMeta","rowPickingId","setRowPickingId","isNotListed","isNotYetIdentified","isFromLookup","notListedRequiresNameCountry","resolveNotYetIdentifiedCountry","byMetal","smelterLookupMode","useExternalLookup","normalizeExternalSmelterRow","applyExternalPickToRow","mergedWithName","applySmelterLookup","updateRowById","nextRow","handleExternalPickForRow","picked","country","yesNoUnknownOptions","yesNoOptions","recycledScrapOptions","notListed","notYetIdentified","fromLookup","showHint","rowClassName","SmelterListPage","setSmelterList","WORKFLOW_KEYS_BY_TEMPLATE","getWorkflowPages","pageMap","Sider","Layout","defaultTabs","FileTextOutlined","UnorderedListOutlined","CheckCircleOutlined","ShoppingOutlined","SearchOutlined","BookOutlined","InfoCircleOutlined","Sidebar","tabs","collapsed","onCollapse","selectedKey","onSelect","menuItems","tab","handleMenuClick","info","handleCollapse","nextCollapsed","activeKey","Menu","StepNav","steps","currentIndex","isComplete","hasProgress","Steps","Content","AppLayout","topBanner","bottomSlot","currentTabKey","onTabChange","currentStepKey","onStepChange","maxContentWidth","setCollapsed","useStepNav","showSidebar","layoutStyle","RequiredHintBanner","errorCount","onGoToChecker","RightOutlined","PageActions","currentPageKey","onNavigatePage","pageOrder","submitOpen","openSubmit","closeSubmit","isReview","handlePrev","handleNext","handleFixErrors","firstError","completion","Result","Progress","ExclamationCircleOutlined","WarningOutlined","isPageKey","availableKeys","TemplateShell","renderPage","TemplateScaffold","workflowPages","getPageProgress","sections","workflowSteps","workflowPageKeys","handleStepChange","handleGoToChecker","DEFAULT_PAGE","CMReportingApp","controlledPageKey","internalPageKey","setInternalPageKey","setSearchParams","handleNavigatePage","useCallback","nextPage","navigationValue","to","targetPage","resources","enUS","zhCN","ensureReactI18nextBound","initReactI18next","initI18n","language","isI18nInitialized","cssVariablesToStyle","variables","defaultAntdTheme","useToken","theme","AppThemeScope","cssVariables","cssVar","appStyle","cmStyle","combinedStyle","_interopRequireDefault","en_US","common","_common","require$$0","_typeof","ownKeys","_objectSpread","_defineProperty","_toPropertyKey","_toPrimitive","_en_US","require$$1","_en_US2","_en_US3","_en_US4","typeTemplate","localeValues","zh_CN","_zh_CN","_zh_CN2","_zh_CN3","_zh_CN4","ANT_LOCALE_BY_APP","DAYJS_LOCALE_BY_APP","applyLocale","nextLocale","CMReportingProvider","onLocaleChange","fallback","notifiedLocaleRef","expectedDayjsLocale","loadingFallback","Spin","ConfigProvider","AntApp","Suspense","decodeXmlText","encodeXmlText","uint8ToUtf8","u8","utf8ToUint8","getFileText","files","file","setFileText","parseSharedStringsXml","xml","siRe","si","ts","tRe","mt","buildSheetPathByName","workbookXml","relsXml","rIdBySheetName","sheetRe","targetByRid","relRe","mr","rid","findCellElement","cellRef","needle","cStart","tagEnd","openTag","cEnd","body","stripAttr","attrName","re","isFormulaCell","sheetXml","found","readCellText","sharedStrings","mv","raw","writeCellInlineStr","writeCellInlineStrImpl","writeCellInlineStrOverwriteFormula","nextOpen","nextCell","stripped","loadXlsxContext","unzipSync","sharedStringsXml","setFullCalcOnLoad","workbookPath","_m","attrs","removeCalcChain","ctPath","ct","relsPath","rels","zipXlsx","zipSync","getSheetXml","sheetName","setSheetXml","EXCEL_TEMPLATE_ANCHORS","getExcelDeclarationAnchors","hit","cell","col","normalizeToken","humanizeMineralKey","spaced","toExcelScopeValue","buildAmrtMineralOptionMap","declXml","otherOpt","aliasesByKey","aliases","norms","writeCompanyInfo","snapshot","readDvOptions","afterScopeBaseRow","writeListSheetRows","startRow","colByKey","valueTransform","excelRow","writeEmrtMineralSelection","slots","selected","slot","keep","deleteLabel","writeAmrtMineralSelection","optionByKey","selectionSlots","baseSelected","hasOtherSelected","otherNamesByIndex","slotCount","selectionKeysBySlot","otherNameBySlot","filledCount","writeDeclarationQuestionsAndCompany","anchors","comments","companyAnswers","answerCol","commentCol","maxRows","rr","comment","companyByKey","writeAmrtQuestions","q1Row","q2Row","custom","res","writeBlock","baseXml","endRow","max","q3Row","end2","writeSmart","allowOverwriteFormula","writeSmelterListSheet","toMineralLabel","smelterId","hasId","allow","metal","lookup","fieldColMap","combinedMetal","combinedSmelter","writeMineListSheet","writeProductListSheet","hasRequesterColumns","writeMineralsScopeSheet","resolveMineral","exportToExcel","templateXlsx","readDeclCell","amrtOptionMap","patched","outBuf","REPORT_SNAPSHOT_SCHEMA_VERSION","templateTypeSchema","z.enum","localeSchema","smelterRowSchema","productRowSchema","snapshotV1Schema","z.literal","z.record","z.union","parseSnapshot","stringifySnapshot","SnapshotController","initialSnapshot","onSnapshotChange","controllerRef","setFormData","validateForm","importedSnapshotRef","hydratedRef","useLayoutEffect","useImperativeHandle","CMReporting","forwardRef","useCMReporting","nullableString","cmtCompanySchema","z.number","cmtRangeQuestionSchema","cmtCompanyQuestionSchema","cmtSmelterSchema","mineFacilitySchema","cmtPartSchema","amrtReasonSchema","cirsGpmLegacyReportSchema","VERSION_RE","normalizeTemplateType","parsed","parseFromNameOrVersion","tt","parseCirsGpmLegacyReport","legacy","fromType","fromName","fromVersion","inferred","err","normalizeLegacyYesNoUnknown","writeNullableString","writeLegacyField","states","written","cacheKey","normalize","splitCamel","toTitleCase","mineralCandidates","MINERAL_LABEL_OVERRIDES","buildMineralMaps","mineralKeyByLabel","preferredMineralLabelByKey","preferred","buildQuestionKeyByType","questionKeyByType","buildCompanyKeyMap","getCirsGpmLegacyPlan","legacyCompanyKeyByInternalKey","plan","normalizeMineralLabel","isEmpty","dateStringToEpochMsUtc","getString","getAnyString","toLegacyYesNoUnknown","resolveMineralLabel","otherIndex","direct","getNestedString","epochForWrite","authorizationDate","originalValue","originalType","ms","patchCompanyInfo","companyObj","legacyKey","authDate","nextEffective","patchRangeQuestions","range","questionsByKey","activeMineralKeys","activeMineralKeySet","labelToKeyFromCtx","norm","labelForMineralKey","fromCtx","ensure","originalLabelForIndex","idxKey","nextAnswer","nextRemark","answerState","remarkState","writtenAnswer","writtenRemark","idxKeyAny","pruned","patchCompanyQuestions","list","typeLabel","originalTypeLabelForIndex","patchSmelters","original","legacyIndex","write","originalItem","originalLookup","originalName","originalStandardName","derivedLookup","derivedName","originalNumber","originalLegacyId","originalIdentification","derivedId","derivedIdentification","derivedSourceId","derivedRecycled","originalNameState","rowSmelterId","rowSmelterIdentification","idChanged","created","metalLabel","nextNumber","legacyRecycled","patchMines","patchProducts","defaultLegacyKeys","mapping","keyFor","internalKey","numberKey","nameKey","requesterNumberKey","requesterNameKey","commentsKey","patchAmrtReasons","internalToCirsGpmLegacy","readFieldState","toNullableString","toAnyString","pickLegacyKey","normalizeLegacyAnswer","epochMsToDateString","coerceId","ensureObjectRecord","cirsGpmLegacyToInternal","companyFieldStates","effectiveState","rawEffective","derivedAuthorizationDate","mineralLabelToKey","resolveMineralValue","mode","type1Labels","hasOther","selectedByRange","customLabels","maxOther","nextCustom","rangeQuestionIndexByKey","rangeQuestionFieldStatesByIndex","questionDefByKey","qDef","labelNorm","companyQuestionIndexByKey","companyQuestionFieldStatesByIndex","companyDefByKey","typeKey","smelterLegacyIndexByInternalId","smelterFieldStatesByIndex","smelterNameFallbackByIndex","legacySmelters","internalId","stateMap","legacyLookup","legacyName","legacyStandardName","legacyNumber","legacyId","legacyIdentification","mineLegacyIndexByInternalId","mineFieldStatesByIndex","legacyMines","productLegacyIndexByInternalId","productFieldStatesByIndex","productLegacyKeyByInternalKeyByIndex","legacyProducts","legacyKeyByInternal","numValue","nameValue","requesterNumberValue","requesterNameValue","commentsValue","amrtReasonIndexByInternalId","amrtReasonFieldStatesByIndex","legacyReasons","reasons","resolveQuestionnaireType","cirsGpmLegacyAdapter","createScratchRoundtripContext","upper"],"mappings":"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","x_google_ignoreList":[37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,60,61,62,63,67,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,230,231,232,233,234,235,236,237,238,239,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299]}
|