@ryuzaki13/react-foundation-lib 2.31.1 → 2.32.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/README.md +17 -5
- package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts +17 -0
- package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts.map +1 -0
- package/dist/analytical-table/definition/compileAnalyticalTableDefinition.d.ts.map +1 -1
- package/dist/analytical-table/definition/types.d.ts +6 -5
- package/dist/analytical-table/definition/types.d.ts.map +1 -1
- package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts +7 -0
- package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts.map +1 -0
- package/dist/analytical-table/dynamic-columns/dateColumns.d.ts.map +1 -1
- package/dist/analytical-table/dynamic-columns/types.d.ts +2 -1
- package/dist/analytical-table/dynamic-columns/types.d.ts.map +1 -1
- package/dist/analytical-table/index.js +124 -114
- package/dist/analytical-table/index.js.map +1 -1
- package/dist/analytical-table/projections/analyticalExportConstants.d.ts +7 -0
- package/dist/analytical-table/projections/analyticalExportConstants.d.ts.map +1 -0
- package/dist/analytical-table/projections/expansion.d.ts +2 -1
- package/dist/analytical-table/projections/expansion.d.ts.map +1 -1
- package/dist/analytical-table/projections/exportProjection.d.ts.map +1 -1
- package/dist/analytical-table/projections/types.d.ts +3 -2
- package/dist/analytical-table/projections/types.d.ts.map +1 -1
- package/dist/analytical-table/runtime/aggregation.d.ts.map +1 -1
- package/dist/analytical-table/runtime/analyticalRowConstants.d.ts +4 -0
- package/dist/analytical-table/runtime/analyticalRowConstants.d.ts.map +1 -0
- package/dist/analytical-table/runtime/analyticalViewConstants.d.ts +16 -0
- package/dist/analytical-table/runtime/analyticalViewConstants.d.ts.map +1 -0
- package/dist/analytical-table/runtime/buildGroupedModel.d.ts.map +1 -1
- package/dist/analytical-table/runtime/filtering.d.ts.map +1 -1
- package/dist/analytical-table/runtime/grouping.d.ts.map +1 -1
- package/dist/analytical-table/runtime/hierarchy.d.ts +2 -1
- package/dist/analytical-table/runtime/hierarchy.d.ts.map +1 -1
- package/dist/analytical-table/runtime/totals.d.ts +2 -2
- package/dist/analytical-table/runtime/totals.d.ts.map +1 -1
- package/dist/analytical-table/runtime/types.d.ts +5 -3
- package/dist/analytical-table/runtime/types.d.ts.map +1 -1
- package/dist/analytical-table/runtime/valueComparison.d.ts.map +1 -1
- package/dist/array/index.js +1 -1
- package/dist/array/reorder.d.ts +6 -1
- package/dist/array/reorder.d.ts.map +1 -1
- package/dist/async-task-runner/createCoalescingTaskRunner.d.ts.map +1 -1
- package/dist/async-task-runner/createDeadlineTimer.d.ts.map +1 -1
- package/dist/async-task-runner/index.js +39 -36
- package/dist/async-task-runner/index.js.map +1 -1
- package/dist/async-task-runner/nativeTimerConstants.d.ts +3 -0
- package/dist/async-task-runner/nativeTimerConstants.d.ts.map +1 -0
- package/dist/binary/base64Constants.d.ts +6 -0
- package/dist/binary/base64Constants.d.ts.map +1 -0
- package/dist/binary/binaryToBlob.d.ts.map +1 -1
- package/dist/binary/getBase64DecodedSize.d.ts.map +1 -1
- package/dist/binary/index.js +95 -70
- package/dist/binary/index.js.map +1 -1
- package/dist/browser-notifications/browserNotificationConstants.d.ts +3 -0
- package/dist/browser-notifications/browserNotificationConstants.d.ts.map +1 -0
- package/dist/browser-notifications/browserNotificationTypes.d.ts +2 -1
- package/dist/browser-notifications/browserNotificationTypes.d.ts.map +1 -1
- package/dist/browser-notifications/createBrowserNotificationPresenter.d.ts.map +1 -1
- package/dist/browser-notifications/index.js +38 -37
- package/dist/browser-notifications/index.js.map +1 -1
- package/dist/chunks/{array-D-_yMMUK.js → array-bd7LYFto.js} +1 -3
- package/dist/chunks/{array-D-_yMMUK.js.map → array-bd7LYFto.js.map} +1 -1
- package/dist/chunks/{dom-BK22UmgF.js → dom-ZSeWZ0Gg.js} +103 -98
- package/dist/chunks/dom-ZSeWZ0Gg.js.map +1 -0
- package/dist/chunks/formatDate-CNPcfNte.js +133 -0
- package/dist/chunks/formatDate-CNPcfNte.js.map +1 -0
- package/dist/chunks/{formatters-rxriDRPk.js → formatters-CO40zvVB.js} +496 -497
- package/dist/chunks/formatters-CO40zvVB.js.map +1 -0
- package/dist/chunks/{formulas-BXT_XBWI.js → formulas-Y0HOcFhe.js} +90 -86
- package/dist/chunks/formulas-Y0HOcFhe.js.map +1 -0
- package/dist/chunks/hasSignatureBytes-D2wO_Myl.js +11 -0
- package/dist/chunks/hasSignatureBytes-D2wO_Myl.js.map +1 -0
- package/dist/chunks/keyboardConstants-BZKskWsm.js +6 -0
- package/dist/chunks/keyboardConstants-BZKskWsm.js.map +1 -0
- package/dist/chunks/media-imBOXWwa.js +192 -0
- package/dist/chunks/media-imBOXWwa.js.map +1 -0
- package/dist/chunks/mimeTypeConstants-BzONV-b1.js +6 -0
- package/dist/chunks/mimeTypeConstants-BzONV-b1.js.map +1 -0
- package/dist/chunks/{query-client-CVRfrYZM.js → query-client-D0HQZ84w.js} +142 -142
- package/dist/chunks/query-client-D0HQZ84w.js.map +1 -0
- package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js +766 -0
- package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js.map +1 -0
- package/dist/chunks/scalarTypeConstants-CnSsjpGO.js +6 -0
- package/dist/chunks/scalarTypeConstants-CnSsjpGO.js.map +1 -0
- package/dist/chunks/utils-DW0Yso1Q.js +210 -0
- package/dist/chunks/utils-DW0Yso1Q.js.map +1 -0
- package/dist/chunks/{uuid-CUJPAbRY.js → uuid-izDzLv18.js} +1 -2
- package/dist/chunks/uuid-izDzLv18.js.map +1 -0
- package/dist/chunks/validate-8URYKKly.js +613 -0
- package/dist/chunks/validate-8URYKKly.js.map +1 -0
- package/dist/copy/index.js +5 -5
- package/dist/copy/index.js.map +1 -1
- package/dist/copy/useCopyFeedback.d.ts.map +1 -1
- package/dist/crypto/hashString.d.ts.map +1 -1
- package/dist/crypto/hexadecimalConstants.d.ts +3 -0
- package/dist/crypto/hexadecimalConstants.d.ts.map +1 -0
- package/dist/crypto/index.js +25 -24
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/uuid.d.ts.map +1 -1
- package/dist/date-segments/index.js +81 -81
- package/dist/date-segments/index.js.map +1 -1
- package/dist/date-segments/mask.d.ts +13 -3
- package/dist/date-segments/mask.d.ts.map +1 -1
- package/dist/decimal/decimalConstants.d.ts +3 -0
- package/dist/decimal/decimalConstants.d.ts.map +1 -0
- package/dist/decimal/index.js +0 -2
- package/dist/decimal/index.js.map +1 -1
- package/dist/decimal/normalizeDecimal.d.ts.map +1 -1
- package/dist/decimal/normalizeDecimalLiteral.d.ts.map +1 -1
- package/dist/decimal/resolveDecimalMaxLength.d.ts.map +1 -1
- package/dist/decimal/sumDecimals.d.ts.map +1 -1
- package/dist/decimal/writeDecimalParts.d.ts.map +1 -1
- package/dist/dom/document-scroll/acquireDocumentScrollLock.d.ts.map +1 -1
- package/dist/dom/document-scroll/attachDocumentTouchScrollGuard.d.ts.map +1 -1
- package/dist/dom/document-scroll/canConsumeVerticalTouchScroll.d.ts.map +1 -1
- package/dist/dom/domEventConstants.d.ts +4 -0
- package/dist/dom/domEventConstants.d.ts.map +1 -0
- package/dist/dom/domScrollConstants.d.ts +3 -0
- package/dist/dom/domScrollConstants.d.ts.map +1 -0
- package/dist/dom/index.js +1 -1
- package/dist/dom/installFaviconOverride.d.ts.map +1 -1
- package/dist/dom/overlayFocusConstants.d.ts +4 -0
- package/dist/dom/overlayFocusConstants.d.ts.map +1 -0
- package/dist/dom/scroll-anchor/captureScrollAnchor.d.ts.map +1 -1
- package/dist/dom/useClickOutside.d.ts +1 -1
- package/dist/dom/useClickOutside.d.ts.map +1 -1
- package/dist/dom/useEscapeDismiss.d.ts +1 -1
- package/dist/dom/useEscapeDismiss.d.ts.map +1 -1
- package/dist/dom/useFocusTrap.d.ts.map +1 -1
- package/dist/dom/useIsTouchDevice.d.ts.map +1 -1
- package/dist/dom/useOverlayFocus.d.ts +3 -2
- package/dist/dom/useOverlayFocus.d.ts.map +1 -1
- package/dist/dom/visual-viewport/attachVisualViewportFrame.d.ts.map +1 -1
- package/dist/error-report/breadcrumbs.d.ts.map +1 -1
- package/dist/error-report/capture.d.ts.map +1 -1
- package/dist/error-report/captureOptions.d.ts +3 -2
- package/dist/error-report/captureOptions.d.ts.map +1 -1
- package/dist/error-report/capturePolicyConstants.d.ts +4 -0
- package/dist/error-report/capturePolicyConstants.d.ts.map +1 -0
- package/dist/error-report/dataPreview.d.ts.map +1 -1
- package/dist/error-report/diagnostics.d.ts.map +1 -1
- package/dist/error-report/drafts.d.ts.map +1 -1
- package/dist/error-report/environment.d.ts.map +1 -1
- package/dist/error-report/errorInfo.d.ts.map +1 -1
- package/dist/error-report/errorReportCaptureLimits.d.ts +26 -0
- package/dist/error-report/errorReportCaptureLimits.d.ts.map +1 -0
- package/dist/error-report/errorReportContractConstants.d.ts +32 -0
- package/dist/error-report/errorReportContractConstants.d.ts.map +1 -0
- package/dist/error-report/index.js +586 -587
- package/dist/error-report/index.js.map +1 -1
- package/dist/error-report/payload.d.ts.map +1 -1
- package/dist/error-report/queue.d.ts.map +1 -1
- package/dist/error-report/queueContract.d.ts +7 -6
- package/dist/error-report/queueContract.d.ts.map +1 -1
- package/dist/error-report/queueRecord.d.ts.map +1 -1
- package/dist/error-report/queueResultConstants.d.ts +14 -0
- package/dist/error-report/queueResultConstants.d.ts.map +1 -0
- package/dist/error-report/runtimeDeduplication.d.ts +2 -1
- package/dist/error-report/runtimeDeduplication.d.ts.map +1 -1
- package/dist/error-report/safeValue.d.ts.map +1 -1
- package/dist/error-report/safeValueMarkerConstants.d.ts +16 -0
- package/dist/error-report/safeValueMarkerConstants.d.ts.map +1 -0
- package/dist/error-report/schema.d.ts.map +1 -1
- package/dist/error-report/types.d.ts +10 -8
- package/dist/error-report/types.d.ts.map +1 -1
- package/dist/error-report-source-maps/archive.d.ts.map +1 -1
- package/dist/error-report-source-maps/artifact.d.ts.map +1 -1
- package/dist/error-report-source-maps/index.js +238 -238
- package/dist/error-report-source-maps/index.js.map +1 -1
- package/dist/error-report-source-maps/manifest.d.ts.map +1 -1
- package/dist/error-report-source-maps/package.d.ts.map +1 -1
- package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts +11 -0
- package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts.map +1 -0
- package/dist/error-report-source-maps/symbolicate.d.ts.map +1 -1
- package/dist/error-report-source-maps/symbolicationResultConstants.d.ts +6 -0
- package/dist/error-report-source-maps/symbolicationResultConstants.d.ts.map +1 -0
- package/dist/error-report-source-maps/types.d.ts +4 -2
- package/dist/error-report-source-maps/types.d.ts.map +1 -1
- package/dist/excel/excel.d.ts.map +1 -1
- package/dist/excel/excelWorkbookConstants.d.ts +6 -0
- package/dist/excel/excelWorkbookConstants.d.ts.map +1 -0
- package/dist/excel/index.js +117 -116
- package/dist/excel/index.js.map +1 -1
- package/dist/excel/matrixWorkbook.d.ts +6 -1
- package/dist/excel/matrixWorkbook.d.ts.map +1 -1
- package/dist/excel/tableExport.d.ts.map +1 -1
- package/dist/file/checkFileSignature.d.ts.map +1 -1
- package/dist/file/contentDisposition.d.ts.map +1 -1
- package/dist/file/fileSignatureConstants.d.ts +14 -18
- package/dist/file/fileSignatureConstants.d.ts.map +1 -1
- package/dist/file/fileSignatureTypes.d.ts +3 -3
- package/dist/file/fileSignatureTypes.d.ts.map +1 -1
- package/dist/file/image/imageReadConstants.d.ts +3 -0
- package/dist/file/image/imageReadConstants.d.ts.map +1 -0
- package/dist/file/image/readImageFile.d.ts +3 -2
- package/dist/file/image/readImageFile.d.ts.map +1 -1
- package/dist/file/image/types.d.ts +5 -3
- package/dist/file/image/types.d.ts.map +1 -1
- package/dist/file/index.js +139 -165
- package/dist/file/index.js.map +1 -1
- package/dist/file/mimeType.d.ts.map +1 -1
- package/dist/file/mimeTypeConstants.d.ts +18 -0
- package/dist/file/mimeTypeConstants.d.ts.map +1 -0
- package/dist/file/read-file/assert.d.ts.map +1 -1
- package/dist/file/read-file/readFile.d.ts +3 -11
- package/dist/file/read-file/readFile.d.ts.map +1 -1
- package/dist/file/read-file/readFileConstants.d.ts +13 -0
- package/dist/file/read-file/readFileConstants.d.ts.map +1 -0
- package/dist/file/read-file/types.d.ts +7 -6
- package/dist/file/read-file/types.d.ts.map +1 -1
- package/dist/file/signature/checkArchiveSignature.d.ts.map +1 -1
- package/dist/file-system/fileSystemConstants.d.ts +5 -0
- package/dist/file-system/fileSystemConstants.d.ts.map +1 -0
- package/dist/file-system/fileSystemTypes.d.ts +2 -1
- package/dist/file-system/fileSystemTypes.d.ts.map +1 -1
- package/dist/file-system/index.js +11 -10
- package/dist/file-system/index.js.map +1 -1
- package/dist/file-system/resolvePathInsideRoot.d.ts.map +1 -1
- package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -1
- package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -1
- package/dist/formatters/date/calendarDate.d.ts.map +1 -1
- package/dist/formatters/date/calendarDateConstants.d.ts +13 -0
- package/dist/formatters/date/calendarDateConstants.d.ts.map +1 -0
- package/dist/formatters/date/calendarPeriod.d.ts +11 -2
- package/dist/formatters/date/calendarPeriod.d.ts.map +1 -1
- package/dist/formatters/date/dateFormatConstants.d.ts +17 -0
- package/dist/formatters/date/dateFormatConstants.d.ts.map +1 -0
- package/dist/formatters/date/datePatternConstants.d.ts +16 -0
- package/dist/formatters/date/datePatternConstants.d.ts.map +1 -0
- package/dist/formatters/date/datePresetNameConstants.d.ts +27 -0
- package/dist/formatters/date/datePresetNameConstants.d.ts.map +1 -0
- package/dist/formatters/date/dateRange.d.ts +3 -1
- package/dist/formatters/date/dateRange.d.ts.map +1 -1
- package/dist/formatters/date/dateValueConstants.d.ts +15 -0
- package/dist/formatters/date/dateValueConstants.d.ts.map +1 -0
- package/dist/formatters/date/educationDate.d.ts.map +1 -1
- package/dist/formatters/date/formatDate.d.ts.map +1 -1
- package/dist/formatters/date/formatInstantDateTime.d.ts.map +1 -1
- package/dist/formatters/date/parseDate.d.ts.map +1 -1
- package/dist/formatters/date/pattern.d.ts.map +1 -1
- package/dist/formatters/date/presets.d.ts.map +1 -1
- package/dist/formatters/date/types.d.ts +8 -6
- package/dist/formatters/date/types.d.ts.map +1 -1
- package/dist/formatters/formatDurationMinutes.d.ts.map +1 -1
- package/dist/formatters/formatFileSize.d.ts.map +1 -1
- package/dist/formatters/formatPhone.d.ts.map +1 -1
- package/dist/formatters/index.js +6 -6
- package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -1
- package/dist/formatters/number/compact.d.ts.map +1 -1
- package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -1
- package/dist/formatters/number/formatNumber.d.ts.map +1 -1
- package/dist/formatters/number/numberFormatConstants.d.ts +11 -0
- package/dist/formatters/number/numberFormatConstants.d.ts.map +1 -0
- package/dist/formatters/number/numberPresetNameConstants.d.ts +16 -0
- package/dist/formatters/number/numberPresetNameConstants.d.ts.map +1 -0
- package/dist/formatters/number/parseNumber.d.ts.map +1 -1
- package/dist/formatters/number/presets.d.ts.map +1 -1
- package/dist/formatters/number/types.d.ts +2 -1
- package/dist/formatters/number/types.d.ts.map +1 -1
- package/dist/formatters/pipeline/clone.d.ts.map +1 -1
- package/dist/formatters/pipeline/definitions.d.ts.map +1 -1
- package/dist/formatters/pipeline/dependencies.d.ts.map +1 -1
- package/dist/formatters/pipeline/execute.d.ts +4 -1
- package/dist/formatters/pipeline/execute.d.ts.map +1 -1
- package/dist/formatters/pipeline/formattersPipelineConstants.d.ts +19 -0
- package/dist/formatters/pipeline/formattersPipelineConstants.d.ts.map +1 -0
- package/dist/formatters/pipeline/normalize.d.ts.map +1 -1
- package/dist/formatters/pipeline/pipelineValidationConstants.d.ts +40 -0
- package/dist/formatters/pipeline/pipelineValidationConstants.d.ts.map +1 -0
- package/dist/formatters/pipeline/registry.d.ts +1 -1
- package/dist/formatters/pipeline/registry.d.ts.map +1 -1
- package/dist/formatters/pipeline/rekey.d.ts.map +1 -1
- package/dist/formatters/pipeline/runtime.d.ts.map +1 -1
- package/dist/formatters/pipeline/types.d.ts +24 -21
- package/dist/formatters/pipeline/types.d.ts.map +1 -1
- package/dist/formatters/pipeline/validate.d.ts +2 -1
- package/dist/formatters/pipeline/validate.d.ts.map +1 -1
- package/dist/formatters/strings/spaceCharacterConstants.d.ts +5 -0
- package/dist/formatters/strings/spaceCharacterConstants.d.ts.map +1 -0
- package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -1
- package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -1
- package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -1
- package/dist/formatters/valueState/presentation.d.ts.map +1 -1
- package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -1
- package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -1
- package/dist/formatters/valueState/types.d.ts +2 -1
- package/dist/formatters/valueState/types.d.ts.map +1 -1
- package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -1
- package/dist/formatters/valueState/valueStateResolverConstants.d.ts +6 -0
- package/dist/formatters/valueState/valueStateResolverConstants.d.ts.map +1 -0
- package/dist/formulas/execute.d.ts +3 -2
- package/dist/formulas/execute.d.ts.map +1 -1
- package/dist/formulas/index.js +1 -1
- package/dist/formulas/isTableFormulaDependency.d.ts.map +1 -1
- package/dist/formulas/tableFormulaConstants.d.ts +12 -0
- package/dist/formulas/tableFormulaConstants.d.ts.map +1 -0
- package/dist/formulas/types.d.ts +2 -1
- package/dist/formulas/types.d.ts.map +1 -1
- package/dist/formulas/validate.d.ts +2 -1
- package/dist/formulas/validate.d.ts.map +1 -1
- package/dist/hooks/index.js +110 -107
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -1
- package/dist/hooks/useDndSortableSensors.d.ts.map +1 -1
- package/dist/hooks/useFloatingListbox.d.ts +15 -33
- package/dist/hooks/useFloatingListbox.d.ts.map +1 -1
- package/dist/http/index.js +8 -7
- package/dist/http/index.js.map +1 -1
- package/dist/http/textResponse.d.ts.map +1 -1
- package/dist/indexed-records/createIndexedRecordsSchema.d.ts.map +1 -1
- package/dist/indexed-records/schema.js +24 -23
- package/dist/indexed-records/schema.js.map +1 -1
- package/dist/media/breakpointConstants.d.ts +5 -0
- package/dist/media/breakpointConstants.d.ts.map +1 -0
- package/dist/media/breakpoints.d.ts +2 -1
- package/dist/media/breakpoints.d.ts.map +1 -1
- package/dist/media/createNotificationTonePlayer.d.ts.map +1 -1
- package/dist/media/getCurrentFontSize.d.ts.map +1 -1
- package/dist/media/index.js +1 -1
- package/dist/media/mediaQueryConstants.d.ts +3 -0
- package/dist/media/mediaQueryConstants.d.ts.map +1 -0
- package/dist/media/responsive.d.ts +1 -1
- package/dist/media/responsive.d.ts.map +1 -1
- package/dist/media/useMatchMedia.d.ts.map +1 -1
- package/dist/media/useMediaQuery.d.ts.map +1 -1
- package/dist/metadata/baseMetaTypes.d.ts.map +1 -1
- package/dist/metadata/metadataTypes.d.ts +8 -7
- package/dist/metadata/metadataTypes.d.ts.map +1 -1
- package/dist/metadata/scalarTypeClassification.d.ts.map +1 -1
- package/dist/metadata/scalarTypeConstants.d.ts +21 -0
- package/dist/metadata/scalarTypeConstants.d.ts.map +1 -0
- package/dist/notifications/index.js +62 -62
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notificationTypeConstants.d.ts +6 -0
- package/dist/notifications/notificationTypeConstants.d.ts.map +1 -0
- package/dist/notifications/notify.d.ts.map +1 -1
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/notifications/types.d.ts +2 -1
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/number-scale/index.js +47 -46
- package/dist/number-scale/index.js.map +1 -1
- package/dist/number-scale/marksPositionConstants.d.ts +4 -0
- package/dist/number-scale/marksPositionConstants.d.ts.map +1 -0
- package/dist/number-scale/numberScale.d.ts +1 -1
- package/dist/number-scale/numberScale.d.ts.map +1 -1
- package/dist/number-scale/types.d.ts +2 -1
- package/dist/number-scale/types.d.ts.map +1 -1
- package/dist/odata-service/builder.d.ts.map +1 -1
- package/dist/odata-service/columns.d.ts.map +1 -1
- package/dist/odata-service/entityOperationConstants.d.ts +4 -0
- package/dist/odata-service/entityOperationConstants.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitionConstants.d.ts +24 -0
- package/dist/odata-service/filterDefinitionConstants.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitions.d.ts +19 -17
- package/dist/odata-service/filterDefinitions.d.ts.map +1 -1
- package/dist/odata-service/filterOperationConstants.d.ts +14 -0
- package/dist/odata-service/filterOperationConstants.d.ts.map +1 -0
- package/dist/odata-service/filters.d.ts.map +1 -1
- package/dist/odata-service/formatters.d.ts.map +1 -1
- package/dist/odata-service/index.js +439 -433
- package/dist/odata-service/index.js.map +1 -1
- package/dist/odata-service/odataMetadataConstants.d.ts +8 -0
- package/dist/odata-service/odataMetadataConstants.d.ts.map +1 -0
- package/dist/odata-service/parser.d.ts +1 -3
- package/dist/odata-service/parser.d.ts.map +1 -1
- package/dist/odata-service/schema.d.ts.map +1 -1
- package/dist/odata-service/sorts.d.ts.map +1 -1
- package/dist/odata-service/sqlFilters.d.ts +10 -5
- package/dist/odata-service/sqlFilters.d.ts.map +1 -1
- package/dist/odata-service/types.d.ts +5 -3
- package/dist/odata-service/types.d.ts.map +1 -1
- package/dist/pwa/index.js +72 -71
- package/dist/pwa/index.js.map +1 -1
- package/dist/pwa/sw-cache-policy.js +47 -47
- package/dist/pwa/sw-cache-policy.js.map +1 -1
- package/dist/pwa/swCachePolicy.d.ts +5 -1
- package/dist/pwa/swCachePolicy.d.ts.map +1 -1
- package/dist/pwa/useBrowserOnlineStatus.d.ts.map +1 -1
- package/dist/query-client/broadcast.d.ts +4 -3
- package/dist/query-client/broadcast.d.ts.map +1 -1
- package/dist/query-client/createQueryRestoreSchedulerGuard.d.ts.map +1 -1
- package/dist/query-client/createQueryRestoreStorage.d.ts.map +1 -1
- package/dist/query-client/index.js +1 -1
- package/dist/query-client/invalidationBroadcast.d.ts +2 -1
- package/dist/query-client/invalidationBroadcast.d.ts.map +1 -1
- package/dist/query-client/persistence.d.ts +9 -6
- package/dist/query-client/persistence.d.ts.map +1 -1
- package/dist/query-client/queryCacheEventConstants.d.ts +11 -0
- package/dist/query-client/queryCacheEventConstants.d.ts.map +1 -0
- package/dist/query-client/queryClient.d.ts +2 -1
- package/dist/query-client/queryClient.d.ts.map +1 -1
- package/dist/query-client/queryMeta.d.ts.map +1 -1
- package/dist/query-client/sessionPersistenceConstants.d.ts +5 -0
- package/dist/query-client/sessionPersistenceConstants.d.ts.map +1 -0
- package/dist/query-client/sessionScoped.d.ts.map +1 -1
- package/dist/query-client/sessionScopedResetConstants.d.ts +4 -0
- package/dist/query-client/sessionScopedResetConstants.d.ts.map +1 -0
- package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts +2 -1
- package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts.map +1 -1
- package/dist/seo/index.js +0 -1
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/seo.d.ts +3 -2
- package/dist/seo/seo.d.ts.map +1 -1
- package/dist/seo/seoContentTypeConstants.d.ts +6 -0
- package/dist/seo/seoContentTypeConstants.d.ts.map +1 -0
- package/dist/seo/types.d.ts +2 -1
- package/dist/seo/types.d.ts.map +1 -1
- package/dist/session-storage/index.js +1 -1
- package/dist/table/cellSelection.d.ts.map +1 -1
- package/dist/table/columnSizing.d.ts +11 -3
- package/dist/table/columnSizing.d.ts.map +1 -1
- package/dist/table/index.d.ts +1 -0
- package/dist/table/index.d.ts.map +1 -1
- package/dist/table/index.js +102 -92
- package/dist/table/index.js.map +1 -1
- package/dist/table/odataAdapter.d.ts +3 -3
- package/dist/table/odataAdapter.d.ts.map +1 -1
- package/dist/table/resolveTableColumnsWidth.d.ts +9 -0
- package/dist/table/resolveTableColumnsWidth.d.ts.map +1 -0
- package/dist/table/selection.d.ts +2 -2
- package/dist/table/selection.d.ts.map +1 -1
- package/dist/table/tableColumnConstants.d.ts +5 -0
- package/dist/table/tableColumnConstants.d.ts.map +1 -0
- package/dist/table/tableSelectionConstants.d.ts +8 -0
- package/dist/table/tableSelectionConstants.d.ts.map +1 -0
- package/dist/table/tanStackFeatures.d.ts +8 -8
- package/dist/table/types.d.ts +6 -4
- package/dist/table/types.d.ts.map +1 -1
- package/dist/table/useTableRowSelection.d.ts +2 -2
- package/dist/table/useTableRowSelection.d.ts.map +1 -1
- package/dist/table-document/index.js +88 -87
- package/dist/table-document/index.js.map +1 -1
- package/dist/table-document/insertTableDocumentAxis.d.ts +2 -1
- package/dist/table-document/insertTableDocumentAxis.d.ts.map +1 -1
- package/dist/table-document/tableDocument.d.ts +2 -1
- package/dist/table-document/tableDocument.d.ts.map +1 -1
- package/dist/table-document/tableDocumentAxisGroups.d.ts +4 -3
- package/dist/table-document/tableDocumentAxisGroups.d.ts.map +1 -1
- package/dist/table-document/tableDocumentConstants.d.ts +8 -0
- package/dist/table-document/tableDocumentConstants.d.ts.map +1 -0
- package/dist/table-document/tableDocumentGeometry.d.ts.map +1 -1
- package/dist/three-scene/index.js +32 -32
- package/dist/three-scene/index.js.map +1 -1
- package/dist/three-scene/threeSceneAvailability.d.ts +4 -3
- package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -1
- package/dist/three-scene/threeSceneConstants.d.ts +14 -0
- package/dist/three-scene/threeSceneConstants.d.ts.map +1 -0
- package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -1
- package/dist/tree-table/index.js +1 -1
- package/dist/types/abapBooleanConstants.d.ts +4 -0
- package/dist/types/abapBooleanConstants.d.ts.map +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/types.d.ts +4 -2
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/valueStateConstants.d.ts +8 -0
- package/dist/types/valueStateConstants.d.ts.map +1 -0
- package/dist/utils/cloneFunctionStrategyConstants.d.ts +4 -0
- package/dist/utils/cloneFunctionStrategyConstants.d.ts.map +1 -0
- package/dist/utils/createLazyComponent.d.ts.map +1 -1
- package/dist/utils/deepCloneWithoutFunctions.d.ts +2 -1
- package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -1
- package/dist/utils/deepCopyWithoutFunctions.d.ts +2 -1
- package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -1
- package/dist/utils/index.js +2 -209
- package/dist/utils/keyboard.d.ts +2 -1
- package/dist/utils/keyboard.d.ts.map +1 -1
- package/dist/utils/keyboardConstants.d.ts +16 -0
- package/dist/utils/keyboardConstants.d.ts.map +1 -0
- package/dist/validators/index.js +3 -3
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/validateUrl.d.ts.map +1 -1
- package/dist/value-transformers/execute.d.ts.map +1 -1
- package/dist/value-transformers/index.js +9 -6
- package/dist/value-transformers/index.js.map +1 -1
- package/dist/value-transformers/types.d.ts +3 -2
- package/dist/value-transformers/types.d.ts.map +1 -1
- package/dist/value-transformers/valueTransformerConstants.d.ts +4 -0
- package/dist/value-transformers/valueTransformerConstants.d.ts.map +1 -0
- package/package.json +6 -5
- package/src/binary/README.mdx +1 -1
- package/src/dom/README.mdx +1 -1
- package/src/query-client/README.mdx +4 -4
- package/src/table/README.mdx +49 -23
- package/dist/chunks/dom-BK22UmgF.js.map +0 -1
- package/dist/chunks/formatDate-BUvpRI7H.js +0 -133
- package/dist/chunks/formatDate-BUvpRI7H.js.map +0 -1
- package/dist/chunks/formatters-rxriDRPk.js.map +0 -1
- package/dist/chunks/formulas-BXT_XBWI.js.map +0 -1
- package/dist/chunks/media-WK38KtMl.js +0 -191
- package/dist/chunks/media-WK38KtMl.js.map +0 -1
- package/dist/chunks/query-client-CVRfrYZM.js.map +0 -1
- package/dist/chunks/scalarTypeClassification-BZcFmIyR.js +0 -764
- package/dist/chunks/scalarTypeClassification-BZcFmIyR.js.map +0 -1
- package/dist/chunks/uuid-CUJPAbRY.js.map +0 -1
- package/dist/chunks/validate-DsUR-bFF.js +0 -608
- package/dist/chunks/validate-DsUR-bFF.js.map +0 -1
- package/dist/utils/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/analytical-table/runtime/aggregation.ts","../../src/analytical-table/definition/calculations.ts","../../src/analytical-table/definition/compileAnalyticalTableDefinition.ts","../../src/analytical-table/definition/validateAnalyticalView.ts","../../src/analytical-table/projections/indexAnalyticalRows.ts","../../src/analytical-table/projections/resolveRowsProjection.ts","../../src/analytical-table/projections/expansion.ts","../../src/analytical-table/runtime/totals.ts","../../src/analytical-table/runtime/valueComparison.ts","../../src/analytical-table/runtime/grouping.ts","../../src/analytical-table/runtime/buildGroupedModel.ts","../../src/analytical-table/runtime/filtering.ts","../../src/analytical-table/runtime/hierarchy.ts","../../src/analytical-table/runtime/sorting.ts","../../src/analytical-table/runtime/createAnalyticalTableRuntime.ts","../../src/analytical-table/buildAnalyticalTableModel.ts","../../src/analytical-table/dynamic-columns/dateColumns.ts","../../src/analytical-table/projections/exportProjection.ts"],"sourcesContent":["import { type AnalyticalAggregation } from \"../types\";\n\n/** null/пустые/нечисловые значения не превращаются в ноль; count считает непустые факты. */\nexport function aggregateAnalyticalValues(values: readonly unknown[], aggregation: AnalyticalAggregation): number | null {\n\tconst present = values.filter((value) => value !== null && value !== undefined && value !== \"\");\n\tif (aggregation === \"count\") return present.length;\n\n\tlet count = 0;\n\tlet sum = 0;\n\tlet minimum = Infinity;\n\tlet maximum = -Infinity;\n\n\tfor (const value of present) {\n\t\tif (typeof value !== \"number\" || !Number.isFinite(value)) continue;\n\t\tcount += 1;\n\t\tsum += value;\n\t\tminimum = Math.min(minimum, value);\n\t\tmaximum = Math.max(maximum, value);\n\t}\n\n\tif (count === 0) return null;\n\n\tswitch (aggregation) {\n\t\tcase \"sum\":\n\t\t\treturn sum;\n\t\tcase \"min\":\n\t\t\treturn minimum;\n\t\tcase \"max\":\n\t\t\treturn maximum;\n\t\tcase \"avg\":\n\t\t\treturn sum / count;\n\t}\n}\n","import { arrayDeduplicate } from \"../../array\";\nimport { compileTableFormula } from \"../../formulas\";\nimport { type AnalyticalCalculationPlan, type AnalyticalCalculationStep, type AnalyticalColumn, type AnalyticalValues } from \"../types\";\n\n/** Проверяет граф зависимостей до расчёта строк и компилирует каждую формулу один раз. */\nexport function createAnalyticalCalculationPlan<T>(\n\tcolumns: readonly AnalyticalColumn<T>[],\n\trequiredColumnIds: readonly string[] = columns.map((column) => column.id)\n): AnalyticalCalculationPlan {\n\tconst byId = new Map(columns.map((column) => [column.id, column]));\n\tif (byId.size !== columns.length) throw new Error(\"Идентификаторы аналитических столбцов должны быть уникальны.\");\n\tconst visited = new Set<string>();\n\tconst visiting = new Set<string>();\n\tconst required: string[] = [];\n\tconst steps: AnalyticalCalculationStep[] = [];\n\tconst visit = (id: string): void => {\n\t\tif (visited.has(id)) return;\n\t\tif (visiting.has(id)) throw new Error(`Циклическая зависимость аналитического столбца: ${id}`);\n\t\tconst column = byId.get(id);\n\t\tif (!column) throw new Error(`Неизвестная зависимость аналитического столбца: ${id}`);\n\t\tif (column.formula && column.calculate) throw new Error(`Столбец ${id} содержит два способа вычисления.`);\n\t\tvisiting.add(id);\n\t\tconst dependencies = arrayDeduplicate(column.formula?.dependencies ?? column.calculate?.dependencies ?? []);\n\t\tfor (const dependency of dependencies) visit(dependency);\n\t\tif (column.formula) {\n\t\t\t// Порядок и повторы аргументов формулы сохраняются; уникален лишь граф зависимостей.\n\t\t\tconst compiled = compileTableFormula({ formulaId: column.formula.formulaId, keys: column.formula.dependencies });\n\t\t\tif (!compiled.ok) throw new Error(`Формула столбца ${id} не зарегистрирована: ${column.formula.formulaId}`);\n\t\t\tsteps.push({\n\t\t\t\tcolumnId: id,\n\t\t\t\tdependencies,\n\t\t\t\tcompute: (values) => {\n\t\t\t\t\tconst result = compiled.execute(values);\n\t\t\t\t\tif (!result.ok) throw new Error(`Ошибка формулы столбца ${id}: ${result.reason}`);\n\t\t\t\t\treturn result.value;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (column.calculate) {\n\t\t\tsteps.push({ columnId: id, dependencies, compute: column.calculate.compute });\n\t\t}\n\t\tvisiting.delete(id);\n\t\tvisited.add(id);\n\t\trequired.push(id);\n\t};\n\tfor (const id of requiredColumnIds) visit(id);\n\treturn { steps, requiredColumnIds: required };\n}\n\n/** Возвращает отдельный набор значений; исходный DTO и значения Query не мутируются. */\nexport function calculateAnalyticalValues(values: AnalyticalValues, plan: AnalyticalCalculationPlan): AnalyticalValues {\n\tconst result: Record<string, unknown> = { ...values };\n\tfor (const step of plan.steps) result[step.columnId] = step.compute(result);\n\treturn result;\n}\n","import { createAnalyticalCalculationPlan } from \"./calculations\";\nimport { type AnalyticalTableDefinition, type CompiledAnalyticalTableDefinition } from \"./types\";\n\n/** Проверяет единый каталог полей, включая служебные зависимости невидимых вычислений. */\nexport function compileAnalyticalTableDefinition<T>(definition: AnalyticalTableDefinition<T>): CompiledAnalyticalTableDefinition<T> {\n\tconst fields = [...definition.columns, ...(definition.dataFields ?? [])];\n\tconst calculations = createAnalyticalCalculationPlan(fields);\n\n\treturn {\n\t\tcolumns: definition.columns,\n\t\tfieldsById: new Map(fields.map((field) => [field.id, field])),\n\t\tcalculations,\n\t\taggregateFields: fields.filter((field) => field.aggregate !== undefined),\n\t\tisAggregateRow: definition.isAggregateRow,\n\t\taggregate: definition.aggregate,\n\t\tgrandTotals: definition.grandTotals !== false,\n\t\tgrandTotalsScope: definition.grandTotalsScope ?? \"filtered\"\n\t};\n}\n","import { type AnalyticalViewState } from \"../runtime/types\";\n\nimport { type CompiledAnalyticalTableDefinition } from \"./types\";\n\n/** Состояние ссылается на проверенное описание; grouping keys могут быть служебными полями values. */\nexport function validateAnalyticalView<T>(definition: CompiledAnalyticalTableDefinition<T>, state: AnalyticalViewState): void {\n\tfor (const entry of [...(state.sorting ?? []), ...(state.filters ?? [])]) {\n\t\tif (!definition.fieldsById.has(entry.id)) {\n\t\t\tthrow new Error(`Неизвестный аналитический столбец: ${entry.id}`);\n\t\t}\n\t}\n\n\tconst levelIds = new Set<string>();\n\tfor (const level of state.grouping ?? []) {\n\t\tif (levelIds.has(level.id)) {\n\t\t\tthrow new Error(\"Идентификаторы уровней группировки должны быть уникальны.\");\n\t\t}\n\t\tif (level.keyColumnIds.length === 0) {\n\t\t\tthrow new Error(`Уровень ${level.id} не содержит ключей группировки.`);\n\t\t}\n\t\tlevelIds.add(level.id);\n\t}\n}\n","import { type AnalyticalModelRow, type AnalyticalTableModel } from \"../types\";\n\ntype RowTraversalFrame<T> = {\n\treadonly rows: readonly AnalyticalModelRow<T>[];\n\treadonly visible: boolean;\n\tnextIndex: number;\n};\n\n/** Строит согласованные индексы за один проход, не расходуя стек вызовов на глубину дерева. */\nexport function indexAnalyticalRows<T>(\n\trows: readonly AnalyticalModelRow<T>[]\n): Pick<AnalyticalTableModel<T>, \"flatRows\" | \"visibleRows\" | \"rowById\"> {\n\tconst flatRows: AnalyticalModelRow<T>[] = [];\n\tconst visibleRows: AnalyticalModelRow<T>[] = [];\n\tconst rowById = new Map<string, AnalyticalModelRow<T>>();\n\tconst stack: RowTraversalFrame<T>[] = [{ rows, visible: true, nextIndex: 0 }];\n\n\twhile (stack.length > 0) {\n\t\tconst frame = stack[stack.length - 1];\n\t\tif (frame.nextIndex === frame.rows.length) {\n\t\t\tstack.pop();\n\t\t\tcontinue;\n\t\t}\n\t\tconst row = frame.rows[frame.nextIndex++];\n\t\tflatRows.push(row);\n\t\trowById.set(row.id, row);\n\t\tif (frame.visible) visibleRows.push(row);\n\t\tif (row.children.length > 0) {\n\t\t\tstack.push({ rows: row.children, visible: frame.visible && row.isExpanded, nextIndex: 0 });\n\t\t}\n\t}\n\treturn { flatRows, visibleRows, rowById };\n}\n","import { type AnalyticalModelRow, type AnalyticalTableModel } from \"../types\";\n\nimport { indexAnalyticalRows } from \"./indexAnalyticalRows\";\n\n/** Любая проекция дерева заменяет индексы вместе с узлами, сохраняя уже рассчитанные итоги. */\nexport function resolveRowsProjection<T>(model: AnalyticalTableModel<T>, rows: readonly AnalyticalModelRow<T>[]): AnalyticalTableModel<T> {\n\tif (rows === model.rows) return model;\n\treturn { ...model, rows, ...indexAnalyticalRows(rows) };\n}\n","import { type AnalyticalModelRow, type AnalyticalTableModel } from \"../types\";\n\nimport { resolveRowsProjection } from \"./resolveRowsProjection\";\n\n/** Копирует массив только при замене его непосредственного ребёнка. */\nfunction replaceExpandedRows<T>(\n\trows: readonly AnalyticalModelRow<T>[],\n\treplacements: ReadonlyMap<AnalyticalModelRow<T>, AnalyticalModelRow<T>>\n): readonly AnalyticalModelRow<T>[] {\n\tlet projected: AnalyticalModelRow<T>[] | undefined;\n\tfor (let index = 0; index < rows.length; index++) {\n\t\tconst replacement = replacements.get(rows[index]);\n\t\tif (!replacement) continue;\n\t\tprojected ??= rows.slice();\n\t\tprojected[index] = replacement;\n\t}\n\treturn projected ?? rows;\n}\n\n/** Раскрытие меняет только затронутые ветви; формулы и итоги остаются результатом базовой модели. */\nexport function projectAnalyticalTableExpansion<T>(\n\tmodel: AnalyticalTableModel<T>,\n\texpandedRowIds: readonly string[] | \"all\"\n): AnalyticalTableModel<T> {\n\tconst expandAll = expandedRowIds === \"all\";\n\tconst expanded = new Set(expandAll ? [] : expandedRowIds);\n\tconst replacements = new Map<AnalyticalModelRow<T>, AnalyticalModelRow<T>>();\n\n\t// flatRows уже содержит обход родитель → дети. Обратный проход позволяет\n\t// заменить ребёнка до родителя без рекурсии и сохранить ссылки остальных ветвей.\n\tfor (let index = model.flatRows.length - 1; index >= 0; index--) {\n\t\tconst row = model.flatRows[index];\n\t\tconst children = replaceExpandedRows(row.children, replacements);\n\t\tconst isExpanded = row.isExpandable && (expandAll || expanded.has(row.id));\n\t\tif (isExpanded !== row.isExpanded || children !== row.children) {\n\t\t\treplacements.set(row, { ...row, isExpanded, children });\n\t\t}\n\t}\n\n\t// Неизвестные ID и листья не меняют эффективное раскрытие и не сбрасывают memo потребителей.\n\tif (replacements.size === 0) return model;\n\treturn resolveRowsProjection(model, replaceExpandedRows(model.rows, replacements));\n}\n","import { calculateAnalyticalValues } from \"../definition/calculations\";\nimport { type AnalyticalAggregateContext, type CompiledAnalyticalTableDefinition } from \"../definition/types\";\n\nimport { aggregateAnalyticalValues } from \"./aggregation\";\nimport { type AnalyticalHierarchyNode } from \"./hierarchy\";\nimport { type AnalyticalDataRow, type AnalyticalValues } from \"./types\";\n\n/** Отбирает исходные строки выбранной зернистости; синтетические группы в итоги не попадают. */\nfunction collectAggregateRows<T>(\n\tnodes: readonly AnalyticalHierarchyNode<T>[],\n\taggregateRowIds: ReadonlySet<string>\n): AnalyticalDataRow<T>[] {\n\tconst rows: AnalyticalDataRow<T>[] = [];\n\tconst visit = (node: AnalyticalHierarchyNode<T>): void => {\n\t\tif (node.sourceRow && aggregateRowIds.has(node.id)) {\n\t\t\trows.push(node.sourceRow);\n\t\t}\n\n\t\tfor (const child of node.children) {\n\t\t\tvisit(child);\n\t\t}\n\t};\n\n\tfor (const node of nodes) {\n\t\tvisit(node);\n\t}\n\n\treturn rows;\n}\n\n/** Один порядок для групповых и общих итогов: агрегации → callback → зависимые формулы. */\nexport function calculateAnalyticalTotals<T>(args: {\n\tdefinition: CompiledAnalyticalTableDefinition<T>;\n\tnodes: readonly AnalyticalHierarchyNode<T>[];\n\taggregateRowIds: ReadonlySet<string>;\n\tscope: \"group\" | \"grand\";\n\tgroupingPath?: AnalyticalValues;\n}): AnalyticalValues {\n\tconst { definition, nodes, aggregateRowIds, scope, groupingPath = {} } = args;\n\tconst context: AnalyticalAggregateContext<T> = {\n\t\tscope,\n\t\trows: collectAggregateRows(nodes, aggregateRowIds),\n\t\tgroupingPath\n\t};\n\tconst values: Record<string, unknown> = { ...groupingPath };\n\n\tfor (const field of definition.aggregateFields) {\n\t\tconst aggregate = field.aggregate;\n\t\tif (aggregate === undefined) continue;\n\n\t\tvalues[field.id] =\n\t\t\ttypeof aggregate === \"function\"\n\t\t\t\t? aggregate(context)\n\t\t\t\t: aggregateAnalyticalValues(\n\t\t\t\t\t\tcontext.rows.map((row) => row.values[field.id]),\n\t\t\t\t\t\taggregate\n\t\t\t\t\t);\n\t}\n\n\tObject.assign(values, definition.aggregate?.(context));\n\n\t// Явные итоги и ключи пути сохраняются. Остальные формулы читают уже готовые\n\t// суммы: процент считается из сумм, а сумма произведений не заменяется произведением сумм.\n\tconst calculations = {\n\t\t...definition.calculations,\n\t\tsteps: definition.calculations.steps.filter((step) => !Object.hasOwn(values, step.columnId))\n\t};\n\n\treturn calculateAnalyticalValues(values, calculations);\n}\n","import { parseDate } from \"../../formatters\";\nimport { compareStrings } from \"../../string-comparison\";\nimport { stableStringify } from \"../../utils\";\nimport { type AnalyticalColumn, type AnalyticalValues } from \"../types\";\n\n/** Тип входит в ключ: null, undefined, строка и число не склеивают разные группы. */\nexport function analyticalIdentity(values: AnalyticalValues, ids: readonly string[]): string {\n\treturn stableStringify(\n\t\tids.map((id) => {\n\t\t\tconst value = values[id];\n\t\t\treturn [id, value === null ? \"null\" : typeof value, value];\n\t\t})\n\t);\n}\n\nexport function compareAnalyticalValues<T>(left: unknown, right: unknown, column?: AnalyticalColumn<T>): number {\n\tif (Object.is(left, right)) return 0;\n\tif (left === null || left === undefined) return 1;\n\tif (right === null || right === undefined) return -1;\n\tif (column?.compare) return column.compare(left, right);\n\tif (column?.valueType === \"date\") {\n\t\tconst leftDate = parseDate(left);\n\t\tconst rightDate = parseDate(right);\n\t\tif (leftDate && rightDate) return leftDate.getTime() - rightDate.getTime();\n\t}\n\tif (typeof left === \"number\" && typeof right === \"number\") return left - right;\n\tif (typeof left === \"boolean\" && typeof right === \"boolean\") return Number(left) - Number(right);\n\treturn compareStrings(String(left), String(right));\n}\n","import { stableStringify } from \"../../utils\";\nimport { type AnalyticalGroupingLevel, type CompiledAnalyticalTableDefinition } from \"../definition/types\";\n\nimport { type AnalyticalHierarchyNode, type AnalyticalSourceHierarchy } from \"./hierarchy\";\nimport { calculateAnalyticalTotals } from \"./totals\";\nimport { type AnalyticalValues } from \"./types\";\nimport { analyticalIdentity } from \"./valueComparison\";\n\n/** Группировка добавляет уровни над предметными корнями и сохраняет их дочернюю детализацию. */\nexport function groupAnalyticalHierarchy<T>(args: {\n\trows: readonly AnalyticalHierarchyNode<T>[];\n\tgrouping: readonly AnalyticalGroupingLevel[];\n\tdefinition: CompiledAnalyticalTableDefinition<T>;\n\tsource: AnalyticalSourceHierarchy<T>;\n}): readonly AnalyticalHierarchyNode<T>[] {\n\tconst { grouping, definition, source } = args;\n\tconst groupLevel = (\n\t\trows: readonly AnalyticalHierarchyNode<T>[],\n\t\tlevelIndex: number,\n\t\tpath: AnalyticalValues,\n\t\tidentityPath: readonly string[]\n\t): readonly AnalyticalHierarchyNode<T>[] => {\n\t\tconst level = grouping[levelIndex];\n\t\tif (!level) return rows;\n\n\t\tconst buckets = new Map<string, AnalyticalHierarchyNode<T>[]>();\n\t\tfor (const row of rows) {\n\t\t\tconst key = analyticalIdentity(row.values, level.keyColumnIds);\n\t\t\tconst bucket = buckets.get(key);\n\t\t\tif (bucket) bucket.push(row);\n\t\t\telse buckets.set(key, [row]);\n\t\t}\n\n\t\treturn Array.from(buckets, ([key, members]) => {\n\t\t\tconst identity = [...identityPath, level.id, key];\n\t\t\tconst id = `analytical-group:${stableStringify(identity)}`;\n\t\t\tif (source.sourceRowIds.has(id)) {\n\t\t\t\tthrow new Error(`Идентификатор исходной строки совпал с группой: ${id}`);\n\t\t\t}\n\n\t\t\tconst groupingPath: Record<string, unknown> = { ...path };\n\t\t\tfor (const fieldId of [...level.keyColumnIds, ...(level.displayColumnIds ?? [])]) {\n\t\t\t\tgroupingPath[fieldId] = members[0].values[fieldId];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\tkind: \"group\",\n\t\t\t\tgroupingLevelId: level.id,\n\t\t\t\tvalues: calculateAnalyticalTotals({\n\t\t\t\t\tdefinition,\n\t\t\t\t\tnodes: members,\n\t\t\t\t\taggregateRowIds: source.aggregateRowIds,\n\t\t\t\t\tscope: \"group\",\n\t\t\t\t\tgroupingPath\n\t\t\t\t}),\n\t\t\t\tchildren: groupLevel(members, levelIndex + 1, groupingPath, identity)\n\t\t\t};\n\t\t});\n\t};\n\n\treturn groupLevel(args.rows, 0, {}, []);\n}\n","import { type AnalyticalGroupingLevel, type CompiledAnalyticalTableDefinition } from \"../definition/types\";\nimport { indexAnalyticalRows } from \"../projections/indexAnalyticalRows\";\n\nimport { groupAnalyticalHierarchy } from \"./grouping\";\nimport { type AnalyticalHierarchyNode, type AnalyticalSourceHierarchy } from \"./hierarchy\";\nimport { calculateAnalyticalTotals } from \"./totals\";\nimport { type AnalyticalModelRow, type AnalyticalTableModel } from \"./types\";\n\n/** Назначает конечные уровни и родителей после добавления всех группировок. */\nfunction materializeRows<T>(\n\tnodes: readonly AnalyticalHierarchyNode<T>[],\n\tparentId: string | null = null,\n\tlevel = 0\n): AnalyticalModelRow<T>[] {\n\treturn nodes.map((node) => ({\n\t\tid: node.id,\n\t\tparentId,\n\t\tkind: node.kind,\n\t\tsourceRow: node.sourceRow,\n\t\toriginal: node.sourceRow?.original,\n\t\tvalues: node.values,\n\t\tlevel,\n\t\tchildren: materializeRows(node.children, node.id, level + 1),\n\t\tisExpandable: node.children.length > 0,\n\t\tisExpanded: false,\n\t\tgroupingLevelId: node.groupingLevelId\n\t}));\n}\n\n/** Базовая модель содержит все отобранные строки и итоги; порядок и раскрытие задаются позже. */\nexport function buildGroupedAnalyticalModel<T>(args: {\n\tdefinition: CompiledAnalyticalTableDefinition<T>;\n\tsource: AnalyticalSourceHierarchy<T>;\n\tfilteredRows: readonly AnalyticalHierarchyNode<T>[];\n\tgrouping: readonly AnalyticalGroupingLevel[];\n}): AnalyticalTableModel<T> {\n\tconst { definition, source, filteredRows, grouping } = args;\n\tconst hierarchy = groupAnalyticalHierarchy({ rows: filteredRows, grouping, definition, source });\n\tconst rows = materializeRows(hierarchy);\n\tconst grandTotals = definition.grandTotals\n\t\t? calculateAnalyticalTotals({\n\t\t\t\tdefinition,\n\t\t\t\tnodes: definition.grandTotalsScope === \"all\" ? source.rows : filteredRows,\n\t\t\t\taggregateRowIds: source.aggregateRowIds,\n\t\t\t\tscope: \"grand\"\n\t\t\t})\n\t\t: null;\n\n\treturn {\n\t\tcolumns: definition.columns,\n\t\trows,\n\t\t...indexAnalyticalRows(rows),\n\t\tgrandTotals,\n\t\tdiagnostics: source.diagnostics\n\t};\n}\n","import { normalizeTextToLower } from \"../../formatters\";\nimport { type AnalyticalColumn, type AnalyticalDataRow, type AnalyticalFilter } from \"../types\";\n\nimport { type AnalyticalHierarchyNode } from \"./hierarchy\";\nimport { compareAnalyticalValues } from \"./valueComparison\";\n\n/** Операции фильтра относятся к данным, поэтому одинаково работают при SSR и в браузере. */\nexport function matchesAnalyticalFilter<T>(row: AnalyticalDataRow<T>, filter: AnalyticalFilter, column?: AnalyticalColumn<T>): boolean {\n\tconst value = row.values[filter.id];\n\tif (column?.filter) return column.filter(value, filter, row);\n\tconst expected = filter.value;\n\tconst compare = (other: unknown) => compareAnalyticalValues(value, other, column);\n\tconst empty = value === null || value === undefined || value === \"\";\n\tswitch (filter.operator ?? \"equals\") {\n\t\tcase \"equals\":\n\t\t\treturn compare(expected) === 0;\n\t\tcase \"notEquals\":\n\t\t\treturn compare(expected) !== 0;\n\t\tcase \"contains\":\n\t\t\treturn normalizeTextToLower(String(value ?? \"\")).includes(normalizeTextToLower(String(expected ?? \"\")));\n\t\tcase \"startsWith\":\n\t\t\treturn normalizeTextToLower(String(value ?? \"\")).startsWith(normalizeTextToLower(String(expected ?? \"\")));\n\t\tcase \"in\":\n\t\t\treturn Array.isArray(expected) && expected.some((item: unknown) => compare(item) === 0);\n\t\tcase \"between\":\n\t\t\treturn Array.isArray(expected) && expected.length === 2 && !empty && compare(expected[0]) >= 0 && compare(expected[1]) <= 0;\n\t\tcase \"gt\":\n\t\t\treturn !empty && compare(expected) > 0;\n\t\tcase \"gte\":\n\t\t\treturn !empty && compare(expected) >= 0;\n\t\tcase \"lt\":\n\t\t\treturn !empty && compare(expected) < 0;\n\t\tcase \"lte\":\n\t\t\treturn !empty && compare(expected) <= 0;\n\t\tcase \"empty\":\n\t\t\treturn empty;\n\t\tcase \"notEmpty\":\n\t\t\treturn !empty;\n\t}\n}\n\n/** Совпавший родитель оставляет всю ветвь; совпавший ребёнок сохраняет путь к нему. */\nexport function filterAnalyticalHierarchy<T>(\n\trows: readonly AnalyticalHierarchyNode<T>[],\n\tfilters: readonly AnalyticalFilter[],\n\tfieldsById: ReadonlyMap<string, AnalyticalColumn<T>>\n): readonly AnalyticalHierarchyNode<T>[] {\n\tif (filters.length === 0) return rows;\n\n\tconst filtered: AnalyticalHierarchyNode<T>[] = [];\n\tfor (const row of rows) {\n\t\tconst sourceRow = row.sourceRow;\n\t\tconst matches = sourceRow && filters.every((filter) => matchesAnalyticalFilter(sourceRow, filter, fieldsById.get(filter.id)));\n\t\tif (matches) {\n\t\t\tfiltered.push(row);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst children = filterAnalyticalHierarchy(row.children, filters, fieldsById);\n\t\tif (children.length > 0) {\n\t\t\tfiltered.push({ ...row, children });\n\t\t}\n\t}\n\n\treturn filtered;\n}\n","import { buildTreeTableRows, type TreeTableRowNode } from \"../../tree-table\";\nimport { calculateAnalyticalValues } from \"../definition/calculations\";\nimport { type CompiledAnalyticalTableDefinition } from \"../definition/types\";\n\nimport { type AnalyticalDataRow, type AnalyticalDiagnostics, type AnalyticalSnapshot, type AnalyticalValues } from \"./types\";\n\n/** Узел до назначения итогового parentId/level: группировка ещё может добавить предков. */\nexport type AnalyticalHierarchyNode<T> = Readonly<{\n\tid: string;\n\tkind: \"data\" | \"group\";\n\tsourceRow?: AnalyticalDataRow<T>;\n\tvalues: AnalyticalValues;\n\tchildren: readonly AnalyticalHierarchyNode<T>[];\n\tgroupingLevelId?: string;\n}>;\n\nexport type AnalyticalSourceHierarchy<T> = Readonly<{\n\trows: readonly AnalyticalHierarchyNode<T>[];\n\tsourceRowIds: ReadonlySet<string>;\n\taggregateRowIds: ReadonlySet<string>;\n\tdiagnostics: AnalyticalDiagnostics;\n}>;\n\n/** Формулы исходных строк и предметная иерархия зависят только от определения и снимка. */\nexport function prepareAnalyticalHierarchy<T>(\n\tsnapshot: AnalyticalSnapshot<T>,\n\tdefinition: CompiledAnalyticalTableDefinition<T>\n): AnalyticalSourceHierarchy<T> {\n\tif (snapshot.rows.some((row) => row.id.length === 0)) {\n\t\tthrow new Error(\"Идентификатор аналитической строки не может быть пустым.\");\n\t}\n\n\tconst calculatedRows = snapshot.rows.map((row) => ({\n\t\t...row,\n\t\tvalues: calculateAnalyticalValues(row.values, definition.calculations)\n\t}));\n\tconst tree = buildTreeTableRows(calculatedRows, {\n\t\tgetRowId: (row) => row.id,\n\t\tgetParentRowId: (row) => row.parentId\n\t});\n\n\tconst prepareNode = (node: TreeTableRowNode<AnalyticalDataRow<T>>): AnalyticalHierarchyNode<T> => ({\n\t\tid: node.id,\n\t\tkind: \"data\",\n\t\tsourceRow: tree.rowById.get(node.id),\n\t\tvalues: node.values,\n\t\tchildren: (node.children ?? []).map(prepareNode)\n\t});\n\tconst aggregateRowIds = definition.isAggregateRow\n\t\t? Array.from(tree.rowById.values())\n\t\t\t\t.filter(definition.isAggregateRow)\n\t\t\t\t.map((row) => row.id)\n\t\t: tree.rootRowIds;\n\n\treturn {\n\t\trows: tree.rows.map(prepareNode),\n\t\tsourceRowIds: new Set(tree.allRowIds),\n\t\taggregateRowIds: new Set(aggregateRowIds),\n\t\tdiagnostics: {\n\t\t\torphanRowIds: tree.orphanRowIds,\n\t\t\tduplicateRowIds: tree.duplicateRowIds,\n\t\t\tcyclicRowIds: tree.cyclicRowIds\n\t\t}\n\t};\n}\n","import { type AnalyticalColumn } from \"../definition/types\";\nimport { resolveRowsProjection } from \"../projections/resolveRowsProjection\";\n\nimport { type AnalyticalModelRow, type AnalyticalSorting, type AnalyticalTableModel } from \"./types\";\nimport { compareAnalyticalValues } from \"./valueComparison\";\n\n/** Меняет только порядок соседей: вычисленные значения, итоги и связи parent/child сохраняются. */\nexport function sortAnalyticalModel<T>(\n\tmodel: AnalyticalTableModel<T>,\n\tsorting: readonly AnalyticalSorting[],\n\tfieldsById: ReadonlyMap<string, AnalyticalColumn<T>>\n): AnalyticalTableModel<T> {\n\tif (sorting.length === 0) return model;\n\n\tconst compareRows = (left: AnalyticalModelRow<T>, right: AnalyticalModelRow<T>): number => {\n\t\tfor (const sort of sorting) {\n\t\t\tconst comparison = compareAnalyticalValues(left.values[sort.id], right.values[sort.id], fieldsById.get(sort.id));\n\t\t\tif (comparison !== 0) return sort.desc ? -comparison : comparison;\n\t\t}\n\t\treturn 0;\n\t};\n\tconst sortBranch = (rows: readonly AnalyticalModelRow<T>[]): readonly AnalyticalModelRow<T>[] => {\n\t\tif (rows.length === 0) return rows;\n\n\t\tconst projected = rows.map((row) => {\n\t\t\tconst children = sortBranch(row.children);\n\t\t\treturn children === row.children ? row : { ...row, children };\n\t\t});\n\t\tprojected.sort(compareRows);\n\n\t\treturn projected.every((row, index) => row === rows[index]) ? rows : projected;\n\t};\n\n\treturn resolveRowsProjection(model, sortBranch(model.rows));\n}\n","import { validateAnalyticalView } from \"../definition/validateAnalyticalView\";\nimport { projectAnalyticalTableExpansion } from \"../projections/expansion\";\n\nimport { buildGroupedAnalyticalModel } from \"./buildGroupedModel\";\nimport { filterAnalyticalHierarchy } from \"./filtering\";\nimport { prepareAnalyticalHierarchy } from \"./hierarchy\";\nimport { sortAnalyticalModel } from \"./sorting\";\nimport {\n\ttype AnalyticalTableModel,\n\ttype AnalyticalTableRuntime,\n\ttype AnalyticalViewState,\n\ttype CreateAnalyticalTableRuntimeOptions\n} from \"./types\";\n\nconst EMPTY_STATE: AnalyticalViewState = {};\nconst EMPTY_ITEMS = Object.freeze([]);\n\n/**\n * Создаёт вычислительный runtime для одного снимка.\n *\n * Хранится только последний результат каждого этапа. Исходные строки рассчитываются\n * один раз; фильтры/группировки меняют итоги, сортировка — порядок, раскрытие — видимость.\n * Входные определения, снимки и массивы состояния должны оставаться неизменяемыми.\n */\nexport function createAnalyticalTableRuntime<T>(options: CreateAnalyticalTableRuntimeOptions<T>): AnalyticalTableRuntime<T> {\n\tconst { definition, snapshot } = options;\n\tconst source = prepareAnalyticalHierarchy(snapshot, definition);\n\tlet previousState: AnalyticalViewState = EMPTY_STATE;\n\tlet filteredRows = source.rows;\n\tlet groupedModel: AnalyticalTableModel<T> | undefined;\n\tlet sortedModel: AnalyticalTableModel<T> | undefined;\n\tlet expandedModel: AnalyticalTableModel<T> | undefined;\n\n\treturn {\n\t\tgetModel(state = EMPTY_STATE) {\n\t\t\tvalidateAnalyticalView(definition, state);\n\t\t\tconst filters = state.filters ?? EMPTY_ITEMS;\n\t\t\tconst grouping = state.grouping ?? EMPTY_ITEMS;\n\t\t\tconst sorting = state.sorting ?? EMPTY_ITEMS;\n\t\t\tconst expandedRowIds = state.expandedRowIds ?? EMPTY_ITEMS;\n\t\t\tconst filtersChanged = !groupedModel || filters !== (previousState.filters ?? EMPTY_ITEMS);\n\t\t\tconst groupingChanged = !groupedModel || grouping !== (previousState.grouping ?? EMPTY_ITEMS);\n\t\t\tconst sortingChanged = sorting !== (previousState.sorting ?? EMPTY_ITEMS);\n\t\t\tconst expansionChanged = expandedRowIds !== (previousState.expandedRowIds ?? EMPTY_ITEMS);\n\n\t\t\tconst nextFilteredRows = filtersChanged ? filterAnalyticalHierarchy(source.rows, filters, definition.fieldsById) : filteredRows;\n\n\t\t\tconst rebuildGroups = !groupedModel || filtersChanged || groupingChanged;\n\t\t\tconst nextGroupedModel = rebuildGroups\n\t\t\t\t? buildGroupedAnalyticalModel({ definition, source, filteredRows: nextFilteredRows, grouping })\n\t\t\t\t: groupedModel!;\n\n\t\t\tconst rebuildSorting = !sortedModel || rebuildGroups || sortingChanged;\n\t\t\tconst nextSortedModel = rebuildSorting ? sortAnalyticalModel(nextGroupedModel, sorting, definition.fieldsById) : sortedModel!;\n\n\t\t\tconst nextExpandedModel =\n\t\t\t\t!expandedModel || rebuildSorting || expansionChanged\n\t\t\t\t\t? projectAnalyticalTableExpansion(rebuildSorting ? nextSortedModel : (expandedModel ?? nextSortedModel), expandedRowIds)\n\t\t\t\t\t: expandedModel;\n\n\t\t\t// Ошибка callback не должна оставлять стадии от разных состояний в одном runtime.\n\t\t\tfilteredRows = nextFilteredRows;\n\t\t\tgroupedModel = nextGroupedModel;\n\t\t\tsortedModel = nextSortedModel;\n\t\t\texpandedModel = nextExpandedModel;\n\t\t\tpreviousState = { filters, grouping, sorting, expandedRowIds };\n\t\t\treturn expandedModel;\n\t\t}\n\t};\n}\n","import { compileAnalyticalTableDefinition } from \"./definition/compileAnalyticalTableDefinition\";\nimport { createAnalyticalTableRuntime } from \"./runtime/createAnalyticalTableRuntime\";\nimport { type AnalyticalTableModel, type BuildAnalyticalTableModelOptions } from \"./runtime/types\";\n\n/**\n * Строит таблицу за один вызов: описание → runtime снимка → модель представления.\n * Для последовательных изменений состояния сохраняйте определение и runtime отдельно.\n */\nexport function buildAnalyticalTableModel<T>(options: BuildAnalyticalTableModelOptions<T>): AnalyticalTableModel<T> {\n\tconst definition = compileAnalyticalTableDefinition(options);\n\tconst runtime = createAnalyticalTableRuntime({ definition, snapshot: options.snapshot });\n\n\treturn runtime.getModel(options.state);\n}\n","import {\n\taddCalendarDays,\n\taddCalendarMonths,\n\taddCalendarYears,\n\tcreateCalendarDate,\n\tformatDateAsDate,\n\tformatDateAsODataDate,\n\tgetStartOfDay,\n\tgetStartOfMonth,\n\tgetStartOfWeek,\n\tgetStartOfYear,\n\tparseDateByPattern\n} from \"../../formatters\";\nimport { aggregateAnalyticalValues } from \"../runtime/aggregation\";\nimport { type AnalyticalDataRow, type AnalyticalValues } from \"../runtime/types\";\nimport { analyticalIdentity } from \"../runtime/valueComparison\";\n\nimport {\n\ttype AnalyticalDateColumn,\n\ttype AnalyticalDateColumnsOptions,\n\ttype AnalyticalDateColumnsPlan,\n\ttype ProjectAnalyticalDateFactsOptions\n} from \"./types\";\n\n/** Принимает только календарный контракт; преобразование timestamp принадлежит transport/domain адаптеру. */\nfunction readCalendarDate(value: unknown): Date | null {\n\tif (typeof value !== \"string\" || value.length !== 10) return null;\n\tconst parsed = parseDateByPattern(value, \"yyyy-MM-dd\");\n\treturn parsed?.kind === \"date-time\" ? parsed.date : null;\n}\n\nfunction getDateBucketStart(date: Date, granularity: AnalyticalDateColumnsOptions[\"granularity\"]): Date {\n\tswitch (granularity) {\n\t\tcase \"day\":\n\t\t\treturn getStartOfDay(date);\n\t\tcase \"week\":\n\t\t\treturn getStartOfWeek(date, 1);\n\t\tcase \"month\":\n\t\t\treturn getStartOfMonth(date);\n\t\tcase \"quarter\":\n\t\t\treturn createCalendarDate(date.getFullYear(), Math.floor(date.getMonth() / 3) * 3, 1);\n\t\tcase \"year\":\n\t\t\treturn getStartOfYear(date);\n\t}\n}\n\nfunction getNextDateBucketStart(date: Date, granularity: AnalyticalDateColumnsOptions[\"granularity\"]): Date {\n\tswitch (granularity) {\n\t\tcase \"day\":\n\t\t\treturn addCalendarDays(date, 1);\n\t\tcase \"week\":\n\t\t\treturn addCalendarDays(date, 7);\n\t\tcase \"month\":\n\t\t\treturn addCalendarMonths(date, 1);\n\t\tcase \"quarter\":\n\t\t\treturn addCalendarMonths(date, 3);\n\t\tcase \"year\":\n\t\t\treturn addCalendarYears(date, 1);\n\t}\n}\n\n/** Строит ограниченный календарный план; ISO-моменты времени сюда не передаются. */\nexport function createAnalyticalDateColumnsPlan(options: AnalyticalDateColumnsOptions): AnalyticalDateColumnsPlan {\n\tconst from = readCalendarDate(options.from);\n\tconst to = readCalendarDate(options.to);\n\tif (\n\t\t!from ||\n\t\t!to ||\n\t\tformatDateAsODataDate(from) !== options.from ||\n\t\tformatDateAsODataDate(to) !== options.to ||\n\t\toptions.from > options.to\n\t)\n\t\tthrow new Error(\"Некорректный календарный диапазон аналитических столбцов.\");\n\tconst maxColumns = options.maxColumns ?? 366;\n\tif (!Number.isSafeInteger(maxColumns) || maxColumns < 1)\n\t\tthrow new Error(\"Лимит динамических столбцов должен быть положительным целым числом.\");\n\tif (!options.id || options.identityColumnIds.length === 0)\n\t\tthrow new Error(\"Динамическим столбцам нужны идентификатор и ключи сопоставления фактов.\");\n\n\t// Идентификатор относится ко всему календарному периоду, границы отбора — только к запрошенной части периода.\n\tconst columns: AnalyticalDateColumn[] = [];\n\tlet start = getDateBucketStart(from, options.granularity);\n\twhile (start <= to) {\n\t\tif (columns.length >= maxColumns) throw new Error(`Превышен лимит динамических столбцов: ${maxColumns}`);\n\t\tconst nextStart = getNextDateBucketStart(start, options.granularity);\n\t\tconst key = formatDateAsODataDate(start);\n\t\tconst end = formatDateAsODataDate(addCalendarDays(nextStart, -1));\n\t\tcolumns.push({\n\t\t\tid: `${options.id}:${options.granularity}:${key}`,\n\t\t\t// Подпись дня следует общей настройке date; машинные даты используют штатный odata-date.\n\t\t\tlabel: options.granularity === \"day\" ? formatDateAsDate(start) : `${key} — ${end}`,\n\t\t\tfrom: key < options.from ? options.from : key,\n\t\t\tto: end > options.to ? options.to : end\n\t\t});\n\t\tstart = nextStart;\n\t}\n\treturn { options: { ...options, identityColumnIds: [...options.identityColumnIds] }, columns };\n}\n\nfunction resolveFactColumnId(fact: AnalyticalValues, plan: AnalyticalDateColumnsPlan): string | undefined {\n\t// Факт без полного ключа нельзя сопоставить строке; общий итог использует ту же область допустимых фактов.\n\tif (plan.options.identityColumnIds.some((id) => fact[id] === undefined || fact[id] === null)) return undefined;\n\tconst date = readCalendarDate(fact[plan.options.dateColumnId]);\n\tif (!date) return undefined;\n\tconst day = formatDateAsODataDate(date);\n\tif (day < plan.options.from || day > plan.options.to) return undefined;\n\treturn `${plan.options.id}:${plan.options.granularity}:${formatDateAsODataDate(getDateBucketStart(date, plan.options.granularity))}`;\n}\n\n/** Индекс содержит исходные значения мер: выбор способа агрегации происходит после сопоставления фактов. */\nfunction indexFactMeasuresByIdentity(\n\tfacts: readonly AnalyticalValues[],\n\tplan: AnalyticalDateColumnsPlan\n): ReadonlyMap<string, ReadonlyMap<string, readonly unknown[]>> {\n\tconst byIdentity = new Map<string, Map<string, unknown[]>>();\n\tfor (const fact of facts) {\n\t\tconst columnId = resolveFactColumnId(fact, plan);\n\t\tif (!columnId) continue;\n\t\tconst identity = analyticalIdentity(fact, plan.options.identityColumnIds);\n\t\tlet buckets = byIdentity.get(identity);\n\t\tif (!buckets) {\n\t\t\tbuckets = new Map();\n\t\t\tbyIdentity.set(identity, buckets);\n\t\t}\n\t\tconst bucket = buckets.get(columnId);\n\t\tif (bucket) bucket.push(fact[plan.options.measureColumnId]);\n\t\telse buckets.set(columnId, [fact[plan.options.measureColumnId]]);\n\t}\n\treturn byIdentity;\n}\n\n/** Сопоставляет отдельные facts составному ключу строки; порядок и количество base rows неизменны. */\nexport function projectAnalyticalDateFacts<T>(args: ProjectAnalyticalDateFactsOptions<T>): readonly AnalyticalDataRow<T>[] {\n\tconst { rows, facts, plan } = args;\n\tconst byIdentity = indexFactMeasuresByIdentity(facts, plan);\n\treturn rows.map((row) => {\n\t\tconst buckets = byIdentity.get(analyticalIdentity(row.values, plan.options.identityColumnIds));\n\t\tconst values: Record<string, unknown> = { ...row.values };\n\t\tfor (const column of plan.columns) {\n\t\t\tif (Object.hasOwn(values, column.id)) throw new Error(`Динамический столбец перезаписывает исходное поле: ${column.id}`);\n\t\t\tconst bucket = buckets?.get(column.id);\n\t\t\tvalues[column.id] = bucket ? aggregateAnalyticalValues(bucket, plan.options.aggregation) : null;\n\t\t}\n\t\treturn { ...row, values };\n\t});\n}\n\n/**\n * Общие итоги считаются по исходным facts с полным ключом: среднее от средних не подменяет взвешенный результат.\n * Отбор допустимых непустых identities по области доступа и фильтрам выполняет вызывающий адаптер.\n */\nexport function aggregateAnalyticalDateFacts(facts: readonly AnalyticalValues[], plan: AnalyticalDateColumnsPlan): AnalyticalValues {\n\tconst buckets = new Map<string, unknown[]>();\n\tfor (const fact of facts) {\n\t\tconst id = resolveFactColumnId(fact, plan);\n\t\tif (!id) continue;\n\t\tconst bucket = buckets.get(id);\n\t\tif (bucket) bucket.push(fact[plan.options.measureColumnId]);\n\t\telse buckets.set(id, [fact[plan.options.measureColumnId]]);\n\t}\n\treturn Object.fromEntries(\n\t\tplan.columns.map((column) => {\n\t\t\tconst bucket = buckets.get(column.id);\n\t\t\treturn [column.id, bucket ? aggregateAnalyticalValues(bucket, plan.options.aggregation) : null];\n\t\t})\n\t);\n}\n","import {\n\ttype AnalyticalExportColumn,\n\ttype AnalyticalExportProjection,\n\ttype AnalyticalTableModel,\n\ttype ProjectAnalyticalTableExportOptions\n} from \"../types\";\n\n/** ID итога устойчив между областями экспорта и не конфликтует даже со скрытой строкой модели. */\nfunction resolveGrandTotalId<T>(model: AnalyticalTableModel<T>): string {\n\tconst baseId = \"analytical-grand-total\";\n\tlet id = baseId;\n\tlet suffix = 1;\n\twhile (model.rowById.has(id)) id = `${baseId}:${suffix++}`;\n\treturn id;\n}\n\n/** Проекция для /excel или /table-document; сам runtime не скачивает файлы и не читает DOM. */\nexport function projectAnalyticalTableExport<T>(args: ProjectAnalyticalTableExportOptions<T>): AnalyticalExportProjection {\n\tconst { model, scope = \"all\", includeGroups = true, includeGrandTotals = false } = args;\n\tconst columns: readonly AnalyticalExportColumn<T>[] = args.columns ?? model.columns;\n\tconst selected = new Set(args.selectedRowIds ?? []);\n\tconst source = scope === \"visible\" ? model.visibleRows : model.flatRows;\n\tconst rows: AnalyticalExportProjection[\"rows\"][number][] = [];\n\n\tfor (const row of source) {\n\t\tif (!includeGroups && row.kind === \"group\") continue;\n\t\tif (scope === \"selected\" && !selected.has(row.id)) continue;\n\t\trows.push({\n\t\t\tid: row.id,\n\t\t\tlevel: row.level,\n\t\t\tkind: row.kind,\n\t\t\tvalues: columns.map((column) => (column.format ? column.format(row.values[column.id], row) : row.values[column.id]))\n\t\t});\n\t}\n\n\tif (includeGrandTotals && model.grandTotals) {\n\t\tconst totals = model.grandTotals;\n\t\trows.push({\n\t\t\tid: resolveGrandTotalId(model),\n\t\t\tlevel: 0,\n\t\t\tkind: \"grand\",\n\t\t\tvalues: columns.map((column) => (column.formatTotal ? column.formatTotal(totals[column.id]) : totals[column.id]))\n\t\t});\n\t}\n\treturn { columns: columns.map((column) => ({ id: column.id, label: column.label ?? column.id })), rows };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/analytical-table/definition/analyticalDefinitionConstants.ts","../../src/analytical-table/runtime/aggregation.ts","../../src/analytical-table/definition/calculations.ts","../../src/analytical-table/definition/compileAnalyticalTableDefinition.ts","../../src/analytical-table/definition/validateAnalyticalView.ts","../../src/analytical-table/runtime/analyticalViewConstants.ts","../../src/analytical-table/projections/indexAnalyticalRows.ts","../../src/analytical-table/projections/resolveRowsProjection.ts","../../src/analytical-table/projections/expansion.ts","../../src/analytical-table/runtime/analyticalRowConstants.ts","../../src/analytical-table/runtime/totals.ts","../../src/analytical-table/runtime/valueComparison.ts","../../src/analytical-table/runtime/grouping.ts","../../src/analytical-table/runtime/buildGroupedModel.ts","../../src/analytical-table/runtime/filtering.ts","../../src/analytical-table/runtime/hierarchy.ts","../../src/analytical-table/runtime/sorting.ts","../../src/analytical-table/runtime/createAnalyticalTableRuntime.ts","../../src/analytical-table/buildAnalyticalTableModel.ts","../../src/analytical-table/dynamic-columns/analyticalDateColumnConstants.ts","../../src/analytical-table/dynamic-columns/dateColumns.ts","../../src/analytical-table/projections/analyticalExportConstants.ts","../../src/analytical-table/projections/exportProjection.ts"],"sourcesContent":["/** Операции агрегации общие для описания поля и исполняющего их runtime. */\nexport const ANALYTICAL_AGGREGATION_SUM = \"sum\";\nexport const ANALYTICAL_AGGREGATION_MIN = \"min\";\nexport const ANALYTICAL_AGGREGATION_MAX = \"max\";\nexport const ANALYTICAL_AGGREGATION_AVG = \"avg\";\nexport const ANALYTICAL_AGGREGATION_COUNT = \"count\";\n\n/** Контекст callback итогов отделён от вида строки, даже когда значения совпадают. */\nexport const ANALYTICAL_AGGREGATE_SCOPE_GROUP = \"group\";\nexport const ANALYTICAL_AGGREGATE_SCOPE_GRAND = \"grand\";\nexport const ANALYTICAL_TOTALS_SCOPE_ALL = \"all\";\nexport const ANALYTICAL_TOTALS_SCOPE_FILTERED = \"filtered\";\n\n/** Типы значений описания не зависят от JavaScript typeof конкретного значения. */\nexport const ANALYTICAL_VALUE_TYPE_STRING = \"string\";\nexport const ANALYTICAL_VALUE_TYPE_NUMBER = \"number\";\nexport const ANALYTICAL_VALUE_TYPE_BOOLEAN = \"boolean\";\nexport const ANALYTICAL_VALUE_TYPE_DATE = \"date\";\n","import {\n\tANALYTICAL_AGGREGATION_SUM,\n\tANALYTICAL_AGGREGATION_MIN,\n\tANALYTICAL_AGGREGATION_MAX,\n\tANALYTICAL_AGGREGATION_AVG,\n\tANALYTICAL_AGGREGATION_COUNT\n} from \"../definition/analyticalDefinitionConstants\";\nimport { type AnalyticalAggregation } from \"../types\";\n\n/** null/пустые/нечисловые значения не превращаются в ноль; count считает непустые факты. */\nexport function aggregateAnalyticalValues(values: readonly unknown[], aggregation: AnalyticalAggregation): number | null {\n\tconst present = values.filter((value) => value !== null && value !== undefined && value !== \"\");\n\tif (aggregation === ANALYTICAL_AGGREGATION_COUNT) return present.length;\n\n\tlet count = 0;\n\tlet sum = 0;\n\tlet minimum = Infinity;\n\tlet maximum = -Infinity;\n\n\tfor (const value of present) {\n\t\tif (typeof value !== \"number\" || !Number.isFinite(value)) continue;\n\t\tcount += 1;\n\t\tsum += value;\n\t\tminimum = Math.min(minimum, value);\n\t\tmaximum = Math.max(maximum, value);\n\t}\n\n\tif (count === 0) return null;\n\n\tswitch (aggregation) {\n\t\tcase ANALYTICAL_AGGREGATION_SUM:\n\t\t\treturn sum;\n\t\tcase ANALYTICAL_AGGREGATION_MIN:\n\t\t\treturn minimum;\n\t\tcase ANALYTICAL_AGGREGATION_MAX:\n\t\t\treturn maximum;\n\t\tcase ANALYTICAL_AGGREGATION_AVG:\n\t\t\treturn sum / count;\n\t}\n}\n","import { arrayDeduplicate } from \"../../array\";\nimport { compileTableFormula } from \"../../formulas\";\nimport { type AnalyticalCalculationPlan, type AnalyticalCalculationStep, type AnalyticalColumn, type AnalyticalValues } from \"../types\";\n\n/** Проверяет граф зависимостей до расчёта строк и компилирует каждую формулу один раз. */\nexport function createAnalyticalCalculationPlan<T>(\n\tcolumns: readonly AnalyticalColumn<T>[],\n\trequiredColumnIds: readonly string[] = columns.map((column) => column.id)\n): AnalyticalCalculationPlan {\n\tconst byId = new Map(columns.map((column) => [column.id, column]));\n\tif (byId.size !== columns.length) throw new Error(\"Идентификаторы аналитических столбцов должны быть уникальны.\");\n\tconst visited = new Set<string>();\n\tconst visiting = new Set<string>();\n\tconst required: string[] = [];\n\tconst steps: AnalyticalCalculationStep[] = [];\n\tconst visit = (id: string): void => {\n\t\tif (visited.has(id)) return;\n\t\tif (visiting.has(id)) throw new Error(`Циклическая зависимость аналитического столбца: ${id}`);\n\t\tconst column = byId.get(id);\n\t\tif (!column) throw new Error(`Неизвестная зависимость аналитического столбца: ${id}`);\n\t\tif (column.formula && column.calculate) throw new Error(`Столбец ${id} содержит два способа вычисления.`);\n\t\tvisiting.add(id);\n\t\tconst dependencies = arrayDeduplicate(column.formula?.dependencies ?? column.calculate?.dependencies ?? []);\n\t\tfor (const dependency of dependencies) visit(dependency);\n\t\tif (column.formula) {\n\t\t\t// Порядок и повторы аргументов формулы сохраняются; уникален лишь граф зависимостей.\n\t\t\tconst compiled = compileTableFormula({ formulaId: column.formula.formulaId, keys: column.formula.dependencies });\n\t\t\tif (!compiled.ok) throw new Error(`Формула столбца ${id} не зарегистрирована: ${column.formula.formulaId}`);\n\t\t\tsteps.push({\n\t\t\t\tcolumnId: id,\n\t\t\t\tdependencies,\n\t\t\t\tcompute: (values) => {\n\t\t\t\t\tconst result = compiled.execute(values);\n\t\t\t\t\tif (!result.ok) throw new Error(`Ошибка формулы столбца ${id}: ${result.reason}`);\n\t\t\t\t\treturn result.value;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (column.calculate) {\n\t\t\tsteps.push({ columnId: id, dependencies, compute: column.calculate.compute });\n\t\t}\n\t\tvisiting.delete(id);\n\t\tvisited.add(id);\n\t\trequired.push(id);\n\t};\n\tfor (const id of requiredColumnIds) visit(id);\n\treturn { steps, requiredColumnIds: required };\n}\n\n/** Возвращает отдельный набор значений; исходный DTO и значения Query не мутируются. */\nexport function calculateAnalyticalValues(values: AnalyticalValues, plan: AnalyticalCalculationPlan): AnalyticalValues {\n\tconst result: Record<string, unknown> = { ...values };\n\tfor (const step of plan.steps) result[step.columnId] = step.compute(result);\n\treturn result;\n}\n","import { ANALYTICAL_TOTALS_SCOPE_FILTERED } from \"./analyticalDefinitionConstants\";\nimport { createAnalyticalCalculationPlan } from \"./calculations\";\nimport { type AnalyticalTableDefinition, type CompiledAnalyticalTableDefinition } from \"./types\";\n\n/** Проверяет единый каталог полей, включая служебные зависимости невидимых вычислений. */\nexport function compileAnalyticalTableDefinition<T>(definition: AnalyticalTableDefinition<T>): CompiledAnalyticalTableDefinition<T> {\n\tconst fields = [...definition.columns, ...(definition.dataFields ?? [])];\n\tconst calculations = createAnalyticalCalculationPlan(fields);\n\n\treturn {\n\t\tcolumns: definition.columns,\n\t\tfieldsById: new Map(fields.map((field) => [field.id, field])),\n\t\tcalculations,\n\t\taggregateFields: fields.filter((field) => field.aggregate !== undefined),\n\t\tisAggregateRow: definition.isAggregateRow,\n\t\taggregate: definition.aggregate,\n\t\tgrandTotals: definition.grandTotals !== false,\n\t\tgrandTotalsScope: definition.grandTotalsScope ?? ANALYTICAL_TOTALS_SCOPE_FILTERED\n\t};\n}\n","import { type AnalyticalViewState } from \"../runtime/types\";\n\nimport { type CompiledAnalyticalTableDefinition } from \"./types\";\n\n/** Состояние ссылается на проверенное описание; grouping keys могут быть служебными полями values. */\nexport function validateAnalyticalView<T>(definition: CompiledAnalyticalTableDefinition<T>, state: AnalyticalViewState): void {\n\tfor (const entry of [...(state.sorting ?? []), ...(state.filters ?? [])]) {\n\t\tif (!definition.fieldsById.has(entry.id)) {\n\t\t\tthrow new Error(`Неизвестный аналитический столбец: ${entry.id}`);\n\t\t}\n\t}\n\n\tconst levelIds = new Set<string>();\n\tfor (const level of state.grouping ?? []) {\n\t\tif (levelIds.has(level.id)) {\n\t\t\tthrow new Error(\"Идентификаторы уровней группировки должны быть уникальны.\");\n\t\t}\n\t\tif (level.keyColumnIds.length === 0) {\n\t\t\tthrow new Error(`Уровень ${level.id} не содержит ключей группировки.`);\n\t\t}\n\t\tlevelIds.add(level.id);\n\t}\n}\n","/** Операторы имеют один источник для сериализуемого состояния фильтра и его исполнения. */\nexport const ANALYTICAL_FILTER_EQUALS = \"equals\";\nexport const ANALYTICAL_FILTER_NOT_EQUALS = \"notEquals\";\nexport const ANALYTICAL_FILTER_CONTAINS = \"contains\";\nexport const ANALYTICAL_FILTER_STARTS_WITH = \"startsWith\";\nexport const ANALYTICAL_FILTER_IN = \"in\";\nexport const ANALYTICAL_FILTER_BETWEEN = \"between\";\nexport const ANALYTICAL_FILTER_GT = \"gt\";\nexport const ANALYTICAL_FILTER_GTE = \"gte\";\nexport const ANALYTICAL_FILTER_LT = \"lt\";\nexport const ANALYTICAL_FILTER_LTE = \"lte\";\nexport const ANALYTICAL_FILTER_EMPTY = \"empty\";\nexport const ANALYTICAL_FILTER_NOT_EMPTY = \"notEmpty\";\n\n/** Полное раскрытие не является областью расчёта итогов или экспорта. */\nexport const ANALYTICAL_EXPANSION_ALL = \"all\";\n","import { type AnalyticalModelRow, type AnalyticalTableModel } from \"../types\";\n\ntype RowTraversalFrame<T> = {\n\treadonly rows: readonly AnalyticalModelRow<T>[];\n\treadonly visible: boolean;\n\tnextIndex: number;\n};\n\n/** Строит согласованные индексы за один проход, не расходуя стек вызовов на глубину дерева. */\nexport function indexAnalyticalRows<T>(\n\trows: readonly AnalyticalModelRow<T>[]\n): Pick<AnalyticalTableModel<T>, \"flatRows\" | \"visibleRows\" | \"rowById\"> {\n\tconst flatRows: AnalyticalModelRow<T>[] = [];\n\tconst visibleRows: AnalyticalModelRow<T>[] = [];\n\tconst rowById = new Map<string, AnalyticalModelRow<T>>();\n\tconst stack: RowTraversalFrame<T>[] = [{ rows, visible: true, nextIndex: 0 }];\n\n\twhile (stack.length > 0) {\n\t\tconst frame = stack[stack.length - 1];\n\t\tif (frame.nextIndex === frame.rows.length) {\n\t\t\tstack.pop();\n\t\t\tcontinue;\n\t\t}\n\t\tconst row = frame.rows[frame.nextIndex++];\n\t\tflatRows.push(row);\n\t\trowById.set(row.id, row);\n\t\tif (frame.visible) visibleRows.push(row);\n\t\tif (row.children.length > 0) {\n\t\t\tstack.push({ rows: row.children, visible: frame.visible && row.isExpanded, nextIndex: 0 });\n\t\t}\n\t}\n\treturn { flatRows, visibleRows, rowById };\n}\n","import { type AnalyticalModelRow, type AnalyticalTableModel } from \"../types\";\n\nimport { indexAnalyticalRows } from \"./indexAnalyticalRows\";\n\n/** Любая проекция дерева заменяет индексы вместе с узлами, сохраняя уже рассчитанные итоги. */\nexport function resolveRowsProjection<T>(model: AnalyticalTableModel<T>, rows: readonly AnalyticalModelRow<T>[]): AnalyticalTableModel<T> {\n\tif (rows === model.rows) return model;\n\treturn { ...model, rows, ...indexAnalyticalRows(rows) };\n}\n","import { ANALYTICAL_EXPANSION_ALL } from \"../runtime/analyticalViewConstants\";\nimport { type AnalyticalModelRow, type AnalyticalTableModel } from \"../types\";\n\nimport { resolveRowsProjection } from \"./resolveRowsProjection\";\n\n/** Копирует массив только при замене его непосредственного ребёнка. */\nfunction replaceExpandedRows<T>(\n\trows: readonly AnalyticalModelRow<T>[],\n\treplacements: ReadonlyMap<AnalyticalModelRow<T>, AnalyticalModelRow<T>>\n): readonly AnalyticalModelRow<T>[] {\n\tlet projected: AnalyticalModelRow<T>[] | undefined;\n\tfor (let index = 0; index < rows.length; index++) {\n\t\tconst replacement = replacements.get(rows[index]);\n\t\tif (!replacement) continue;\n\t\tprojected ??= rows.slice();\n\t\tprojected[index] = replacement;\n\t}\n\treturn projected ?? rows;\n}\n\n/** Раскрытие меняет только затронутые ветви; формулы и итоги остаются результатом базовой модели. */\nexport function projectAnalyticalTableExpansion<T>(\n\tmodel: AnalyticalTableModel<T>,\n\texpandedRowIds: readonly string[] | typeof ANALYTICAL_EXPANSION_ALL\n): AnalyticalTableModel<T> {\n\tconst expandAll = expandedRowIds === ANALYTICAL_EXPANSION_ALL;\n\tconst expanded = new Set(expandAll ? [] : expandedRowIds);\n\tconst replacements = new Map<AnalyticalModelRow<T>, AnalyticalModelRow<T>>();\n\n\t// flatRows уже содержит обход родитель → дети. Обратный проход позволяет\n\t// заменить ребёнка до родителя без рекурсии и сохранить ссылки остальных ветвей.\n\tfor (let index = model.flatRows.length - 1; index >= 0; index--) {\n\t\tconst row = model.flatRows[index];\n\t\tconst children = replaceExpandedRows(row.children, replacements);\n\t\tconst isExpanded = row.isExpandable && (expandAll || expanded.has(row.id));\n\t\tif (isExpanded !== row.isExpanded || children !== row.children) {\n\t\t\treplacements.set(row, { ...row, isExpanded, children });\n\t\t}\n\t}\n\n\t// Неизвестные ID и листья не меняют эффективное раскрытие и не сбрасывают memo потребителей.\n\tif (replacements.size === 0) return model;\n\treturn resolveRowsProjection(model, replaceExpandedRows(model.rows, replacements));\n}\n","/** Виды исходных и синтетических строк общие для построения модели и её проекций. */\nexport const ANALYTICAL_ROW_KIND_DATA = \"data\";\nexport const ANALYTICAL_ROW_KIND_GROUP = \"group\";\n","import { calculateAnalyticalValues } from \"../definition/calculations\";\nimport { type AnalyticalAggregateContext, type CompiledAnalyticalTableDefinition } from \"../definition/types\";\n\nimport { aggregateAnalyticalValues } from \"./aggregation\";\nimport { type AnalyticalHierarchyNode } from \"./hierarchy\";\nimport { type AnalyticalDataRow, type AnalyticalValues } from \"./types\";\n\n/** Отбирает исходные строки выбранной зернистости; синтетические группы в итоги не попадают. */\nfunction collectAggregateRows<T>(\n\tnodes: readonly AnalyticalHierarchyNode<T>[],\n\taggregateRowIds: ReadonlySet<string>\n): AnalyticalDataRow<T>[] {\n\tconst rows: AnalyticalDataRow<T>[] = [];\n\tconst visit = (node: AnalyticalHierarchyNode<T>): void => {\n\t\tif (node.sourceRow && aggregateRowIds.has(node.id)) {\n\t\t\trows.push(node.sourceRow);\n\t\t}\n\n\t\tfor (const child of node.children) {\n\t\t\tvisit(child);\n\t\t}\n\t};\n\n\tfor (const node of nodes) {\n\t\tvisit(node);\n\t}\n\n\treturn rows;\n}\n\n/** Один порядок для групповых и общих итогов: агрегации → callback → зависимые формулы. */\nexport function calculateAnalyticalTotals<T>(args: {\n\tdefinition: CompiledAnalyticalTableDefinition<T>;\n\tnodes: readonly AnalyticalHierarchyNode<T>[];\n\taggregateRowIds: ReadonlySet<string>;\n\tscope: AnalyticalAggregateContext<T>[\"scope\"];\n\tgroupingPath?: AnalyticalValues;\n}): AnalyticalValues {\n\tconst { definition, nodes, aggregateRowIds, scope, groupingPath = {} } = args;\n\tconst context: AnalyticalAggregateContext<T> = {\n\t\tscope,\n\t\trows: collectAggregateRows(nodes, aggregateRowIds),\n\t\tgroupingPath\n\t};\n\tconst values: Record<string, unknown> = { ...groupingPath };\n\n\tfor (const field of definition.aggregateFields) {\n\t\tconst aggregate = field.aggregate;\n\t\tif (aggregate === undefined) continue;\n\n\t\tvalues[field.id] =\n\t\t\ttypeof aggregate === \"function\"\n\t\t\t\t? aggregate(context)\n\t\t\t\t: aggregateAnalyticalValues(\n\t\t\t\t\t\tcontext.rows.map((row) => row.values[field.id]),\n\t\t\t\t\t\taggregate\n\t\t\t\t\t);\n\t}\n\n\tObject.assign(values, definition.aggregate?.(context));\n\n\t// Явные итоги и ключи пути сохраняются. Остальные формулы читают уже готовые\n\t// суммы: процент считается из сумм, а сумма произведений не заменяется произведением сумм.\n\tconst calculations = {\n\t\t...definition.calculations,\n\t\tsteps: definition.calculations.steps.filter((step) => !Object.hasOwn(values, step.columnId))\n\t};\n\n\treturn calculateAnalyticalValues(values, calculations);\n}\n","import { parseDate } from \"../../formatters\";\nimport { compareStrings } from \"../../string-comparison\";\nimport { stableStringify } from \"../../utils\";\nimport { ANALYTICAL_VALUE_TYPE_DATE } from \"../definition/analyticalDefinitionConstants\";\nimport { type AnalyticalColumn, type AnalyticalValues } from \"../types\";\n\n/** Тип входит в ключ: null, undefined, строка и число не склеивают разные группы. */\nexport function analyticalIdentity(values: AnalyticalValues, ids: readonly string[]): string {\n\treturn stableStringify(\n\t\tids.map((id) => {\n\t\t\tconst value = values[id];\n\t\t\treturn [id, value === null ? \"null\" : typeof value, value];\n\t\t})\n\t);\n}\n\nexport function compareAnalyticalValues<T>(left: unknown, right: unknown, column?: AnalyticalColumn<T>): number {\n\tif (Object.is(left, right)) return 0;\n\tif (left === null || left === undefined) return 1;\n\tif (right === null || right === undefined) return -1;\n\tif (column?.compare) return column.compare(left, right);\n\tif (column?.valueType === ANALYTICAL_VALUE_TYPE_DATE) {\n\t\tconst leftDate = parseDate(left);\n\t\tconst rightDate = parseDate(right);\n\t\tif (leftDate && rightDate) return leftDate.getTime() - rightDate.getTime();\n\t}\n\tif (typeof left === \"number\" && typeof right === \"number\") return left - right;\n\tif (typeof left === \"boolean\" && typeof right === \"boolean\") return Number(left) - Number(right);\n\treturn compareStrings(String(left), String(right));\n}\n","import { stableStringify } from \"../../utils\";\nimport { ANALYTICAL_AGGREGATE_SCOPE_GROUP } from \"../definition/analyticalDefinitionConstants\";\nimport { type AnalyticalGroupingLevel, type CompiledAnalyticalTableDefinition } from \"../definition/types\";\n\nimport { ANALYTICAL_ROW_KIND_GROUP } from \"./analyticalRowConstants\";\nimport { type AnalyticalHierarchyNode, type AnalyticalSourceHierarchy } from \"./hierarchy\";\nimport { calculateAnalyticalTotals } from \"./totals\";\nimport { type AnalyticalValues } from \"./types\";\nimport { analyticalIdentity } from \"./valueComparison\";\n\n/** Группировка добавляет уровни над предметными корнями и сохраняет их дочернюю детализацию. */\nexport function groupAnalyticalHierarchy<T>(args: {\n\trows: readonly AnalyticalHierarchyNode<T>[];\n\tgrouping: readonly AnalyticalGroupingLevel[];\n\tdefinition: CompiledAnalyticalTableDefinition<T>;\n\tsource: AnalyticalSourceHierarchy<T>;\n}): readonly AnalyticalHierarchyNode<T>[] {\n\tconst { grouping, definition, source } = args;\n\tconst groupLevel = (\n\t\trows: readonly AnalyticalHierarchyNode<T>[],\n\t\tlevelIndex: number,\n\t\tpath: AnalyticalValues,\n\t\tidentityPath: readonly string[]\n\t): readonly AnalyticalHierarchyNode<T>[] => {\n\t\tconst level = grouping[levelIndex];\n\t\tif (!level) return rows;\n\n\t\tconst buckets = new Map<string, AnalyticalHierarchyNode<T>[]>();\n\t\tfor (const row of rows) {\n\t\t\tconst key = analyticalIdentity(row.values, level.keyColumnIds);\n\t\t\tconst bucket = buckets.get(key);\n\t\t\tif (bucket) bucket.push(row);\n\t\t\telse buckets.set(key, [row]);\n\t\t}\n\n\t\treturn Array.from(buckets, ([key, members]) => {\n\t\t\tconst identity = [...identityPath, level.id, key];\n\t\t\tconst id = `analytical-group:${stableStringify(identity)}`;\n\t\t\tif (source.sourceRowIds.has(id)) {\n\t\t\t\tthrow new Error(`Идентификатор исходной строки совпал с группой: ${id}`);\n\t\t\t}\n\n\t\t\tconst groupingPath: Record<string, unknown> = { ...path };\n\t\t\tfor (const fieldId of [...level.keyColumnIds, ...(level.displayColumnIds ?? [])]) {\n\t\t\t\tgroupingPath[fieldId] = members[0].values[fieldId];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\tkind: ANALYTICAL_ROW_KIND_GROUP,\n\t\t\t\tgroupingLevelId: level.id,\n\t\t\t\tvalues: calculateAnalyticalTotals({\n\t\t\t\t\tdefinition,\n\t\t\t\t\tnodes: members,\n\t\t\t\t\taggregateRowIds: source.aggregateRowIds,\n\t\t\t\t\tscope: ANALYTICAL_AGGREGATE_SCOPE_GROUP,\n\t\t\t\t\tgroupingPath\n\t\t\t\t}),\n\t\t\t\tchildren: groupLevel(members, levelIndex + 1, groupingPath, identity)\n\t\t\t};\n\t\t});\n\t};\n\n\treturn groupLevel(args.rows, 0, {}, []);\n}\n","import { ANALYTICAL_AGGREGATE_SCOPE_GRAND, ANALYTICAL_TOTALS_SCOPE_ALL } from \"../definition/analyticalDefinitionConstants\";\nimport { type AnalyticalGroupingLevel, type CompiledAnalyticalTableDefinition } from \"../definition/types\";\nimport { indexAnalyticalRows } from \"../projections/indexAnalyticalRows\";\n\nimport { groupAnalyticalHierarchy } from \"./grouping\";\nimport { type AnalyticalHierarchyNode, type AnalyticalSourceHierarchy } from \"./hierarchy\";\nimport { calculateAnalyticalTotals } from \"./totals\";\nimport { type AnalyticalModelRow, type AnalyticalTableModel } from \"./types\";\n\n/** Назначает конечные уровни и родителей после добавления всех группировок. */\nfunction materializeRows<T>(\n\tnodes: readonly AnalyticalHierarchyNode<T>[],\n\tparentId: string | null = null,\n\tlevel = 0\n): AnalyticalModelRow<T>[] {\n\treturn nodes.map((node) => ({\n\t\tid: node.id,\n\t\tparentId,\n\t\tkind: node.kind,\n\t\tsourceRow: node.sourceRow,\n\t\toriginal: node.sourceRow?.original,\n\t\tvalues: node.values,\n\t\tlevel,\n\t\tchildren: materializeRows(node.children, node.id, level + 1),\n\t\tisExpandable: node.children.length > 0,\n\t\tisExpanded: false,\n\t\tgroupingLevelId: node.groupingLevelId\n\t}));\n}\n\n/** Базовая модель содержит все отобранные строки и итоги; порядок и раскрытие задаются позже. */\nexport function buildGroupedAnalyticalModel<T>(args: {\n\tdefinition: CompiledAnalyticalTableDefinition<T>;\n\tsource: AnalyticalSourceHierarchy<T>;\n\tfilteredRows: readonly AnalyticalHierarchyNode<T>[];\n\tgrouping: readonly AnalyticalGroupingLevel[];\n}): AnalyticalTableModel<T> {\n\tconst { definition, source, filteredRows, grouping } = args;\n\tconst hierarchy = groupAnalyticalHierarchy({ rows: filteredRows, grouping, definition, source });\n\tconst rows = materializeRows(hierarchy);\n\tconst grandTotals = definition.grandTotals\n\t\t? calculateAnalyticalTotals({\n\t\t\t\tdefinition,\n\t\t\t\tnodes: definition.grandTotalsScope === ANALYTICAL_TOTALS_SCOPE_ALL ? source.rows : filteredRows,\n\t\t\t\taggregateRowIds: source.aggregateRowIds,\n\t\t\t\tscope: ANALYTICAL_AGGREGATE_SCOPE_GRAND\n\t\t\t})\n\t\t: null;\n\n\treturn {\n\t\tcolumns: definition.columns,\n\t\trows,\n\t\t...indexAnalyticalRows(rows),\n\t\tgrandTotals,\n\t\tdiagnostics: source.diagnostics\n\t};\n}\n","import { normalizeTextToLower } from \"../../formatters\";\nimport { type AnalyticalColumn, type AnalyticalDataRow, type AnalyticalFilter } from \"../types\";\n\nimport {\n\tANALYTICAL_FILTER_EQUALS,\n\tANALYTICAL_FILTER_NOT_EQUALS,\n\tANALYTICAL_FILTER_CONTAINS,\n\tANALYTICAL_FILTER_STARTS_WITH,\n\tANALYTICAL_FILTER_IN,\n\tANALYTICAL_FILTER_BETWEEN,\n\tANALYTICAL_FILTER_GT,\n\tANALYTICAL_FILTER_GTE,\n\tANALYTICAL_FILTER_LT,\n\tANALYTICAL_FILTER_LTE,\n\tANALYTICAL_FILTER_EMPTY,\n\tANALYTICAL_FILTER_NOT_EMPTY\n} from \"./analyticalViewConstants\";\nimport { type AnalyticalHierarchyNode } from \"./hierarchy\";\nimport { compareAnalyticalValues } from \"./valueComparison\";\n\n/** Операции фильтра относятся к данным, поэтому одинаково работают при SSR и в браузере. */\nexport function matchesAnalyticalFilter<T>(row: AnalyticalDataRow<T>, filter: AnalyticalFilter, column?: AnalyticalColumn<T>): boolean {\n\tconst value = row.values[filter.id];\n\tif (column?.filter) return column.filter(value, filter, row);\n\tconst expected = filter.value;\n\tconst compare = (other: unknown) => compareAnalyticalValues(value, other, column);\n\tconst empty = value === null || value === undefined || value === \"\";\n\tswitch (filter.operator ?? ANALYTICAL_FILTER_EQUALS) {\n\t\tcase ANALYTICAL_FILTER_EQUALS:\n\t\t\treturn compare(expected) === 0;\n\t\tcase ANALYTICAL_FILTER_NOT_EQUALS:\n\t\t\treturn compare(expected) !== 0;\n\t\tcase ANALYTICAL_FILTER_CONTAINS:\n\t\t\treturn normalizeTextToLower(String(value ?? \"\")).includes(normalizeTextToLower(String(expected ?? \"\")));\n\t\tcase ANALYTICAL_FILTER_STARTS_WITH:\n\t\t\treturn normalizeTextToLower(String(value ?? \"\")).startsWith(normalizeTextToLower(String(expected ?? \"\")));\n\t\tcase ANALYTICAL_FILTER_IN:\n\t\t\treturn Array.isArray(expected) && expected.some((item: unknown) => compare(item) === 0);\n\t\tcase ANALYTICAL_FILTER_BETWEEN:\n\t\t\treturn Array.isArray(expected) && expected.length === 2 && !empty && compare(expected[0]) >= 0 && compare(expected[1]) <= 0;\n\t\tcase ANALYTICAL_FILTER_GT:\n\t\t\treturn !empty && compare(expected) > 0;\n\t\tcase ANALYTICAL_FILTER_GTE:\n\t\t\treturn !empty && compare(expected) >= 0;\n\t\tcase ANALYTICAL_FILTER_LT:\n\t\t\treturn !empty && compare(expected) < 0;\n\t\tcase ANALYTICAL_FILTER_LTE:\n\t\t\treturn !empty && compare(expected) <= 0;\n\t\tcase ANALYTICAL_FILTER_EMPTY:\n\t\t\treturn empty;\n\t\tcase ANALYTICAL_FILTER_NOT_EMPTY:\n\t\t\treturn !empty;\n\t}\n}\n\n/** Совпавший родитель оставляет всю ветвь; совпавший ребёнок сохраняет путь к нему. */\nexport function filterAnalyticalHierarchy<T>(\n\trows: readonly AnalyticalHierarchyNode<T>[],\n\tfilters: readonly AnalyticalFilter[],\n\tfieldsById: ReadonlyMap<string, AnalyticalColumn<T>>\n): readonly AnalyticalHierarchyNode<T>[] {\n\tif (filters.length === 0) return rows;\n\n\tconst filtered: AnalyticalHierarchyNode<T>[] = [];\n\tfor (const row of rows) {\n\t\tconst sourceRow = row.sourceRow;\n\t\tconst matches = sourceRow && filters.every((filter) => matchesAnalyticalFilter(sourceRow, filter, fieldsById.get(filter.id)));\n\t\tif (matches) {\n\t\t\tfiltered.push(row);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst children = filterAnalyticalHierarchy(row.children, filters, fieldsById);\n\t\tif (children.length > 0) {\n\t\t\tfiltered.push({ ...row, children });\n\t\t}\n\t}\n\n\treturn filtered;\n}\n","import { buildTreeTableRows, type TreeTableRowNode } from \"../../tree-table\";\nimport { calculateAnalyticalValues } from \"../definition/calculations\";\nimport { type CompiledAnalyticalTableDefinition } from \"../definition/types\";\n\nimport { ANALYTICAL_ROW_KIND_DATA, type ANALYTICAL_ROW_KIND_GROUP } from \"./analyticalRowConstants\";\nimport { type AnalyticalDataRow, type AnalyticalDiagnostics, type AnalyticalSnapshot, type AnalyticalValues } from \"./types\";\n\n/** Узел до назначения итогового parentId/level: группировка ещё может добавить предков. */\nexport type AnalyticalHierarchyNode<T> = Readonly<{\n\tid: string;\n\tkind: typeof ANALYTICAL_ROW_KIND_DATA | typeof ANALYTICAL_ROW_KIND_GROUP;\n\tsourceRow?: AnalyticalDataRow<T>;\n\tvalues: AnalyticalValues;\n\tchildren: readonly AnalyticalHierarchyNode<T>[];\n\tgroupingLevelId?: string;\n}>;\n\nexport type AnalyticalSourceHierarchy<T> = Readonly<{\n\trows: readonly AnalyticalHierarchyNode<T>[];\n\tsourceRowIds: ReadonlySet<string>;\n\taggregateRowIds: ReadonlySet<string>;\n\tdiagnostics: AnalyticalDiagnostics;\n}>;\n\n/** Формулы исходных строк и предметная иерархия зависят только от определения и снимка. */\nexport function prepareAnalyticalHierarchy<T>(\n\tsnapshot: AnalyticalSnapshot<T>,\n\tdefinition: CompiledAnalyticalTableDefinition<T>\n): AnalyticalSourceHierarchy<T> {\n\tif (snapshot.rows.some((row) => row.id.length === 0)) {\n\t\tthrow new Error(\"Идентификатор аналитической строки не может быть пустым.\");\n\t}\n\n\tconst calculatedRows = snapshot.rows.map((row) => ({\n\t\t...row,\n\t\tvalues: calculateAnalyticalValues(row.values, definition.calculations)\n\t}));\n\tconst tree = buildTreeTableRows(calculatedRows, {\n\t\tgetRowId: (row) => row.id,\n\t\tgetParentRowId: (row) => row.parentId\n\t});\n\n\tconst prepareNode = (node: TreeTableRowNode<AnalyticalDataRow<T>>): AnalyticalHierarchyNode<T> => ({\n\t\tid: node.id,\n\t\tkind: ANALYTICAL_ROW_KIND_DATA,\n\t\tsourceRow: tree.rowById.get(node.id),\n\t\tvalues: node.values,\n\t\tchildren: (node.children ?? []).map(prepareNode)\n\t});\n\tconst aggregateRowIds = definition.isAggregateRow\n\t\t? Array.from(tree.rowById.values())\n\t\t\t\t.filter(definition.isAggregateRow)\n\t\t\t\t.map((row) => row.id)\n\t\t: tree.rootRowIds;\n\n\treturn {\n\t\trows: tree.rows.map(prepareNode),\n\t\tsourceRowIds: new Set(tree.allRowIds),\n\t\taggregateRowIds: new Set(aggregateRowIds),\n\t\tdiagnostics: {\n\t\t\torphanRowIds: tree.orphanRowIds,\n\t\t\tduplicateRowIds: tree.duplicateRowIds,\n\t\t\tcyclicRowIds: tree.cyclicRowIds\n\t\t}\n\t};\n}\n","import { type AnalyticalColumn } from \"../definition/types\";\nimport { resolveRowsProjection } from \"../projections/resolveRowsProjection\";\n\nimport { type AnalyticalModelRow, type AnalyticalSorting, type AnalyticalTableModel } from \"./types\";\nimport { compareAnalyticalValues } from \"./valueComparison\";\n\n/** Меняет только порядок соседей: вычисленные значения, итоги и связи parent/child сохраняются. */\nexport function sortAnalyticalModel<T>(\n\tmodel: AnalyticalTableModel<T>,\n\tsorting: readonly AnalyticalSorting[],\n\tfieldsById: ReadonlyMap<string, AnalyticalColumn<T>>\n): AnalyticalTableModel<T> {\n\tif (sorting.length === 0) return model;\n\n\tconst compareRows = (left: AnalyticalModelRow<T>, right: AnalyticalModelRow<T>): number => {\n\t\tfor (const sort of sorting) {\n\t\t\tconst comparison = compareAnalyticalValues(left.values[sort.id], right.values[sort.id], fieldsById.get(sort.id));\n\t\t\tif (comparison !== 0) return sort.desc ? -comparison : comparison;\n\t\t}\n\t\treturn 0;\n\t};\n\tconst sortBranch = (rows: readonly AnalyticalModelRow<T>[]): readonly AnalyticalModelRow<T>[] => {\n\t\tif (rows.length === 0) return rows;\n\n\t\tconst projected = rows.map((row) => {\n\t\t\tconst children = sortBranch(row.children);\n\t\t\treturn children === row.children ? row : { ...row, children };\n\t\t});\n\t\tprojected.sort(compareRows);\n\n\t\treturn projected.every((row, index) => row === rows[index]) ? rows : projected;\n\t};\n\n\treturn resolveRowsProjection(model, sortBranch(model.rows));\n}\n","import { validateAnalyticalView } from \"../definition/validateAnalyticalView\";\nimport { projectAnalyticalTableExpansion } from \"../projections/expansion\";\n\nimport { buildGroupedAnalyticalModel } from \"./buildGroupedModel\";\nimport { filterAnalyticalHierarchy } from \"./filtering\";\nimport { prepareAnalyticalHierarchy } from \"./hierarchy\";\nimport { sortAnalyticalModel } from \"./sorting\";\nimport {\n\ttype AnalyticalTableModel,\n\ttype AnalyticalTableRuntime,\n\ttype AnalyticalViewState,\n\ttype CreateAnalyticalTableRuntimeOptions\n} from \"./types\";\n\nconst EMPTY_STATE: AnalyticalViewState = {};\nconst EMPTY_ITEMS = Object.freeze([]);\n\n/**\n * Создаёт вычислительный runtime для одного снимка.\n *\n * Хранится только последний результат каждого этапа. Исходные строки рассчитываются\n * один раз; фильтры/группировки меняют итоги, сортировка — порядок, раскрытие — видимость.\n * Входные определения, снимки и массивы состояния должны оставаться неизменяемыми.\n */\nexport function createAnalyticalTableRuntime<T>(options: CreateAnalyticalTableRuntimeOptions<T>): AnalyticalTableRuntime<T> {\n\tconst { definition, snapshot } = options;\n\tconst source = prepareAnalyticalHierarchy(snapshot, definition);\n\tlet previousState: AnalyticalViewState = EMPTY_STATE;\n\tlet filteredRows = source.rows;\n\tlet groupedModel: AnalyticalTableModel<T> | undefined;\n\tlet sortedModel: AnalyticalTableModel<T> | undefined;\n\tlet expandedModel: AnalyticalTableModel<T> | undefined;\n\n\treturn {\n\t\tgetModel(state = EMPTY_STATE) {\n\t\t\tvalidateAnalyticalView(definition, state);\n\t\t\tconst filters = state.filters ?? EMPTY_ITEMS;\n\t\t\tconst grouping = state.grouping ?? EMPTY_ITEMS;\n\t\t\tconst sorting = state.sorting ?? EMPTY_ITEMS;\n\t\t\tconst expandedRowIds = state.expandedRowIds ?? EMPTY_ITEMS;\n\t\t\tconst filtersChanged = !groupedModel || filters !== (previousState.filters ?? EMPTY_ITEMS);\n\t\t\tconst groupingChanged = !groupedModel || grouping !== (previousState.grouping ?? EMPTY_ITEMS);\n\t\t\tconst sortingChanged = sorting !== (previousState.sorting ?? EMPTY_ITEMS);\n\t\t\tconst expansionChanged = expandedRowIds !== (previousState.expandedRowIds ?? EMPTY_ITEMS);\n\n\t\t\tconst nextFilteredRows = filtersChanged ? filterAnalyticalHierarchy(source.rows, filters, definition.fieldsById) : filteredRows;\n\n\t\t\tconst rebuildGroups = !groupedModel || filtersChanged || groupingChanged;\n\t\t\tconst nextGroupedModel = rebuildGroups\n\t\t\t\t? buildGroupedAnalyticalModel({ definition, source, filteredRows: nextFilteredRows, grouping })\n\t\t\t\t: groupedModel!;\n\n\t\t\tconst rebuildSorting = !sortedModel || rebuildGroups || sortingChanged;\n\t\t\tconst nextSortedModel = rebuildSorting ? sortAnalyticalModel(nextGroupedModel, sorting, definition.fieldsById) : sortedModel!;\n\n\t\t\tconst nextExpandedModel =\n\t\t\t\t!expandedModel || rebuildSorting || expansionChanged\n\t\t\t\t\t? projectAnalyticalTableExpansion(rebuildSorting ? nextSortedModel : (expandedModel ?? nextSortedModel), expandedRowIds)\n\t\t\t\t\t: expandedModel;\n\n\t\t\t// Ошибка callback не должна оставлять стадии от разных состояний в одном runtime.\n\t\t\tfilteredRows = nextFilteredRows;\n\t\t\tgroupedModel = nextGroupedModel;\n\t\t\tsortedModel = nextSortedModel;\n\t\t\texpandedModel = nextExpandedModel;\n\t\t\tpreviousState = { filters, grouping, sorting, expandedRowIds };\n\t\t\treturn expandedModel;\n\t\t}\n\t};\n}\n","import { compileAnalyticalTableDefinition } from \"./definition/compileAnalyticalTableDefinition\";\nimport { createAnalyticalTableRuntime } from \"./runtime/createAnalyticalTableRuntime\";\nimport { type AnalyticalTableModel, type BuildAnalyticalTableModelOptions } from \"./runtime/types\";\n\n/**\n * Строит таблицу за один вызов: описание → runtime снимка → модель представления.\n * Для последовательных изменений состояния сохраняйте определение и runtime отдельно.\n */\nexport function buildAnalyticalTableModel<T>(options: BuildAnalyticalTableModelOptions<T>): AnalyticalTableModel<T> {\n\tconst definition = compileAnalyticalTableDefinition(options);\n\tconst runtime = createAnalyticalTableRuntime({ definition, snapshot: options.snapshot });\n\n\treturn runtime.getModel(options.state);\n}\n","/** Зернистость календарного столбца общая для описания плана и переходов между периодами. */\nexport const ANALYTICAL_DATE_GRANULARITY_DAY = \"day\";\nexport const ANALYTICAL_DATE_GRANULARITY_WEEK = \"week\";\nexport const ANALYTICAL_DATE_GRANULARITY_MONTH = \"month\";\nexport const ANALYTICAL_DATE_GRANULARITY_QUARTER = \"quarter\";\nexport const ANALYTICAL_DATE_GRANULARITY_YEAR = \"year\";\n","import {\n\taddCalendarDays,\n\taddCalendarMonths,\n\taddCalendarYears,\n\tcreateCalendarDate,\n\tformatDateAsDate,\n\tformatDateAsODataDate,\n\tgetStartOfDay,\n\tgetStartOfMonth,\n\tgetStartOfWeek,\n\tgetStartOfYear,\n\tparseDateByPattern\n} from \"../../formatters\";\nimport { aggregateAnalyticalValues } from \"../runtime/aggregation\";\nimport { type AnalyticalDataRow, type AnalyticalValues } from \"../runtime/types\";\nimport { analyticalIdentity } from \"../runtime/valueComparison\";\n\nimport {\n\tANALYTICAL_DATE_GRANULARITY_DAY,\n\tANALYTICAL_DATE_GRANULARITY_WEEK,\n\tANALYTICAL_DATE_GRANULARITY_MONTH,\n\tANALYTICAL_DATE_GRANULARITY_QUARTER,\n\tANALYTICAL_DATE_GRANULARITY_YEAR\n} from \"./analyticalDateColumnConstants\";\nimport {\n\ttype AnalyticalDateColumn,\n\ttype AnalyticalDateColumnsOptions,\n\ttype AnalyticalDateColumnsPlan,\n\ttype ProjectAnalyticalDateFactsOptions\n} from \"./types\";\n\n// Ограничения date-only контракта и календарных периодов не зависят от снимка данных.\nconst CALENDAR_DATE_TEXT_LENGTH = 10;\nconst DAYS_PER_WEEK = 7;\nconst MONTHS_PER_QUARTER = 3;\nconst DEFAULT_DATE_COLUMN_LIMIT = 366;\n\n/** Принимает только календарный контракт; преобразование timestamp принадлежит transport/domain адаптеру. */\nfunction readCalendarDate(value: unknown): Date | null {\n\tif (typeof value !== \"string\" || value.length !== CALENDAR_DATE_TEXT_LENGTH) return null;\n\tconst parsed = parseDateByPattern(value, \"yyyy-MM-dd\");\n\treturn parsed?.kind === \"date-time\" ? parsed.date : null;\n}\n\nfunction getDateBucketStart(date: Date, granularity: AnalyticalDateColumnsOptions[\"granularity\"]): Date {\n\tswitch (granularity) {\n\t\tcase ANALYTICAL_DATE_GRANULARITY_DAY:\n\t\t\treturn getStartOfDay(date);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_WEEK:\n\t\t\treturn getStartOfWeek(date, 1);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_MONTH:\n\t\t\treturn getStartOfMonth(date);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_QUARTER:\n\t\t\treturn createCalendarDate(date.getFullYear(), Math.floor(date.getMonth() / MONTHS_PER_QUARTER) * MONTHS_PER_QUARTER, 1);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_YEAR:\n\t\t\treturn getStartOfYear(date);\n\t}\n}\n\nfunction getNextDateBucketStart(date: Date, granularity: AnalyticalDateColumnsOptions[\"granularity\"]): Date {\n\tswitch (granularity) {\n\t\tcase ANALYTICAL_DATE_GRANULARITY_DAY:\n\t\t\treturn addCalendarDays(date, 1);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_WEEK:\n\t\t\treturn addCalendarDays(date, DAYS_PER_WEEK);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_MONTH:\n\t\t\treturn addCalendarMonths(date, 1);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_QUARTER:\n\t\t\treturn addCalendarMonths(date, MONTHS_PER_QUARTER);\n\t\tcase ANALYTICAL_DATE_GRANULARITY_YEAR:\n\t\t\treturn addCalendarYears(date, 1);\n\t}\n}\n\n/** Строит ограниченный календарный план; ISO-моменты времени сюда не передаются. */\nexport function createAnalyticalDateColumnsPlan(options: AnalyticalDateColumnsOptions): AnalyticalDateColumnsPlan {\n\tconst from = readCalendarDate(options.from);\n\tconst to = readCalendarDate(options.to);\n\tif (\n\t\t!from ||\n\t\t!to ||\n\t\tformatDateAsODataDate(from) !== options.from ||\n\t\tformatDateAsODataDate(to) !== options.to ||\n\t\toptions.from > options.to\n\t)\n\t\tthrow new Error(\"Некорректный календарный диапазон аналитических столбцов.\");\n\tconst maxColumns = options.maxColumns ?? DEFAULT_DATE_COLUMN_LIMIT;\n\tif (!Number.isSafeInteger(maxColumns) || maxColumns < 1)\n\t\tthrow new Error(\"Лимит динамических столбцов должен быть положительным целым числом.\");\n\tif (!options.id || options.identityColumnIds.length === 0)\n\t\tthrow new Error(\"Динамическим столбцам нужны идентификатор и ключи сопоставления фактов.\");\n\n\t// Идентификатор относится ко всему календарному периоду, границы отбора — только к запрошенной части периода.\n\tconst columns: AnalyticalDateColumn[] = [];\n\tlet start = getDateBucketStart(from, options.granularity);\n\twhile (start <= to) {\n\t\tif (columns.length >= maxColumns) throw new Error(`Превышен лимит динамических столбцов: ${maxColumns}`);\n\t\tconst nextStart = getNextDateBucketStart(start, options.granularity);\n\t\tconst key = formatDateAsODataDate(start);\n\t\tconst end = formatDateAsODataDate(addCalendarDays(nextStart, -1));\n\t\tcolumns.push({\n\t\t\tid: `${options.id}:${options.granularity}:${key}`,\n\t\t\t// Подпись дня следует общей настройке date; машинные даты используют штатный odata-date.\n\t\t\tlabel: options.granularity === ANALYTICAL_DATE_GRANULARITY_DAY ? formatDateAsDate(start) : `${key} — ${end}`,\n\t\t\tfrom: key < options.from ? options.from : key,\n\t\t\tto: end > options.to ? options.to : end\n\t\t});\n\t\tstart = nextStart;\n\t}\n\treturn { options: { ...options, identityColumnIds: [...options.identityColumnIds] }, columns };\n}\n\nfunction resolveFactColumnId(fact: AnalyticalValues, plan: AnalyticalDateColumnsPlan): string | undefined {\n\t// Факт без полного ключа нельзя сопоставить строке; общий итог использует ту же область допустимых фактов.\n\tif (plan.options.identityColumnIds.some((id) => fact[id] === undefined || fact[id] === null)) return undefined;\n\tconst date = readCalendarDate(fact[plan.options.dateColumnId]);\n\tif (!date) return undefined;\n\tconst day = formatDateAsODataDate(date);\n\tif (day < plan.options.from || day > plan.options.to) return undefined;\n\treturn `${plan.options.id}:${plan.options.granularity}:${formatDateAsODataDate(getDateBucketStart(date, plan.options.granularity))}`;\n}\n\n/** Индекс содержит исходные значения мер: выбор способа агрегации происходит после сопоставления фактов. */\nfunction indexFactMeasuresByIdentity(\n\tfacts: readonly AnalyticalValues[],\n\tplan: AnalyticalDateColumnsPlan\n): ReadonlyMap<string, ReadonlyMap<string, readonly unknown[]>> {\n\tconst byIdentity = new Map<string, Map<string, unknown[]>>();\n\tfor (const fact of facts) {\n\t\tconst columnId = resolveFactColumnId(fact, plan);\n\t\tif (!columnId) continue;\n\t\tconst identity = analyticalIdentity(fact, plan.options.identityColumnIds);\n\t\tlet buckets = byIdentity.get(identity);\n\t\tif (!buckets) {\n\t\t\tbuckets = new Map();\n\t\t\tbyIdentity.set(identity, buckets);\n\t\t}\n\t\tconst bucket = buckets.get(columnId);\n\t\tif (bucket) bucket.push(fact[plan.options.measureColumnId]);\n\t\telse buckets.set(columnId, [fact[plan.options.measureColumnId]]);\n\t}\n\treturn byIdentity;\n}\n\n/** Сопоставляет отдельные facts составному ключу строки; порядок и количество base rows неизменны. */\nexport function projectAnalyticalDateFacts<T>(args: ProjectAnalyticalDateFactsOptions<T>): readonly AnalyticalDataRow<T>[] {\n\tconst { rows, facts, plan } = args;\n\tconst byIdentity = indexFactMeasuresByIdentity(facts, plan);\n\treturn rows.map((row) => {\n\t\tconst buckets = byIdentity.get(analyticalIdentity(row.values, plan.options.identityColumnIds));\n\t\tconst values: Record<string, unknown> = { ...row.values };\n\t\tfor (const column of plan.columns) {\n\t\t\tif (Object.hasOwn(values, column.id)) throw new Error(`Динамический столбец перезаписывает исходное поле: ${column.id}`);\n\t\t\tconst bucket = buckets?.get(column.id);\n\t\t\tvalues[column.id] = bucket ? aggregateAnalyticalValues(bucket, plan.options.aggregation) : null;\n\t\t}\n\t\treturn { ...row, values };\n\t});\n}\n\n/**\n * Общие итоги считаются по исходным facts с полным ключом: среднее от средних не подменяет взвешенный результат.\n * Отбор допустимых непустых identities по области доступа и фильтрам выполняет вызывающий адаптер.\n */\nexport function aggregateAnalyticalDateFacts(facts: readonly AnalyticalValues[], plan: AnalyticalDateColumnsPlan): AnalyticalValues {\n\tconst buckets = new Map<string, unknown[]>();\n\tfor (const fact of facts) {\n\t\tconst id = resolveFactColumnId(fact, plan);\n\t\tif (!id) continue;\n\t\tconst bucket = buckets.get(id);\n\t\tif (bucket) bucket.push(fact[plan.options.measureColumnId]);\n\t\telse buckets.set(id, [fact[plan.options.measureColumnId]]);\n\t}\n\treturn Object.fromEntries(\n\t\tplan.columns.map((column) => {\n\t\t\tconst bucket = buckets.get(column.id);\n\t\t\treturn [column.id, bucket ? aggregateAnalyticalValues(bucket, plan.options.aggregation) : null];\n\t\t})\n\t);\n}\n","/** Области экспорта не меняют модель и не совпадают по ответственности с областью итогов. */\nexport const ANALYTICAL_EXPORT_SCOPE_ALL = \"all\";\nexport const ANALYTICAL_EXPORT_SCOPE_VISIBLE = \"visible\";\nexport const ANALYTICAL_EXPORT_SCOPE_SELECTED = \"selected\";\n\n/** Общий итог существует как строка только в экспортной проекции. */\nexport const ANALYTICAL_EXPORT_ROW_KIND_GRAND = \"grand\";\n","import { ANALYTICAL_ROW_KIND_GROUP } from \"../runtime/analyticalRowConstants\";\nimport {\n\ttype AnalyticalExportColumn,\n\ttype AnalyticalExportProjection,\n\ttype AnalyticalTableModel,\n\ttype ProjectAnalyticalTableExportOptions\n} from \"../types\";\n\nimport {\n\tANALYTICAL_EXPORT_SCOPE_ALL,\n\tANALYTICAL_EXPORT_SCOPE_VISIBLE,\n\tANALYTICAL_EXPORT_SCOPE_SELECTED,\n\tANALYTICAL_EXPORT_ROW_KIND_GRAND\n} from \"./analyticalExportConstants\";\n\n/** ID итога устойчив между областями экспорта и не конфликтует даже со скрытой строкой модели. */\nfunction resolveGrandTotalId<T>(model: AnalyticalTableModel<T>): string {\n\tconst baseId = \"analytical-grand-total\";\n\tlet id = baseId;\n\tlet suffix = 1;\n\twhile (model.rowById.has(id)) id = `${baseId}:${suffix++}`;\n\treturn id;\n}\n\n/** Проекция для /excel или /table-document; сам runtime не скачивает файлы и не читает DOM. */\nexport function projectAnalyticalTableExport<T>(args: ProjectAnalyticalTableExportOptions<T>): AnalyticalExportProjection {\n\tconst { model, scope = ANALYTICAL_EXPORT_SCOPE_ALL, includeGroups = true, includeGrandTotals = false } = args;\n\tconst columns: readonly AnalyticalExportColumn<T>[] = args.columns ?? model.columns;\n\tconst selected = new Set(args.selectedRowIds ?? []);\n\tconst source = scope === ANALYTICAL_EXPORT_SCOPE_VISIBLE ? model.visibleRows : model.flatRows;\n\tconst rows: AnalyticalExportProjection[\"rows\"][number][] = [];\n\n\tfor (const row of source) {\n\t\tif (!includeGroups && row.kind === ANALYTICAL_ROW_KIND_GROUP) continue;\n\t\tif (scope === ANALYTICAL_EXPORT_SCOPE_SELECTED && !selected.has(row.id)) continue;\n\t\trows.push({\n\t\t\tid: row.id,\n\t\t\tlevel: row.level,\n\t\t\tkind: row.kind,\n\t\t\tvalues: columns.map((column) => (column.format ? column.format(row.values[column.id], row) : row.values[column.id]))\n\t\t});\n\t}\n\n\tif (includeGrandTotals && model.grandTotals) {\n\t\tconst totals = model.grandTotals;\n\t\trows.push({\n\t\t\tid: resolveGrandTotalId(model),\n\t\t\tlevel: 0,\n\t\t\tkind: ANALYTICAL_EXPORT_ROW_KIND_GRAND,\n\t\t\tvalues: columns.map((column) => (column.formatTotal ? column.formatTotal(totals[column.id]) : totals[column.id]))\n\t\t});\n\t}\n\treturn { columns: columns.map((column) => ({ id: column.id, label: column.label ?? column.id })), rows };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Области экспорта не меняют модель и не совпадают по ответственности с областью итогов. */
|
|
2
|
+
export declare const ANALYTICAL_EXPORT_SCOPE_ALL = "all";
|
|
3
|
+
export declare const ANALYTICAL_EXPORT_SCOPE_VISIBLE = "visible";
|
|
4
|
+
export declare const ANALYTICAL_EXPORT_SCOPE_SELECTED = "selected";
|
|
5
|
+
/** Общий итог существует как строка только в экспортной проекции. */
|
|
6
|
+
export declare const ANALYTICAL_EXPORT_ROW_KIND_GRAND = "grand";
|
|
7
|
+
//# sourceMappingURL=analyticalExportConstants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticalExportConstants.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/projections/analyticalExportConstants.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,+BAA+B,YAAY,CAAC;AACzD,eAAO,MAAM,gCAAgC,aAAa,CAAC;AAE3D,qEAAqE;AACrE,eAAO,MAAM,gCAAgC,UAAU,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import { ANALYTICAL_EXPANSION_ALL } from "../runtime/analyticalViewConstants";
|
|
1
2
|
import { type AnalyticalTableModel } from "../types";
|
|
2
3
|
/** Раскрытие меняет только затронутые ветви; формулы и итоги остаются результатом базовой модели. */
|
|
3
|
-
export declare function projectAnalyticalTableExpansion<T>(model: AnalyticalTableModel<T>, expandedRowIds: readonly string[] |
|
|
4
|
+
export declare function projectAnalyticalTableExpansion<T>(model: AnalyticalTableModel<T>, expandedRowIds: readonly string[] | typeof ANALYTICAL_EXPANSION_ALL): AnalyticalTableModel<T>;
|
|
4
5
|
//# sourceMappingURL=expansion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expansion.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/projections/expansion.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAmB9E,qGAAqG;AACrG,wBAAgB,+BAA+B,CAAC,CAAC,EAChD,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC9B,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"expansion.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/projections/expansion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAmB9E,qGAAqG;AACrG,wBAAgB,+BAA+B,CAAC,CAAC,EAChD,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC9B,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,wBAAwB,GACjE,oBAAoB,CAAC,CAAC,CAAC,CAmBzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportProjection.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/projections/exportProjection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"exportProjection.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/projections/exportProjection.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,0BAA0B,EAE/B,KAAK,mCAAmC,EACxC,MAAM,UAAU,CAAC;AAkBlB,+FAA+F;AAC/F,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,IAAI,EAAE,mCAAmC,CAAC,CAAC,CAAC,GAAG,0BAA0B,CA4BxH"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AnalyticalModelRow, type AnalyticalTableModel } from "../types";
|
|
2
|
+
import { type ANALYTICAL_EXPORT_SCOPE_ALL, type ANALYTICAL_EXPORT_SCOPE_VISIBLE, type ANALYTICAL_EXPORT_SCOPE_SELECTED, type ANALYTICAL_EXPORT_ROW_KIND_GRAND } from "./analyticalExportConstants";
|
|
2
3
|
export type AnalyticalExportColumn<TOriginal = unknown> = Readonly<{
|
|
3
4
|
id: string;
|
|
4
5
|
label?: string;
|
|
@@ -13,7 +14,7 @@ export type AnalyticalExportHeader = Readonly<{
|
|
|
13
14
|
export type AnalyticalExportRow = Readonly<{
|
|
14
15
|
id: string;
|
|
15
16
|
level: number;
|
|
16
|
-
kind: "
|
|
17
|
+
kind: AnalyticalModelRow["kind"] | typeof ANALYTICAL_EXPORT_ROW_KIND_GRAND;
|
|
17
18
|
values: readonly unknown[];
|
|
18
19
|
}>;
|
|
19
20
|
export type AnalyticalExportProjection = Readonly<{
|
|
@@ -23,7 +24,7 @@ export type AnalyticalExportProjection = Readonly<{
|
|
|
23
24
|
export type ProjectAnalyticalTableExportOptions<TOriginal = unknown> = Readonly<{
|
|
24
25
|
model: AnalyticalTableModel<TOriginal>;
|
|
25
26
|
columns?: readonly AnalyticalExportColumn<TOriginal>[];
|
|
26
|
-
scope?:
|
|
27
|
+
scope?: typeof ANALYTICAL_EXPORT_SCOPE_ALL | typeof ANALYTICAL_EXPORT_SCOPE_VISIBLE | typeof ANALYTICAL_EXPORT_SCOPE_SELECTED;
|
|
27
28
|
selectedRowIds?: readonly string[];
|
|
28
29
|
includeGroups?: boolean;
|
|
29
30
|
includeGrandTotals?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/projections/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE9E,MAAM,MAAM,sBAAsB,CAAC,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC;IACzE,oFAAoF;IACpF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/projections/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE9E,OAAO,EACN,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,EACrC,MAAM,6BAA6B,CAAC;AAErC,MAAM,MAAM,sBAAsB,CAAC,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,SAAS,CAAC,KAAK,OAAO,CAAC;IACzE,oFAAoF;IACpF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7E,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,OAAO,gCAAgC,CAAC;IAC3E,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IACjD,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3C,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,MAAM,mCAAmC,CAAC,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC;IAC/E,KAAK,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,SAAS,sBAAsB,CAAC,SAAS,CAAC,EAAE,CAAC;IACvD,KAAK,CAAC,EAAE,OAAO,2BAA2B,GAAG,OAAO,+BAA+B,GAAG,OAAO,gCAAgC,CAAC;IAC9H,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregation.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/aggregation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aggregation.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/aggregation.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,4FAA4F;AAC5F,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,EAAE,WAAW,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CA6BvH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticalRowConstants.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/analyticalRowConstants.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,SAAS,CAAC;AAC/C,eAAO,MAAM,yBAAyB,UAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Операторы имеют один источник для сериализуемого состояния фильтра и его исполнения. */
|
|
2
|
+
export declare const ANALYTICAL_FILTER_EQUALS = "equals";
|
|
3
|
+
export declare const ANALYTICAL_FILTER_NOT_EQUALS = "notEquals";
|
|
4
|
+
export declare const ANALYTICAL_FILTER_CONTAINS = "contains";
|
|
5
|
+
export declare const ANALYTICAL_FILTER_STARTS_WITH = "startsWith";
|
|
6
|
+
export declare const ANALYTICAL_FILTER_IN = "in";
|
|
7
|
+
export declare const ANALYTICAL_FILTER_BETWEEN = "between";
|
|
8
|
+
export declare const ANALYTICAL_FILTER_GT = "gt";
|
|
9
|
+
export declare const ANALYTICAL_FILTER_GTE = "gte";
|
|
10
|
+
export declare const ANALYTICAL_FILTER_LT = "lt";
|
|
11
|
+
export declare const ANALYTICAL_FILTER_LTE = "lte";
|
|
12
|
+
export declare const ANALYTICAL_FILTER_EMPTY = "empty";
|
|
13
|
+
export declare const ANALYTICAL_FILTER_NOT_EMPTY = "notEmpty";
|
|
14
|
+
/** Полное раскрытие не является областью расчёта итогов или экспорта. */
|
|
15
|
+
export declare const ANALYTICAL_EXPANSION_ALL = "all";
|
|
16
|
+
//# sourceMappingURL=analyticalViewConstants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticalViewConstants.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/analyticalViewConstants.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,eAAO,MAAM,wBAAwB,WAAW,CAAC;AACjD,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,0BAA0B,aAAa,CAAC;AACrD,eAAO,MAAM,6BAA6B,eAAe,CAAC;AAC1D,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,yBAAyB,YAAY,CAAC;AACnD,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAEtD,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,QAAQ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildGroupedModel.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/buildGroupedModel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buildGroupedModel.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/buildGroupedModel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAI3G,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAuB7E,iGAAiG;AACjG,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,IAAI,EAAE;IACpD,UAAU,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IACrC,YAAY,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC7C,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAoB1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/filtering.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/filtering.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAgBhG,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAG3D,4FAA4F;AAC5F,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,OAAO,CAgCrI;AAED,uFAAuF;AACvF,wBAAgB,yBAAyB,CAAC,CAAC,EAC1C,IAAI,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAC3C,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAClD,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAmBvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/grouping.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grouping.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/grouping.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAG3G,OAAO,EAAE,KAAK,uBAAuB,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAK3F,gGAAgG;AAChG,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,IAAI,EAAE;IACjD,IAAI,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC7C,UAAU,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;CACrC,GAAG,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAgDxC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type CompiledAnalyticalTableDefinition } from "../definition/types";
|
|
2
|
+
import { ANALYTICAL_ROW_KIND_DATA, type ANALYTICAL_ROW_KIND_GROUP } from "./analyticalRowConstants";
|
|
2
3
|
import { type AnalyticalDataRow, type AnalyticalDiagnostics, type AnalyticalSnapshot, type AnalyticalValues } from "./types";
|
|
3
4
|
/** Узел до назначения итогового parentId/level: группировка ещё может добавить предков. */
|
|
4
5
|
export type AnalyticalHierarchyNode<T> = Readonly<{
|
|
5
6
|
id: string;
|
|
6
|
-
kind:
|
|
7
|
+
kind: typeof ANALYTICAL_ROW_KIND_DATA | typeof ANALYTICAL_ROW_KIND_GROUP;
|
|
7
8
|
sourceRow?: AnalyticalDataRow<T>;
|
|
8
9
|
values: AnalyticalValues;
|
|
9
10
|
children: readonly AnalyticalHierarchyNode<T>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/hierarchy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE7H,2FAA2F;AAC3F,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,QAAQ,CAAC;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"hierarchy.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/hierarchy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACpG,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE7H,2FAA2F;AAC3F,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,QAAQ,CAAC;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,wBAAwB,GAAG,OAAO,yBAAyB,CAAC;IACzE,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI,QAAQ,CAAC;IACnD,IAAI,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,EAAE,qBAAqB,CAAC;CACnC,CAAC,CAAC;AAEH,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,CAAC,EAC3C,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC/B,UAAU,EAAE,iCAAiC,CAAC,CAAC,CAAC,GAC9C,yBAAyB,CAAC,CAAC,CAAC,CAqC9B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CompiledAnalyticalTableDefinition } from "../definition/types";
|
|
1
|
+
import { type AnalyticalAggregateContext, type CompiledAnalyticalTableDefinition } from "../definition/types";
|
|
2
2
|
import { type AnalyticalHierarchyNode } from "./hierarchy";
|
|
3
3
|
import { type AnalyticalValues } from "./types";
|
|
4
4
|
/** Один порядок для групповых и общих итогов: агрегации → callback → зависимые формулы. */
|
|
@@ -6,7 +6,7 @@ export declare function calculateAnalyticalTotals<T>(args: {
|
|
|
6
6
|
definition: CompiledAnalyticalTableDefinition<T>;
|
|
7
7
|
nodes: readonly AnalyticalHierarchyNode<T>[];
|
|
8
8
|
aggregateRowIds: ReadonlySet<string>;
|
|
9
|
-
scope: "
|
|
9
|
+
scope: AnalyticalAggregateContext<T>["scope"];
|
|
10
10
|
groupingPath?: AnalyticalValues;
|
|
11
11
|
}): AnalyticalValues;
|
|
12
12
|
//# sourceMappingURL=totals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"totals.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/totals.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"totals.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/totals.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,0BAA0B,EAAE,KAAK,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAG9G,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAyBxE,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,IAAI,EAAE;IAClD,UAAU,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IACjD,KAAK,EAAE,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAChC,GAAG,gBAAgB,CAgCnB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type AnalyticalColumn, type AnalyticalGroupingLevel, type AnalyticalTableDefinition, type CompiledAnalyticalTableDefinition } from "../definition/types";
|
|
2
|
+
import { type ANALYTICAL_ROW_KIND_DATA, type ANALYTICAL_ROW_KIND_GROUP } from "./analyticalRowConstants";
|
|
3
|
+
import { type ANALYTICAL_FILTER_EQUALS, type ANALYTICAL_FILTER_NOT_EQUALS, type ANALYTICAL_FILTER_CONTAINS, type ANALYTICAL_FILTER_STARTS_WITH, type ANALYTICAL_FILTER_IN, type ANALYTICAL_FILTER_BETWEEN, type ANALYTICAL_FILTER_GT, type ANALYTICAL_FILTER_GTE, type ANALYTICAL_FILTER_LT, type ANALYTICAL_FILTER_LTE, type ANALYTICAL_FILTER_EMPTY, type ANALYTICAL_FILTER_NOT_EMPTY, type ANALYTICAL_EXPANSION_ALL } from "./analyticalViewConstants";
|
|
2
4
|
/** Значения таблицы отделены от исходного DTO: runtime не изменяет снимок Query. */
|
|
3
5
|
export type AnalyticalValues = Readonly<Record<string, unknown>>;
|
|
4
6
|
export type AnalyticalDataRow<TOriginal = unknown> = Readonly<{
|
|
@@ -18,7 +20,7 @@ export type AnalyticalSorting = Readonly<{
|
|
|
18
20
|
}>;
|
|
19
21
|
export type AnalyticalFilter = Readonly<{
|
|
20
22
|
id: string;
|
|
21
|
-
operator?:
|
|
23
|
+
operator?: typeof ANALYTICAL_FILTER_EQUALS | typeof ANALYTICAL_FILTER_NOT_EQUALS | typeof ANALYTICAL_FILTER_CONTAINS | typeof ANALYTICAL_FILTER_STARTS_WITH | typeof ANALYTICAL_FILTER_IN | typeof ANALYTICAL_FILTER_BETWEEN | typeof ANALYTICAL_FILTER_GT | typeof ANALYTICAL_FILTER_GTE | typeof ANALYTICAL_FILTER_LT | typeof ANALYTICAL_FILTER_LTE | typeof ANALYTICAL_FILTER_EMPTY | typeof ANALYTICAL_FILTER_NOT_EMPTY;
|
|
22
24
|
value?: unknown;
|
|
23
25
|
}>;
|
|
24
26
|
/** Состояние сериализуется для SSR/URL; Map и Set появляются только в результате. */
|
|
@@ -26,12 +28,12 @@ export type AnalyticalViewState = Readonly<{
|
|
|
26
28
|
grouping?: readonly AnalyticalGroupingLevel[];
|
|
27
29
|
sorting?: readonly AnalyticalSorting[];
|
|
28
30
|
filters?: readonly AnalyticalFilter[];
|
|
29
|
-
expandedRowIds?: readonly string[] |
|
|
31
|
+
expandedRowIds?: readonly string[] | typeof ANALYTICAL_EXPANSION_ALL;
|
|
30
32
|
}>;
|
|
31
33
|
export type AnalyticalModelRow<TOriginal = unknown> = Readonly<{
|
|
32
34
|
id: string;
|
|
33
35
|
parentId: string | null;
|
|
34
|
-
kind:
|
|
36
|
+
kind: typeof ANALYTICAL_ROW_KIND_DATA | typeof ANALYTICAL_ROW_KIND_GROUP;
|
|
35
37
|
sourceRow?: AnalyticalDataRow<TOriginal>;
|
|
36
38
|
original?: TOriginal;
|
|
37
39
|
values: AnalyticalValues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,iCAAiC,EACtC,MAAM,qBAAqB,CAAC;AAE7B,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjE,MAAM,MAAM,iBAAiB,CAAC,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;CACzB,CAAC,CAAC;AAEH,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,CAAC,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC;IAC9D,IAAI,EAAE,SAAS,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;CACf,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valueComparison.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/valueComparison.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"valueComparison.d.ts","sourceRoot":"","sources":["../../../src/analytical-table/runtime/valueComparison.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAExE,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAO3F;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,CAa9G"}
|
package/dist/array/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, c as t, d as n, f as r, h as i, i as a, l as o, m as s, n as c, o as l, p as u, r as d, s as f, t as p, u as m } from "../chunks/array-
|
|
1
|
+
import { a as e, c as t, d as n, f as r, h as i, i as a, l as o, m as s, n as c, o as l, p as u, r as d, s as f, t as p, u as m } from "../chunks/array-bd7LYFto.js";
|
|
2
2
|
export { d as addUnique, a as appendMissingIds, e as arrayDeduplicate, l as arrayGroupBy, f as arrayGroupByToArray, t as arrayToMap, o as arrayUniqueBy, m as arraysEqual, n as filterAndDeduplicateIds, p as moveArrayItem, c as moveArrayItemByIndex, r as moveItem, u as normalizeObjects, s as normalizeStringArray, i as pickExistingMapValues };
|
package/dist/array/reorder.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
declare const REORDER_ACTION_START = "start";
|
|
2
|
+
declare const REORDER_ACTION_END = "end";
|
|
3
|
+
declare const REORDER_ACTION_UP = "up";
|
|
4
|
+
declare const REORDER_ACTION_DOWN = "down";
|
|
5
|
+
export type ReorderAction = typeof REORDER_ACTION_START | typeof REORDER_ACTION_END | typeof REORDER_ACTION_UP | typeof REORDER_ACTION_DOWN;
|
|
2
6
|
/**
|
|
3
7
|
* Перемещает элемент списка по одному из предопределённых действий.
|
|
4
8
|
*/
|
|
@@ -7,4 +11,5 @@ export declare function moveArrayItemByIndex<T>(items: readonly T[], index: numb
|
|
|
7
11
|
* Перемещает элемент списка из одного индекса в другой.
|
|
8
12
|
*/
|
|
9
13
|
export declare function moveArrayItem<T>(items: readonly T[], fromIndex: number, toIndex: number): T[];
|
|
14
|
+
export {};
|
|
10
15
|
//# sourceMappingURL=reorder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reorder.d.ts","sourceRoot":"","sources":["../../src/array/reorder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reorder.d.ts","sourceRoot":"","sources":["../../src/array/reorder.ts"],"names":[],"mappings":"AACA,QAAA,MAAM,oBAAoB,UAAU,CAAC;AACrC,QAAA,MAAM,kBAAkB,QAAQ,CAAC;AACjC,QAAA,MAAM,iBAAiB,OAAO,CAAC;AAC/B,QAAA,MAAM,mBAAmB,SAAS,CAAC;AAEnC,MAAM,MAAM,aAAa,GAAG,OAAO,oBAAoB,GAAG,OAAO,kBAAkB,GAAG,OAAO,iBAAiB,GAAG,OAAO,mBAAmB,CAAC;AAiB5I;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,CAAC,EAAE,CAiBtG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,CAe7F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createCoalescingTaskRunner.d.ts","sourceRoot":"","sources":["../../src/async-task-runner/createCoalescingTaskRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"createCoalescingTaskRunner.d.ts","sourceRoot":"","sources":["../../src/async-task-runner/createCoalescingTaskRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAgBrG;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,oBAAoB,CAgHrG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDeadlineTimer.d.ts","sourceRoot":"","sources":["../../src/async-task-runner/createDeadlineTimer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"createDeadlineTimer.d.ts","sourceRoot":"","sources":["../../src/async-task-runner/createDeadlineTimer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAQrF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,oBAAoB,GAAG,aAAa,CAgDlF"}
|