@ryuzaki13/react-foundation-lib 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +654 -0
- package/dist/array/array.d.ts +30 -0
- package/dist/array/array.d.ts.map +1 -0
- package/dist/array/index.d.ts +3 -0
- package/dist/array/index.d.ts.map +1 -0
- package/dist/array/index.js +2 -0
- package/dist/array/reorder.d.ts +10 -0
- package/dist/array/reorder.d.ts.map +1 -0
- package/dist/auth/getClientFingerprint.d.ts +2 -0
- package/dist/auth/getClientFingerprint.d.ts.map +1 -0
- package/dist/binary/binaryToBlob.d.ts +13 -0
- package/dist/binary/binaryToBlob.d.ts.map +1 -0
- package/dist/binary/index.d.ts +3 -0
- package/dist/binary/index.d.ts.map +1 -0
- package/dist/binary/index.js +126 -0
- package/dist/binary/index.js.map +1 -0
- package/dist/binary/useBinaryFile.d.ts +8 -0
- package/dist/binary/useBinaryFile.d.ts.map +1 -0
- package/dist/bounded-copy-stack/boundedCopyStack.d.ts +26 -0
- package/dist/bounded-copy-stack/boundedCopyStack.d.ts.map +1 -0
- package/dist/bounded-copy-stack/index.d.ts +2 -0
- package/dist/bounded-copy-stack/index.d.ts.map +1 -0
- package/dist/bounded-copy-stack/index.js +26 -0
- package/dist/bounded-copy-stack/index.js.map +1 -0
- package/dist/chunks/array-BBSjoTRy.js +146 -0
- package/dist/chunks/array-BBSjoTRy.js.map +1 -0
- package/dist/chunks/dateUtils-D9dpdTl7.js +760 -0
- package/dist/chunks/dateUtils-D9dpdTl7.js.map +1 -0
- package/dist/chunks/formatters-CQppb89D.js +1234 -0
- package/dist/chunks/formatters-CQppb89D.js.map +1 -0
- package/dist/chunks/formulas-BxcH5Zjt.js +279 -0
- package/dist/chunks/formulas-BxcH5Zjt.js.map +1 -0
- package/dist/chunks/isRecord-DXDTW-jA.js +18 -0
- package/dist/chunks/isRecord-DXDTW-jA.js.map +1 -0
- package/dist/chunks/odata-service-BAYf08WI.js +1223 -0
- package/dist/chunks/odata-service-BAYf08WI.js.map +1 -0
- package/dist/chunks/string-comparison-BKT7PXmq.js +20 -0
- package/dist/chunks/string-comparison-BKT7PXmq.js.map +1 -0
- package/dist/chunks/validate-BChpTW6y.js +468 -0
- package/dist/chunks/validate-BChpTW6y.js.map +1 -0
- package/dist/context-menu/anchor.d.ts +19 -0
- package/dist/context-menu/anchor.d.ts.map +1 -0
- package/dist/context-menu/index.d.ts +4 -0
- package/dist/context-menu/index.d.ts.map +1 -0
- package/dist/context-menu/index.js +57 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/context-menu/state.d.ts +6 -0
- package/dist/context-menu/state.d.ts.map +1 -0
- package/dist/context-menu/types.d.ts +25 -0
- package/dist/context-menu/types.d.ts.map +1 -0
- package/dist/copy/index.d.ts +5 -0
- package/dist/copy/index.d.ts.map +1 -0
- package/dist/copy/index.js +56 -0
- package/dist/copy/index.js.map +1 -0
- package/dist/copy/useCopyElementText.d.ts +6 -0
- package/dist/copy/useCopyElementText.d.ts.map +1 -0
- package/dist/copy/useCopyFeedback.d.ts +11 -0
- package/dist/copy/useCopyFeedback.d.ts.map +1 -0
- package/dist/copy/useCopyText.d.ts +4 -0
- package/dist/copy/useCopyText.d.ts.map +1 -0
- package/dist/copy/useElementText.d.ts +5 -0
- package/dist/copy/useElementText.d.ts.map +1 -0
- package/dist/crypto/hashString.d.ts +5 -0
- package/dist/crypto/hashString.d.ts.map +1 -0
- package/dist/crypto/index.d.ts +3 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +62 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/uuid.d.ts +5 -0
- package/dist/crypto/uuid.d.ts.map +1 -0
- package/dist/currency/currency.d.ts +8 -0
- package/dist/currency/currency.d.ts.map +1 -0
- package/dist/currency/index.d.ts +2 -0
- package/dist/currency/index.d.ts.map +1 -0
- package/dist/currency/index.js +16 -0
- package/dist/currency/index.js.map +1 -0
- package/dist/date-segments/index.d.ts +3 -0
- package/dist/date-segments/index.d.ts.map +1 -0
- package/dist/date-segments/index.js +160 -0
- package/dist/date-segments/index.js.map +1 -0
- package/dist/date-segments/mask.d.ts +54 -0
- package/dist/date-segments/mask.d.ts.map +1 -0
- package/dist/dom/downloadFile.d.ts +4 -0
- package/dist/dom/downloadFile.d.ts.map +1 -0
- package/dist/dom/getOrCreatePortalRoot.d.ts +2 -0
- package/dist/dom/getOrCreatePortalRoot.d.ts.map +1 -0
- package/dist/dom/index.d.ts +10 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom/index.js +159 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/dom/useClickOutside.d.ts +3 -0
- package/dist/dom/useClickOutside.d.ts.map +1 -0
- package/dist/dom/useElementHeightObserver.d.ts +3 -0
- package/dist/dom/useElementHeightObserver.d.ts.map +1 -0
- package/dist/dom/useEscapeDismiss.d.ts +14 -0
- package/dist/dom/useEscapeDismiss.d.ts.map +1 -0
- package/dist/dom/useFocusTrap.d.ts +5 -0
- package/dist/dom/useFocusTrap.d.ts.map +1 -0
- package/dist/dom/useIntersectionObserver.d.ts +4 -0
- package/dist/dom/useIntersectionObserver.d.ts.map +1 -0
- package/dist/dom/useIsTouchDevice.d.ts +2 -0
- package/dist/dom/useIsTouchDevice.d.ts.map +1 -0
- package/dist/dom/useOverlayFocus.d.ts +14 -0
- package/dist/dom/useOverlayFocus.d.ts.map +1 -0
- package/dist/error/index.d.ts +2 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +20 -0
- package/dist/error/index.js.map +1 -0
- package/dist/error/missingContextError.d.ts +14 -0
- package/dist/error/missingContextError.d.ts.map +1 -0
- package/dist/error-report/breadcrumbs.d.ts +11 -0
- package/dist/error-report/breadcrumbs.d.ts.map +1 -0
- package/dist/error-report/capture.d.ts +6 -0
- package/dist/error-report/capture.d.ts.map +1 -0
- package/dist/error-report/diagnostics.d.ts +29 -0
- package/dist/error-report/diagnostics.d.ts.map +1 -0
- package/dist/error-report/drafts.d.ts +25 -0
- package/dist/error-report/drafts.d.ts.map +1 -0
- package/dist/error-report/environment.d.ts +19 -0
- package/dist/error-report/environment.d.ts.map +1 -0
- package/dist/error-report/errorInfo.d.ts +7 -0
- package/dist/error-report/errorInfo.d.ts.map +1 -0
- package/dist/error-report/index.d.ts +11 -0
- package/dist/error-report/index.d.ts.map +1 -0
- package/dist/error-report/index.js +464 -0
- package/dist/error-report/index.js.map +1 -0
- package/dist/error-report/runtime.d.ts +26 -0
- package/dist/error-report/runtime.d.ts.map +1 -0
- package/dist/error-report/safeValue.d.ts +14 -0
- package/dist/error-report/safeValue.d.ts.map +1 -0
- package/dist/error-report/transport.d.ts +32 -0
- package/dist/error-report/transport.d.ts.map +1 -0
- package/dist/error-report/types.d.ts +123 -0
- package/dist/error-report/types.d.ts.map +1 -0
- package/dist/excel/excel.d.ts +52 -0
- package/dist/excel/excel.d.ts.map +1 -0
- package/dist/excel/index.d.ts +3 -0
- package/dist/excel/index.d.ts.map +1 -0
- package/dist/excel/index.js +139 -0
- package/dist/excel/index.js.map +1 -0
- package/dist/excel/tableExport.d.ts +26 -0
- package/dist/excel/tableExport.d.ts.map +1 -0
- package/dist/file/contentDisposition.d.ts +11 -0
- package/dist/file/contentDisposition.d.ts.map +1 -0
- package/dist/file/image/index.d.ts +3 -0
- package/dist/file/image/index.d.ts.map +1 -0
- package/dist/file/image/readImageFile.d.ts +8 -0
- package/dist/file/image/readImageFile.d.ts.map +1 -0
- package/dist/file/image/types.d.ts +30 -0
- package/dist/file/image/types.d.ts.map +1 -0
- package/dist/file/index.d.ts +5 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/index.js +211 -0
- package/dist/file/index.js.map +1 -0
- package/dist/file/mimeType.d.ts +2 -0
- package/dist/file/mimeType.d.ts.map +1 -0
- package/dist/file/read-file/assert.d.ts +4 -0
- package/dist/file/read-file/assert.d.ts.map +1 -0
- package/dist/file/read-file/index.d.ts +4 -0
- package/dist/file/read-file/index.d.ts.map +1 -0
- package/dist/file/read-file/readFile.d.ts +14 -0
- package/dist/file/read-file/readFile.d.ts.map +1 -0
- package/dist/file/read-file/types.d.ts +43 -0
- package/dist/file/read-file/types.d.ts.map +1 -0
- package/dist/form/formErrors.d.ts +2 -0
- package/dist/form/formErrors.d.ts.map +1 -0
- package/dist/form/index.d.ts +2 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/form/index.js +19 -0
- package/dist/form/index.js.map +1 -0
- package/dist/formatters/boolean/index.d.ts +3 -0
- package/dist/formatters/boolean/index.d.ts.map +1 -0
- package/dist/formatters/boolean/parseAbapBoolean.d.ts +3 -0
- package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -0
- package/dist/formatters/boolean/toAbapBoolean.d.ts +3 -0
- package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -0
- package/dist/formatters/date/calendarDate.d.ts +48 -0
- package/dist/formatters/date/calendarDate.d.ts.map +1 -0
- package/dist/formatters/date/calendarPeriod.d.ts +33 -0
- package/dist/formatters/date/calendarPeriod.d.ts.map +1 -0
- package/dist/formatters/date/dateRange.d.ts +25 -0
- package/dist/formatters/date/dateRange.d.ts.map +1 -0
- package/dist/formatters/date/educationDate.d.ts +79 -0
- package/dist/formatters/date/educationDate.d.ts.map +1 -0
- package/dist/formatters/date/formatDate.d.ts +98 -0
- package/dist/formatters/date/formatDate.d.ts.map +1 -0
- package/dist/formatters/date/index.d.ts +14 -0
- package/dist/formatters/date/index.d.ts.map +1 -0
- package/dist/formatters/date/parseDate.d.ts +44 -0
- package/dist/formatters/date/parseDate.d.ts.map +1 -0
- package/dist/formatters/date/pattern.d.ts +38 -0
- package/dist/formatters/date/pattern.d.ts.map +1 -0
- package/dist/formatters/date/presets.d.ts +108 -0
- package/dist/formatters/date/presets.d.ts.map +1 -0
- package/dist/formatters/date/relativeRanges.d.ts +35 -0
- package/dist/formatters/date/relativeRanges.d.ts.map +1 -0
- package/dist/formatters/date/types.d.ts +70 -0
- package/dist/formatters/date/types.d.ts.map +1 -0
- package/dist/formatters/formatName.d.ts +13 -0
- package/dist/formatters/formatName.d.ts.map +1 -0
- package/dist/formatters/formatPhone.d.ts +3 -0
- package/dist/formatters/formatPhone.d.ts.map +1 -0
- package/dist/formatters/formatTagAsHashtag.d.ts +6 -0
- package/dist/formatters/formatTagAsHashtag.d.ts.map +1 -0
- package/dist/formatters/index.d.ts +11 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +6 -0
- package/dist/formatters/normalizeLeadingZeros.d.ts +27 -0
- package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -0
- package/dist/formatters/number/compact.d.ts +10 -0
- package/dist/formatters/number/compact.d.ts.map +1 -0
- package/dist/formatters/number/formatCompactNumber.d.ts +49 -0
- package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -0
- package/dist/formatters/number/formatNumber.d.ts +93 -0
- package/dist/formatters/number/formatNumber.d.ts.map +1 -0
- package/dist/formatters/number/index.d.ts +6 -0
- package/dist/formatters/number/index.d.ts.map +1 -0
- package/dist/formatters/number/isZeroValue.d.ts +5 -0
- package/dist/formatters/number/isZeroValue.d.ts.map +1 -0
- package/dist/formatters/number/parseNumber.d.ts +12 -0
- package/dist/formatters/number/parseNumber.d.ts.map +1 -0
- package/dist/formatters/number/presets.d.ts +24 -0
- package/dist/formatters/number/presets.d.ts.map +1 -0
- package/dist/formatters/number/types.d.ts +46 -0
- package/dist/formatters/number/types.d.ts.map +1 -0
- package/dist/formatters/pipeline/clone.d.ts +15 -0
- package/dist/formatters/pipeline/clone.d.ts.map +1 -0
- package/dist/formatters/pipeline/definitions.d.ts +14 -0
- package/dist/formatters/pipeline/definitions.d.ts.map +1 -0
- package/dist/formatters/pipeline/dependencies.d.ts +38 -0
- package/dist/formatters/pipeline/dependencies.d.ts.map +1 -0
- package/dist/formatters/pipeline/execute.d.ts +21 -0
- package/dist/formatters/pipeline/execute.d.ts.map +1 -0
- package/dist/formatters/pipeline/index.d.ts +10 -0
- package/dist/formatters/pipeline/index.d.ts.map +1 -0
- package/dist/formatters/pipeline/normalize.d.ts +3 -0
- package/dist/formatters/pipeline/normalize.d.ts.map +1 -0
- package/dist/formatters/pipeline/registry.d.ts +11 -0
- package/dist/formatters/pipeline/registry.d.ts.map +1 -0
- package/dist/formatters/pipeline/rekey.d.ts +11 -0
- package/dist/formatters/pipeline/rekey.d.ts.map +1 -0
- package/dist/formatters/pipeline/runtime.d.ts +17 -0
- package/dist/formatters/pipeline/runtime.d.ts.map +1 -0
- package/dist/formatters/pipeline/types.d.ts +379 -0
- package/dist/formatters/pipeline/types.d.ts.map +1 -0
- package/dist/formatters/pipeline/validate.d.ts +29 -0
- package/dist/formatters/pipeline/validate.d.ts.map +1 -0
- package/dist/formatters/rowBased/context.d.ts +9 -0
- package/dist/formatters/rowBased/context.d.ts.map +1 -0
- package/dist/formatters/rowBased/definitions/index.d.ts +6 -0
- package/dist/formatters/rowBased/definitions/index.d.ts.map +1 -0
- package/dist/formatters/rowBased/index.d.ts +4 -0
- package/dist/formatters/rowBased/index.d.ts.map +1 -0
- package/dist/formatters/rowBased/registry.d.ts +19 -0
- package/dist/formatters/rowBased/registry.d.ts.map +1 -0
- package/dist/formatters/rowBased/types.d.ts +29 -0
- package/dist/formatters/rowBased/types.d.ts.map +1 -0
- package/dist/formatters/strings/index.d.ts +6 -0
- package/dist/formatters/strings/index.d.ts.map +1 -0
- package/dist/formatters/strings/normalizeText.d.ts +11 -0
- package/dist/formatters/strings/normalizeText.d.ts.map +1 -0
- package/dist/formatters/strings/startsWithIgnoringZeros.d.ts +2 -0
- package/dist/formatters/strings/startsWithIgnoringZeros.d.ts.map +1 -0
- package/dist/formatters/strings/stripInnerSpaces.d.ts +6 -0
- package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -0
- package/dist/formatters/strings/stripLeadingZeros.d.ts +10 -0
- package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -0
- package/dist/formatters/strings/truncateText.d.ts +2 -0
- package/dist/formatters/strings/truncateText.d.ts.map +1 -0
- package/dist/formatters/valueState/fixedValueStateResolver.d.ts +41 -0
- package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -0
- package/dist/formatters/valueState/index.d.ts +7 -0
- package/dist/formatters/valueState/index.d.ts.map +1 -0
- package/dist/formatters/valueState/presentation.d.ts +4 -0
- package/dist/formatters/valueState/presentation.d.ts.map +1 -0
- package/dist/formatters/valueState/resolveValueStateClassName.d.ts +3 -0
- package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -0
- package/dist/formatters/valueState/thresholdValueStateResolver.d.ts +40 -0
- package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -0
- package/dist/formatters/valueState/types.d.ts +35 -0
- package/dist/formatters/valueState/types.d.ts.map +1 -0
- package/dist/formatters/valueState/valueStateRegistry.d.ts +45 -0
- package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -0
- package/dist/formulas/definitions/base.d.ts +7 -0
- package/dist/formulas/definitions/base.d.ts.map +1 -0
- package/dist/formulas/definitions/index.d.ts +3 -0
- package/dist/formulas/definitions/index.d.ts.map +1 -0
- package/dist/formulas/definitions/sales.d.ts +7 -0
- package/dist/formulas/definitions/sales.d.ts.map +1 -0
- package/dist/formulas/execute.d.ts +36 -0
- package/dist/formulas/execute.d.ts.map +1 -0
- package/dist/formulas/index.d.ts +5 -0
- package/dist/formulas/index.d.ts.map +1 -0
- package/dist/formulas/index.js +2 -0
- package/dist/formulas/perf.runtime.d.ts +48 -0
- package/dist/formulas/perf.runtime.d.ts.map +1 -0
- package/dist/formulas/registry.d.ts +10 -0
- package/dist/formulas/registry.d.ts.map +1 -0
- package/dist/formulas/types.d.ts +16 -0
- package/dist/formulas/types.d.ts.map +1 -0
- package/dist/formulas/validate.d.ts +22 -0
- package/dist/formulas/validate.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +11 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +291 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/types.d.ts +4 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/useBlockBrowserZoom.d.ts +7 -0
- package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -0
- package/dist/hooks/useDebounce.d.ts +2 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounceCallback.d.ts +22 -0
- package/dist/hooks/useDebounceCallback.d.ts.map +1 -0
- package/dist/hooks/useDndSortableSensors.d.ts +13 -0
- package/dist/hooks/useDndSortableSensors.d.ts.map +1 -0
- package/dist/hooks/useFloatingListbox.d.ts +61 -0
- package/dist/hooks/useFloatingListbox.d.ts.map +1 -0
- package/dist/hooks/useLazyComponent.d.ts +28 -0
- package/dist/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/hooks/useReferenceTrace.d.ts +2 -0
- package/dist/hooks/useReferenceTrace.d.ts.map +1 -0
- package/dist/hooks/useSearchLink.d.ts +5 -0
- package/dist/hooks/useSearchLink.d.ts.map +1 -0
- package/dist/hooks/useSearchParams.d.ts +8 -0
- package/dist/hooks/useSearchParams.d.ts.map +1 -0
- package/dist/hooks/useThrottledCallback.d.ts +43 -0
- package/dist/hooks/useThrottledCallback.d.ts.map +1 -0
- package/dist/http/httpHeaders.d.ts +3 -0
- package/dist/http/httpHeaders.d.ts.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +18 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/textResponse.d.ts +7 -0
- package/dist/http/textResponse.d.ts.map +1 -0
- package/dist/media/breakpoints.d.ts +9 -0
- package/dist/media/breakpoints.d.ts.map +1 -0
- package/dist/media/getCurrentFontSize.d.ts +4 -0
- package/dist/media/getCurrentFontSize.d.ts.map +1 -0
- package/dist/media/index.d.ts +7 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +147 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/pxToEm.d.ts +2 -0
- package/dist/media/pxToEm.d.ts.map +1 -0
- package/dist/media/responsive.d.ts +29 -0
- package/dist/media/responsive.d.ts.map +1 -0
- package/dist/media/useMatchMedia.d.ts +15 -0
- package/dist/media/useMatchMedia.d.ts.map +1 -0
- package/dist/media/useMediaQuery.d.ts +10 -0
- package/dist/media/useMediaQuery.d.ts.map +1 -0
- package/dist/notifications/index.d.ts +4 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +124 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/notify.d.ts +32 -0
- package/dist/notifications/notify.d.ts.map +1 -0
- package/dist/notifications/store.d.ts +31 -0
- package/dist/notifications/store.d.ts.map +1 -0
- package/dist/notifications/types.d.ts +19 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/number-scale/index.d.ts +3 -0
- package/dist/number-scale/index.d.ts.map +1 -0
- package/dist/number-scale/index.js +99 -0
- package/dist/number-scale/index.js.map +1 -0
- package/dist/number-scale/numberScale.d.ts +52 -0
- package/dist/number-scale/numberScale.d.ts.map +1 -0
- package/dist/number-scale/types.d.ts +44 -0
- package/dist/number-scale/types.d.ts.map +1 -0
- package/dist/odata/buildSeparatedArrays.d.ts +10 -0
- package/dist/odata/buildSeparatedArrays.d.ts.map +1 -0
- package/dist/odata/dateUtils.d.ts +14 -0
- package/dist/odata/dateUtils.d.ts.map +1 -0
- package/dist/odata/findCollectionPairs.d.ts +11 -0
- package/dist/odata/findCollectionPairs.d.ts.map +1 -0
- package/dist/odata/index.d.ts +6 -0
- package/dist/odata/index.d.ts.map +1 -0
- package/dist/odata/index.js +102 -0
- package/dist/odata/index.js.map +1 -0
- package/dist/odata/store.d.ts +42 -0
- package/dist/odata/store.d.ts.map +1 -0
- package/dist/odata/types.d.ts +12 -0
- package/dist/odata/types.d.ts.map +1 -0
- package/dist/odata-service/baseTypes.d.ts +6 -0
- package/dist/odata-service/baseTypes.d.ts.map +1 -0
- package/dist/odata-service/builder.d.ts +33 -0
- package/dist/odata-service/builder.d.ts.map +1 -0
- package/dist/odata-service/columns.d.ts +10 -0
- package/dist/odata-service/columns.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitions.d.ts +113 -0
- package/dist/odata-service/filterDefinitions.d.ts.map +1 -0
- package/dist/odata-service/filters.d.ts +75 -0
- package/dist/odata-service/filters.d.ts.map +1 -0
- package/dist/odata-service/formatters.d.ts +33 -0
- package/dist/odata-service/formatters.d.ts.map +1 -0
- package/dist/odata-service/index.d.ts +16 -0
- package/dist/odata-service/index.d.ts.map +1 -0
- package/dist/odata-service/index.js +2 -0
- package/dist/odata-service/parser.d.ts +14 -0
- package/dist/odata-service/parser.d.ts.map +1 -0
- package/dist/odata-service/schema.d.ts +8 -0
- package/dist/odata-service/schema.d.ts.map +1 -0
- package/dist/odata-service/sorts.d.ts +26 -0
- package/dist/odata-service/sorts.d.ts.map +1 -0
- package/dist/odata-service/sqlFilters.d.ts +32 -0
- package/dist/odata-service/sqlFilters.d.ts.map +1 -0
- package/dist/odata-service/types.d.ts +166 -0
- package/dist/odata-service/types.d.ts.map +1 -0
- package/dist/odata-service/typesValidation.d.ts +6 -0
- package/dist/odata-service/typesValidation.d.ts.map +1 -0
- package/dist/odata-service/unwrapODataQueryResult.d.ts +22 -0
- package/dist/odata-service/unwrapODataQueryResult.d.ts.map +1 -0
- package/dist/odata-service/utils.d.ts +5 -0
- package/dist/odata-service/utils.d.ts.map +1 -0
- package/dist/odata-service/wrapParams.d.ts +7 -0
- package/dist/odata-service/wrapParams.d.ts.map +1 -0
- package/dist/presets/index.d.ts +2 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +23 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/presets.d.ts +20 -0
- package/dist/presets/presets.d.ts.map +1 -0
- package/dist/pwa/index.d.ts +3 -0
- package/dist/pwa/index.d.ts.map +1 -0
- package/dist/pwa/index.js +206 -0
- package/dist/pwa/index.js.map +1 -0
- package/dist/pwa/serviceWorker.d.ts +31 -0
- package/dist/pwa/serviceWorker.d.ts.map +1 -0
- package/dist/pwa/swCachePolicy.d.ts +24 -0
- package/dist/pwa/swCachePolicy.d.ts.map +1 -0
- package/dist/pwa/useServiceWorkerUpdate.d.ts +6 -0
- package/dist/pwa/useServiceWorkerUpdate.d.ts.map +1 -0
- package/dist/query-client/broadcast.d.ts +23 -0
- package/dist/query-client/broadcast.d.ts.map +1 -0
- package/dist/query-client/index.d.ts +5 -0
- package/dist/query-client/index.d.ts.map +1 -0
- package/dist/query-client/index.js +204 -0
- package/dist/query-client/index.js.map +1 -0
- package/dist/query-client/persistence.d.ts +33 -0
- package/dist/query-client/persistence.d.ts.map +1 -0
- package/dist/query-client/queryClient.d.ts +127 -0
- package/dist/query-client/queryClient.d.ts.map +1 -0
- package/dist/query-client/queryPersistenceAdapter.d.ts +7 -0
- package/dist/query-client/queryPersistenceAdapter.d.ts.map +1 -0
- package/dist/range-output/index.d.ts +2 -0
- package/dist/range-output/index.d.ts.map +1 -0
- package/dist/range-output/index.js +22 -0
- package/dist/range-output/index.js.map +1 -0
- package/dist/range-output/rangeOutput.d.ts +15 -0
- package/dist/range-output/rangeOutput.d.ts.map +1 -0
- package/dist/seo/index.d.ts +3 -0
- package/dist/seo/index.d.ts.map +1 -0
- package/dist/seo/index.js +125 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/seo.d.ts +16 -0
- package/dist/seo/seo.d.ts.map +1 -0
- package/dist/seo/types.d.ts +28 -0
- package/dist/seo/types.d.ts.map +1 -0
- package/dist/session-storage/index.d.ts +2 -0
- package/dist/session-storage/index.d.ts.map +1 -0
- package/dist/session-storage/index.js +17 -0
- package/dist/session-storage/index.js.map +1 -0
- package/dist/session-storage/sessionId.d.ts +8 -0
- package/dist/session-storage/sessionId.d.ts.map +1 -0
- package/dist/string-comparison/compareStrings.d.ts +9 -0
- package/dist/string-comparison/compareStrings.d.ts.map +1 -0
- package/dist/string-comparison/index.d.ts +2 -0
- package/dist/string-comparison/index.d.ts.map +1 -0
- package/dist/string-comparison/index.js +2 -0
- package/dist/table/columnLayout.d.ts +23 -0
- package/dist/table/columnLayout.d.ts.map +1 -0
- package/dist/table/columnOrder.d.ts +21 -0
- package/dist/table/columnOrder.d.ts.map +1 -0
- package/dist/table/columnSizing.d.ts +7 -0
- package/dist/table/columnSizing.d.ts.map +1 -0
- package/dist/table/index.d.ts +9 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +229 -0
- package/dist/table/index.js.map +1 -0
- package/dist/table/odataAdapter.d.ts +63 -0
- package/dist/table/odataAdapter.d.ts.map +1 -0
- package/dist/table/selection.d.ts +16 -0
- package/dist/table/selection.d.ts.map +1 -0
- package/dist/table/types.d.ts +60 -0
- package/dist/table/types.d.ts.map +1 -0
- package/dist/table/useTableRowSelection.d.ts +19 -0
- package/dist/table/useTableRowSelection.d.ts.map +1 -0
- package/dist/table/utils.d.ts +20 -0
- package/dist/table/utils.d.ts.map +1 -0
- package/dist/three-scene/index.d.ts +3 -0
- package/dist/three-scene/index.d.ts.map +1 -0
- package/dist/three-scene/index.js +84 -0
- package/dist/three-scene/index.js.map +1 -0
- package/dist/three-scene/threeSceneAvailability.d.ts +15 -0
- package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -0
- package/dist/three-scene/useThreeSceneAvailability.d.ts +8 -0
- package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -0
- package/dist/tree-table/buildTreeTableRows.d.ts +9 -0
- package/dist/tree-table/buildTreeTableRows.d.ts.map +1 -0
- package/dist/tree-table/index.d.ts +4 -0
- package/dist/tree-table/index.d.ts.map +1 -0
- package/dist/tree-table/index.js +126 -0
- package/dist/tree-table/index.js.map +1 -0
- package/dist/tree-table/transposeFlatRowsToTreeTableRows.d.ts +11 -0
- package/dist/tree-table/transposeFlatRowsToTreeTableRows.d.ts.map +1 -0
- package/dist/tree-table/types.d.ts +87 -0
- package/dist/tree-table/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/types.d.ts +12 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/utils/childrenCount.d.ts +3 -0
- package/dist/utils/childrenCount.d.ts.map +1 -0
- package/dist/utils/cn.d.ts +6 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/createLazyComponent.d.ts +22 -0
- package/dist/utils/createLazyComponent.d.ts.map +1 -0
- package/dist/utils/deepCloneWithoutFunctions.d.ts +20 -0
- package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -0
- package/dist/utils/deepCopyWithoutFunctions.d.ts +10 -0
- package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +209 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/keyboard.d.ts +36 -0
- package/dist/utils/keyboard.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/selectNavigation.d.ts +8 -0
- package/dist/utils/selectNavigation.d.ts.map +1 -0
- package/dist/utils/stableStringify.d.ts +8 -0
- package/dist/utils/stableStringify.d.ts.map +1 -0
- package/dist/utils/toBase64.d.ts +3 -0
- package/dist/utils/toBase64.d.ts.map +1 -0
- package/dist/utils/treeNode.d.ts +9 -0
- package/dist/utils/treeNode.d.ts.map +1 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +54 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/isDomReference.d.ts +3 -0
- package/dist/validators/isDomReference.d.ts.map +1 -0
- package/dist/validators/isImageExtension.d.ts +3 -0
- package/dist/validators/isImageExtension.d.ts.map +1 -0
- package/dist/validators/isRecord.d.ts +5 -0
- package/dist/validators/isRecord.d.ts.map +1 -0
- package/dist/validators/isSafe.d.ts +2 -0
- package/dist/validators/isSafe.d.ts.map +1 -0
- package/dist/validators/positiveInteger.d.ts +2 -0
- package/dist/validators/positiveInteger.d.ts.map +1 -0
- package/dist/validators/validateUrl.d.ts +10 -0
- package/dist/validators/validateUrl.d.ts.map +1 -0
- package/dist/virtualizer/index.d.ts +2 -0
- package/dist/virtualizer/index.d.ts.map +1 -0
- package/dist/virtualizer/index.js +19 -0
- package/dist/virtualizer/index.js.map +1 -0
- package/dist/virtualizer/useFetchNextPageEffect.d.ts +8 -0
- package/dist/virtualizer/useFetchNextPageEffect.d.ts.map +1 -0
- package/dist/xml/index.d.ts +2 -0
- package/dist/xml/index.d.ts.map +1 -0
- package/dist/xml/index.js +17 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/xml.d.ts +5 -0
- package/dist/xml/xml.d.ts.map +1 -0
- package/package.json +428 -0
package/README.md
ADDED
|
@@ -0,0 +1,654 @@
|
|
|
1
|
+
# Путеводитель по `@ryuzaki13/react-foundation-lib`
|
|
2
|
+
|
|
3
|
+
Библиотечный пакет нижнего технического слоя: здесь лежат чистые функции, общие React/browser hooks и сериализуемые runtime-контракты без знания конкретных features, widgets, pages или apps.
|
|
4
|
+
|
|
5
|
+
## Содержание
|
|
6
|
+
|
|
7
|
+
- [Быстрый выбор модуля](#быстрый-выбор-модуля)
|
|
8
|
+
- [Форматирование и значения](#форматирование-и-значения)
|
|
9
|
+
- [OData, таблицы и экспорт](#odata-таблицы-и-экспорт)
|
|
10
|
+
- [Browser, React hooks и UI-поведение](#browser-react-hooks-и-ui-поведение)
|
|
11
|
+
- [Runtime, state и инфраструктура](#runtime-state-и-инфраструктура)
|
|
12
|
+
- [Низкоуровневые helpers](#низкоуровневые-helpers)
|
|
13
|
+
|
|
14
|
+
## Быстрый выбор модуля
|
|
15
|
+
|
|
16
|
+
| Нужно | Идти сюда |
|
|
17
|
+
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
18
|
+
| Даты, диапазоны, ABAP/OData date literals | [`formatters/date`](./src/formatters/date/index.ts), тесты: [`formatDate.test.ts`](./src/formatters/date/formatDate.test.ts), [`dateRange.test.ts`](./src/formatters/date/dateRange.test.ts) |
|
|
19
|
+
| Числа, проценты, валютные числа, compact axis labels | [`formatters/number`](./src/formatters/number/index.ts), тесты: [`formatNumber.test.ts`](./src/formatters/number/formatNumber.test.ts), [`parseNumber.test.ts`](./src/formatters/number/parseNumber.test.ts) |
|
|
20
|
+
| Строки, ФИО, телефон, leading zeros, SAP boolean | [`formatters`](./src/formatters/index.ts), тесты: [`common.test.ts`](./src/formatters/common.test.ts), [`boolean.test.ts`](./src/formatters/boolean/boolean.test.ts), [`strings.test.ts`](./src/formatters/strings/strings.test.ts) |
|
|
21
|
+
| Runtime-форматирование ячеек таблицы | [`formatters/pipeline`](./src/formatters/pipeline/index.ts), тесты в [`formatters/pipeline`](./src/formatters/pipeline) |
|
|
22
|
+
| OData metadata, filters, sorts, path, values | [`odata-service`](./src/odata-service/index.ts), тесты в [`odata-service`](./src/odata-service) |
|
|
23
|
+
| Справочные code/text пары OData collections | [`odata`](./src/odata/index.ts), тест: [`odata.test.ts`](./src/odata/odata.test.ts) |
|
|
24
|
+
| TanStack Table helpers | [`table`](./src/table/index.ts), тесты в [`table`](./src/table) |
|
|
25
|
+
| Tree table преобразования | [`tree-table`](./src/tree-table/index.ts), тесты в [`tree-table`](./src/tree-table) |
|
|
26
|
+
| Excel export | [`excel`](./src/excel/index.ts), тесты: [`excel.test.ts`](./src/excel/excel.test.ts), [`tableExport.test.ts`](./src/excel/tableExport.test.ts) |
|
|
27
|
+
| FileReader, изображения, base64 Blob | [`file`](./src/file/index.ts), [`binary`](./src/binary/index.ts) |
|
|
28
|
+
| DOM overlay, portal, focus, download | [`dom`](./src/dom/index.ts), тест: [`dom.test.tsx`](./src/dom/dom.test.tsx) |
|
|
29
|
+
| Debounce/throttle, DnD sensors, search params, listbox | [`hooks`](./src/hooks/index.ts), [`utils/keyboard.ts`](./src/utils/keyboard.ts) |
|
|
30
|
+
| QueryClient, persistence, broadcast | [`query-client`](./src/query-client/index.ts), README: [`query-client/README.md`](./src/query-client/README.md) |
|
|
31
|
+
| PWA service worker update и `x-sw-cache` policy | [`pwa`](./src/pwa/index.ts), README: [`pwa/README.md`](./src/pwa/README.md) |
|
|
32
|
+
| Подстановки открытых границ диапазона | [`range-output`](./src/range-output/index.ts), тест: [`rangeOutput.test.ts`](./src/range-output/rangeOutput.test.ts) |
|
|
33
|
+
| Unknown guards, className, stable stringify, clone | [`validators`](./src/validators/index.ts), [`utils`](./src/utils/index.ts) |
|
|
34
|
+
|
|
35
|
+
## Форматирование и значения
|
|
36
|
+
|
|
37
|
+
### `formatters/date`
|
|
38
|
+
|
|
39
|
+
Файлы: [`formatters/date/index.ts`](./src/formatters/date/index.ts), подробный README: [`formatters/date/README.md`](./src/formatters/date/README.md).
|
|
40
|
+
|
|
41
|
+
Главная идея: модуль работает в плавающей календарной семантике. ISO/OData строки с timezone не пересчитываются в timezone клиента, а сохраняют видимые компоненты даты и времени.
|
|
42
|
+
|
|
43
|
+
Основной API:
|
|
44
|
+
|
|
45
|
+
| API | Когда использовать |
|
|
46
|
+
| --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
47
|
+
| `formatDate`, `formatDateRange` | Универсальное форматирование значения или диапазона по preset/object preset. |
|
|
48
|
+
| `formatDateAsDate`, `formatDateAsDateTime`, `formatDateAsTime`, `formatDateAsTimeSeconds` | Быстрые обертки для типовых UI-форматов. |
|
|
49
|
+
| `formatDateAsAbapDate`, `formatDateAsAbapDatetime`, `formatDateAsODataDate`, `formatDateAsODataDatetime`, `formatDateAsODataTime` | Машинные форматы для SAP/OData. |
|
|
50
|
+
| `parseDateValue`, `parseDate`, `parseDateByPattern`, `parseDateByFormat` | Парсинг `unknown` в календарную дату или detailed parse result. |
|
|
51
|
+
| `normalizeDateRange`, `requireDateRange`, `countCalendarDaysInDateRange` | UI-диапазоны: одиночная дата, частично заполненный range, порядок границ. |
|
|
52
|
+
| `createCalendarDate`, `getStartOfDay`, `getEndOfDay`, `getStartOfWeek`, `addCalendarDays`, `isSameCalendarDay` | Календарная арифметика без timezone-сдвига. |
|
|
53
|
+
| `registerDatePreset`, `getDatePreset`, `resolveDateFormatPreset`, `resetDatePresets` | Реестр date presets. |
|
|
54
|
+
| `resolveMonthStartToYesterdayRange`, `resolveTodayRange`, `resolveYesterdayRange`, `resolveMonthAgoRange` | Относительные диапазоны для фильтров. |
|
|
55
|
+
|
|
56
|
+
Поведение из тестов:
|
|
57
|
+
|
|
58
|
+
- пустые и невалидные значения дают fallback, по умолчанию пустую строку;
|
|
59
|
+
- `Date`, ISO, OData ticks/literals, ABAP compact `YYYYMMDD`, dotted/slash dates и ISO duration поддержаны;
|
|
60
|
+
- `normalizeDateRange` упорядочивает даты и по умолчанию расширяет до границ дня;
|
|
61
|
+
- `timeZone` и `timeZoneName` в `Intl`-preset намеренно игнорируются.
|
|
62
|
+
|
|
63
|
+
Тесты: [`formatDate.test.ts`](./src/formatters/date/formatDate.test.ts), [`parseDate.test.ts`](./src/formatters/date/parseDate.test.ts), [`dateRange.test.ts`](./src/formatters/date/dateRange.test.ts), [`calendarDate.test.ts`](./src/formatters/date/calendarDate.test.ts), [`relativeRanges.test.ts`](./src/formatters/date/relativeRanges.test.ts).
|
|
64
|
+
|
|
65
|
+
### `formatters/number`
|
|
66
|
+
|
|
67
|
+
Файлы: [`formatters/number/index.ts`](./src/formatters/number/index.ts), README: [`formatters/number/README.md`](./src/formatters/number/README.md).
|
|
68
|
+
|
|
69
|
+
Модуль форматирует числа через presets и кеширует `Intl.NumberFormat`. Это стандартный путь для таблиц, графиков и SAP-like строк.
|
|
70
|
+
|
|
71
|
+
Основной API:
|
|
72
|
+
|
|
73
|
+
| API | Когда использовать |
|
|
74
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
75
|
+
| `formatNumber(value, presetOrName)` | Универсальный formatter по имени preset или объекту preset. |
|
|
76
|
+
| `formatNumberAsInteger`, `formatNumberAsDecimal*`, `formatNumberAsCurrency`, `formatNumberAsPercent`, `formatNumberAsPrice`, `formatNumberAsTonnage` | Типовые UI-форматы. |
|
|
77
|
+
| `formatNumberAs*OrEmpty` | То же, но semantic zero отображается пустой строкой. |
|
|
78
|
+
| `formatCompactNumber`, `formatNumberAsChartAxis`, `formatNumberAsChartTooltip`, `formatNumberAsCurrencyChartAxis` | Compact-формат для осей и tooltip графиков. |
|
|
79
|
+
| `parseNumber`, `toFiniteNumber`, `toPositiveInteger`, `isPositiveValue`, `isZeroValue` | Чтение SAP-like чисел из `unknown`. |
|
|
80
|
+
| `registerNumberPreset`, `getNumberPreset`, `getNumberPresetNames`, `resetNumberPresets`, `clearFormatCache` | Реестр presets и кеш formatter-ов. |
|
|
81
|
+
|
|
82
|
+
Поведение из тестов:
|
|
83
|
+
|
|
84
|
+
- строки с пробелами/NBSP/NNBSP, апострофами и запятой как decimal separator парсятся корректно;
|
|
85
|
+
- пустая строка в `formatNumber` становится `"0"`;
|
|
86
|
+
- invalid number форматируется как `"0"`;
|
|
87
|
+
- compact формат умеет `тыс`, `млн`, `млрд`, `трлн`, разные rounding modes и min threshold;
|
|
88
|
+
- `OrEmpty` скрывает только значения, которые реально парсятся как ноль.
|
|
89
|
+
|
|
90
|
+
Тесты: [`formatNumber.test.ts`](./src/formatters/number/formatNumber.test.ts), [`parseNumber.test.ts`](./src/formatters/number/parseNumber.test.ts).
|
|
91
|
+
|
|
92
|
+
### `formatters/strings`
|
|
93
|
+
|
|
94
|
+
Файлы: [`formatters/strings/index.ts`](./src/formatters/strings/index.ts).
|
|
95
|
+
|
|
96
|
+
| API | Поведение |
|
|
97
|
+
| ---------------------------------------------------- | --------------------------------------------------------------- |
|
|
98
|
+
| `normalizeText` | Возвращает trimmed непустую строку или `undefined`. |
|
|
99
|
+
| `normalizeTextWithFallback`, `normalizeRequiredText` | То же, но с fallback, по умолчанию `""`. |
|
|
100
|
+
| `normalizeTextToLower` | Trim + lowercase, пустое значение превращает в `""`. |
|
|
101
|
+
| `toSafeString` | `null`/`undefined` превращает в `""`, остальное через `String`. |
|
|
102
|
+
| `normalizeTextSpaces` | Схлопывает обычные пробелы, NBSP и narrow NBSP в один пробел. |
|
|
103
|
+
| `stripInnerSpaces` | Удаляет внутренние пробелы/NBSP/NNBSP, полезно для чисел. |
|
|
104
|
+
| `stripLeadingZeros` | Удаляет ведущие нули у целой строки-числа, сохраняя знак. |
|
|
105
|
+
| `startsWithIgnoringZeros` | Сравнение prefix без учета ведущих нулей и регистра. |
|
|
106
|
+
| `truncateText` | Trim + обрезка с `...`; пустой ввод дает `undefined`. |
|
|
107
|
+
|
|
108
|
+
Тесты: [`strings.test.ts`](./src/formatters/strings/strings.test.ts), [`normalizeText.test.ts`](./src/formatters/strings/normalizeText.test.ts).
|
|
109
|
+
|
|
110
|
+
### Общие форматтеры
|
|
111
|
+
|
|
112
|
+
Файл: [`formatters/index.ts`](./src/formatters/index.ts), тест: [`common.test.ts`](./src/formatters/common.test.ts).
|
|
113
|
+
|
|
114
|
+
| API | Поведение |
|
|
115
|
+
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
116
|
+
| `formatFullName`, `formatShortName` | Нормализуют ФИО: полная форма или `Фамилия И.О.`. |
|
|
117
|
+
| `formatPhone`, `clearPhone` | Приводят российский номер к `+7` и форматируют только полный номер. |
|
|
118
|
+
| `normalizeLeadingZeros` | Для числового значения добавляет leading zeros целой части при `fixed > 0`; invalid input возвращает как есть. |
|
|
119
|
+
| `normalizeLeadingZerosStrict` | SAP-like вариант: понимает пробелы группировки и запятую, умеет удалять нули при `fixed < 0`, сохраняет `number` для number-входа. |
|
|
120
|
+
|
|
121
|
+
### `formatters/boolean`
|
|
122
|
+
|
|
123
|
+
Файлы: [`formatters/boolean/index.ts`](./src/formatters/boolean/index.ts), тест: [`boolean.test.ts`](./src/formatters/boolean/boolean.test.ts).
|
|
124
|
+
|
|
125
|
+
| API | Поведение |
|
|
126
|
+
| ------------------ | ------------------------------------------------------------- |
|
|
127
|
+
| `parseAbapBoolean` | Только точное `"X"` считается `true`; все остальное `false`. |
|
|
128
|
+
| `parseBoolean` | Читает `true`, `x`, `1`, primitives; пустые значения `false`. |
|
|
129
|
+
| `toAbapBoolean` | Возвращает `"X"` или `" "`; строка `"0"` считается false. |
|
|
130
|
+
|
|
131
|
+
### `formatters/valueState`
|
|
132
|
+
|
|
133
|
+
Файлы: [`formatters/valueState/index.ts`](./src/formatters/valueState/index.ts), README: [`formatters/valueState/README.md`](./src/formatters/valueState/README.md).
|
|
134
|
+
|
|
135
|
+
Модуль вычисляет визуальный `State` (`none`, `information`, `success`, `warning`, `error`) по значению.
|
|
136
|
+
|
|
137
|
+
| API | Когда использовать |
|
|
138
|
+
| ---------------------------------------------------------------------------------------------------- | ------------------------------------- |
|
|
139
|
+
| `createThresholdResolver`, `registerThresholdResolver` | Числовые диапазоны по порогам. |
|
|
140
|
+
| `createFixedResolver`, `registerFixedResolver` | Точное совпадение строковых значений. |
|
|
141
|
+
| `resolveValueState`, `getValueStateResolver`, `getValueStateResolverIds`, `resetValueStateResolvers` | Единый реестр resolver-ов. |
|
|
142
|
+
| `resolveValueStateClassName` | CSS-класс по состоянию. |
|
|
143
|
+
| `DEFAULT_VALUE_STATES`, `VALUE_STATE_COLOR_TOKENS` | Presentation constants. |
|
|
144
|
+
|
|
145
|
+
Поведение из тестов: threshold требует `states.length === thresholds.length + 1`, fixed resolver приводит значение к строке, unknown resolver дает `none`, className строится централизованно.
|
|
146
|
+
|
|
147
|
+
Тесты: [`thresholdValueStateResolver.test.ts`](./src/formatters/valueState/thresholdValueStateResolver.test.ts), [`fixedValueStateResolver.test.ts`](./src/formatters/valueState/fixedValueStateResolver.test.ts), [`valueStateClassName.test.ts`](./src/formatters/valueState/valueStateClassName.test.ts).
|
|
148
|
+
|
|
149
|
+
### `formatters/pipeline`
|
|
150
|
+
|
|
151
|
+
Файлы: [`formatters/pipeline/index.ts`](./src/formatters/pipeline/index.ts).
|
|
152
|
+
|
|
153
|
+
Pipeline — runtime форматирования ячейки. Он принимает сериализуемый `FormattersPipelineConfig` версии `1`, валидирует `plan` или строит линейный plan из `graph`, компилирует executor и возвращает display-result.
|
|
154
|
+
|
|
155
|
+
Поддержанные шаги:
|
|
156
|
+
|
|
157
|
+
| Шаг | Что делает |
|
|
158
|
+
| ----------------------- | --------------------------------------------------------- |
|
|
159
|
+
| `normalizeLeadingZeros` | Прогоняет значение через `normalizeLeadingZeros`. |
|
|
160
|
+
| `rowBasedOverride` | Подменяет значение из поля строки или формулы `rowBased`. |
|
|
161
|
+
| `resolveValueState` | Вычисляет state и опциональную иконку. |
|
|
162
|
+
| `typedValueFormat` | Форматирует по OData type/role через date/number/string. |
|
|
163
|
+
|
|
164
|
+
Основной API:
|
|
165
|
+
|
|
166
|
+
| API | Когда использовать |
|
|
167
|
+
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
168
|
+
| `normalizeFormattersPipelineConfig` | Принять `unknown` конфиг и получить валидный clone или `undefined`. |
|
|
169
|
+
| `validateFormattersPipelineConfig`, `validateFormattersPipelinePlan`, `validateFormattersPipelineGraph` | Проверить config и получить errors/warnings/plan. |
|
|
170
|
+
| `compileFormattersPipelineExecutor` | Скомпилировать executor конкретной колонки. |
|
|
171
|
+
| `compileFormattersPipelineRuntime`, `compileFormattersPipelineRuntimeFields` | Подготовить runtime-поля на construction-stage. |
|
|
172
|
+
| `formatPipelineDisplayValue` | Получить финальное display-value без знания о конкретной таблице. |
|
|
173
|
+
| `formatTypedCellValue` | Форматировать одиночное значение по `role/type`. |
|
|
174
|
+
| `collectFormattersPipelineDependencyIds`, `collectRuntimeFieldDependencyIds` | Собрать поля, которые надо добавить в query для renderer/pipeline. |
|
|
175
|
+
| `cloneFormattersPipelineConfig`, `cloneFormatterPipelinePlanStep`, `rekey*` | Безопасно копировать и переименовывать сериализуемые configs. |
|
|
176
|
+
|
|
177
|
+
Поведение из тестов:
|
|
178
|
+
|
|
179
|
+
- `plan` имеет приоритет над `graph`; если plan невалиден, есть попытка построить plan из graph;
|
|
180
|
+
- graph должен быть строго линейным `source -> ... -> sink`, без циклов и disconnected nodes;
|
|
181
|
+
- каждый шаг может встречаться не больше одного раза;
|
|
182
|
+
- `typedValueFormat` не может идти до `resolveValueState`;
|
|
183
|
+
- `rowBasedOverride` не применяется к totals-строкам в field-режиме, formula-режим для totals разрешен;
|
|
184
|
+
- для formula dependencies есть проверки out-of-range, unused dependencies и runtime warnings.
|
|
185
|
+
|
|
186
|
+
Тесты: [`validate.test.ts`](./src/formatters/pipeline/validate.test.ts), [`execute.test.ts`](./src/formatters/pipeline/execute.test.ts), [`runtime.test.ts`](./src/formatters/pipeline/runtime.test.ts), [`dependencies.test.ts`](./src/formatters/pipeline/dependencies.test.ts), [`clone.test.ts`](./src/formatters/pipeline/clone.test.ts), [`rekey.test.ts`](./src/formatters/pipeline/rekey.test.ts), [`normalize.test.ts`](./src/formatters/pipeline/normalize.test.ts).
|
|
187
|
+
|
|
188
|
+
### `formatters/rowBased`
|
|
189
|
+
|
|
190
|
+
Файлы: [`formatters/rowBased/index.ts`](./src/formatters/rowBased/index.ts), тест: [`rowBased.test.ts`](./src/formatters/rowBased/rowBased.test.ts).
|
|
191
|
+
|
|
192
|
+
Это маленький реестр формул для row-based override внутри pipeline.
|
|
193
|
+
|
|
194
|
+
| API | Поведение |
|
|
195
|
+
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
|
|
196
|
+
| `createRowBasedFormatterContext` | Дает формуле `ctx.key(index)`, `ctx.value(index)`, `ctx.num(index)`, `rawValue`, `rowData`, `columnId`. |
|
|
197
|
+
| `createRowBasedFormatterRegistry` | Нормализует definitions, запрещает пустой и дублирующийся `id`. |
|
|
198
|
+
| `getRowBasedFormatterList`, `getRowBasedFormatterById` | Чтение глобального реестра. |
|
|
199
|
+
|
|
200
|
+
Встроенные формулы лежат в [`definitions`](./src/formatters/rowBased/definitions): `divideWhenAgFormatter`, `valueWhenFieldOrNull`, `divideWhenFieldOrNull`.
|
|
201
|
+
|
|
202
|
+
### `formulas`
|
|
203
|
+
|
|
204
|
+
Файлы: [`formulas/index.ts`](./src/formulas/index.ts), README: [`formulas/README.md`](./src/formulas/README.md).
|
|
205
|
+
|
|
206
|
+
Глобальный реестр клиентских формул таблицы для calculated/clientOnly measure-колонок.
|
|
207
|
+
|
|
208
|
+
| API | Поведение |
|
|
209
|
+
| -------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
|
210
|
+
| `createTableFormulaContext` | Контекст `key/value/num(index)` по dependency keys. |
|
|
211
|
+
| `compileTableFormula` | Компилирует formulaId + keys в executor; не кидает runtime errors наружу. |
|
|
212
|
+
| `executeTableFormula` | Разовый запуск формулы. |
|
|
213
|
+
| `createTableFormulaRegistry` | Нормализует definitions и запрещает дубли. |
|
|
214
|
+
| `getTableFormulaList`, `getTableFormulaById` | Доступ к реестру. |
|
|
215
|
+
| `validateTableFormulaDependencies` | Проверяет наличие formula, доступность dependencies, out-of-range и unused dependencies. |
|
|
216
|
+
|
|
217
|
+
Поведение из тестов: невалидный результат формулы дает `invalid_result`, runtime exception дает `runtime_error`, отсутствующая формула дает `formula_not_found`.
|
|
218
|
+
|
|
219
|
+
Тесты: [`execute.test.ts`](./src/formulas/execute.test.ts), [`validate.test.ts`](./src/formulas/validate.test.ts), [`dublicates.test.ts`](./src/formulas/dublicates.test.ts), [`perf.runtime.test.ts`](./src/formulas/perf.runtime.test.ts).
|
|
220
|
+
|
|
221
|
+
### `date-segments`
|
|
222
|
+
|
|
223
|
+
Файл: [`date-segments/index.ts`](./src/date-segments/index.ts), тест: [`mask.test.ts`](./src/date-segments/mask.test.ts).
|
|
224
|
+
|
|
225
|
+
Утилиты для segmented date input.
|
|
226
|
+
|
|
227
|
+
| API | Поведение |
|
|
228
|
+
| ---------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
229
|
+
| `parseDateSegmentMask` | Разбирает маску в editable/literal сегменты. |
|
|
230
|
+
| `isEditableDateSegment` | Type guard editable-сегмента. |
|
|
231
|
+
| `dateToIndexedSegmentValues` | Преобразует `Date` в `Map<index, value>` по сегментам. |
|
|
232
|
+
| `areAllDateSegmentsEmpty` | Проверяет пустой ввод. |
|
|
233
|
+
| `indexedSegmentsToDate` | Строго собирает `Date`; отклоняет невозможные даты и время, умеет `defaultDate` для масок без даты. |
|
|
234
|
+
|
|
235
|
+
### `number-scale`
|
|
236
|
+
|
|
237
|
+
Файлы: [`number-scale/index.ts`](./src/number-scale/index.ts), тест: [`numberScale.test.ts`](./src/number-scale/numberScale.test.ts).
|
|
238
|
+
|
|
239
|
+
Математика числовых слайдеров и шкал.
|
|
240
|
+
|
|
241
|
+
| API | Поведение |
|
|
242
|
+
| -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
243
|
+
| `resolveNumberScaleBounds` | Возвращает finite min/max, меняет местами если min > max, fallback `0..100`. |
|
|
244
|
+
| `clampNumberScaleValue` | Ограничивает значение границами. |
|
|
245
|
+
| `normalizeNumberScaleStep` | Некорректный/нулевой/отрицательный step заменяет на `1`. |
|
|
246
|
+
| `prepareNumberScaleMarks` | Фильтрует finite marks в границах, сортирует и дедуплицирует. |
|
|
247
|
+
| `snapNumberScaleValueToStep`, `snapNumberScaleValueToMarks`, `snapNumberScaleValue` | Привязка к step или marks. |
|
|
248
|
+
| `valueToNumberScalePercent`, `percentToNumberScaleValue`, `percentToSnappedNumberScaleValue` | Перевод value <-> percent с учетом marks. |
|
|
249
|
+
| `getNumberScaleMarkPercent`, `findClosestNumberScaleMarkByPercent`, `offsetNumberScaleValue` | Позиционирование marks и keyboard offset. |
|
|
250
|
+
|
|
251
|
+
### `currency`
|
|
252
|
+
|
|
253
|
+
Файл: [`currency/currency.ts`](./src/currency/currency.ts), тест: [`currency.test.ts`](./src/currency/currency.test.ts).
|
|
254
|
+
|
|
255
|
+
| API | Поведение |
|
|
256
|
+
| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
257
|
+
| `resolveCurrencyModeFromODataParameters` | Читает общий параметр `p_curr`: `false -> internal`, `true -> rub`, иначе `null`. |
|
|
258
|
+
| `resolveCurrencyAwareLabel` | Добавляет к подписи валютный суффикс из пары labels; если суффикс начинается с запятой, пробел не добавляется. |
|
|
259
|
+
|
|
260
|
+
Это не formatter денежных чисел. Для чисел используй `formatters/number`.
|
|
261
|
+
|
|
262
|
+
## OData, таблицы и экспорт
|
|
263
|
+
|
|
264
|
+
### `odata-service`
|
|
265
|
+
|
|
266
|
+
Файл: [`odata-service/index.ts`](./src/odata-service/index.ts). Это чистый слой metadata/value/filter helpers. Transport и fetch лежат в пакете `@ryuzaki13/react-foundation-api/odata`.
|
|
267
|
+
|
|
268
|
+
#### Metadata и path
|
|
269
|
+
|
|
270
|
+
| API | Поведение |
|
|
271
|
+
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
272
|
+
| `parseServiceMetadata` | Парсит OData V2 XML metadata в `ServiceMetadata`: entities, FunctionImports, columns, parameters. |
|
|
273
|
+
| `resolveMetadataColumnLabel` | Label с fallback на id. |
|
|
274
|
+
| `isForcedCodeTextId`, `isForcedCodeTextFamilyId` | Проектные исключения code/text пар. |
|
|
275
|
+
| `buildParameterEntries` | Форматирует параметры по metadata, проверяет mandatory и maxLength. |
|
|
276
|
+
| `buildEntityParameters`, `buildEntityPath`, `buildEntityOperationPath` | Строят entity path с metadata-aware params и result navigation. |
|
|
277
|
+
| `buildFunctionImportParameters`, `buildFunctionImportPath` | Строят FunctionImport query string через `URLSearchParams`. |
|
|
278
|
+
| `collectFilterableColumns`, `collectFilterableColumnsIds` | Выбор filterable колонок из metadata. |
|
|
279
|
+
|
|
280
|
+
Тесты: [`parser.test.ts`](./src/odata-service/parser.test.ts), [`builder.test.ts`](./src/odata-service/builder.test.ts).
|
|
281
|
+
|
|
282
|
+
#### Значения и типы
|
|
283
|
+
|
|
284
|
+
| API | Поведение |
|
|
285
|
+
| -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
286
|
+
| `odataFormatValue` | Сериализует OData primitive с escaping, suffix-ами и date literals. |
|
|
287
|
+
| `odataParseValue`, `odataParseValueByMetadata` | Парсит number/boolean/date/string, учитывает `abapBooleanLike`. |
|
|
288
|
+
| `odataTypeSchemas`, `isStringSafe`, `isNumberSafe`, `isBooleanSafe`, `isDateSafe` | Zod-схемы и guards для OData primitives. |
|
|
289
|
+
| `defaultODataTypeValue`, `defaultControlTypeValue` | Default value по OData/UI base type. |
|
|
290
|
+
| `getBaseTypeFromODataType` | OData type -> `string/number/boolean/date`. |
|
|
291
|
+
| `createFormatter`, `createBooleanFormatter`, `createStringFormatter`, `createNumberFormatter`, `createDateFormatter` | Zod-validated formatter factories. |
|
|
292
|
+
| `getFormattersFor`, `getFormattersForBaseType`, `getFormatter`, `getFormatterForBaseType` | Описания formatter-ов для UI. |
|
|
293
|
+
| `isODataBooleanType`, `isODataNumericType`, `isODataIntegerType`, `isODataDateType` | Type guards OData groups. |
|
|
294
|
+
| `wrapODataParams`, `unwrapODataParams` | Переход между flat params и `{ value }` shape; unwrap сортирует ключи. |
|
|
295
|
+
| `normalizeRangeValue`, `normalizeBaseValue`, `isBaseValue` | Нормализация UI input values. |
|
|
296
|
+
| `unwrapODataQueryResult` | Снятие OData result wrapper. |
|
|
297
|
+
|
|
298
|
+
Тесты: [`formatters.test.ts`](./src/odata-service/formatters.test.ts), [`typesValidation.test.ts`](./src/odata-service/typesValidation.test.ts), [`common.test.ts`](./src/odata-service/common.test.ts).
|
|
299
|
+
|
|
300
|
+
#### Фильтры и сортировки
|
|
301
|
+
|
|
302
|
+
| API | Поведение |
|
|
303
|
+
| ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
304
|
+
| `buildODataFilter`, `buildODataFilterRecursive` | Сериализуют `FilterExpression` в `$filter`. |
|
|
305
|
+
| `createFilter`, `createFilterEqual`, `createFilterEqualFalsy`, `createFilterContains`, `createFilterBetween` | Фабрики условий; массивы значений собираются через `or`. |
|
|
306
|
+
| `mergeFilterExpressions` | Объединяет непустые expressions через `and`. |
|
|
307
|
+
| `toggleSort`, `buildODataOrder`, `buildODataOrderBy`, `resolveEffectiveSorts`, `getSortIndicator` | Sorting state и `$orderby`, с fallback на grouping. |
|
|
308
|
+
| `sanitizeFilterConditionGroup`, `sanitizeFilterBinding`, `sanitizeFilterDefinitions`, `sanitizeFilterValue`, `sanitizeFilterValues` | Нормализация сохраненных filter configs/values. |
|
|
309
|
+
| `normalizeDictionaryCodeKey`, `mergeFilterValuePatch` | Нормализация dictionary key и точечное изменение значения фильтра. |
|
|
310
|
+
| `resolveODataFilterDefinitionColumnIds`, `resolveODataFilterDefinitionActiveColumnIds` | Какие физические колонки затрагивает filter definition. |
|
|
311
|
+
| `compileFiltersToExpression` | Compiled filter definitions + values -> `FilterExpression`. |
|
|
312
|
+
| `flattenFilterValuesToODataDependencies` | Segment/tree filters -> dependencies для связанных справочников. |
|
|
313
|
+
| `collapseChainedODataSegmentFilterValues` | В цепочке OData-сегментов оставляет самый глубокий выбранный segment. |
|
|
314
|
+
| `isSqlFilterScalarValue`, `assertSqlFilterFieldId`, `buildSqlFilter`, `createSqlFilterEqual`, `createSqlFilterIn` | Legacy SQL-like WHERE payload, не OData `$filter`. |
|
|
315
|
+
|
|
316
|
+
Важно: `buildSqlFilter` специально запрещает опасные field id и требует заранее форматировать `Date`. Не используй его для Gateway URL.
|
|
317
|
+
|
|
318
|
+
Тесты: [`filters.test.ts`](./src/odata-service/filters.test.ts), [`filterDefinitions.test.ts`](./src/odata-service/filterDefinitions.test.ts), [`sorts.ts`](./src/odata-service/sorts.ts), [`sqlFilters.test.ts`](./src/odata-service/sqlFilters.test.ts).
|
|
319
|
+
|
|
320
|
+
### `range-output`
|
|
321
|
+
|
|
322
|
+
Файлы: [`range-output/index.ts`](./src/range-output/index.ts), тест: [`rangeOutput.test.ts`](./src/range-output/rangeOutput.test.ts).
|
|
323
|
+
|
|
324
|
+
| API | Поведение |
|
|
325
|
+
| ------------------------------ | -------------------------------------------------------------------------------------------------------- |
|
|
326
|
+
| `readRangeOutputValueFallback` | Читает сериализуемые подстановки `start/end` из объекта с `outputValueFallback` через переданный парсер. |
|
|
327
|
+
| `resolveRangeOutputValue` | Заменяет `null` в открытых границах диапазона на заданные подстановочные значения для внешней передачи. |
|
|
328
|
+
|
|
329
|
+
### `odata`
|
|
330
|
+
|
|
331
|
+
Файлы: [`odata/index.ts`](./src/odata/index.ts), тест: [`odata.test.ts`](./src/odata/odata.test.ts).
|
|
332
|
+
|
|
333
|
+
| API | Поведение |
|
|
334
|
+
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
335
|
+
| `buildSeparatedArrays` | Из одной коллекции строит отдельные массивы code/text для каждой пары, дедуплицирует и сортирует. |
|
|
336
|
+
| `findCollectionPairs` | Ищет пары `code` + `*_txt/_text/_t`, поддерживает custom suffixes. |
|
|
337
|
+
| `ODataDateFormat` | Форматирует `Date` в `datetime'...'`, `datetimeoffset'...'`, `time'...'`. |
|
|
338
|
+
| `useODataCollectionStore`, `odataCollectionConfig` | Zustand-store настроек коллекции: pagination, search, selected, dependent filters. |
|
|
339
|
+
|
|
340
|
+
### `table`
|
|
341
|
+
|
|
342
|
+
Файлы: [`table/index.ts`](./src/table/index.ts), тесты в [`table`](./src/table).
|
|
343
|
+
|
|
344
|
+
| API | Поведение |
|
|
345
|
+
| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
|
|
346
|
+
| `resolveTableColumnOrder` | Сначала сохраненный order, потом новые ids; дубли и неизвестные ids удаляются. |
|
|
347
|
+
| `buildTableColumnLayout` | Делает `{ id, width }`, ширина привязана к id, не позиции. |
|
|
348
|
+
| `normalizeTableColumnOrder` | Удаляет пустые и повторяющиеся column id. |
|
|
349
|
+
| `reorderTableHeaderColumns`, `resolveReorderedTableHeaderColumns` | Drag reorder только top-level header columns; locked/pinned не двигаются. |
|
|
350
|
+
| `normalizeTableColumnWidth`, `normalizeTableColumnSizing`, `patchTableColumnWidth`, `removeTableColumnWidth` | Column sizing с min width, default `60`. |
|
|
351
|
+
| `pruneTableRowSelection`, `toggleTableRowSelection` | `none`, `single`, `multi`; single не снимается повторным кликом. |
|
|
352
|
+
| `useTableRowSelection` | Hook поверх selection helpers. |
|
|
353
|
+
| `resolveTableColumnFormattingContextFromODataColumn` | OData column -> pipeline context; numeric types force measure. |
|
|
354
|
+
| `createTableColumnVisibilityFromODataMetadata` | Стартовая visibility; code скрывается, если есть text-пара. |
|
|
355
|
+
| `createTableColumnsFromODataMetadata` | Генерация TanStack columns из metadata. |
|
|
356
|
+
| `enrichTableColumnsWithODataFormatting` | Рекурсивно дозаполняет leaf columns formatting metadata. |
|
|
357
|
+
| `resolveStableColumnId` | `id` или строковый `accessorKey`. |
|
|
358
|
+
| `getTableColumnMeta`, `getTableColumnFormattingMeta`, `resolveTableLength`, `isTableInteractiveElement` | Маленькие runtime helpers для таблиц. |
|
|
359
|
+
|
|
360
|
+
Тесты: [`columnLayout.test.ts`](./src/table/columnLayout.test.ts), [`columnOrder.test.ts`](./src/table/columnOrder.test.ts), [`columnSizing.test.ts`](./src/table/columnSizing.test.ts), [`selection.test.ts`](./src/table/selection.test.ts), [`odataAdapter.test.ts`](./src/table/odataAdapter.test.ts), [`utils.test.ts`](./src/table/utils.test.ts).
|
|
361
|
+
|
|
362
|
+
### `tree-table`
|
|
363
|
+
|
|
364
|
+
Файлы: [`tree-table/index.ts`](./src/tree-table/index.ts).
|
|
365
|
+
|
|
366
|
+
| API | Поведение |
|
|
367
|
+
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
368
|
+
| `buildTreeTableRows` | Строит дерево из flat rows, поднимает сирот/самоссылки в root, не зацикливается, дубли id игнорирует после первого. |
|
|
369
|
+
| `transposeFlatRowsToTreeTableRows` | Создает synthetic group rows из backend-колонок уровней и оставляет backend rows листьями. |
|
|
370
|
+
| `TREE_TABLE_TRANSPOSED_*` constants | Служебные поля transposed rows. |
|
|
371
|
+
|
|
372
|
+
Тесты: [`buildTreeTableRows.test.ts`](./src/tree-table/buildTreeTableRows.test.ts), [`transposeFlatRowsToTreeTableRows.test.ts`](./src/tree-table/transposeFlatRowsToTreeTableRows.test.ts).
|
|
373
|
+
|
|
374
|
+
### `excel`
|
|
375
|
+
|
|
376
|
+
Файлы: [`excel/index.ts`](./src/excel/index.ts).
|
|
377
|
+
|
|
378
|
+
| API | Поведение |
|
|
379
|
+
| -------------------------------- | --------------------------------------------------------------------- |
|
|
380
|
+
| `resolveExcelCellStyleFromState` | Проектный `State` -> text color для Excel. |
|
|
381
|
+
| `buildExcelAutoFilterRef` | Диапазон `A1:C10`; пустая сетка дает `undefined`. |
|
|
382
|
+
| `buildExcelSheetData` | Header bold + border, значения приводятся к типу Excel-ячейки. |
|
|
383
|
+
| `downloadExcelFile` | Формирует `.xlsx` через `write-excel-file`, умеет autoFilter feature. |
|
|
384
|
+
| `resolveTableExcelColumnType` | OData type/role/clientOnly -> Excel constructor type. |
|
|
385
|
+
| `createTableExcelColumn` | Column descriptor -> Excel column + number/date format. |
|
|
386
|
+
| `downloadResolvedExcelTable` | Скачивает уже подготовленную таблицу и прокидывает cell styles. |
|
|
387
|
+
|
|
388
|
+
Тесты: [`excel.test.ts`](./src/excel/excel.test.ts), [`tableExport.test.ts`](./src/excel/tableExport.test.ts).
|
|
389
|
+
|
|
390
|
+
### `file` и `binary`
|
|
391
|
+
|
|
392
|
+
Файлы: [`file/index.ts`](./src/file/index.ts), README: [`file/README.md`](./src/file/README.md); [`binary/index.ts`](./src/binary/index.ts), README: [`binary/README.md`](./src/binary/README.md).
|
|
393
|
+
|
|
394
|
+
`file`:
|
|
395
|
+
|
|
396
|
+
| API | Поведение |
|
|
397
|
+
| --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
398
|
+
| `readFile` | FileReader wrapper: `data-url` или `array-buffer`, `allowedMime`, `maxBytes`, `AbortSignal`, typed result. |
|
|
399
|
+
| `buildMeta`, `attachAbort`, `assertValidAllowedMime`, `assertValidAccept`, `assertNotAborted` | Низкоуровневые helpers чтения файла; обычно нужны тестам или расширению `readFile`. |
|
|
400
|
+
| `ReadFileError` | Ошибки чтения/валидации файла с code. |
|
|
401
|
+
| `readImageFile` | Надстройка для изображений: `image/*`, typed `allowedMime`, dimensions в data-url режиме. |
|
|
402
|
+
| `ReadImageError` | Ошибки чтения изображения. |
|
|
403
|
+
|
|
404
|
+
`binary`:
|
|
405
|
+
|
|
406
|
+
| API | Поведение |
|
|
407
|
+
| ---------------- | ------------------------------------------------------------------------------ |
|
|
408
|
+
| `binaryToBlob` | Base64/data URL/raw binary string -> `Blob`; валидирует пустые и битые данные. |
|
|
409
|
+
| `detectMimeType` | MIME по filename, data URL, byte signature, fallback `application/pdf`. |
|
|
410
|
+
| `useBinaryFile` | Hook: base64 string -> `{ blob, mime }` или error; object URL не создает. |
|
|
411
|
+
|
|
412
|
+
Тест: [`binaryToBlob.test.ts`](./src/binary/binaryToBlob.test.ts).
|
|
413
|
+
|
|
414
|
+
### `xml`
|
|
415
|
+
|
|
416
|
+
Файл: [`xml/xml.ts`](./src/xml/xml.ts), тест: [`xml.test.ts`](./src/xml/xml.test.ts).
|
|
417
|
+
|
|
418
|
+
| API | Поведение |
|
|
419
|
+
| ---------------- | ----------------------------------------------------- |
|
|
420
|
+
| `escapeXmlValue` | Экранирует `& < > " '`, `null/undefined` -> `""`. |
|
|
421
|
+
| `buildXmlFields` | Собирает компактные XML tags без переносов. |
|
|
422
|
+
| `getXmlTagText` | DOMParser + trimmed text первого tag или `undefined`. |
|
|
423
|
+
|
|
424
|
+
## Browser, React hooks и UI-поведение
|
|
425
|
+
|
|
426
|
+
### `dom`
|
|
427
|
+
|
|
428
|
+
Файлы: [`dom/index.ts`](./src/dom/index.ts), тест: [`dom.test.tsx`](./src/dom/dom.test.tsx).
|
|
429
|
+
|
|
430
|
+
| API | Поведение |
|
|
431
|
+
| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
432
|
+
| `getOrCreatePortalRoot` | Создает portal root один раз и переиспользует HTMLElement. |
|
|
433
|
+
| `downloadFileFromObjectURL`, `downloadFileFromBlob`, `downloadFileFromJson` | Скачивание через `<a download>`, object URL освобождается после click. |
|
|
434
|
+
| `useClickOutside` | Mousedown outside одного или нескольких refs. |
|
|
435
|
+
| `useEscapeDismiss` | Escape закрывает только активный overlay; если задан `containerRef`, фокус должен быть внутри. |
|
|
436
|
+
| `useOverlayFocus` | Initial focus, optional focus trap, restore focus. |
|
|
437
|
+
| `useFocusTrap` | Совместимый wrapper поверх `useOverlayFocus`. |
|
|
438
|
+
| `useElementHeightObserver` | Height через `ResizeObserver`. |
|
|
439
|
+
| `useIntersectionObserver` | Boolean пересечения элемента. |
|
|
440
|
+
| `useIsTouchDevice` | Coarse pointer / touch / `maxTouchPoints`, обновление на resize. |
|
|
441
|
+
|
|
442
|
+
### `hooks`
|
|
443
|
+
|
|
444
|
+
Файлы: [`hooks/index.ts`](./src/hooks/index.ts).
|
|
445
|
+
|
|
446
|
+
| API | Поведение |
|
|
447
|
+
| ----------------------- | -------------------------------------------------------------------------------------------- |
|
|
448
|
+
| `useDebounce` | Debounced value через timeout. |
|
|
449
|
+
| `useDebouncedCallback` | Last-write-wins callback, `call/flush/cancel`, optional `flushOnUnmount`. |
|
|
450
|
+
| `useThrottledCallback` | Leading + trailing throttle, last-write-wins, `call/flush/cancel`. |
|
|
451
|
+
| `useDndSortableSensors` | Общие PointerSensor + KeyboardSensor для sortable DnD, default distance `6`. |
|
|
452
|
+
| `useFloatingListbox` | Floating UI listbox: open/close, active index, keyboard navigation, aria ids, focus restore. |
|
|
453
|
+
| `useSearchParams` | Wrapper над TanStack Router `useSearch/useNavigate`, `replace: true`, allowed keys filter. |
|
|
454
|
+
| `useSearchLink` | Строит ссылку с измененными search params без ручного `window.location.search`. |
|
|
455
|
+
| `useLazyComponent` | Hook-обертка lazy component, если используется рядом с `createLazyComponent`. |
|
|
456
|
+
| `useReferenceTrace` | Диагностика изменения ссылок. |
|
|
457
|
+
| `useBlockBrowserZoom` | Блокирует `ctrl+wheel` при enabled. |
|
|
458
|
+
|
|
459
|
+
### `copy`
|
|
460
|
+
|
|
461
|
+
Файлы: [`copy/index.ts`](./src/copy/index.ts).
|
|
462
|
+
|
|
463
|
+
| API | Поведение |
|
|
464
|
+
| -------------------------------- | --------------------------------------------------------------------------------------- |
|
|
465
|
+
| `useCopyText` | Clipboard API в secure context, fallback через `execCommand`; пустой текст не копирует. |
|
|
466
|
+
| `useElementText` | Trimmed `textContent` ref. |
|
|
467
|
+
| `useCopyElementText` | Копирует текст из ref. |
|
|
468
|
+
| `useCopyFeedback` | `isCopied` на 2 секунды. |
|
|
469
|
+
| `useCopyElementTextWithFeedback` | Копирование элемента + feedback. |
|
|
470
|
+
|
|
471
|
+
### `media`
|
|
472
|
+
|
|
473
|
+
Файлы: [`media/index.ts`](./src/media/index.ts), тест: [`media.test.ts`](./src/media/media.test.ts).
|
|
474
|
+
|
|
475
|
+
| API | Поведение |
|
|
476
|
+
| ---------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
477
|
+
| `BREAKPOINTS_EM`, `Breakpoint`, `MediaMatches` | Проектные брейкпоинты в `em`: mobile/tablet/laptop. |
|
|
478
|
+
| `useMatchMedia` | Singleton external store на `useSyncExternalStore`; учитывает изменение root `em`. |
|
|
479
|
+
| `ResponsiveValue`, `resolveResponsiveValue`, `resolveProps` | Responsive props с fallback по брейкпоинтам. |
|
|
480
|
+
| `getCurrentFontSize`, `getCurrentLineHeight`, `getControlHeight` | DOM font metrics с safe defaults. |
|
|
481
|
+
| `pxToEm` | px -> em строка. |
|
|
482
|
+
|
|
483
|
+
### `context-menu`
|
|
484
|
+
|
|
485
|
+
Файлы: [`context-menu/index.ts`](./src/context-menu/index.ts), тесты: [`anchor.test.ts`](./src/context-menu/anchor.test.ts), [`state.test.ts`](./src/context-menu/state.test.ts).
|
|
486
|
+
|
|
487
|
+
| API | Поведение |
|
|
488
|
+
| --------------------------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
489
|
+
| `getMenuPointFromEvent` | `clientX/clientY` -> point. |
|
|
490
|
+
| `getMenuPointFromRect` | Center point rect. |
|
|
491
|
+
| `createVirtualAnchor` | Virtual element для Floating UI. |
|
|
492
|
+
| `initialMenuState`, `openMenu`, `closeMenu`, `toggleMenu` | Immutable state helpers; `closeMenu` возвращает исходный объект, если уже закрыто. |
|
|
493
|
+
|
|
494
|
+
### `notifications`
|
|
495
|
+
|
|
496
|
+
Файлы: [`notifications/index.ts`](./src/notifications/index.ts), тест: [`store.test.ts`](./src/notifications/store.test.ts).
|
|
497
|
+
|
|
498
|
+
| API | Поведение |
|
|
499
|
+
| -------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
500
|
+
| `createNotificationsStore` | Zustand vanilla store, максимум 6 уведомлений, TTL timers, `push/update/upsert/dismiss/clear`. |
|
|
501
|
+
| `bindNotifications` | Привязка store к imperative `notify`. |
|
|
502
|
+
| `notify` | `push/upsert/update/dismiss/clear`, short methods `success/info/warning/error`, progress pattern. |
|
|
503
|
+
|
|
504
|
+
`notify` требует bound store; без provider будет ошибка.
|
|
505
|
+
|
|
506
|
+
### `pwa` и `virtualizer`
|
|
507
|
+
|
|
508
|
+
Файлы: [`pwa/index.ts`](./src/pwa/index.ts), README: [`pwa/README.md`](./src/pwa/README.md); [`virtualizer/index.ts`](./src/virtualizer/index.ts).
|
|
509
|
+
|
|
510
|
+
`pwa`:
|
|
511
|
+
|
|
512
|
+
| API | Поведение |
|
|
513
|
+
| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
514
|
+
| `parseSwCachePolicy`, `buildSwCachePolicyValue`, `resolveSwCacheCacheNameByPolicy`, `normalizeSwCacheName` | Разбор `x-sw-cache`: `off`, `ttl=24h`, `bust=forever`, `max`, `name`. |
|
|
515
|
+
| `useServiceWorkerUpdate` | UI hook для service worker update flow. |
|
|
516
|
+
|
|
517
|
+
Service worker runtime helpers живут в [`pwa/serviceWorker.ts`](./src/pwa/serviceWorker.ts) и используются shell-слоем: registration, waiting worker, reload-chain guard, invalidate cache profile.
|
|
518
|
+
|
|
519
|
+
`virtualizer`:
|
|
520
|
+
|
|
521
|
+
| API | Поведение |
|
|
522
|
+
| ------------------------ | ------------------------------------------------------------------------------------ |
|
|
523
|
+
| `useFetchNextPageEffect` | Общий эффект дозагрузки следующей страницы для virtualizer/infinite query сценариев. |
|
|
524
|
+
|
|
525
|
+
## Runtime, state и инфраструктура
|
|
526
|
+
|
|
527
|
+
### `query-client`
|
|
528
|
+
|
|
529
|
+
Файлы: [`query-client/index.ts`](./src/query-client/index.ts), README: [`query-client/README.md`](./src/query-client/README.md), optimistic guide: [`OPTIMISTIC_UPDATE.md`](./src/query-client/OPTIMISTIC_UPDATE.md).
|
|
530
|
+
|
|
531
|
+
| API | Поведение |
|
|
532
|
+
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
|
|
533
|
+
| `createQueryClient` | Singleton QueryClient defaults: stale/gc, retry, error handlers, optional persister. |
|
|
534
|
+
| `persistedQueryMeta`, `shouldPersistQuery`, `createReactQueryPersister`, `createIndexedDbQueryStorage` | Opt-in persistence справочников в IndexedDB. |
|
|
535
|
+
| `installReactQueryBroadcast`, `broadcastCacheEvent`, `setBroadcastFn` | Sync query cache и cache events между вкладками. |
|
|
536
|
+
| `onMutateOptimistic`, `onErrorOptimistic`, `onSuccessOptimistic`, `onSettledOptimistic` | Helpers для точечного optimistic update. |
|
|
537
|
+
|
|
538
|
+
Поведение из тестов: persistence сохраняет только `meta.persist === true`, broadcast игнорирует невалидные сообщения и не зацикливает remote events, `onSettledOptimistic` по умолчанию invalidates с `refetchType: "none"`.
|
|
539
|
+
|
|
540
|
+
Тесты: [`queryClient.test.ts`](./src/query-client/queryClient.test.ts), [`persistence.test.ts`](./src/query-client/persistence.test.ts), [`broadcast.test.ts`](./src/query-client/broadcast.test.ts), [`broadcast.integration.test.ts`](./src/query-client/broadcast.integration.test.ts).
|
|
541
|
+
|
|
542
|
+
### `error` и `error-report`
|
|
543
|
+
|
|
544
|
+
Файлы: [`error/index.ts`](./src/error/index.ts), [`error-report/index.ts`](./src/error-report/index.ts).
|
|
545
|
+
|
|
546
|
+
`error`:
|
|
547
|
+
|
|
548
|
+
| API | Поведение |
|
|
549
|
+
| --------------------------------------------------------------- | ------------------------------------------------------ |
|
|
550
|
+
| `createMissingContextErrorMessage`, `createMissingContextError` | Единый текст ошибки для hooks, вызванных вне provider. |
|
|
551
|
+
|
|
552
|
+
`error-report`:
|
|
553
|
+
|
|
554
|
+
| API | Поведение |
|
|
555
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
|
|
556
|
+
| `addErrorReportBreadcrumb`, `getErrorReportBreadcrumbs`, `clearErrorReportBreadcrumbs`, `installErrorReportBrowserBreadcrumbs` | Breadcrumb trail. |
|
|
557
|
+
| `captureQueryErrorReport`, `captureMutationErrorReport`, `captureRuntimeErrorReport` | Создание report payload. |
|
|
558
|
+
| `collectQueryDiagnostics`, `collectMutationDiagnostics`, `collectQueryClientDiagnostics`, `collectPersistedQueryDiagnostics` | Диагностика без тяжелых query data. |
|
|
559
|
+
| `createDiagnosticValue`, `createDataShape`, `sanitizeDetail` | Safe JSON-compatible формы с отсечением секретов и глубины. |
|
|
560
|
+
| `getErrorReportDraft`, `updateErrorReportDraft`, `getErrorReportDrafts`, `captureErrorReportDraft` | Draft-хранилище отчетов. |
|
|
561
|
+
| `setErrorReportingDeliveryMode`, `getErrorReportingDeliveryMode`, `isErrorReportingEnabled`, `getErrorReportEnvironment` | Environment/delivery config. |
|
|
562
|
+
| `createErrorInfo` | Нормализация unknown error в безопасный `message/name/stack`. |
|
|
563
|
+
| `setErrorReportRuntimeErrorReporter`, `reportRuntimeError`, `setErrorReportTransportErrorReporter`, `isTransportErrorReportScheduled`, `suppressTransportErrorReport`, `reportTransportError` | Интеграционные точки runtime/transport reporting. |
|
|
564
|
+
|
|
565
|
+
Тесты: [`missingContextError.test.ts`](./src/error/missingContextError.test.ts), [`errorReport.test.ts`](./src/error-report/errorReport.test.ts), [`breadcrumbs.test.ts`](./src/error-report/breadcrumbs.test.ts).
|
|
566
|
+
|
|
567
|
+
## Низкоуровневые helpers
|
|
568
|
+
|
|
569
|
+
### `array`
|
|
570
|
+
|
|
571
|
+
Файлы: [`array/index.ts`](./src/array/index.ts), тесты: [`array.test.ts`](./src/array/array.test.ts), [`reorder.test.ts`](./src/array/reorder.test.ts).
|
|
572
|
+
|
|
573
|
+
| API | Поведение |
|
|
574
|
+
| --------------------------------------------------- | -------------------------------------------------------------------------- |
|
|
575
|
+
| `arrayGroupBy`, `arrayGroupByToArray` | Группировка по ключу, порядок элементов внутри группы сохраняется. |
|
|
576
|
+
| `arrayToMap` | Map-object по первому встреченному значению ключа. |
|
|
577
|
+
| `arrayUniqueBy` | Дедупликация по ключу без перестановки первого значения. |
|
|
578
|
+
| `filterAndDeduplicateIds` | Оставляет только allowed ids, убирает пустые и дубли. |
|
|
579
|
+
| `appendMissingIds` | Добавляет отсутствующие ids в конец базового списка. |
|
|
580
|
+
| `pickExistingMapValues` | Значения `Map` в порядке keys, отсутствующие ключи пропускаются. |
|
|
581
|
+
| `arraysEqual` | Строго по длине, порядку и ссылочным значениям. |
|
|
582
|
+
| `moveItem`, `moveArrayItem`, `moveArrayItemByIndex` | Immutable reorder; некорректные индексы возвращают копию без перестановки. |
|
|
583
|
+
| `normalizeObjects` | Trim key, отсекает пустые/дубли, по умолчанию shallow copy. |
|
|
584
|
+
| `normalizeStringArray`, `addUnique` | Нормализация string ids. |
|
|
585
|
+
|
|
586
|
+
### `utils`
|
|
587
|
+
|
|
588
|
+
Файлы: [`utils/index.ts`](./src/utils/index.ts), тесты: [`utils.test.ts`](./src/utils/utils.test.ts), [`keyboard.test.ts`](./src/utils/keyboard.test.ts), [`createLazyComponent.test.tsx`](./src/utils/createLazyComponent.test.tsx).
|
|
589
|
+
|
|
590
|
+
| API | Поведение |
|
|
591
|
+
| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
592
|
+
| `cn` | Сборка className из строк и conditional object. Новый код использует `cn`. |
|
|
593
|
+
| `stableStringify` | JSON с сортировкой object keys; подходит для cache keys/сравнений. |
|
|
594
|
+
| `childrenCount` | Считает React children, раскрывая fragments. |
|
|
595
|
+
| `createLazyComponent` | Кеширует lazy component по import function/componentName или explicit `cacheKey`. |
|
|
596
|
+
| `deepCopyWithoutFunctions` | Для plain config: удаляет функции, копирует Date/arrays/plain objects, unsupported objects кидают ошибку. |
|
|
597
|
+
| `deepCloneWithoutFunctions` | Более общий clone: Date, RegExp, Map, Set, cycles, sparse arrays, descriptors, optional prototype. |
|
|
598
|
+
| `keyboardActivationKeys`, `isKeyboardActivationKey`, `handleKeyboardActivation` | Enter/Space activation для custom controls. |
|
|
599
|
+
| `getRovingFocusTargetIndex` | Home/End/Arrow navigation для roving focus. |
|
|
600
|
+
| `findFirstEnabledIndex`, `findLastEnabledIndex`, `findNextEnabledIndex` | Navigation по listbox/select options с disabled и optional wrap. |
|
|
601
|
+
| `deepCopyNodes`, `deepCopyTree` | Копирование tree nodes, custom children field. |
|
|
602
|
+
| `toBase64`, `encodeBase64` | Unicode-safe base64. |
|
|
603
|
+
| `logError` | Косвенный `console.error`, который terser не удаляет. |
|
|
604
|
+
|
|
605
|
+
### `validators` и `types`
|
|
606
|
+
|
|
607
|
+
Файлы: [`validators/index.ts`](./src/validators/index.ts), [`types/index.ts`](./src/types/index.ts), тест: [`validators.test.ts`](./src/validators/validators.test.ts).
|
|
608
|
+
|
|
609
|
+
| API | Поведение |
|
|
610
|
+
| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
611
|
+
| `isSafe` | Type guard от `null/undefined`. |
|
|
612
|
+
| `isObject`, `isRecord`, `asRecord`, `isPlainObject` | Guards для object-like values; массивы не считаются record. |
|
|
613
|
+
| `IMAGE_EXTENSIONS`, `isImageExtension` | Проверка image extension без учета регистра. |
|
|
614
|
+
| `isDomReference` | Floating UI reference -> DOM `Element`. |
|
|
615
|
+
| `State`, `AbapBoolean`, `Primitive`, `BaseType`, `InputType`, `RangeType`, `ChangeHandler`, `RowRecord` | Общие технические типы. |
|
|
616
|
+
|
|
617
|
+
### `string-comparison`
|
|
618
|
+
|
|
619
|
+
Файл: [`string-comparison/compareStrings.ts`](./src/string-comparison/compareStrings.ts), тест: [`compareStrings.test.ts`](./src/string-comparison/compareStrings.test.ts).
|
|
620
|
+
|
|
621
|
+
`compareStrings` использует фиксированный `Intl.Collator("ru-RU", { numeric: true, sensitivity: "base" })` и UTF-16 fallback. Используй для справочников и UI-списков вместо ad hoc `localeCompare`.
|
|
622
|
+
|
|
623
|
+
### `crypto` и `session-storage`
|
|
624
|
+
|
|
625
|
+
Файлы: [`crypto/index.ts`](./src/crypto/index.ts), [`session-storage/index.ts`](./src/session-storage/index.ts).
|
|
626
|
+
|
|
627
|
+
| API | Поведение |
|
|
628
|
+
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
629
|
+
| `hashString` | Компактный FNV-1a-like 32-bit hash base36. |
|
|
630
|
+
| `hashString128`, `hashString128Base64Url`, `stringToElementId` | Стабильные длинные hash/id для DOM/cache-like ключей. |
|
|
631
|
+
| `uuidv4` | Native `crypto.randomUUID` или fallback через `getRandomValues`. |
|
|
632
|
+
| `getSessionStorageId` | Стабильный id вкладочной сессии; fallback при недоступном/ошибочном sessionStorage. |
|
|
633
|
+
|
|
634
|
+
Тесты: [`crypto.test.ts`](./src/crypto/crypto.test.tsx), [`sessionId.test.ts`](./src/session-storage/sessionId.test.ts).
|
|
635
|
+
|
|
636
|
+
### `presets`
|
|
637
|
+
|
|
638
|
+
Файл: [`presets/presets.ts`](./src/presets/presets.ts), тест: [`presets.test.ts`](./src/presets/presets.test.ts).
|
|
639
|
+
|
|
640
|
+
| API | Поведение |
|
|
641
|
+
| --------------------------- | ------------------------------------------------------------------------------------------ |
|
|
642
|
+
| `normalizePresetIds` | Unknown saved ids -> валидные ids через доменный type guard, fallback если вход не массив. |
|
|
643
|
+
| `resolvePresetOptionsByIds` | Options по ids с сохранением порядка и удалением дублей. |
|
|
644
|
+
| `getPresetOption` | Поиск option по id или `null`. |
|
|
645
|
+
|
|
646
|
+
### `bounded-copy-stack`
|
|
647
|
+
|
|
648
|
+
Файл: [`bounded-copy-stack/boundedCopyStack.ts`](./src/bounded-copy-stack/boundedCopyStack.ts), тест: [`boundedCopyStack.test.ts`](./src/bounded-copy-stack/boundedCopyStack.test.ts).
|
|
649
|
+
|
|
650
|
+
| API | Поведение |
|
|
651
|
+
| --------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
652
|
+
| `pushBoundedCopyStackItem` | Добавляет item в начало, поднимает существующий fingerprint без дубля, ограничивает size. |
|
|
653
|
+
| `getBoundedCopyStackCandidates` | Фильтрует элементы стека predicate-ом. |
|
|
654
|
+
| `DEFAULT_BOUNDED_COPY_STACK_SIZE` | Default size `3`. |
|