diff --git a/gatsby-config.js b/gatsby-config.js
index 917e6a79a..f174432f9 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -294,6 +294,10 @@ module.exports = {
title: "ThreadedTextContentModel",
path: "references/document-sandbox/document-apis/classes/ThreadedTextContentModel.md",
},
+ {
+ title: "ThreadedTextList",
+ path: "references/document-sandbox/document-apis/classes/ThreadedTextList.md",
+ },
{
title: "ThreadedTextNode",
path: "references/document-sandbox/document-apis/classes/ThreadedTextNode.md",
@@ -472,6 +476,14 @@ module.exports = {
title: "StyleRange",
path: "references/document-sandbox/document-apis/interfaces/StyleRange.md",
},
+ {
+ title: "TextContent",
+ path: "references/document-sandbox/document-apis/interfaces/TextContent.md",
+ },
+ {
+ title: "TextFrameAreaGeometry",
+ path: "references/document-sandbox/document-apis/interfaces/TextFrameAreaGeometry.md",
+ },
{
title: "TextRange",
path: "references/document-sandbox/document-apis/interfaces/TextRange.md",
diff --git a/src/pages/guides/getting_started/changelog.md b/src/pages/guides/getting_started/changelog.md
index 821a3e54a..5be4a5472 100644
--- a/src/pages/guides/getting_started/changelog.md
+++ b/src/pages/guides/getting_started/changelog.md
@@ -25,6 +25,23 @@ contributors:
# Changelog
+## 2026-01-26
+
+### Added
+
+We have added new APIs for threaded text handling across multiple frames, as well as new accessors for retrieving a flattened list of all descendant nodes and text content within the page and visual node containers.
+
+- **Experimental** [`Editor.createThreadedText()`](../../references/document-sandbox/document-apis/classes/Editor.md#createthreadedtext) method - Create a [`ThreadedTextNode`](../../references/document-sandbox/document-apis/classes/ThreadedTextNode.md) for threaded text handling across multiple frames.
+- **Experimental** [`ThreadedTextList`](../../references/document-sandbox/document-apis/classes/ThreadedTextList.md) class - Represents an ordered list of [`ThreadedTextNode`](../../references/document-sandbox/document-apis/classes/ThreadedTextNode.md) objects, creating a single, continuous text story across multiple frames.
+- **Experimental** [`allDescendants`](../../references/document-sandbox/document-apis/classes/PageNode.md#alldescendants) accessor on [`PageNode`](../../references/document-sandbox/document-apis/classes/PageNode.md) and [`VisualNode`](../../references/document-sandbox/document-apis/classes/VisualNode.md) - Returns a flattened, read-only list of all descendant nodes within the container. For text-based nodes, please use the new `allTextContent` accessor instead.
+- **Experimental** [`allTextContent`](../../references/document-sandbox/document-apis/classes/PageNode.md#alltextcontent) accessor on [`PageNode`](../../references/document-sandbox/document-apis/classes/PageNode.md) and [`VisualNode`](../../references/document-sandbox/document-apis/classes/VisualNode.md) - Returns a flattened, read-only list of [`TextContent`](../../references/document-sandbox/document-apis/interfaces/TextContent.md) instances from all text-based nodes within the container.
+- **Experimental** [`TextContent`](../../references/document-sandbox/document-apis/interfaces/TextContent.md) interface - Represents text content data extracted from text-based nodes.
+- **Experimental** [`TextFrameAreaGeometry`](../../references/document-sandbox/document-apis/interfaces/TextFrameAreaGeometry.md) interface - Defines the geometry of a text frame area.
+
+### Updated
+
+- **Experimental** [`ThreadedTextContentModel.frames`](../../references/document-sandbox/document-apis/classes/ThreadedTextContentModel.md#frames) property - Updated to properly support the new threaded text implementation with [`ThreadedTextList`](../../references/document-sandbox/document-apis/classes/ThreadedTextList.md).
+
## 2026-01-13
### Adobe Express Developer MCP Server Updates
diff --git a/src/pages/references/changelog.md b/src/pages/references/changelog.md
index 809f06fd4..0c14a5a4b 100644
--- a/src/pages/references/changelog.md
+++ b/src/pages/references/changelog.md
@@ -25,6 +25,23 @@ contributors:
# Changelog
+## 2026-01-26
+
+### Added
+
+We have added new APIs for threaded text handling across multiple frames, as well as new accessors for retrieving a flattened list of all descendant nodes and text content within the page and visual node containers.
+
+- **Experimental** [`Editor.createThreadedText()`](../references/document-sandbox/document-apis/classes/Editor.md#createthreadedtext) method - Create a [`ThreadedTextNode`](../references/document-sandbox/document-apis/classes/ThreadedTextNode.md) for threaded text handling across multiple frames.
+- **Experimental** [`ThreadedTextList`](../references/document-sandbox/document-apis/classes/ThreadedTextList.md) class - Represents an ordered list of [`ThreadedTextNode`](../references/document-sandbox/document-apis/classes/ThreadedTextNode.md) objects, creating a single, continuous text story across multiple frames.
+- **Experimental** [`allDescendants`](../references/document-sandbox/document-apis/classes/PageNode.md#alldescendants) accessor on [`PageNode`](../references/document-sandbox/document-apis/classes/PageNode.md) and [`VisualNode`](../references/document-sandbox/document-apis/classes/VisualNode.md) - Returns a flattened, read-only list of all descendant nodes within the container. For text-based nodes, please use the new `allTextContent` accessor instead.
+- **Experimental** [`allTextContent`](../references/document-sandbox/document-apis/classes/PageNode.md#alltextcontent) accessor on [`PageNode`](../references/document-sandbox/document-apis/classes/PageNode.md) and [`VisualNode`](../references/document-sandbox/document-apis/classes/VisualNode.md) - Returns a flattened, read-only list of [`TextContent`](../references/document-sandbox/document-apis/interfaces/TextContent.md) instances from all text-based nodes within the container.
+- **Experimental** [`TextContent`](../references/document-sandbox/document-apis/interfaces/TextContent.md) interface - Represents text content data extracted from text-based nodes.
+- **Experimental** [`TextFrameAreaGeometry`](../references/document-sandbox/document-apis/interfaces/TextFrameAreaGeometry.md) interface - Defines the geometry of a text frame area.
+
+### Updated
+
+- **Experimental** [`ThreadedTextContentModel.frames`](../references/document-sandbox/document-apis/classes/ThreadedTextContentModel.md#frames) property - Updated to properly support the new threaded text implementation with [`ThreadedTextList`](../references/document-sandbox/document-apis/classes/ThreadedTextList.md).
+
## 2026-01-13
### Adobe Express Developer MCP Server Updates
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ArtboardNode.md b/src/pages/references/document-sandbox/document-apis/classes/ArtboardNode.md
index c981e0dfe..fa5db05cc 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/ArtboardNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/ArtboardNode.md
@@ -47,6 +47,53 @@ The children of an Artboard are all subclasses of Node (not just the more minima
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of an Artboard are all subclasses of Node (not just the more minimal BaseNode or VisualNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### boundsLocal
• `get` **boundsLocal**(): `Readonly`<[`Rect`](../interfaces/Rect.md)\>
diff --git a/src/pages/references/document-sandbox/document-apis/classes/BitmapImage.md b/src/pages/references/document-sandbox/document-apis/classes/BitmapImage.md
index 184e7717e..be165355d 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/BitmapImage.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/BitmapImage.md
@@ -38,7 +38,7 @@ Original width of the bitmap in pixels.
**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
-Fetches the bitmap data as a Blob. This will wait for the bitmap to be available if necessary.
+Fetches the bitmap data as a Blob. Waits up to 1 minute for the bitmap to be available if necessary.
#### Returns
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ComplexShapeNode.md b/src/pages/references/document-sandbox/document-apis/classes/ComplexShapeNode.md
index e41570191..fc98513ee 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/ComplexShapeNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/ComplexShapeNode.md
@@ -40,6 +40,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/Editor.md b/src/pages/references/document-sandbox/document-apis/classes/Editor.md
index 266fb6eaa..4bbddc9c9 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/Editor.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/Editor.md
@@ -189,6 +189,44 @@ insertion parent. Recommend using `setPositionInParent` over `translation` to se
---
+### createThreadedText()
+
+• **createThreadedText**(`parentNode`, `textContent`, `geometry`?): [`ThreadedTextNode`](ThreadedTextNode.md)
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+#### Parameters
+
+• **parentNode**: [`ContainerNode`](../interfaces/ContainerNode.md)
+
+The parent node that will contain the threaded text node. This must be a container node (e.g., ArtboardNode, GroupNode) that is attached to the document.
+
+• **textContent**: `string`
+
+The initial text content for the threaded text node.
+
+• **geometry?**: [`TextFrameAreaGeometry`](../interfaces/TextFrameAreaGeometry.md)
+
+The geometry of the threaded text node.
+
+#### Returns
+
+[`ThreadedTextNode`](ThreadedTextNode.md)
+
+A new ThreadedTextNode that is part of a threaded text flow.
+
+#### Throws
+
+if parentNode is not provided or is not a valid container node.
+
+#### Throws
+
+if textContent is empty or invalid.
+
+---
+
### loadBitmapImage()
• **loadBitmapImage**(`bitmapData`): `Promise`<[`BitmapImage`](BitmapImage.md)\>
@@ -273,7 +311,7 @@ asynchronous operation such as [loadBitmapImage](Editor.md#loadbitmapimage), any
queueAsyncEdit(). This ensures the edit is properly tracked for saving and undo.
The delay before your edit function is executed is typically just a few milliseconds, so it will appear instantaneous
-to users. However, note that queueAsyncEdit() will return _before_ your function has been run.
+to users. However, note that queueAsyncEdit() will return *before* your function has been run.
If you need to trigger any code after the edit has been performed, either include this in the lambda you are enqueuing
or await the Promise returned by queueAsyncEdit().
diff --git a/src/pages/references/document-sandbox/document-apis/classes/EllipseNode.md b/src/pages/references/document-sandbox/document-apis/classes/EllipseNode.md
index 43b6f2441..653e1bf98 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/EllipseNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/EllipseNode.md
@@ -41,6 +41,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ExpressEditor.md b/src/pages/references/document-sandbox/document-apis/classes/ExpressEditor.md
index 1dfe8b32d..9e41ab0e3 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/ExpressEditor.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/ExpressEditor.md
@@ -221,6 +221,48 @@ insertion parent. Recommend using `setPositionInParent` over `translation` to se
---
+### createThreadedText()
+
+• **createThreadedText**(`parentNode`, `textContent`, `geometry`?): [`ThreadedTextNode`](ThreadedTextNode.md)
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+#### Parameters
+
+• **parentNode**: [`ContainerNode`](../interfaces/ContainerNode.md)
+
+The parent node that will contain the threaded text node. This must be a container node (e.g., ArtboardNode, GroupNode) that is attached to the document.
+
+• **textContent**: `string`
+
+The initial text content for the threaded text node.
+
+• **geometry?**: [`TextFrameAreaGeometry`](../interfaces/TextFrameAreaGeometry.md)
+
+The geometry of the threaded text node.
+
+#### Returns
+
+[`ThreadedTextNode`](ThreadedTextNode.md)
+
+A new ThreadedTextNode that is part of a threaded text flow.
+
+#### Inherited from
+
+[`Editor`](Editor.md).[`createThreadedText`](Editor.md#createthreadedtext)
+
+#### Throws
+
+if parentNode is not provided or is not a valid container node.
+
+#### Throws
+
+if textContent is empty or invalid.
+
+---
+
### loadBitmapImage()
• **loadBitmapImage**(`bitmapData`): `Promise`<[`BitmapImage`](BitmapImage.md)\>
@@ -317,7 +359,7 @@ asynchronous operation such as [loadBitmapImage](Editor.md#loadbitmapimage), any
queueAsyncEdit(). This ensures the edit is properly tracked for saving and undo.
The delay before your edit function is executed is typically just a few milliseconds, so it will appear instantaneous
-to users. However, note that queueAsyncEdit() will return _before_ your function has been run.
+to users. However, note that queueAsyncEdit() will return *before* your function has been run.
If you need to trigger any code after the edit has been performed, either include this in the lambda you are enqueuing
or await the Promise returned by queueAsyncEdit().
diff --git a/src/pages/references/document-sandbox/document-apis/classes/FillableNode.md b/src/pages/references/document-sandbox/document-apis/classes/FillableNode.md
index b80daa27b..f951f74c7 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/FillableNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/FillableNode.md
@@ -50,6 +50,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/GridCellNode.md b/src/pages/references/document-sandbox/document-apis/classes/GridCellNode.md
index 885f71e23..bf0d5e01b 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/GridCellNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/GridCellNode.md
@@ -45,6 +45,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/GridLayoutNode.md b/src/pages/references/document-sandbox/document-apis/classes/GridLayoutNode.md
index ffac4616b..d58b35660 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/GridLayoutNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/GridLayoutNode.md
@@ -42,6 +42,53 @@ corner, i.e. left to right and top to bottom. These children cannot be added or
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/GroupNode.md b/src/pages/references/document-sandbox/document-apis/classes/GroupNode.md
index b29bcc591..93414a0ae 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/GroupNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/GroupNode.md
@@ -46,6 +46,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ImageRectangleNode.md b/src/pages/references/document-sandbox/document-apis/classes/ImageRectangleNode.md
index 1d16c0019..56624f635 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/ImageRectangleNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/ImageRectangleNode.md
@@ -44,6 +44,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
@@ -386,7 +433,7 @@ Clone the entire parent MediaContainerNode instead.
**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
-Fetches the bitmap image resource used by this node. This will wait for the bitmap to be available if necessary.
+Fetches the bitmap image resource used by this node. Waits up to a minute for the bitmap to be available if necessary.
#### Returns
diff --git a/src/pages/references/document-sandbox/document-apis/classes/LineNode.md b/src/pages/references/document-sandbox/document-apis/classes/LineNode.md
index 8f77cb436..79a241c9d 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/LineNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/LineNode.md
@@ -65,6 +65,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/MediaContainerNode.md b/src/pages/references/document-sandbox/document-apis/classes/MediaContainerNode.md
index 1fda3eb61..ad76dec89 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/MediaContainerNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/MediaContainerNode.md
@@ -48,6 +48,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/MediaRectangleNode.md b/src/pages/references/document-sandbox/document-apis/classes/MediaRectangleNode.md
index 2faeb3b58..c6576b1a0 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/MediaRectangleNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/MediaRectangleNode.md
@@ -51,6 +51,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/Node.md b/src/pages/references/document-sandbox/document-apis/classes/Node.md
index 19a6b00da..29d8c6738 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/Node.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/Node.md
@@ -60,6 +60,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/PageNode.md b/src/pages/references/document-sandbox/document-apis/classes/PageNode.md
index 294f9ba8e..022454e6c 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/PageNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/PageNode.md
@@ -48,6 +48,51 @@ to guarantee all their children are full-fledged Node instances.
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`VisualNode`](VisualNode.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`VisualNode`](VisualNode.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### artboards
• `get` **artboards**(): [`ArtboardList`](ArtboardList.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/PathNode.md b/src/pages/references/document-sandbox/document-apis/classes/PathNode.md
index 396a6dd19..c0002f622 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/PathNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/PathNode.md
@@ -47,6 +47,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ReadOnlyItemList.md b/src/pages/references/document-sandbox/document-apis/classes/ReadOnlyItemList.md
index 874e7a11a..44e9f01e0 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/ReadOnlyItemList.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/ReadOnlyItemList.md
@@ -10,6 +10,7 @@ capabilities, and is most frequently encountered as [ArtboardNode.children](Artb
## Extended by
- [`RestrictedItemList`](RestrictedItemList.md)
+- [`ThreadedTextList`](ThreadedTextList.md)
## Type parameters
diff --git a/src/pages/references/document-sandbox/document-apis/classes/RectangleNode.md b/src/pages/references/document-sandbox/document-apis/classes/RectangleNode.md
index a0bdd83da..e05d14d7a 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/RectangleNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/RectangleNode.md
@@ -45,6 +45,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/SolidColorShapeNode.md b/src/pages/references/document-sandbox/document-apis/classes/SolidColorShapeNode.md
index f6414eb1d..82b2d351f 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/SolidColorShapeNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/SolidColorShapeNode.md
@@ -40,6 +40,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/StandaloneTextNode.md b/src/pages/references/document-sandbox/document-apis/classes/StandaloneTextNode.md
index 828423035..17a2ee2e9 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/StandaloneTextNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/StandaloneTextNode.md
@@ -43,6 +43,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
@@ -76,8 +123,6 @@ even for an orphan node with no parent.
`Readonly`<[`Rect`](../interfaces/Rect.md)\>
-
-
Note: The bounding box of an orphaned TextNode may become different after it is placed on a
page. It is recommended to use this property only when the node is placed on a page.
@@ -339,13 +384,9 @@ boundsInParent.
`Readonly`<[`Point`](../interfaces/Point.md)\>
-
-
Note: The top-left of the orphaned TextNode may be different from the top-left of the node placed on a
page. It is recommended to use this property only when the node is placed on a page.
-
-
Note: this value is usually not (0,0) due to the way text layout is defined.
---
@@ -439,8 +480,6 @@ relative to one another (the target node need not be an ancestor of this node, n
`Readonly`<[`Rect`](../interfaces/Rect.md)\>
-
-
Note: The bounding box of an orphaned TextNode may become different after it is placed on a
page. It is recommended to use this method only when the node is placed on a page.
diff --git a/src/pages/references/document-sandbox/document-apis/classes/StrokableNode.md b/src/pages/references/document-sandbox/document-apis/classes/StrokableNode.md
index 6f41a6942..39b58ef04 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/StrokableNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/StrokableNode.md
@@ -49,6 +49,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/StrokeShapeNode.md b/src/pages/references/document-sandbox/document-apis/classes/StrokeShapeNode.md
index 192078afd..4f60e3b34 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/StrokeShapeNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/StrokeShapeNode.md
@@ -40,6 +40,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/TextNode.md b/src/pages/references/document-sandbox/document-apis/classes/TextNode.md
index b25a1bf8e..bd70ed964 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/TextNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/TextNode.md
@@ -52,6 +52,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextContentModel.md b/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextContentModel.md
index c3ec14888..a4e737ab4 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextContentModel.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextContentModel.md
@@ -6,9 +6,6 @@ ThreadedTextContentModel represents a complete piece of text content that is spl
[ThreadedTextNode](ThreadedTextNode.md) frames for display. This subclass provides a mutable allFrames list
that supports adding, removing, and reordering text frames.
-The append and insert operations will automatically parent the new frame to the same parent as the
-reference frame and place it in the correct z-order.
-
## Extends
- [`TextNodeContentModel`](TextNodeContentModel.md)
@@ -62,6 +59,16 @@ readonly [`CharacterStylesRange`](../interfaces/CharacterStylesRange.md)[]
---
+### frames
+
+• `get` **frames**(): [`ThreadedTextList`](ThreadedTextList.md)
+
+#### Returns
+
+[`ThreadedTextList`](ThreadedTextList.md)
+
+---
+
### id
• `get` **id**(): `string`
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextList.md b/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextList.md
new file mode 100644
index 000000000..84c407e38
--- /dev/null
+++ b/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextList.md
@@ -0,0 +1,146 @@
+[@express-document-sdk](../overview.md) / ThreadedTextList
+
+# Class: ThreadedTextList
+
+ReadOnlyItemList represents an ordered list of API objects that are all children of the same parent node.
+
+Items in a bare ReadOnlyItemList cannot be added, removed, or reordered. The [ItemList](ItemList.md) subclass adds more
+capabilities, and is most frequently encountered as [ArtboardNode.children](ArtboardNode.md#children) or [GroupNode.children](GroupNode.md#children).
+
+## Extends
+
+- [`ReadOnlyItemList`](ReadOnlyItemList.md)<[`ThreadedTextNode`](ThreadedTextNode.md)\>
+
+## Accessors
+
+### first
+
+• `get` **first**(): `undefined` \| `T`
+
+First item in this list, or undefined if list is empty.
+
+#### Returns
+
+`undefined` \| `T`
+
+---
+
+### last
+
+• `get` **last**(): `undefined` \| `T`
+
+Last item in this list, or undefined if list is empty.
+
+#### Returns
+
+`undefined` \| `T`
+
+---
+
+### length
+
+• `get` **length**(): `number`
+
+Number of items in this list.
+
+#### Returns
+
+`number`
+
+## Methods
+
+### `[iterator]`()
+
+• **\[iterator\]**(): `Iterator`<[`ThreadedTextNode`](ThreadedTextNode.md), `any`, `any`\>
+
+Iterates over all the items in this list. Mutations that occur mid-iteration are not reflected by the iterator.
+
+#### Returns
+
+`Iterator`<[`ThreadedTextNode`](ThreadedTextNode.md), `any`, `any`\>
+
+#### Inherited from
+
+[`ReadOnlyItemList`](ReadOnlyItemList.md).[`[iterator]`](ReadOnlyItemList.md#iterator)
+
+---
+
+### addFrame()
+
+• **addFrame**(`geometry`?): [`ThreadedTextNode`](ThreadedTextNode.md)
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+#### Parameters
+
+• **geometry?**: [`TextFrameAreaGeometry`](../interfaces/TextFrameAreaGeometry.md)
+
+The geometry of the threaded text node in pixels (width and height).
+
+#### Returns
+
+[`ThreadedTextNode`](ThreadedTextNode.md)
+
+A new ThreadedTextNode that is part of a threaded text flow.
+
+---
+
+### indexOf()
+
+• **indexOf**(`item`): `number`
+
+Get index of item in list.
+
+#### Parameters
+
+• **item**: [`ThreadedTextNode`](ThreadedTextNode.md)
+
+#### Returns
+
+`number`
+
+index number, or -1 if item isn't in this list.
+
+#### Inherited from
+
+[`ReadOnlyItemList`](ReadOnlyItemList.md).[`indexOf`](ReadOnlyItemList.md#indexof)
+
+---
+
+### item()
+
+• **item**(`index`): `undefined` \| [`ThreadedTextNode`](ThreadedTextNode.md)
+
+Returns item at the given index, or undefined if index is out of range.
+
+#### Parameters
+
+• **index**: `number`
+
+Zero-based index
+
+#### Returns
+
+`undefined` \| [`ThreadedTextNode`](ThreadedTextNode.md)
+
+#### Inherited from
+
+[`ReadOnlyItemList`](ReadOnlyItemList.md).[`item`](ReadOnlyItemList.md#item)
+
+---
+
+### toArray()
+
+• **toArray**(): readonly [`ThreadedTextNode`](ThreadedTextNode.md)[]
+
+All items in the list, as a static array. Mutations that occur later are not reflected in an array returned earlier.
+
+#### Returns
+
+readonly [`ThreadedTextNode`](ThreadedTextNode.md)[]
+
+#### Inherited from
+
+[`ReadOnlyItemList`](ReadOnlyItemList.md).[`toArray`](ReadOnlyItemList.md#toarray)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextNode.md b/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextNode.md
index fb52fca54..d162b7f27 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/ThreadedTextNode.md
@@ -8,8 +8,6 @@ instead it refers to a [TextNodeContentModel](TextNodeContentModel.md), which ma
All linked ThreadedTextNodes that share a single TextContentModel must remain together within the same artboard.
-APIs are not yet available to create multi-frame text flows. To create *non*-threaded text, use [Editor.createText](Editor.md#createtext).
-
## Extends
- [`TextNode`](TextNode.md)
@@ -45,6 +43,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/UnknownMediaRectangleNode.md b/src/pages/references/document-sandbox/document-apis/classes/UnknownMediaRectangleNode.md
index 39cf0c49d..e012ae5ca 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/UnknownMediaRectangleNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/UnknownMediaRectangleNode.md
@@ -41,6 +41,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/UnknownNode.md b/src/pages/references/document-sandbox/document-apis/classes/UnknownNode.md
index 3f401d042..d89bcb507 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/UnknownNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/UnknownNode.md
@@ -39,6 +39,53 @@ The children of a Node are always other Node classes (never the more minimal Bas
---
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+The descendants of a Node are always other Node classes (never the more minimal BaseNode).
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`Node`](Node.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+---
+
### blendMode
• `get` **blendMode**(): [`BlendMode`](../enumerations/BlendMode.md)
diff --git a/src/pages/references/document-sandbox/document-apis/classes/VisualNode.md b/src/pages/references/document-sandbox/document-apis/classes/VisualNode.md
index ced0ed7d8..080a511f7 100644
--- a/src/pages/references/document-sandbox/document-apis/classes/VisualNode.md
+++ b/src/pages/references/document-sandbox/document-apis/classes/VisualNode.md
@@ -39,19 +39,63 @@ Get [AddOnData](AddOnData.md) reference for managing the private metadata on thi
### allChildren
-• `get` **allChildren**(): `Readonly`<`Iterable`<[`BaseNode`](BaseNode.md), `any`, `any`\>\>
+• `get` **allChildren**(): `Readonly`<`Iterable`<[`VisualNode`](VisualNode.md), `any`, `any`\>\>
Returns a read-only list of all children of the node. General-purpose content containers such as ArtboardNode or
GroupNode also provide a mutable [ContainerNode.children](../interfaces/ContainerNode.md#children) list. Other nodes with a more specific structure can
hold children in various discrete "slots"; this `allChildren` list includes *all* such children and reflects their
overall display z-order.
-Although BaseNode's allChildren may yield other BaseNodes, the subclasses Node and ArtboardNode override allChildren
-to guarantee all their children are full-fledged Node instances.
+The children of a VisualNode are always other VisualNode classes (never the more minimal BaseNode).
#### Returns
-`Readonly`<`Iterable`<[`BaseNode`](BaseNode.md), `any`, `any`\>\>
+`Readonly`<`Iterable`<[`VisualNode`](VisualNode.md), `any`, `any`\>\>
+
+---
+
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`VisualNode`](VisualNode.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse *all* the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`VisualNode`](VisualNode.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](ThreadedTextNode.md) can share a single [TextContentModel](TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](../interfaces/TextContent.md), `any`, `any`\>\>
---
diff --git a/src/pages/references/document-sandbox/document-apis/interfaces/ContainerNode.md b/src/pages/references/document-sandbox/document-apis/interfaces/ContainerNode.md
index 9f129e240..c2cea32d9 100644
--- a/src/pages/references/document-sandbox/document-apis/interfaces/ContainerNode.md
+++ b/src/pages/references/document-sandbox/document-apis/interfaces/ContainerNode.md
@@ -29,19 +29,63 @@ Get [AddOnData](../classes/AddOnData.md) reference for managing the private meta
### allChildren
-• `get` **allChildren**(): `Readonly`<`Iterable`<[`BaseNode`](../classes/BaseNode.md), `any`, `any`\>\>
+• `get` **allChildren**(): `Readonly`<`Iterable`<[`VisualNode`](../classes/VisualNode.md), `any`, `any`\>\>
Returns a read-only list of all children of the node. General-purpose content containers such as ArtboardNode or
GroupNode also provide a mutable [ContainerNode.children](ContainerNode.md#children) list. Other nodes with a more specific structure can
hold children in various discrete "slots"; this `allChildren` list includes _all_ such children and reflects their
overall display z-order.
-Although BaseNode's allChildren may yield other BaseNodes, the subclasses Node and ArtboardNode override allChildren
-to guarantee all their children are full-fledged Node instances.
+The children of a VisualNode are always other VisualNode classes (never the more minimal BaseNode).
#### Returns
-`Readonly`<`Iterable`<[`BaseNode`](../classes/BaseNode.md), `any`, `any`\>\>
+`Readonly`<`Iterable`<[`VisualNode`](../classes/VisualNode.md), `any`, `any`\>\>
+
+---
+
+### allDescendants
+
+• `get` **allDescendants**(): `Readonly`<`Iterable`<[`VisualNode`](../classes/VisualNode.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently _**experimental only**_ and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to recursively traverse _all_ the exposed scenegraph content within the subtree of this node.
+Every container node and every leaf node will be visited via a pre-order tree traversal.
+Although once called the list of direct descendants is static, changes to further descendants may appear while
+iterating depending on when the operation occurs relative to the parent being yielded.
+Note that the root node (i.e. what this API was called on) is not visited.
+
+Warning: Processing text content via this API can be error-prone. Use [VisualNode.allTextContent](../classes/VisualNode.md#alltextcontent)
+
+#### Returns
+
+`Readonly`<`Iterable`<[`VisualNode`](../classes/VisualNode.md), `any`, `any`\>\>
+
+---
+
+### allTextContent
+
+• `get` **allTextContent**(): `Readonly`<`Iterable`<[`TextContent`](TextContent.md), `any`, `any`\>\>
+
+
+
+**IMPORTANT:** This is currently _**experimental only**_ and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+Helper to process all text content that is found as part of or within this node. This can be hard to do correctly
+via manual tree traversal since multiple [ThreadedTextNode](../classes/ThreadedTextNode.md) can share a single [TextContentModel](../classes/TextContentModel.md).
+
+This iterator returns a single result per TextContentModel that is at least partially displayed within this node,
+even if that content is split across several separate TextNode "frames". If this node is or contains some but not
+all of the display frames of an overall TextContentModel, that model is still included as a result.
+
+Note that visibleRanges and visibleText may not be sorted as TextNode "frames" can appear in any order in the scenegraph.
+
+#### Returns
+
+`Readonly`<`Iterable`<[`TextContent`](TextContent.md), `any`, `any`\>\>
---
diff --git a/src/pages/references/document-sandbox/document-apis/interfaces/TextContent.md b/src/pages/references/document-sandbox/document-apis/interfaces/TextContent.md
new file mode 100644
index 000000000..e6b055335
--- /dev/null
+++ b/src/pages/references/document-sandbox/document-apis/interfaces/TextContent.md
@@ -0,0 +1,37 @@
+[@express-document-sdk](../overview.md) / TextContent
+
+# Interface: TextContent
+
+
+
+**IMPORTANT:** This is currently ***experimental only*** and should not be used in any add-ons you will be distributing until it has been declared stable. To use it, you will first need to set the `experimentalApis` flag to `true` in the [`requirements`](../../../manifest/index.md#requirements) section of the `manifest.json`.
+
+The values yielded by [VisualNode.allTextContent](../classes/VisualNode.md#alltextcontent) and [PageNode.allTextContent](../classes/PageNode.md#alltextcontent).
+
+## Properties
+
+### textContentModel
+
+• **textContentModel**: [`TextContentModel`](../classes/TextContentModel.md)
+
+---
+
+### visibleRanges
+
+• **visibleRanges**: [`TextRange`](TextRange.md)[]
+
+An unsorted list of the subranges of the related text content model that are visible within the node.
+
+Since a single text content model can be displayed across multiple TextNode "frames", any of which could be
+outside of the node, the union of all the subranges in this value may still be a subset of the total range.
+
+---
+
+### visibleText
+
+• **visibleText**: `string`[]
+
+An unsorted list of the parts of the related text content model that are visible within the node.
+
+Since a single text content model can be displayed across multiple TextNode "frames", any of which could be
+outside of the node, the union of all the text in this value may still be a subset of the total text.
diff --git a/src/pages/references/document-sandbox/document-apis/interfaces/TextFrameAreaGeometry.md b/src/pages/references/document-sandbox/document-apis/interfaces/TextFrameAreaGeometry.md
new file mode 100644
index 000000000..c560a0f65
--- /dev/null
+++ b/src/pages/references/document-sandbox/document-apis/interfaces/TextFrameAreaGeometry.md
@@ -0,0 +1,17 @@
+[@express-document-sdk](../overview.md) / TextFrameAreaGeometry
+
+# Interface: TextFrameAreaGeometry
+
+Geometry for an area text frame in pixels.
+
+## Properties
+
+### height
+
+• **height**: `number`
+
+---
+
+### width
+
+• **width**: `number`
diff --git a/src/pages/references/document-sandbox/document-apis/overview.md b/src/pages/references/document-sandbox/document-apis/overview.md
index 2a44a6bdd..7597d89e8 100644
--- a/src/pages/references/document-sandbox/document-apis/overview.md
+++ b/src/pages/references/document-sandbox/document-apis/overview.md
@@ -65,6 +65,7 @@
- [TextNode](classes/TextNode.md)
- [TextNodeContentModel](classes/TextNodeContentModel.md)
- [ThreadedTextContentModel](classes/ThreadedTextContentModel.md)
+- [ThreadedTextList](classes/ThreadedTextList.md)
- [ThreadedTextNode](classes/ThreadedTextNode.md)
- [UnavailableFont](classes/UnavailableFont.md)
- [UnknownMediaRectangleNode](classes/UnknownMediaRectangleNode.md)
@@ -109,6 +110,8 @@
- [SolidColorStroke](interfaces/SolidColorStroke.md)
- [Stroke](interfaces/Stroke.md)
- [StyleRange](interfaces/StyleRange.md)
+- [TextContent](interfaces/TextContent.md)
+- [TextFrameAreaGeometry](interfaces/TextFrameAreaGeometry.md)
- [TextRange](interfaces/TextRange.md)
- [UnorderedListStyleInput](interfaces/UnorderedListStyleInput.md)
- [UnsupportedTextLayout](interfaces/UnsupportedTextLayout.md)