@fluidframework/tree 2.113.1 → 2.115.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/CHANGELOG.md +289 -0
- package/api-report/tree.alpha.api.md +127 -39
- package/dist/core/change-family/changeFamily.d.ts +15 -4
- package/dist/core/change-family/changeFamily.d.ts.map +1 -1
- package/dist/core/change-family/changeFamily.js.map +1 -1
- package/dist/core/change-family/editBuilder.d.ts +2 -3
- package/dist/core/change-family/editBuilder.d.ts.map +1 -1
- package/dist/core/change-family/editBuilder.js +1 -2
- package/dist/core/change-family/editBuilder.js.map +1 -1
- package/dist/core/change-family/index.d.ts +1 -1
- package/dist/core/change-family/index.d.ts.map +1 -1
- package/dist/core/change-family/index.js.map +1 -1
- package/dist/core/index.d.ts +4 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +110 -0
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +47 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/tree/delta.d.ts +62 -16
- package/dist/core/tree/delta.d.ts.map +1 -1
- package/dist/core/tree/delta.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +7 -13
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +32 -46
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/index.d.ts +1 -0
- package/dist/core/tree/index.d.ts.map +1 -1
- package/dist/core/tree/index.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +2 -4
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js +2 -2
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/entrypoints/alpha.d.ts +1 -1
- package/dist/entrypoints/alpha.d.ts.map +1 -1
- package/dist/entrypoints/alpha.js +8 -3
- package/dist/entrypoints/alpha.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -6
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +16 -13
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +10 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
- package/dist/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
- package/dist/feature-libraries/comparison-forest/comparisonForest.js +98 -0
- package/dist/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
- package/dist/feature-libraries/comparison-forest/index.d.ts +6 -0
- package/dist/feature-libraries/comparison-forest/index.d.ts.map +1 -0
- package/dist/feature-libraries/comparison-forest/index.js +10 -0
- package/dist/feature-libraries/comparison-forest/index.js.map +1 -0
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.js +3 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
- package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/detachedFieldIndexSummarizer.js +18 -6
- package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +2 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +4 -3
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +77 -72
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/mitigatedChangeFamily.js +12 -0
- package/dist/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
- package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
- package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/invert.d.ts +15 -0
- package/dist/feature-libraries/modular-schema/invert.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/invert.js +159 -0
- package/dist/feature-libraries/modular-schema/invert.js.map +1 -0
- package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
- package/dist/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
- package/dist/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
- package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +53 -406
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
- package/dist/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/modularChangeUtils.js +205 -0
- package/dist/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
- package/dist/feature-libraries/modular-schema/prune.d.ts +10 -0
- package/dist/feature-libraries/modular-schema/prune.d.ts.map +1 -0
- package/dist/feature-libraries/modular-schema/prune.js +49 -0
- package/dist/feature-libraries/modular-schema/prune.js.map +1 -0
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/treeTextCursor.d.ts +15 -0
- package/dist/feature-libraries/treeTextCursor.d.ts.map +1 -1
- package/dist/feature-libraries/treeTextCursor.js +64 -1
- package/dist/feature-libraries/treeTextCursor.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -5
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/serializedChange.d.ts +2 -2
- package/dist/shared-tree/serializedChange.d.ts.map +1 -1
- package/dist/shared-tree/serializedChange.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +11 -3
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +9 -7
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
- package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +57 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/transactionMinimize.d.ts.map +1 -1
- package/dist/shared-tree/transactionMinimize.js +2 -2
- package/dist/shared-tree/transactionMinimize.js.map +1 -1
- package/dist/shared-tree/transactionPostProcessor.d.ts +2 -1
- package/dist/shared-tree/transactionPostProcessor.d.ts.map +1 -1
- package/dist/shared-tree/transactionPostProcessor.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +13 -7
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +59 -13
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +24 -9
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +7 -0
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts +4 -4
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +2 -0
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.d.ts +3 -14
- package/dist/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
- package/dist/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.d.ts +4 -4
- package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.js +0 -1
- package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
- package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageCodecs.d.ts +8 -1
- package/dist/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecs.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +5 -5
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/shared-tree-core/transaction.d.ts +10 -10
- package/dist/shared-tree-core/transaction.d.ts.map +1 -1
- package/dist/shared-tree-core/transaction.js +6 -3
- package/dist/shared-tree-core/transaction.js.map +1 -1
- package/dist/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
- package/dist/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
- package/dist/simple-tree/api/eraseSchemaDetails.js +15 -0
- package/dist/simple-tree/api/eraseSchemaDetails.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +2 -3
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +6 -7
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +20 -24
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +48 -49
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/core/treeNode.d.ts +5 -6
- package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNode.js +2 -4
- package/dist/simple-tree/core/treeNode.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +20 -7
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js +4 -7
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +3 -4
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +6 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +0 -1
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +53 -5
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +91 -10
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts +90 -0
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +26 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +2 -2
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +2 -2
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/text/codePointUtils.d.ts +2 -2
- package/dist/text/codePointUtils.js +2 -2
- package/dist/text/codePointUtils.js.map +1 -1
- package/dist/text/index.d.ts +3 -3
- package/dist/text/index.d.ts.map +1 -1
- package/dist/text/index.js +4 -4
- package/dist/text/index.js.map +1 -1
- package/dist/text/textDomain.d.ts +30 -18
- package/dist/text/textDomain.d.ts.map +1 -1
- package/dist/text/textDomain.js +44 -23
- package/dist/text/textDomain.js.map +1 -1
- package/dist/text/textDomainFormatted.d.ts +180 -82
- package/dist/text/textDomainFormatted.d.ts.map +1 -1
- package/dist/text/textDomainFormatted.js +164 -84
- package/dist/text/textDomainFormatted.js.map +1 -1
- package/dist/text/textDomainFormattedDefault.d.ts +48 -25
- package/dist/text/textDomainFormattedDefault.d.ts.map +1 -1
- package/dist/text/textDomainFormattedDefault.js +24 -19
- package/dist/text/textDomainFormattedDefault.js.map +1 -1
- package/dist/treeDataStore.d.ts +49 -0
- package/dist/treeDataStore.d.ts.map +1 -0
- package/dist/treeDataStore.js +57 -0
- package/dist/treeDataStore.js.map +1 -0
- package/dist/treeFactory.d.ts +8 -3
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +6 -1
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/compressedIds.d.ts +22 -2
- package/dist/util/compressedIds.d.ts.map +1 -1
- package/dist/util/compressedIds.js +22 -1
- package/dist/util/compressedIds.js.map +1 -1
- package/lib/core/change-family/changeFamily.d.ts +15 -4
- package/lib/core/change-family/changeFamily.d.ts.map +1 -1
- package/lib/core/change-family/changeFamily.js.map +1 -1
- package/lib/core/change-family/editBuilder.d.ts +2 -3
- package/lib/core/change-family/editBuilder.d.ts.map +1 -1
- package/lib/core/change-family/editBuilder.js +1 -2
- package/lib/core/change-family/editBuilder.js.map +1 -1
- package/lib/core/change-family/index.d.ts +1 -1
- package/lib/core/change-family/index.d.ts.map +1 -1
- package/lib/core/change-family/index.js.map +1 -1
- package/lib/core/index.d.ts +4 -3
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +2 -2
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +110 -0
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +46 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/tree/delta.d.ts +62 -16
- package/lib/core/tree/delta.d.ts.map +1 -1
- package/lib/core/tree/delta.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +7 -13
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +7 -21
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/index.d.ts +1 -0
- package/lib/core/tree/index.d.ts.map +1 -1
- package/lib/core/tree/index.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +2 -4
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js +2 -2
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/entrypoints/alpha.d.ts +1 -1
- package/lib/entrypoints/alpha.d.ts.map +1 -1
- package/lib/entrypoints/alpha.js +1 -1
- package/lib/entrypoints/alpha.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -6
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +16 -13
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +10 -2
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts +51 -0
- package/lib/feature-libraries/comparison-forest/comparisonForest.d.ts.map +1 -0
- package/lib/feature-libraries/comparison-forest/comparisonForest.js +94 -0
- package/lib/feature-libraries/comparison-forest/comparisonForest.js.map +1 -0
- package/lib/feature-libraries/comparison-forest/index.d.ts +6 -0
- package/lib/feature-libraries/comparison-forest/index.d.ts.map +1 -0
- package/lib/feature-libraries/comparison-forest/index.js +6 -0
- package/lib/feature-libraries/comparison-forest/index.js.map +1 -0
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +8 -6
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +6 -3
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts +2 -2
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.js +3 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +6 -3
- package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/detachedFieldIndexSummarizer.js +16 -4
- package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +2 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +2 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +4 -3
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.d.ts +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/mitigatedChangeFamily.js +12 -0
- package/lib/feature-libraries/mitigatedChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +9 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts +2 -2
- package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
- package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/invert.d.ts +15 -0
- package/lib/feature-libraries/modular-schema/invert.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/invert.js +155 -0
- package/lib/feature-libraries/modular-schema/invert.js.map +1 -0
- package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts +3 -4
- package/lib/feature-libraries/modular-schema/minimizeModularChange.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/minimizeModularChange.js +2 -2
- package/lib/feature-libraries/modular-schema/minimizeModularChange.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +9 -9
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +0 -2
- package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts +2 -2
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecV2.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +2 -2
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +8 -22
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +16 -367
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts +61 -0
- package/lib/feature-libraries/modular-schema/modularChangeUtils.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/modularChangeUtils.js +192 -0
- package/lib/feature-libraries/modular-schema/modularChangeUtils.js.map +1 -0
- package/lib/feature-libraries/modular-schema/prune.d.ts +10 -0
- package/lib/feature-libraries/modular-schema/prune.d.ts.map +1 -0
- package/lib/feature-libraries/modular-schema/prune.js +45 -0
- package/lib/feature-libraries/modular-schema/prune.js.map +1 -0
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts +2 -2
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts +2 -2
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +2 -2
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/treeTextCursor.d.ts +15 -0
- package/lib/feature-libraries/treeTextCursor.d.ts.map +1 -1
- package/lib/feature-libraries/treeTextCursor.js +62 -1
- package/lib/feature-libraries/treeTextCursor.js.map +1 -1
- package/lib/index.d.ts +6 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -3
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/serializedChange.d.ts +2 -2
- package/lib/shared-tree/serializedChange.d.ts.map +1 -1
- package/lib/shared-tree/serializedChange.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +11 -3
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +10 -8
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +2 -2
- package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +41 -4
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +55 -0
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/transactionMinimize.d.ts.map +1 -1
- package/lib/shared-tree/transactionMinimize.js +3 -3
- package/lib/shared-tree/transactionMinimize.js.map +1 -1
- package/lib/shared-tree/transactionPostProcessor.d.ts +2 -1
- package/lib/shared-tree/transactionPostProcessor.d.ts.map +1 -1
- package/lib/shared-tree/transactionPostProcessor.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +13 -7
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +61 -15
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +24 -9
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +7 -0
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts +4 -4
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +2 -0
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.d.ts +3 -14
- package/lib/shared-tree-core/editManagerCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecs.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts +11 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts +4 -11
- package/lib/shared-tree-core/editManagerCodecsV1toV4.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.js +1 -1
- package/lib/shared-tree-core/editManagerCodecsV1toV4.js.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts +4 -11
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js +1 -1
- package/lib/shared-tree-core/editManagerCodecsVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.d.ts +4 -4
- package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.js +0 -1
- package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts +2 -2
- package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageCodecs.d.ts +8 -1
- package/lib/shared-tree-core/messageCodecs.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecs.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +5 -5
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/shared-tree-core/transaction.d.ts +10 -10
- package/lib/shared-tree-core/transaction.d.ts.map +1 -1
- package/lib/shared-tree-core/transaction.js +6 -3
- package/lib/shared-tree-core/transaction.js.map +1 -1
- package/lib/simple-tree/api/eraseSchemaDetails.d.ts +15 -0
- package/lib/simple-tree/api/eraseSchemaDetails.d.ts.map +1 -1
- package/lib/simple-tree/api/eraseSchemaDetails.js +15 -0
- package/lib/simple-tree/api/eraseSchemaDetails.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +6 -7
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +20 -24
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +46 -46
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/core/treeNode.d.ts +5 -6
- package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNode.js +2 -4
- package/lib/simple-tree/core/treeNode.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +20 -7
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js +4 -7
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/index.d.ts +2 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +6 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +0 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +53 -5
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +93 -12
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts +90 -0
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +27 -2
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +3 -3
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +3 -3
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/text/codePointUtils.d.ts +2 -2
- package/lib/text/codePointUtils.js +2 -2
- package/lib/text/codePointUtils.js.map +1 -1
- package/lib/text/index.d.ts +3 -3
- package/lib/text/index.d.ts.map +1 -1
- package/lib/text/index.js +3 -3
- package/lib/text/index.js.map +1 -1
- package/lib/text/textDomain.d.ts +30 -18
- package/lib/text/textDomain.d.ts.map +1 -1
- package/lib/text/textDomain.js +41 -22
- package/lib/text/textDomain.js.map +1 -1
- package/lib/text/textDomainFormatted.d.ts +180 -82
- package/lib/text/textDomainFormatted.d.ts.map +1 -1
- package/lib/text/textDomainFormatted.js +165 -86
- package/lib/text/textDomainFormatted.js.map +1 -1
- package/lib/text/textDomainFormattedDefault.d.ts +48 -25
- package/lib/text/textDomainFormattedDefault.d.ts.map +1 -1
- package/lib/text/textDomainFormattedDefault.js +25 -20
- package/lib/text/textDomainFormattedDefault.js.map +1 -1
- package/lib/treeDataStore.d.ts +49 -0
- package/lib/treeDataStore.d.ts.map +1 -0
- package/lib/treeDataStore.js +52 -0
- package/lib/treeDataStore.js.map +1 -0
- package/lib/treeFactory.d.ts +8 -3
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +5 -0
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/compressedIds.d.ts +22 -2
- package/lib/util/compressedIds.d.ts.map +1 -1
- package/lib/util/compressedIds.js +22 -1
- package/lib/util/compressedIds.js.map +1 -1
- package/package.json +32 -24
- package/src/core/change-family/changeFamily.ts +32 -4
- package/src/core/change-family/editBuilder.ts +1 -2
- package/src/core/change-family/index.ts +2 -0
- package/src/core/index.ts +11 -6
- package/src/core/rebase/index.ts +2 -0
- package/src/core/rebase/types.ts +113 -0
- package/src/core/tree/delta.ts +62 -16
- package/src/core/tree/detachedFieldIndex.ts +7 -38
- package/src/core/tree/index.ts +2 -0
- package/src/core/tree/visitorUtils.ts +3 -17
- package/src/entrypoints/alpha.ts +9 -1
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +17 -14
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +11 -1
- package/src/feature-libraries/comparison-forest/comparisonForest.ts +140 -0
- package/src/feature-libraries/comparison-forest/index.ts +6 -0
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +20 -6
- package/src/feature-libraries/default-schema/index.ts +1 -0
- package/src/feature-libraries/default-schema/noChangeCodecs.ts +11 -3
- package/src/feature-libraries/detachedFieldIndexSummarizer.ts +33 -5
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -3
- package/src/feature-libraries/index.ts +5 -0
- package/src/feature-libraries/mitigatedChangeFamily.ts +21 -3
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +10 -1
- package/src/feature-libraries/modular-schema/genericFieldKindCodecs.ts +9 -4
- package/src/feature-libraries/modular-schema/index.ts +1 -0
- package/src/feature-libraries/modular-schema/invert.ts +338 -0
- package/src/feature-libraries/modular-schema/minimizeModularChange.ts +3 -5
- package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +16 -13
- package/src/feature-libraries/modular-schema/modularChangeCodecV2.ts +3 -1
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +2 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +45 -644
- package/src/feature-libraries/modular-schema/modularChangeUtils.ts +340 -0
- package/src/feature-libraries/modular-schema/prune.ts +69 -0
- package/src/feature-libraries/optional-field/optionalFieldCodecV2.ts +4 -2
- package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +6 -3
- package/src/feature-libraries/treeTextCursor.ts +66 -1
- package/src/index.ts +11 -4
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/serializedChange.ts +2 -2
- package/src/shared-tree/sharedTree.ts +40 -15
- package/src/shared-tree/sharedTreeChangeCodecs.ts +11 -3
- package/src/shared-tree/sharedTreeChangeFamily.ts +77 -2
- package/src/shared-tree/transactionMinimize.ts +7 -3
- package/src/shared-tree/transactionPostProcessor.ts +5 -1
- package/src/shared-tree/treeCheckout.ts +136 -30
- package/src/shared-tree-core/branch.ts +41 -12
- package/src/shared-tree-core/editManager.ts +46 -25
- package/src/shared-tree-core/editManagerCodecs.ts +9 -21
- package/src/shared-tree-core/editManagerCodecsCommons.ts +14 -2
- package/src/shared-tree-core/editManagerCodecsV1toV4.ts +18 -21
- package/src/shared-tree-core/editManagerCodecsVSharedBranches.ts +18 -20
- package/src/shared-tree-core/editManagerSummarizer.ts +9 -6
- package/src/shared-tree-core/messageCodecV1ToV4.ts +3 -3
- package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -2
- package/src/shared-tree-core/messageCodecs.ts +12 -2
- package/src/shared-tree-core/sharedTreeCore.ts +16 -7
- package/src/shared-tree-core/transaction.ts +47 -25
- package/src/simple-tree/api/eraseSchemaDetails.ts +15 -0
- package/src/simple-tree/api/index.ts +0 -1
- package/src/simple-tree/api/schemaStatics.ts +2 -2
- package/src/simple-tree/api/treeNodeApi.ts +64 -48
- package/src/simple-tree/core/treeNode.ts +13 -10
- package/src/simple-tree/core/withType.ts +20 -7
- package/src/simple-tree/index.ts +1 -2
- package/src/simple-tree/leafNodeSchema.ts +6 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +130 -16
- package/src/simple-tree/node-kinds/map/mapNode.ts +137 -5
- package/src/simple-tree/node-kinds/object/objectNode.ts +3 -3
- package/src/simple-tree/node-kinds/record/recordNode.ts +3 -3
- package/src/text/README.md +1 -1
- package/src/text/codePointUtils.ts +2 -2
- package/src/text/index.ts +3 -3
- package/src/text/textDomain.ts +50 -27
- package/src/text/textDomainFormatted.ts +384 -163
- package/src/text/textDomainFormattedDefault.ts +32 -32
- package/src/treeDataStore.ts +125 -0
- package/src/treeFactory.ts +11 -3
- package/src/util/compressedIds.ts +36 -3
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
TreeArrayNode,
|
|
23
23
|
TreeBeta,
|
|
24
24
|
createCustomizedFluidFrameworkScopedFactory,
|
|
25
|
+
eraseSchemaDetails,
|
|
25
26
|
isObjectNodeSchema,
|
|
26
27
|
eraseSchemaDetailsSubclassable,
|
|
27
28
|
} from "../simple-tree/index.js";
|
|
@@ -41,12 +42,19 @@ import type {
|
|
|
41
42
|
ErasedNode,
|
|
42
43
|
SchemaFactoryBeta,
|
|
43
44
|
} from "../simple-tree/index.js";
|
|
44
|
-
import {
|
|
45
|
+
import {
|
|
46
|
+
brand,
|
|
47
|
+
mapIterable,
|
|
48
|
+
oneFromIterable,
|
|
49
|
+
validateIndex,
|
|
50
|
+
validateIndexRange,
|
|
51
|
+
} from "../util/index.js";
|
|
45
52
|
|
|
46
53
|
import {
|
|
47
54
|
charactersFromString,
|
|
55
|
+
expensiveInternalValidationAssert,
|
|
48
56
|
processCharactersChangedDelta,
|
|
49
|
-
type
|
|
57
|
+
type PlainText,
|
|
50
58
|
} from "./textDomain.js";
|
|
51
59
|
|
|
52
60
|
/**
|
|
@@ -67,20 +75,78 @@ const sfStatic = new SchemaFactoryAlpha("com.fluidframework.text.formatted");
|
|
|
67
75
|
|
|
68
76
|
const formatKey: FieldKey = brand("format");
|
|
69
77
|
|
|
78
|
+
/**
|
|
79
|
+
* Atom in the string containing a single character.
|
|
80
|
+
* @privateRemarks
|
|
81
|
+
* This is outside the namespace so it can be exported for testing, but not package exported.
|
|
82
|
+
*/
|
|
83
|
+
export class StringTextAtomNode
|
|
84
|
+
extends sfStatic.object("StringTextAtom", {
|
|
85
|
+
/**
|
|
86
|
+
* The underlying text content of this atom.
|
|
87
|
+
* @remarks
|
|
88
|
+
* This is typically a single Unicode code point, and thus may contain multiple UTF-16 surrogate pair code units.
|
|
89
|
+
* Longer strings are still valid. For example, users might store whole grapheme clusters here, or even longer sections of text.
|
|
90
|
+
* Anything combined into a single atom will be treated atomically, and can not be partially selected or formatted.
|
|
91
|
+
* Using larger atoms and splitting them as needed is NOT a recommended approach, since this will result in poor merge behavior for concurrent edits.
|
|
92
|
+
* Instead, atoms should always be the smallest unit of text which will be independently selected, moved or formatted.
|
|
93
|
+
* @privateRemarks
|
|
94
|
+
* This content logically represents the whole atom's content, so using {@link EmptyKey} makes sense to help indicate that.
|
|
95
|
+
*/
|
|
96
|
+
content: SchemaFactory.required([SchemaFactory.string], { key: EmptyKey }),
|
|
97
|
+
})
|
|
98
|
+
implements FormattedText.TextAtom
|
|
99
|
+
{
|
|
100
|
+
public static fromCharacter(value: string): StringTextAtomNode {
|
|
101
|
+
const character = oneFromIterable(charactersFromString(value));
|
|
102
|
+
if (character === undefined) {
|
|
103
|
+
throw new UsageError("value must contain exactly one Unicode character.");
|
|
104
|
+
}
|
|
105
|
+
return new StringTextAtomNode({ content: character });
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public static fromString(value: string): StringTextAtomNode[] {
|
|
109
|
+
return Array.from(
|
|
110
|
+
charactersFromString(value),
|
|
111
|
+
(character) => new StringTextAtomNode({ content: character }),
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
70
116
|
/**
|
|
71
117
|
* A collection of text related types, schema and utilities for working with text beyond the basic {@link SchemaStatics.string}.
|
|
118
|
+
*
|
|
72
119
|
* @remarks
|
|
73
120
|
* This is generic over formatting an embedded object/atom types.
|
|
74
|
-
*
|
|
121
|
+
*
|
|
75
122
|
* @privateRemarks
|
|
123
|
+
* See {@link FormattedTextDefault} for an example parameterization.
|
|
124
|
+
*
|
|
76
125
|
* TODO:
|
|
77
126
|
* - Add more comprehensive tests for generic parameterizations other than default.
|
|
78
127
|
* - Sort out API around overwriting subsets of formatting information.
|
|
79
|
-
* @
|
|
128
|
+
* @alpha
|
|
80
129
|
*/
|
|
81
|
-
export namespace
|
|
130
|
+
export namespace FormattedText {
|
|
82
131
|
/**
|
|
83
|
-
*
|
|
132
|
+
* Creates a schema for a formatted text node, parameterized by the formatting and the embedded object (atom) types.
|
|
133
|
+
*
|
|
134
|
+
* @param inputSchemaFactory - The {@link SchemaFactoryBeta} used to scope the generated schema.
|
|
135
|
+
* The generated types are scoped under `com.fluidframework.text.formatted<TUserScope>`, where `TUserScope` is the scope of this factory.
|
|
136
|
+
* This scope is used to distinguish different usages of `createSchema` from each-other, and must be kept the same between versions for nodes to remain compatible.
|
|
137
|
+
* It must be different to distinguish different formatted text schema within the same document.
|
|
138
|
+
* @param formatSchema - Schema describing the formatting associated with each atom of text.
|
|
139
|
+
* Use an {@link NodeKind.Object|Object node} to support {@link FormattedText.Members.formatRange}.
|
|
140
|
+
* @param extraAtoms - Additional atom schema to allow as text content beyond the built-in {@link FormattedText.(StringTextAtom:variable)}.
|
|
141
|
+
* Use this to embed richer content (for example line breaks or inline objects) alongside plain characters.
|
|
142
|
+
* @param defaultFormatInsertable - The formatting applied to text inserted via non-formatted APIs
|
|
143
|
+
* (for example {@link FormattedText.Members.insertAt} and {@link FormattedText.Statics.fromString} when no explicit format is provided).
|
|
144
|
+
* @returns The schema for the formatted text node, whose nodes implement {@link FormattedText.Members} and whose statics implement {@link FormattedText.Statics}.
|
|
145
|
+
*
|
|
146
|
+
* @privateRemarks
|
|
147
|
+
* See {@link FormattedTextDefault} for an example parameterization of this factory.
|
|
148
|
+
*
|
|
149
|
+
* TODO: The choice to always include the built-in {@link FormattedText.(StringTextAtom:variable)} is a design decision that should be re-evaluated before stabilizing.
|
|
84
150
|
*/
|
|
85
151
|
export function createSchema<
|
|
86
152
|
const TUserScope extends string,
|
|
@@ -95,21 +161,60 @@ export namespace FormattedTextAsTree {
|
|
|
95
161
|
defaultFormatInsertable: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
96
162
|
): FormattedTextSchema<TUserScope, FormatSchema, ExtraAtomsSchema> {
|
|
97
163
|
const atoms = [StringTextAtom, ...extraAtoms] as const;
|
|
164
|
+
/**
|
|
165
|
+
* The type of a text atom node, which goes in a StringAtom.
|
|
166
|
+
*/
|
|
167
|
+
type TextAtomNode = TreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>;
|
|
98
168
|
|
|
99
169
|
const sf = createFormattedScopedFactory(inputSchemaFactory);
|
|
170
|
+
|
|
171
|
+
const defaultFormat: TreeFieldFromImplicitField<FormatSchema> =
|
|
172
|
+
TreeBeta.create<FormatSchema>(formatSchema, defaultFormatInsertable);
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Gets a format node, which must be cloned before being inserted.
|
|
176
|
+
*/
|
|
177
|
+
function getFormatNode(
|
|
178
|
+
format?: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
179
|
+
): TreeFieldFromImplicitField<FormatSchema> {
|
|
180
|
+
// Note we cannot use the `format ?? defaultFormat` syntax as format is allowed to be `null`.
|
|
181
|
+
return format === undefined
|
|
182
|
+
? defaultFormat
|
|
183
|
+
: TreeBeta.create<FormatSchema>(formatSchema, format);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function cloneFormat(
|
|
187
|
+
format: TreeFieldFromImplicitField<FormatSchema>,
|
|
188
|
+
): TreeFieldFromImplicitField<FormatSchema> &
|
|
189
|
+
TreeNodeFromImplicitAllowedTypes<FormatSchema> {
|
|
190
|
+
const clone: TreeFieldFromImplicitField<FormatSchema> =
|
|
191
|
+
TreeBeta.clone<FormatSchema>(format);
|
|
192
|
+
// TypeScript fails to prove that cloning a node gives a node, and not possible undefined (like cloning a empty field could).
|
|
193
|
+
// This cast helps users of this function get the types they need.
|
|
194
|
+
return clone as typeof clone & TreeNodeFromImplicitAllowedTypes<FormatSchema>;
|
|
195
|
+
}
|
|
196
|
+
|
|
100
197
|
class TextNode
|
|
101
198
|
extends sf.object("Text", {
|
|
102
199
|
content: SchemaFactory.required([() => StringArray], { key: EmptyKey }),
|
|
103
200
|
})
|
|
104
|
-
implements
|
|
201
|
+
implements Members<FormatSchema, ExtraAtomsSchema>
|
|
105
202
|
{
|
|
106
|
-
public
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
203
|
+
public insertAt(
|
|
204
|
+
index: number,
|
|
205
|
+
additionalCharacters:
|
|
206
|
+
| string
|
|
207
|
+
| Iterable<TreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>>,
|
|
208
|
+
format?: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
209
|
+
): void {
|
|
210
|
+
const newAtoms: Iterable<TextAtomNode> =
|
|
211
|
+
typeof additionalCharacters === "string"
|
|
212
|
+
? stringTextAtomsFromString(additionalCharacters)
|
|
213
|
+
: additionalCharacters;
|
|
214
|
+
const formatNode = getFormatNode(format);
|
|
110
215
|
this.content.insertAt(
|
|
111
216
|
index,
|
|
112
|
-
TreeArrayNode.spread(
|
|
217
|
+
TreeArrayNode.spread(stringAtomsFromTextAtoms(newAtoms, formatNode)),
|
|
113
218
|
);
|
|
114
219
|
}
|
|
115
220
|
|
|
@@ -123,9 +228,9 @@ export namespace FormattedTextAsTree {
|
|
|
123
228
|
|
|
124
229
|
public charactersCopy(): string[] {
|
|
125
230
|
const result = this.content.charactersCopy();
|
|
126
|
-
|
|
231
|
+
expensiveInternalValidationAssert(
|
|
127
232
|
() =>
|
|
128
|
-
compareArrays(result, this
|
|
233
|
+
compareArrays(result, this.#charactersCopy_reference()) ||
|
|
129
234
|
"invalid charactersCopy optimizations",
|
|
130
235
|
);
|
|
131
236
|
return result;
|
|
@@ -137,8 +242,8 @@ export namespace FormattedTextAsTree {
|
|
|
137
242
|
|
|
138
243
|
public fullString(): string {
|
|
139
244
|
const result = this.content.fullString();
|
|
140
|
-
|
|
141
|
-
() => result === this
|
|
245
|
+
expensiveInternalValidationAssert(
|
|
246
|
+
() => result === this.#fullString_reference() || "invalid fullString optimizations",
|
|
142
247
|
);
|
|
143
248
|
return result;
|
|
144
249
|
}
|
|
@@ -146,31 +251,29 @@ export namespace FormattedTextAsTree {
|
|
|
146
251
|
/**
|
|
147
252
|
* A non-optimized reference implementation of fullString.
|
|
148
253
|
*/
|
|
149
|
-
|
|
254
|
+
#fullString_reference(): string {
|
|
150
255
|
return [...this.characters()].join("");
|
|
151
256
|
}
|
|
152
257
|
|
|
153
258
|
/**
|
|
154
259
|
* Unoptimized trivially correct implementation of charactersCopy.
|
|
155
260
|
*/
|
|
156
|
-
|
|
261
|
+
#charactersCopy_reference(): string[] {
|
|
157
262
|
return [...this.characters()];
|
|
158
263
|
}
|
|
159
264
|
|
|
160
265
|
public static fromString(
|
|
161
266
|
value: string,
|
|
162
|
-
format?:
|
|
267
|
+
format?: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
163
268
|
): TextNode {
|
|
269
|
+
const formatNode = getFormatNode(format);
|
|
164
270
|
// Use `this` rather than `TextNode` so the more derived schema class is constructed when using this as a static on a subclass.
|
|
165
271
|
return new this({
|
|
166
272
|
content: [
|
|
167
273
|
// Constructing an ArrayNode from an iterator is supported, so creating an array from the iterable of characters seems like it's not necessary here,
|
|
168
274
|
// but to reduce the risk of incorrect data interpretation, we actually ban this in the special case where the iterable is a string directly, which is the case here.
|
|
169
275
|
// Thus the array construction here is necessary to avoid a runtime error.
|
|
170
|
-
...textAtomsFromString(
|
|
171
|
-
value,
|
|
172
|
-
format ?? TreeBeta.create<FormatSchema>(formatSchema, defaultFormatInsertable),
|
|
173
|
-
),
|
|
276
|
+
...textAtomsFromString(value, formatNode),
|
|
174
277
|
],
|
|
175
278
|
});
|
|
176
279
|
}
|
|
@@ -190,21 +293,77 @@ export namespace FormattedTextAsTree {
|
|
|
190
293
|
end: number | undefined,
|
|
191
294
|
format: Partial<TreeNodeFromImplicitAllowedTypes<FormatSchema>>,
|
|
192
295
|
): void {
|
|
193
|
-
const
|
|
194
|
-
validateIndex(formatStart, this.content, "FormattedTextAsTree.formatRange", true);
|
|
195
|
-
|
|
196
|
-
const formatEnd = Math.min(this.content.length, end ?? this.content.length);
|
|
197
|
-
validateIndexRange(
|
|
198
|
-
formatStart,
|
|
199
|
-
formatEnd,
|
|
200
|
-
this.content,
|
|
201
|
-
"FormattedTextAsTree.formatRange",
|
|
202
|
-
);
|
|
203
|
-
|
|
204
|
-
const fieldFormats = Object.entries(format) as [
|
|
296
|
+
const fieldFormatsRaw = Object.entries(format) as [
|
|
205
297
|
keyof TreeNodeFromImplicitAllowedTypes<FormatSchema>,
|
|
206
298
|
unknown,
|
|
207
299
|
][];
|
|
300
|
+
const fieldFormats = fieldFormatsRaw.map(([key, value]) => {
|
|
301
|
+
// Object.entries should only return string keyed enumerable own properties.
|
|
302
|
+
// The TypeScript typing does not account for this, and thus this assertion is necessary for this code to compile.
|
|
303
|
+
assert(
|
|
304
|
+
typeof key === "string",
|
|
305
|
+
0xcc8 /* Object.entries returned a non-string key. */,
|
|
306
|
+
);
|
|
307
|
+
return [key, value] as const;
|
|
308
|
+
});
|
|
309
|
+
this.#editRange(start, end, "FormattedText.formatRange", (atom) => {
|
|
310
|
+
const formatNode: TreeNode | TreeValue = atom.format;
|
|
311
|
+
const atomFormatSchema = TreeStatic.schema(formatNode);
|
|
312
|
+
if (!isObjectNodeSchema(atomFormatSchema)) {
|
|
313
|
+
throw new UsageError(
|
|
314
|
+
"formatRange currently only supports object nodes for the format.",
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
for (const [key, value] of fieldFormats) {
|
|
318
|
+
const field = atomFormatSchema.fields.get(key);
|
|
319
|
+
if (field === undefined) {
|
|
320
|
+
throw new UsageError(`Unknown format key: ${key}`);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// Ensures that if the input is a node, it is cloned before being inserted into the tree.
|
|
324
|
+
// Note that since this uses field schema, `undefined` can pass through this if allowed by the schema.
|
|
325
|
+
const clonedValue = TreeBeta.clone(TreeBeta.create(field, value as never)) as
|
|
326
|
+
| TreeNode
|
|
327
|
+
| TreeValue;
|
|
328
|
+
|
|
329
|
+
(
|
|
330
|
+
formatNode as unknown as Record<
|
|
331
|
+
keyof TreeNodeFromImplicitAllowedTypes<FormatSchema>,
|
|
332
|
+
TreeNode | TreeValue
|
|
333
|
+
>
|
|
334
|
+
)[key] = clonedValue;
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
public reformat(
|
|
340
|
+
start: number | undefined,
|
|
341
|
+
end: number | undefined,
|
|
342
|
+
format?: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
343
|
+
): void {
|
|
344
|
+
const node = getFormatNode(format);
|
|
345
|
+
this.#editRange(start, end, "FormattedText.reformat", (atom) => {
|
|
346
|
+
atom.format = cloneFormat(node);
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Map an edit over a range of atoms, validating the range and running the edits in a transaction.
|
|
352
|
+
* @remarks
|
|
353
|
+
* This is not exposed in the API since this approach will have to be replaced when formatting is optimized,
|
|
354
|
+
* so we don't want users to directly depend on this un-optimizable layer.
|
|
355
|
+
*/
|
|
356
|
+
#editRange(
|
|
357
|
+
start: number | undefined,
|
|
358
|
+
end: number | undefined,
|
|
359
|
+
method: string,
|
|
360
|
+
edit: (atom: StringAtom) => void,
|
|
361
|
+
): void {
|
|
362
|
+
const formatStart = start ?? 0;
|
|
363
|
+
validateIndex(formatStart, this.content, method, true);
|
|
364
|
+
|
|
365
|
+
const formatEnd = Math.min(this.content.length, end ?? this.content.length);
|
|
366
|
+
validateIndexRange(formatStart, formatEnd, this.content, method);
|
|
208
367
|
|
|
209
368
|
TreeAlpha.context(this).runTransaction(() => {
|
|
210
369
|
for (let i = formatStart; i < formatEnd; i++) {
|
|
@@ -214,45 +373,13 @@ export namespace FormattedTextAsTree {
|
|
|
214
373
|
atom !== undefined,
|
|
215
374
|
0xd08 /* Index out of bounds while formatting text range. */,
|
|
216
375
|
);
|
|
217
|
-
|
|
218
|
-
const atomFormatSchema = TreeStatic.schema(formatNode);
|
|
219
|
-
if (!isObjectNodeSchema(atomFormatSchema)) {
|
|
220
|
-
// TODO: redesign this API to work with all allowed FormatSchema types.
|
|
221
|
-
throw new UsageError(
|
|
222
|
-
"formatRange currently only supports object nodes for the format.",
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
for (const [key, value] of fieldFormats) {
|
|
226
|
-
// Object.entries should only return string keyed enumerable own properties.
|
|
227
|
-
// The TypeScript typing does not account for this, and thus this assertion is necessary for this code to compile.
|
|
228
|
-
assert(
|
|
229
|
-
typeof key === "string",
|
|
230
|
-
0xcc8 /* Object.entries returned a non-string key. */,
|
|
231
|
-
);
|
|
232
|
-
|
|
233
|
-
const field = atomFormatSchema.fields.get(key);
|
|
234
|
-
if (field === undefined) {
|
|
235
|
-
throw new UsageError(`Unknown format key: ${key}`);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// Ensures that if the input is a node, it is cloned before being inserted into the tree.
|
|
239
|
-
const clonedValue = TreeBeta.clone(TreeBeta.create(field, value as never)) as
|
|
240
|
-
| TreeNode
|
|
241
|
-
| TreeValue;
|
|
242
|
-
|
|
243
|
-
(
|
|
244
|
-
formatNode as unknown as Record<
|
|
245
|
-
keyof TreeNodeFromImplicitAllowedTypes<FormatSchema>,
|
|
246
|
-
TreeNode | TreeValue
|
|
247
|
-
>
|
|
248
|
-
)[key] = clonedValue;
|
|
249
|
-
}
|
|
376
|
+
edit(atom);
|
|
250
377
|
}
|
|
251
378
|
});
|
|
252
379
|
}
|
|
253
380
|
|
|
254
381
|
/**
|
|
255
|
-
* Returns the {@link
|
|
382
|
+
* Returns the {@link FormattedText.TextAtom.content} at the given atom index, or `undefined` if out of bounds.
|
|
256
383
|
*/
|
|
257
384
|
private getAtomCharacterAt(index: number): string | undefined {
|
|
258
385
|
const atom = this.content[index];
|
|
@@ -261,7 +388,7 @@ export namespace FormattedTextAsTree {
|
|
|
261
388
|
}
|
|
262
389
|
|
|
263
390
|
public onCharactersChanged(
|
|
264
|
-
callback: (ops: readonly
|
|
391
|
+
callback: (ops: readonly PlainText.TextOp[] | undefined) => void,
|
|
265
392
|
): () => void {
|
|
266
393
|
return TreeAlpha.on(this.content, "nodeChanged", ({ delta }) =>
|
|
267
394
|
processCharactersChangedDelta(
|
|
@@ -273,7 +400,7 @@ export namespace FormattedTextAsTree {
|
|
|
273
400
|
}
|
|
274
401
|
|
|
275
402
|
public onContentChanged(
|
|
276
|
-
callback: (ops: readonly
|
|
403
|
+
callback: (ops: readonly PlainText.TextOp[] | undefined) => void,
|
|
277
404
|
): () => void {
|
|
278
405
|
return TreeAlpha.on(this.content, "treeChanged", ({ delta }) =>
|
|
279
406
|
processCharactersChangedDelta(
|
|
@@ -293,21 +420,36 @@ export namespace FormattedTextAsTree {
|
|
|
293
420
|
}
|
|
294
421
|
}
|
|
295
422
|
|
|
296
|
-
function
|
|
423
|
+
function stringTextAtomsFromString(
|
|
297
424
|
value: string,
|
|
425
|
+
): Iterable<StringTextAtom & TextAtomNode> {
|
|
426
|
+
// TypeScript can't prove in this Generic context that StringTextAtom is assignable to TextAtomNode, so we have to cast.
|
|
427
|
+
// Since TextAtomSchemas unconditionally includes StringTextAtom, this cast is safe.
|
|
428
|
+
return StringTextAtom.fromString(value) as (StringTextAtom & TextAtomNode)[];
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
function stringAtomsFromTextAtoms(
|
|
432
|
+
value: Iterable<TreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>>,
|
|
298
433
|
format: TreeFieldFromImplicitField<FormatSchema>,
|
|
299
434
|
): Iterable<StringAtom> {
|
|
300
|
-
const result = mapIterable(
|
|
301
|
-
const textAtom = new StringTextAtom({ content: char });
|
|
435
|
+
const result = mapIterable(value, (content) => {
|
|
302
436
|
const data = {
|
|
303
|
-
content
|
|
304
|
-
format:
|
|
437
|
+
content,
|
|
438
|
+
format: cloneFormat(format),
|
|
305
439
|
};
|
|
306
440
|
return new StringAtom(data as never); // Generic break type safety here. TODO: try and make safer.
|
|
307
441
|
});
|
|
308
442
|
return result;
|
|
309
443
|
}
|
|
310
444
|
|
|
445
|
+
function textAtomsFromString(
|
|
446
|
+
value: string,
|
|
447
|
+
format: TreeFieldFromImplicitField<FormatSchema>,
|
|
448
|
+
): Iterable<StringAtom> {
|
|
449
|
+
const textAtoms = stringTextAtomsFromString(value);
|
|
450
|
+
return stringAtomsFromTextAtoms(textAtoms, format);
|
|
451
|
+
}
|
|
452
|
+
|
|
311
453
|
class StringArray extends sf.array("StringArray", [() => StringAtom]) {
|
|
312
454
|
public withBorrowedSequenceCursor<T>(f: (cursor: ITreeCursorSynchronous) => T): T {
|
|
313
455
|
const innerNode = getInnerNode(this);
|
|
@@ -349,7 +491,7 @@ export namespace FormattedTextAsTree {
|
|
|
349
491
|
// TODO: we could optimize this for constant cases via an optional symbol on the atom schema holding the constant.
|
|
350
492
|
// A less general optimization could just include cases for build in types with constant values
|
|
351
493
|
// (like below commented code: currently this would cause a cyclical dependency but could be refactored).
|
|
352
|
-
// case
|
|
494
|
+
// case FormattedText.StringLineAtom.identifier: {
|
|
353
495
|
// content = "\n";
|
|
354
496
|
// break;
|
|
355
497
|
// }
|
|
@@ -386,12 +528,12 @@ export namespace FormattedTextAsTree {
|
|
|
386
528
|
}
|
|
387
529
|
|
|
388
530
|
public getString(startIndex: number, endIndex: number = this.length): string {
|
|
389
|
-
validateIndexRange(startIndex, endIndex, this, "
|
|
531
|
+
validateIndexRange(startIndex, endIndex, this, "FormattedText.getString");
|
|
390
532
|
return this.getCharactersSubarray(startIndex, endIndex).join("");
|
|
391
533
|
}
|
|
392
534
|
|
|
393
535
|
public getUniformRun(startIndex: number, endIndex: number = this.length): number {
|
|
394
|
-
validateIndexRange(startIndex, endIndex, this, "
|
|
536
|
+
validateIndexRange(startIndex, endIndex, this, "FormattedText.getUniformRun");
|
|
395
537
|
if (endIndex === startIndex) {
|
|
396
538
|
throw new UsageError("endIndex must be greater than startIndex for getUniformRun.");
|
|
397
539
|
}
|
|
@@ -464,15 +606,21 @@ export namespace FormattedTextAsTree {
|
|
|
464
606
|
/**
|
|
465
607
|
* Schema for a text node.
|
|
466
608
|
* @remarks
|
|
467
|
-
* See {@link
|
|
468
|
-
* See {@link
|
|
609
|
+
* See {@link FormattedText.Members} for the API.
|
|
610
|
+
* See {@link FormattedText.Statics} for static APIs on this Schema, including construction.
|
|
611
|
+
* @privateRemarks
|
|
612
|
+
* eraseSchemaDetailsSubclassable risks user's defining subclass members which collide with internals.
|
|
613
|
+
* Ideally we would generate private members for non-public properties, but TypeScript does not support this.
|
|
614
|
+
* It is up to the user of eraseSchemaDetailsSubclassable to manage this risk.
|
|
615
|
+
*
|
|
616
|
+
* TODO: there is at least one collision prone member to worry about here: `content`.
|
|
469
617
|
*/
|
|
470
618
|
const Tree = eraseSchemaDetailsSubclassable<
|
|
471
|
-
|
|
472
|
-
Statics<Tree>
|
|
619
|
+
Members<FormatSchema, ExtraAtomsSchema>,
|
|
620
|
+
Statics<Tree, FormatSchema>
|
|
473
621
|
>()(TextNode);
|
|
474
622
|
type Tree = ErasedNode<
|
|
475
|
-
|
|
623
|
+
Members<FormatSchema, ExtraAtomsSchema>,
|
|
476
624
|
FormattedTextSchemaIdentifier<TUserScope>
|
|
477
625
|
>;
|
|
478
626
|
|
|
@@ -481,17 +629,31 @@ export namespace FormattedTextAsTree {
|
|
|
481
629
|
|
|
482
630
|
/**
|
|
483
631
|
* Portion of a string with formatting.
|
|
632
|
+
* @privateRemarks
|
|
633
|
+
* This is implemented {@link StringAtom}, but we avoid leaking the fact this is a TreeNode in the API surface to
|
|
634
|
+
* preserve more future flexibility.
|
|
484
635
|
* @sealed
|
|
485
|
-
* @
|
|
636
|
+
* @alpha
|
|
486
637
|
*/
|
|
487
638
|
export interface FormattedAtom<TFormat, TText> {
|
|
639
|
+
/**
|
|
640
|
+
* Content which is formatted.
|
|
641
|
+
*/
|
|
488
642
|
readonly content: TText;
|
|
643
|
+
/**
|
|
644
|
+
* Formatting which is applied to the content.
|
|
645
|
+
* @remarks
|
|
646
|
+
* Can be reassigned or deeply mutated to edit the formatting of the content.
|
|
647
|
+
*/
|
|
489
648
|
format: TFormat;
|
|
490
649
|
}
|
|
491
650
|
|
|
492
651
|
/**
|
|
493
652
|
* Portion of a string.
|
|
494
|
-
* @
|
|
653
|
+
* @remarks
|
|
654
|
+
* Additional kinds of text atoms (also known as embedded objects) which can occur inside a string can implement this.
|
|
655
|
+
* The schema for them can then be provided to {@link FormattedText.createSchema}.
|
|
656
|
+
* @alpha
|
|
495
657
|
*/
|
|
496
658
|
export interface TextAtom {
|
|
497
659
|
/**
|
|
@@ -501,36 +663,61 @@ export namespace FormattedTextAsTree {
|
|
|
501
663
|
}
|
|
502
664
|
|
|
503
665
|
/**
|
|
504
|
-
*
|
|
505
|
-
* @
|
|
666
|
+
* Static factory functions for {@link FormattedText.(StringTextAtom:variable)}.
|
|
667
|
+
* @privateRemarks
|
|
668
|
+
* We type-erase `StringTextAtom` and only provide these static factories for construction
|
|
669
|
+
* to reduce the chance of someone accidentally creating a text atom for a string other than a single unicode code point.
|
|
670
|
+
* Other strings should work, but our intention is to provide no type-safe API which can produce them, so an application can take their lack of existence as an invariant if they want.
|
|
671
|
+
* It is still however possible to produce them, like export/import round trips with editing in the middle of the process, or collaboration with an equivalent schema which doesn't enforce this invariant.
|
|
672
|
+
* @sealed
|
|
673
|
+
* @alpha
|
|
506
674
|
*/
|
|
507
|
-
export
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
675
|
+
export interface StringTextAtomStatics {
|
|
676
|
+
/**
|
|
677
|
+
* Creates an atom from exactly one Unicode code point.
|
|
678
|
+
* @throws A {@link @fluidframework/telemetry-utils#UsageError} if `value` does not contain exactly one Unicode code character.
|
|
679
|
+
*/
|
|
680
|
+
fromCharacter(value: string): StringTextAtom;
|
|
681
|
+
|
|
682
|
+
/**
|
|
683
|
+
* Creates one atom for each Unicode code point in `value`.
|
|
684
|
+
*/
|
|
685
|
+
fromString(value: string): StringTextAtom[];
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* Schema for a {@link FormattedText.(StringTextAtom:variable)} node.
|
|
690
|
+
* @sealed
|
|
691
|
+
* @alpha
|
|
692
|
+
*/
|
|
693
|
+
export const StringTextAtom = eraseSchemaDetails<TextAtom, StringTextAtomStatics>()(
|
|
694
|
+
StringTextAtomNode,
|
|
695
|
+
);
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* Node for the {@link FormattedText.(StringTextAtom:variable)} schema.
|
|
699
|
+
* @sealed
|
|
700
|
+
* @alpha
|
|
701
|
+
*/
|
|
702
|
+
export type StringTextAtom = ErasedNode<
|
|
703
|
+
TextAtom,
|
|
704
|
+
"com.fluidframework.text.formatted.StringTextAtom"
|
|
705
|
+
>;
|
|
523
706
|
|
|
524
707
|
/**
|
|
525
|
-
* Statics for text nodes.
|
|
526
|
-
* @
|
|
708
|
+
* Statics for formatted text nodes.
|
|
709
|
+
* @sealed
|
|
710
|
+
* @alpha
|
|
527
711
|
*/
|
|
528
|
-
export interface Statics<TTree> {
|
|
712
|
+
export interface Statics<TTree, FormatSchema extends ImplicitAllowedTypes> {
|
|
529
713
|
/**
|
|
530
714
|
* Construct a node of `this` schema from a string, where each character (as defined by iterating over the string) becomes a single character in the text node.
|
|
531
715
|
* @remarks This combines pairs of utf-16 surrogate code units into single characters as appropriate.
|
|
532
716
|
*/
|
|
533
|
-
fromString(
|
|
717
|
+
fromString(
|
|
718
|
+
value: string,
|
|
719
|
+
format?: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
720
|
+
): TTree;
|
|
534
721
|
}
|
|
535
722
|
|
|
536
723
|
/**
|
|
@@ -546,37 +733,55 @@ export namespace FormattedTextAsTree {
|
|
|
546
733
|
* (which often operates on something in between unicode code points and grapheme clusters)
|
|
547
734
|
* and navigation/selection (which typically uses grapheme clusters).
|
|
548
735
|
*
|
|
549
|
-
* @see {@link
|
|
550
|
-
* @see {@link
|
|
551
|
-
* @
|
|
736
|
+
* @see {@link FormattedText.Statics.fromString} for construction.
|
|
737
|
+
* @see {@link FormattedText.createSchema} for creating schemas whose nodes implement this.
|
|
738
|
+
* @sealed
|
|
739
|
+
* @alpha
|
|
552
740
|
*/
|
|
553
|
-
export interface Members<
|
|
554
|
-
extends
|
|
741
|
+
export interface Members<
|
|
742
|
+
FormatSchema extends ImplicitAllowedTypes,
|
|
743
|
+
ExtraAtomsSchema extends readonly LazyItem<
|
|
744
|
+
TreeNodeSchema<string, NodeKind, TextAtom & TreeNode>
|
|
745
|
+
>[],
|
|
746
|
+
> extends PlainText.Members {
|
|
555
747
|
/**
|
|
556
|
-
*
|
|
748
|
+
* {@link PlainText.Members.insertAt} with optional formatting to apply to all additional characters,
|
|
749
|
+
* and allowing an array of atoms instead of a string.
|
|
750
|
+
* @param format - Optional formatting to apply to all additional characters. If not specified, the default formatting (from {@link FormattedText.createSchema}) will be used.
|
|
557
751
|
* @remarks
|
|
558
|
-
*
|
|
559
|
-
* @
|
|
560
|
-
* Opt this into observation tracking.
|
|
752
|
+
* Use {@link FormattedText.Members.insertWithFormattingAt} if you need to specify formatting for atom independently.
|
|
753
|
+
* @override
|
|
561
754
|
*/
|
|
562
|
-
|
|
755
|
+
insertAt(
|
|
756
|
+
index: number,
|
|
757
|
+
additionalCharacters:
|
|
758
|
+
| string
|
|
759
|
+
| Iterable<TreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>>,
|
|
760
|
+
format?: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
761
|
+
): void;
|
|
563
762
|
|
|
564
763
|
/**
|
|
565
764
|
* Gets an array type view of the characters currently in the text.
|
|
566
765
|
* @remarks
|
|
567
766
|
* This iterator matches the behavior of {@link (TreeArrayNode:interface)} with respect to edits during iteration.
|
|
767
|
+
*
|
|
768
|
+
* For more efficient access, use {@link FormattedText.Members.getUniformRun} and {@link FormattedText.Members.getString} to access ranges of characters
|
|
769
|
+
* to avoid having to inspect the formatting on every atom.
|
|
568
770
|
* @privateRemarks
|
|
569
771
|
* Currently this is implemented by a node and changes with the text over time.
|
|
570
772
|
* We might not want to leak a node like this in the API.
|
|
571
773
|
* Providing a way to index and iterate separately might be better.
|
|
572
774
|
*/
|
|
573
|
-
charactersWithFormatting(): readonly
|
|
775
|
+
charactersWithFormatting(): readonly FormattedAtom<
|
|
776
|
+
TreeNodeFromImplicitAllowedTypes<FormatSchema>,
|
|
777
|
+
TreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>
|
|
778
|
+
>[];
|
|
574
779
|
|
|
575
780
|
/**
|
|
576
781
|
* Insert a range of characters into the string based on character index.
|
|
577
782
|
* @remarks
|
|
578
783
|
* See {@link (TreeArrayNode:interface).insertAt} for more details on the behavior.
|
|
579
|
-
* See {@link
|
|
784
|
+
* See {@link FormattedText.Statics.fromString} for how the `additionalCharacters` string is broken into characters.
|
|
580
785
|
* @privateRemarks
|
|
581
786
|
* If we provide ways to customize character boundaries, that could be handled here by taking in an Iterable<string> instead of a string.
|
|
582
787
|
* Doing this currently would enable insertion of text with different character boundaries than the existing text,
|
|
@@ -587,7 +792,12 @@ export namespace FormattedTextAsTree {
|
|
|
587
792
|
*/
|
|
588
793
|
insertWithFormattingAt(
|
|
589
794
|
index: number,
|
|
590
|
-
additionalCharacters: Iterable<
|
|
795
|
+
additionalCharacters: Iterable<
|
|
796
|
+
FormattedAtomInsertable<
|
|
797
|
+
InsertableTreeNodeFromImplicitAllowedTypes<FormatSchema>,
|
|
798
|
+
InsertableTreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>
|
|
799
|
+
>
|
|
800
|
+
>,
|
|
591
801
|
): void;
|
|
592
802
|
|
|
593
803
|
/**
|
|
@@ -595,13 +805,44 @@ export namespace FormattedTextAsTree {
|
|
|
595
805
|
* @param startIndex - The starting index (inclusive) of the range to format.
|
|
596
806
|
* @param endIndex - The ending index (exclusive) of the range to format.
|
|
597
807
|
* @param format - The formatting to apply to the specified range.
|
|
808
|
+
* For each atom, every property of `format` will be cloned and assigned to the atom's format's corresponding subtree, overwriting any existing values for those properties.
|
|
809
|
+
* All enumerable own properties of `format` will be applied, including those with `undefined` values.
|
|
598
810
|
* @remarks
|
|
599
811
|
* The start and end behave the same as in {@link (TreeArrayNode:interface).removeRange}.
|
|
812
|
+
* This edits existing formatting subtrees on each atom, and only works when those atoms are object nodes.
|
|
813
|
+
*
|
|
814
|
+
* This is typically used to set some formatting property, like `bold` on a range of text without impacting other formatting properties.
|
|
815
|
+
* @privateRemarks
|
|
816
|
+
* This API is designed such that it can be optimized and improved in the future in a few different ways:
|
|
817
|
+
* 1. TODO: It can be optimized to use lower level APIs directly, bypassing the overhead of the public API surface.
|
|
818
|
+
* 2. TODO: A lower level editing API could be introduced and used to more efficiently express the edit (for example a bulk edit based on path, or a way to reuse the inserted content in multiple places instead of having to clone it before making the edit).
|
|
819
|
+
* 3. TODO: Optimize the encoding of such edits, either with a dedicated format for range edits like this and/or encoding optimizations that can compress such edits over ranges to O(1) space.
|
|
820
|
+
* 4. TODO: Preserve the range editing semantics through the whole stack to allow for better merge behavior, and make optimizations easier.
|
|
600
821
|
*/
|
|
601
822
|
formatRange(
|
|
602
823
|
startIndex: number | undefined,
|
|
603
824
|
endIndex: number | undefined,
|
|
604
|
-
format:
|
|
825
|
+
format: Partial<TreeNodeFromImplicitAllowedTypes<FormatSchema>>,
|
|
826
|
+
): void;
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* Replace formatting of a range of characters based on character index.
|
|
830
|
+
* @param startIndex - The starting index (inclusive) of the range to format.
|
|
831
|
+
* @param endIndex - The ending index (exclusive) of the range to format.
|
|
832
|
+
* @param format - The formatting to replace the formatting of the indicated range with.
|
|
833
|
+
* For each atom, `format` will be cloned and assigned to the atom's format, overwriting any existing formatting.
|
|
834
|
+
* If not specified the `defaultFormat` from {@link FormattedText.createSchema} will be used.
|
|
835
|
+
* @remarks
|
|
836
|
+
* The start and end behave the same as in {@link (TreeArrayNode:interface).removeRange}.
|
|
837
|
+
*
|
|
838
|
+
* This is typically used to normalize formatting, like resetting the formatting of a range to default settings.
|
|
839
|
+
* @privateRemarks
|
|
840
|
+
* See notes on {@link FormattedText.Members.formatRange} for future optimization opportunities.
|
|
841
|
+
*/
|
|
842
|
+
reformat(
|
|
843
|
+
startIndex?: number | undefined,
|
|
844
|
+
endIndex?: number | undefined,
|
|
845
|
+
format?: InsertableTreeFieldFromImplicitField<FormatSchema>,
|
|
605
846
|
): void;
|
|
606
847
|
|
|
607
848
|
/**
|
|
@@ -620,14 +861,14 @@ export namespace FormattedTextAsTree {
|
|
|
620
861
|
/**
|
|
621
862
|
* Subscribe to all content changes on this text node, including both shallow
|
|
622
863
|
* changes (inserts/removes) and deep changes (formatting updates on existing characters).
|
|
623
|
-
* @param callback - Called after each change with a sequence of {@link
|
|
864
|
+
* @param callback - Called after each change with a sequence of {@link PlainText.TextOp}s describing what changed,
|
|
624
865
|
* or `undefined` when a delta could not be computed (e.g. during a schema upgrade).
|
|
625
866
|
* @returns A cleanup function that unsubscribes the callback when called.
|
|
626
867
|
* @remarks
|
|
627
|
-
* Unlike {@link
|
|
868
|
+
* Unlike {@link PlainText.Members.onCharactersChanged} which only fires on
|
|
628
869
|
* shallow changes (inserts and removes), this method also fires on deep changes —
|
|
629
870
|
* formatting property updates on existing characters.
|
|
630
|
-
* The {@link
|
|
871
|
+
* The {@link PlainText.TextRetainOp.formattingChanged} flag on retain ops
|
|
631
872
|
* indicates which character ranges had formatting updates.
|
|
632
873
|
*
|
|
633
874
|
* All counts in the delivered ops are in Unicode code points, not UTF-16 code units.
|
|
@@ -635,13 +876,14 @@ export namespace FormattedTextAsTree {
|
|
|
635
876
|
* corresponds to two UTF-16 code units — convert before using the counts as string indices.
|
|
636
877
|
*/
|
|
637
878
|
onContentChanged(
|
|
638
|
-
callback: (ops: readonly
|
|
879
|
+
callback: (ops: readonly PlainText.TextOp[] | undefined) => void,
|
|
639
880
|
): () => void;
|
|
640
881
|
}
|
|
641
882
|
|
|
642
883
|
/**
|
|
643
|
-
* Insertable shape for a formatted text atom used by {@link
|
|
644
|
-
* @
|
|
884
|
+
* Insertable shape for a formatted text atom used by {@link FormattedText.Members.insertWithFormattingAt}.
|
|
885
|
+
* @input
|
|
886
|
+
* @alpha
|
|
645
887
|
*/
|
|
646
888
|
export interface FormattedAtomInsertable<TFormat, TContent> {
|
|
647
889
|
readonly content: TContent;
|
|
@@ -652,7 +894,7 @@ export namespace FormattedTextAsTree {
|
|
|
652
894
|
* Schema identifier for the a generic formatted text schema.
|
|
653
895
|
* @privateRemarks
|
|
654
896
|
* Eventually this should probably be given a better name and/or made a system type in a system namespace.
|
|
655
|
-
* @
|
|
897
|
+
* @alpha
|
|
656
898
|
*/
|
|
657
899
|
export type FormattedTextSchemaIdentifier<TUserScope extends string> = ScopedSchemaName<
|
|
658
900
|
`com.fluidframework.text.formatted<${TUserScope}>`,
|
|
@@ -660,45 +902,23 @@ export namespace FormattedTextAsTree {
|
|
|
660
902
|
>;
|
|
661
903
|
|
|
662
904
|
/**
|
|
663
|
-
* Helper for expressing the full set of
|
|
664
|
-
* @
|
|
665
|
-
*
|
|
666
|
-
*
|
|
905
|
+
* Helper for expressing the full set of text atoms for a given schema.
|
|
906
|
+
* @remarks
|
|
907
|
+
* This is just schema for the text atom {@link AllowedTypes},
|
|
908
|
+
* and does not include the actual formatting (which is higher up in the tree).
|
|
909
|
+
* @sealed
|
|
910
|
+
* @alpha
|
|
667
911
|
*/
|
|
668
|
-
export type
|
|
912
|
+
export type TextAtomSchemas<
|
|
669
913
|
ExtraAtomsSchema extends readonly LazyItem<
|
|
670
914
|
TreeNodeSchema<string, NodeKind, TextAtom & TreeNode>
|
|
671
915
|
>[],
|
|
672
916
|
> = readonly [typeof StringTextAtom, ...ExtraAtomsSchema];
|
|
673
917
|
|
|
674
|
-
/**
|
|
675
|
-
* Helper for configuring {@link FormattedTextAsTree.Members}.
|
|
676
|
-
* @privateRemarks
|
|
677
|
-
* Eventually this should probably be inlined into `FormattedTextAsTree.Members` or made a system type in a system namespace.
|
|
678
|
-
* The approach should be evaluated after settling on a redesign of the `formatRange` API as that will impact what the type parameters are.
|
|
679
|
-
* @internal
|
|
680
|
-
*/
|
|
681
|
-
export type FormattedTextMembers<
|
|
682
|
-
FormatSchema extends ImplicitAllowedTypes,
|
|
683
|
-
ExtraAtomsSchema extends readonly LazyItem<
|
|
684
|
-
TreeNodeSchema<string, NodeKind, TextAtom & TreeNode>
|
|
685
|
-
>[],
|
|
686
|
-
> = Members<
|
|
687
|
-
TreeFieldFromImplicitField<FormatSchema>,
|
|
688
|
-
Partial<TreeNodeFromImplicitAllowedTypes<FormatSchema>>,
|
|
689
|
-
FormattedAtom<
|
|
690
|
-
TreeNodeFromImplicitAllowedTypes<FormatSchema>,
|
|
691
|
-
TreeNodeFromImplicitAllowedTypes<FormattedTextAtoms<ExtraAtomsSchema>>
|
|
692
|
-
>,
|
|
693
|
-
FormattedAtomInsertable<
|
|
694
|
-
InsertableTreeNodeFromImplicitAllowedTypes<FormatSchema>,
|
|
695
|
-
InsertableTreeNodeFromImplicitAllowedTypes<FormattedTextAtoms<ExtraAtomsSchema>>
|
|
696
|
-
>
|
|
697
|
-
>;
|
|
698
|
-
|
|
699
918
|
/**
|
|
700
919
|
* A generic type for a formatted text schema.
|
|
701
|
-
* @
|
|
920
|
+
* @sealed
|
|
921
|
+
* @alpha
|
|
702
922
|
*/
|
|
703
923
|
export type FormattedTextSchema<
|
|
704
924
|
TUserScope extends string,
|
|
@@ -708,12 +928,13 @@ export namespace FormattedTextAsTree {
|
|
|
708
928
|
>[],
|
|
709
929
|
> = Statics<
|
|
710
930
|
ErasedNode<
|
|
711
|
-
|
|
931
|
+
Members<FormatSchema, ExtraAtomsSchema>,
|
|
712
932
|
FormattedTextSchemaIdentifier<TUserScope>
|
|
713
|
-
|
|
933
|
+
>,
|
|
934
|
+
FormatSchema
|
|
714
935
|
> &
|
|
715
936
|
ErasedSchemaSubclassable<
|
|
716
|
-
|
|
937
|
+
Members<FormatSchema, ExtraAtomsSchema>,
|
|
717
938
|
FormattedTextSchemaIdentifier<TUserScope>
|
|
718
939
|
>;
|
|
719
940
|
}
|