From 63081358015c36565c7ac7d6bdab4300ab8da7b2 Mon Sep 17 00:00:00 2001
From: Sam Ramon <15154970+samantharamon@users.noreply.github.com>
Date: Thu, 2 Jul 2026 10:16:45 -0700
Subject: [PATCH 1/5] [office-js][office-js-preview] (Outlook) Updates note
about HTML links in Body API docs (#75197)
---
types/office-js-preview/index.d.ts | 24 ++++++++++++------------
types/office-js/index.d.ts | 24 ++++++++++++------------
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/types/office-js-preview/index.d.ts b/types/office-js-preview/index.d.ts
index cc6c449bec7251..68c7801b9fde4b 100644
--- a/types/office-js-preview/index.d.ts
+++ b/types/office-js-preview/index.d.ts
@@ -13853,8 +13853,8 @@ declare namespace Office {
* make it render efficiently with its rendering engine. This means that the value returned from a subsequent call to the `Body.getAsync` method
* (introduced in Mailbox 1.3) won't necessarily contain the exact value that was passed in the previous `prependAsync` call.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Android and on iOS, this method isn't supported in the Message Compose mode. Only the Appointment Organizer mode is
* supported. For more information on supported APIs in Outlook mobile, see
@@ -13903,8 +13903,8 @@ declare namespace Office {
* make it render efficiently with its rendering engine. This means that the value returned from a subsequent call to the `Body.getAsync` method
* (introduced in Mailbox 1.3) won't necessarily contain the exact value that was passed in the previous `prependAsync` call.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Android and on iOS, this method isn't supported in the Message Compose mode. Only the Appointment Organizer mode is
* supported. For more information on supported APIs in Outlook mobile, see
@@ -14043,8 +14043,8 @@ declare namespace Office {
* be the exact same value that was previously passed in the `Body.setAsync` method. The client may modify the value passed to `setAsync` to make it
* render efficiently with its rendering engine.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Windows (classic) and on Mac, the add-in user isn't able to revert this action with the **Undo** command.
*
@@ -14113,8 +14113,8 @@ declare namespace Office {
* be the exact same value that was previously passed in the `Body.setAsync` method. The client may modify the value passed to `setAsync` to make it
* render efficiently with its rendering engine.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Windows (classic) and on Mac, the add-in user isn't able to revert this action with the **Undo** command.
*
@@ -14171,8 +14171,8 @@ declare namespace Office {
*
* **Important**:
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - SVG files aren't supported. Use JPG or PNG files instead.
*
@@ -14213,8 +14213,8 @@ declare namespace Office {
*
* **Important**:
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - SVG files aren't supported. Use JPG or PNG files instead.
*
diff --git a/types/office-js/index.d.ts b/types/office-js/index.d.ts
index f3d752f69b7f8f..8644125a15b276 100644
--- a/types/office-js/index.d.ts
+++ b/types/office-js/index.d.ts
@@ -13804,8 +13804,8 @@ declare namespace Office {
* make it render efficiently with its rendering engine. This means that the value returned from a subsequent call to the `Body.getAsync` method
* (introduced in Mailbox 1.3) won't necessarily contain the exact value that was passed in the previous `prependAsync` call.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Android and on iOS, this method isn't supported in the Message Compose mode. Only the Appointment Organizer mode is
* supported. For more information on supported APIs in Outlook mobile, see
@@ -13854,8 +13854,8 @@ declare namespace Office {
* make it render efficiently with its rendering engine. This means that the value returned from a subsequent call to the `Body.getAsync` method
* (introduced in Mailbox 1.3) won't necessarily contain the exact value that was passed in the previous `prependAsync` call.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Android and on iOS, this method isn't supported in the Message Compose mode. Only the Appointment Organizer mode is
* supported. For more information on supported APIs in Outlook mobile, see
@@ -13994,8 +13994,8 @@ declare namespace Office {
* be the exact same value that was previously passed in the `Body.setAsync` method. The client may modify the value passed to `setAsync` to make it
* render efficiently with its rendering engine.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Windows (classic) and on Mac, the add-in user isn't able to revert this action with the **Undo** command.
*
@@ -14064,8 +14064,8 @@ declare namespace Office {
* be the exact same value that was previously passed in the `Body.setAsync` method. The client may modify the value passed to `setAsync` to make it
* render efficiently with its rendering engine.
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - In Outlook on Windows (classic) and on Mac, the add-in user isn't able to revert this action with the **Undo** command.
*
@@ -14122,8 +14122,8 @@ declare namespace Office {
*
* **Important*:
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - SVG files aren't supported. Use JPG or PNG files instead.
*
@@ -14164,8 +14164,8 @@ declare namespace Office {
*
* **Important*:
*
- * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP"
- * (see the **Examples** section for a sample).
+ * - When including links in HTML markup, you can disable online link preview by setting the `id` attribute on the anchor (\) to "LPNoLP".
+ * For example, `'Click here!'`.
*
* - SVG files aren't supported. Use JPG or PNG files instead.
*
From 20a0dcf3593e3f9f1374cd8ee478d24356a2d110 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bartek=20W=C5=82odarczyk?=
<61749397+bewuwy@users.noreply.github.com>
Date: Thu, 2 Jul 2026 19:44:42 +0200
Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=A4=96=20Merge=20PR=20#75198=20[d3-ra?=
=?UTF-8?q?ndom]=20Fix=20randomBinomial=20definition=20by=20@bewuwy?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
types/d3-random/d3-random-tests.ts | 2 +-
types/d3-random/index.d.ts | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/types/d3-random/d3-random-tests.ts b/types/d3-random/d3-random-tests.ts
index 5b0586870833fe..c76d2a488b160f 100644
--- a/types/d3-random/d3-random-tests.ts
+++ b/types/d3-random/d3-random-tests.ts
@@ -141,7 +141,7 @@ let prngBinomial: d3Random.RandomBinomial;
prngBinomial = d3Random.randomBinomial;
prngBinomial = d3Random.randomBinomial.source(seedrandom("Schroedinger's flea."));
-randomNumberGenerator = prngBinomial(0.5);
+randomNumberGenerator = prngBinomial(10, 0.5);
// ------------------------------------------------------------
// randomGamma
diff --git a/types/d3-random/index.d.ts b/types/d3-random/index.d.ts
index 62eaf44b5c3daf..d91face6949f2a 100644
--- a/types/d3-random/index.d.ts
+++ b/types/d3-random/index.d.ts
@@ -191,12 +191,13 @@ export const randomGeometric: RandomGeometric;
*/
export interface RandomBinomial extends RandomNumberGenerationSource {
/**
- * Returns a function for generating numbers with a geometric distribution with success probability p.
- * The value p is in the range (0, 1].
+ * Returns a function for generating random numbers with a binomial distribution with n the number of trials and p the success probability.
+ * The value p is in the range [0, 1].
*
+ * @param n Number of trials
* @param p Success probability
*/
- (p: number): () => number;
+ (n: number, p: number): () => number;
}
export const randomBinomial: RandomBinomial;
From c01053428fc94fa1c97b6ff0d7150244af9e5715 Mon Sep 17 00:00:00 2001
From: Thomas Steiner
Date: Thu, 2 Jul 2026 21:57:27 +0200
Subject: [PATCH 3/5] =?UTF-8?q?=F0=9F=A4=96=20Merge=20PR=20#75200=20Add=20?=
=?UTF-8?q?types=20for=20wicg-cross-origin-storage=20by=20@tomayac?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
types/wicg-cross-origin-storage/.npmignore | 5 +++
types/wicg-cross-origin-storage/index.d.ts | 38 +++++++++++++++++++
types/wicg-cross-origin-storage/package.json | 23 +++++++++++
types/wicg-cross-origin-storage/tsconfig.json | 20 ++++++++++
.../wicg-cross-origin-storage-tests.ts | 30 +++++++++++++++
5 files changed, 116 insertions(+)
create mode 100644 types/wicg-cross-origin-storage/.npmignore
create mode 100644 types/wicg-cross-origin-storage/index.d.ts
create mode 100644 types/wicg-cross-origin-storage/package.json
create mode 100644 types/wicg-cross-origin-storage/tsconfig.json
create mode 100644 types/wicg-cross-origin-storage/wicg-cross-origin-storage-tests.ts
diff --git a/types/wicg-cross-origin-storage/.npmignore b/types/wicg-cross-origin-storage/.npmignore
new file mode 100644
index 00000000000000..93e307400a5456
--- /dev/null
+++ b/types/wicg-cross-origin-storage/.npmignore
@@ -0,0 +1,5 @@
+*
+!**/*.d.ts
+!**/*.d.cts
+!**/*.d.mts
+!**/*.d.*.ts
diff --git a/types/wicg-cross-origin-storage/index.d.ts b/types/wicg-cross-origin-storage/index.d.ts
new file mode 100644
index 00000000000000..7a559b09749218
--- /dev/null
+++ b/types/wicg-cross-origin-storage/index.d.ts
@@ -0,0 +1,38 @@
+export {};
+
+declare global {
+ /**
+ * Represents the dictionary for hash algorithm and value.
+ */
+ interface CrossOriginStorageRequestFileHandleHash {
+ value: string;
+ algorithm: string;
+ }
+
+ /**
+ * Represents the options for requesting a file handle.
+ */
+ interface CrossOriginStorageRequestFileHandleOptions {
+ create?: boolean | undefined;
+ origins?: string[] | string | undefined;
+ }
+
+ /**
+ * The CrossOriginStorageManager interface.
+ * [SecureContext]
+ */
+ interface CrossOriginStorageManager {
+ requestFileHandle(
+ hash: CrossOriginStorageRequestFileHandleHash,
+ options?: CrossOriginStorageRequestFileHandleOptions,
+ ): Promise;
+ }
+
+ interface Navigator {
+ readonly crossOriginStorage: CrossOriginStorageManager;
+ }
+
+ interface WorkerNavigator {
+ readonly crossOriginStorage: CrossOriginStorageManager;
+ }
+}
diff --git a/types/wicg-cross-origin-storage/package.json b/types/wicg-cross-origin-storage/package.json
new file mode 100644
index 00000000000000..b2ab49a53a60bd
--- /dev/null
+++ b/types/wicg-cross-origin-storage/package.json
@@ -0,0 +1,23 @@
+{
+ "private": true,
+ "name": "@types/wicg-cross-origin-storage",
+ "version": "2026.7.9999",
+ "nonNpm": true,
+ "nonNpmDescription": "Cross-Origin Storage",
+ "projects": [
+ "https://github.com/WICG/cross-origin-storage"
+ ],
+ "devDependencies": {
+ "@types/wicg-cross-origin-storage": "workspace:."
+ },
+ "owners": [
+ {
+ "name": "Thomas Steiner",
+ "githubUsername": "tomayac"
+ },
+ {
+ "name": "Christian Liebel",
+ "githubUsername": "christianliebel"
+ }
+ ]
+}
diff --git a/types/wicg-cross-origin-storage/tsconfig.json b/types/wicg-cross-origin-storage/tsconfig.json
new file mode 100644
index 00000000000000..8a13197599ca4b
--- /dev/null
+++ b/types/wicg-cross-origin-storage/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "module": "node16",
+ "lib": [
+ "es6",
+ "dom"
+ ],
+ "noImplicitAny": true,
+ "noImplicitThis": true,
+ "strictNullChecks": true,
+ "strictFunctionTypes": true,
+ "types": [],
+ "noEmit": true,
+ "forceConsistentCasingInFileNames": true
+ },
+ "files": [
+ "index.d.ts",
+ "wicg-cross-origin-storage-tests.ts"
+ ]
+}
diff --git a/types/wicg-cross-origin-storage/wicg-cross-origin-storage-tests.ts b/types/wicg-cross-origin-storage/wicg-cross-origin-storage-tests.ts
new file mode 100644
index 00000000000000..6ac7f53ab409e2
--- /dev/null
+++ b/types/wicg-cross-origin-storage/wicg-cross-origin-storage-tests.ts
@@ -0,0 +1,30 @@
+const hash: CrossOriginStorageRequestFileHandleHash = {
+ algorithm: "SHA-256",
+ value: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+};
+
+async function testLookup() {
+ const handle: FileSystemFileHandle = await navigator.crossOriginStorage.requestFileHandle(hash);
+ const file: File = await handle.getFile();
+}
+
+async function testCreate() {
+ const handle: FileSystemFileHandle = await navigator.crossOriginStorage.requestFileHandle(hash, {
+ create: true,
+ });
+ const writable = await handle.createWritable();
+ await writable.write(new Blob(["export default 1;"], { type: "text/javascript" }));
+ await writable.close();
+}
+
+async function testCreateWithOrigins() {
+ await navigator.crossOriginStorage.requestFileHandle(hash, { create: true, origins: "*" });
+ await navigator.crossOriginStorage.requestFileHandle(hash, {
+ create: true,
+ origins: ["https://example.com", "https://example.org"],
+ });
+}
+
+async function testWorkerNavigator(workerNavigator: WorkerNavigator) {
+ const handle: FileSystemFileHandle = await workerNavigator.crossOriginStorage.requestFileHandle(hash);
+}
From 41a1672a00017b9811ec5404c1585e4742b2e984 Mon Sep 17 00:00:00 2001
From: Bernhard
Date: Thu, 2 Jul 2026 22:52:00 +0200
Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=A4=96=20Merge=20PR=20#75088=20[jquer?=
=?UTF-8?q?y.fancytree]=20Add=20dnd=20&=20glyph=20extensions;=20widen=20ic?=
=?UTF-8?q?on,=20replaceWith,=20node=20members=20by=20@daberni?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Claude Opus 4.8 (1M context)
Co-authored-by: OpenAI Codex
---
types/jquery.fancytree/index.d.ts | 135 ++++++++++++++++--
.../jquery.fancytree-tests.ts | 78 ++++++++++
2 files changed, 203 insertions(+), 10 deletions(-)
diff --git a/types/jquery.fancytree/index.d.ts b/types/jquery.fancytree/index.d.ts
index e0ea48732a2594..7239c715d5cc87 100644
--- a/types/jquery.fancytree/index.d.ts
+++ b/types/jquery.fancytree/index.d.ts
@@ -300,13 +300,19 @@ declare namespace Fancytree {
/** Folder nodes have different default icons and click behavior. Note: Also non-folders may have children. */
folder: boolean;
/** Icon of the tree node. */
- icon: string;
+ icon: boolean | GlyphIcon;
+ /** Description used as hover popup for the node's icon. @since 2.27 */
+ iconTooltip: string;
/** null or type of temporarily generated system node like 'loading', or 'error'. */
statusNodeType: string;
/** True if this node is loaded on demand, i.e. on first expansion. */
lazy: boolean;
+ /** Use isSelected(), setSelected() to access this property. */
+ selected: boolean;
/** Alternative description used as hover banner */
tooltip: string;
+ /** Node type, used with the `tree.types` map. @since 2.27 */
+ type: string;
/** Outer element of single nodes */
span: HTMLElement;
/** Outer element of single nodes for table extension */
@@ -606,14 +612,14 @@ declare namespace Fancytree {
/** Move this node to targetNode.
*
* @param mode 'child': append this node as last child of targetNode.
- * This is the default. To be compatble with the D'n'd
- * hitMode, we also accept 'over'.
+ * This is the default (used when `mode` is omitted). To be
+ * compatble with the D'n'd hitMode, we also accept 'over'.
* 'before': add this node as sibling before targetNode.
* 'after': add this node as sibling after targetNode.
*
* @param map optional callback(FancytreeNode) to allow modifcations
*/
- moveTo(targetNode: FancytreeNode, mode: string, map?: (node: FancytreeNode) => void): void;
+ moveTo(targetNode: FancytreeNode, mode?: string, map?: (node: FancytreeNode) => void): void;
/** Set focus relative to this node and optionally activate.
*
@@ -638,8 +644,8 @@ declare namespace Fancytree {
*/
removeClass(className: string): void;
- /** Replace this paging node with source result. */
- replaceWith(source: NodeData | NodeData[]): JQueryPromise;
+ /** (experimental) Replace this node with `source`. (Currently only available for paging nodes.) */
+ replaceWith(source: Exclude): JQueryPromise;
/** This method renders and updates all HTML markup that is required to display this node in its current state.
*
@@ -984,8 +990,8 @@ declare namespace Fancytree {
focusOnSelect?: boolean | undefined;
/** Add `id="..."` to node markup (default: true). */
generateIds?: boolean | undefined;
- /** Node icon url, if only filename, please use imagePath to set the path */
- icon?: boolean | string | undefined;
+ /** Node icon url, if only filename, please use imagePath to set the path. May also be a callback returning the icon. */
+ icon?: boolean | GlyphIcon | ((event: JQueryEventObject, data: EventData) => boolean | GlyphIcon) | undefined;
/** Prefix (default: "ft_") */
idPrefix?: string | undefined;
/** Path to a folder containing icons (default: null, using 'skin/' subdirectory). */
@@ -1044,8 +1050,11 @@ declare namespace Fancytree {
////////////////
// EXTENSIONS //
////////////////
+ /** @deprecated since v2.31, use `dnd5` instead. Legacy drag-and-drop, based on jQuery UI draggable/droppable. */
+ dnd?: Extensions.DragAndDrop | undefined;
dnd5?: Extensions.DragAndDrop5 | undefined;
filter?: Extensions.Filter | undefined;
+ glyph?: Extensions.Glyph | undefined;
table?: Extensions.Table | undefined;
/** Options for misc extensions - see docs for typings */
@@ -1083,8 +1092,11 @@ declare namespace Fancytree {
namespace Extensions {
interface List {
+ /** @deprecated since v2.31, use `dnd5` instead. */
+ dnd?: DragAndDrop | undefined;
dnd5?: DragAndDrop5 | undefined;
filter?: Filter | undefined;
+ glyph?: Glyph | undefined;
table?: Table | undefined;
[extension: string]: unknown;
}
@@ -1166,6 +1178,95 @@ declare namespace Fancytree {
*/
[key: string]: unknown;
}
+ /** Drop position relative to the target node, used by the `dnd` and `dnd5` extensions. */
+ type HitMode = "over" | "before" | "after";
+ /** Event data passed to the legacy `dnd` extension callbacks. */
+ interface DragAndDropEventData extends BaseEventData {
+ /** The other node, e.g. the drag source if this is a drop event. `null` in `dragStart`/`dragStop`. */
+ otherNode: FancytreeNode | null;
+ /** Drop position relative to the target node. */
+ hitMode?: HitMode | undefined;
+ /** The shared drop marker element used by the legacy dnd extension. */
+ dropMarker?: JQuery | undefined;
+ /** The `ui` object of the underlying jQuery UI draggable event. */
+ ui: JQueryUI.DraggableEventUIParams;
+ /** The jQuery UI draggable widget instance. */
+ draggable: JQueryUI.Draggable;
+ }
+ /** Data passed to the legacy `dnd` extension `initHelper` callback. */
+ interface InitHelperData {
+ node: FancytreeNode;
+ tree: Fancytree;
+ originalEvent: JQueryEventObject;
+ ui: { helper: JQuery };
+ }
+ /**
+ * Define dnd-extension (legacy, jQuery UI based) options.
+ * @deprecated since v2.31, use the `dnd5` (native HTML5) extension instead.
+ */
+ interface DragAndDrop {
+ /** Expand nodes after n milliseconds of hovering (default: 1000). */
+ autoExpandMS?: number | undefined;
+ /** Additional options passed to jQuery `draggable()`. */
+ draggable?: JQueryUI.DraggableOptions | undefined;
+ /** Additional options passed to jQuery `droppable()`. */
+ droppable?: JQueryUI.DroppableOptions | undefined;
+ /** Focus, although draggable cancels mousedown event (default: false). */
+ focusOnClick?: boolean | undefined;
+ /** Prevent dropping nodes 'before self', etc. (default: true). */
+ preventVoidMoves?: boolean | undefined;
+ /** Prevent dropping nodes on own descendants (default: true). */
+ preventRecursiveMoves?: boolean | undefined;
+ /** Set draggable.revert = true if drop was rejected (default: true). */
+ smartRevert?: boolean | undefined;
+ /** Absolute position offset for .fancytree-drop-marker. */
+ dropMarkerOffsetX?: number | undefined;
+ /** Additional offset for drop-marker with hitMode = "before"/"after". */
+ dropMarkerInsertOffsetX?: number | undefined;
+ /** Callback(sourceNode, data); return `true` to enable dragging this node. */
+ dragStart?: ((sourceNode: FancytreeNode, data: DragAndDropEventData) => boolean) | undefined;
+ /** Callback(sourceNode, data). */
+ dragStop?: ((sourceNode: FancytreeNode, data: DragAndDropEventData) => void) | undefined;
+ /** Callback(sourceNode, data). */
+ initHelper?: ((sourceNode: FancytreeNode, data: InitHelperData) => void) | undefined;
+ /** Callback(sourceNode, data). */
+ updateHelper?: ((sourceNode: FancytreeNode, data: DragAndDropEventData) => void) | undefined;
+ /**
+ * Callback(targetNode, data); return `false` to reject the drop, `true` to allow all
+ * positions, or a hit mode / array of hit modes to allow only those.
+ */
+ dragEnter?:
+ | ((targetNode: FancytreeNode, data: DragAndDropEventData) => boolean | HitMode | HitMode[])
+ | undefined;
+ /** Callback(targetNode, data), return false to reject the drop. */
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
+ dragOver?: ((targetNode: FancytreeNode, data: DragAndDropEventData) => boolean | void) | undefined;
+ /** Callback(targetNode, data), return false to prevent autoExpand. */
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
+ dragExpand?: ((targetNode: FancytreeNode, data: DragAndDropEventData) => boolean | void) | undefined;
+ /** Callback(targetNode, data). */
+ dragDrop?: ((targetNode: FancytreeNode, data: DragAndDropEventData) => void) | undefined;
+ /** Callback(targetNode, data). */
+ dragLeave?: ((targetNode: FancytreeNode, data: DragAndDropEventData) => void) | undefined;
+ /**
+ * Support misc options
+ */
+ [key: string]: unknown;
+ }
+ /**
+ * Define glyph-extension options. Maps logical icon names to CSS classes,
+ * e.g. for Font Awesome or Bootstrap icon sets.
+ */
+ interface Glyph {
+ /** Icon set preset, e.g. "awesome3", "awesome4", "bootstrap3", or "material". */
+ preset?: string | null | undefined;
+ /** Maps icon names (e.g. `expanderClosed`, `loading`, `checkbox`) to glyph definitions. */
+ map?: Record | undefined;
+ /**
+ * Support misc options
+ */
+ [key: string]: unknown;
+ }
/**
* Define filter-extension options
*/
@@ -1242,7 +1343,7 @@ declare namespace Fancytree {
interface NodeData {
/** node text (may contain HTML tags) */
title: string;
- icon?: boolean | string | undefined;
+ icon?: boolean | GlyphIcon | undefined;
/** unique key for this node (auto-generated if omitted) */
key?: string | undefined;
/** (reserved) */
@@ -1263,7 +1364,7 @@ declare namespace Fancytree {
/** class names added to the node markup (separate with space) */
extraClasses?: string | undefined;
/** all properties from will be copied to `node.data` */
- data?: Object | undefined;
+ data?: Record | undefined;
/** Will be added as title attribute of the node's icon span,thus enabling a tooltip. */
iconTooltip?: string | undefined;
@@ -1281,6 +1382,14 @@ declare namespace Fancytree {
unselectableStatus?: boolean | undefined;
}
+ /** A glyph definition: a CSS class string or a `{ text | html, addClass }` object. */
+ type GlyphIcon =
+ | string
+ | { text?: string | undefined; html?: string | undefined; addClass?: string | undefined };
+
+ /** A `glyph.map` entry: a glyph definition or a callback returning one. */
+ type GlyphMapEntry = GlyphIcon | ((node: FancytreeNode, span: HTMLElement, type: string) => GlyphIcon);
+
/** Node data, or a descriptor of how to load it: inline data, a URL string,
* `$.ajax` options (with a required `url`), or a promise resolving to node data. */
type SourceData =
@@ -1372,6 +1481,12 @@ declare namespace Fancytree {
/** Add Fancytree extension definition to the list of globally available extensions. */
registerExtension(definition: Object): void;
+ /**
+ * Set the expander, checkbox, or node icon HTML (used by extensions to render glyph icons).
+ * `icon` is either a CSS class string or an object describing the glyph.
+ */
+ setSpanIcon(span: Element | JQuery, baseClass: string, icon: GlyphIcon): void;
+
unescapeHtml(s: string): string;
warn(msg: string): void;
diff --git a/types/jquery.fancytree/jquery.fancytree-tests.ts b/types/jquery.fancytree/jquery.fancytree-tests.ts
index 9400b43d689bf0..717ec567d2e1b3 100644
--- a/types/jquery.fancytree/jquery.fancytree-tests.ts
+++ b/types/jquery.fancytree/jquery.fancytree-tests.ts
@@ -288,3 +288,81 @@ const sourceFromFunction: Fancytree.FancytreeOptions = {
const sourceFromFunctionPromise: Fancytree.FancytreeOptions = {
source: () => $.getJSON("/api/tree"),
};
+
+// `icon` option/NodeData also accepts a callback.
+const iconCallback: Fancytree.FancytreeOptions = {
+ icon: (event, data) => (data.node.isFolder() ? false : { text: "folder", addClass: "material-icons" }),
+};
+activeNode.addChildren({ title: "Static icon", icon: "my-icon" });
+activeNode.addChildren({ title: "Object icon", icon: { text: "description", addClass: "material-icons" } });
+
+// Node-level documented properties.
+const nodeSelected: boolean = activeNode.selected;
+const nodeType: string = activeNode.type;
+const nodeIconTooltip: string = activeNode.iconTooltip;
+const nodeIcon: boolean | Fancytree.GlyphIcon = activeNode.icon;
+console.log(nodeSelected, nodeType, nodeIconTooltip, nodeIcon);
+
+// replaceWith accepts inline data, `$.ajax` options, or a promise — but not a URL string.
+if (node) {
+ node.replaceWith({ url: "/api/page", cache: false });
+ node.replaceWith([{ title: "More" }]);
+ // @ts-expect-error -- plain URL strings are not supported
+ node.replaceWith("/api/page");
+}
+
+// FancytreeStatic.setSpanIcon
+$.ui.fancytree.setSpanIcon(activeNode.span, "fancytree-icon", "my-glyph");
+$.ui.fancytree.setSpanIcon($(activeNode.span), "fancytree-icon", { text: "folder", addClass: "material-icons" });
+
+// Legacy (jQuery UI based) `dnd` extension.
+const dndOptions: Fancytree.FancytreeOptions = {
+ extensions: ["dnd"],
+ dnd: {
+ autoExpandMS: 400,
+ preventVoidMoves: true,
+ preventRecursiveMoves: true,
+ focusOnClick: false,
+ dragStart: (sourceNode, data) => {
+ console.log(sourceNode.title, data.otherNode, data.hitMode, data.ui.helper, data.draggable);
+ return true;
+ },
+ initHelper: (sourceNode, data) => {
+ data.ui.helper.addClass("my-drag-helper");
+ },
+ dragEnter: (targetNode, data) => {
+ console.log(targetNode.key, data.otherNode?.key);
+ return ["over", "before"];
+ },
+ dragOver: (targetNode, data) => {
+ data.dropMarker?.toggleClass("is-active", true);
+ return data.otherNode !== null;
+ },
+ dragDrop: (targetNode, data) => {
+ if (data.hitMode === "over") {
+ data.otherNode?.moveTo(targetNode); // mode is optional; defaults to "child"
+ }
+ },
+ dragStop: (sourceNode, data) => {
+ console.log(sourceNode, data.tree);
+ },
+ },
+};
+console.log(iconCallback, dndOptions);
+
+// `glyph` extension options.
+const glyphOptions: Fancytree.FancytreeOptions = {
+ extensions: ["glyph"],
+ glyph: {
+ preset: "awesome4",
+ map: {
+ _addClass: "fa",
+ expanderClosed: "fa fa-caret-right",
+ expanderOpen: "fa fa-caret-down",
+ loading: { html: "" },
+ checkbox: (glyphNode, span, type) => (glyphNode.isSelected() ? { text: "check_box" } : "fa-square-o"),
+ },
+ },
+};
+const loadingGlyph: Fancytree.GlyphMapEntry = glyphOptions.glyph!.map!.loading;
+console.log(glyphOptions, loadingGlyph);
From a5f20e597c9a9d4ab2975dab57e8edc26ad020d8 Mon Sep 17 00:00:00 2001
From: David Chesnut
Date: Thu, 2 Jul 2026 14:05:52 -0700
Subject: [PATCH 5/5] [office-js][office-js-preview] (shared runtime) Remove
incorrect comment from showAsTaskPane (#75180)
Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com>
---
types/office-js-preview/index.d.ts | 4 +---
types/office-js/index.d.ts | 4 +---
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/types/office-js-preview/index.d.ts b/types/office-js-preview/index.d.ts
index 68c7801b9fde4b..e8909970408651 100644
--- a/types/office-js-preview/index.d.ts
+++ b/types/office-js-preview/index.d.ts
@@ -3329,10 +3329,8 @@ declare namespace Office {
/**
* Shows the task pane associated with the add-in.
* @returns A promise that is resolved when the UI is shown.
- *
+ *
* @remarks
- * This method applies only to centrally deployed or sideloaded add-ins. For add-ins published in the Microsoft Marketplace, the method is ignored and the task pane doesn't open.
- *
* **Requirement set**: {@link https://learn.microsoft.com/javascript/api/requirement-sets/common/shared-runtime-requirement-sets | SharedRuntime 1.1}
*/
showAsTaskpane(): Promise;
diff --git a/types/office-js/index.d.ts b/types/office-js/index.d.ts
index 8644125a15b276..a5f7d566eaee5e 100644
--- a/types/office-js/index.d.ts
+++ b/types/office-js/index.d.ts
@@ -3329,10 +3329,8 @@ declare namespace Office {
/**
* Shows the task pane associated with the add-in.
* @returns A promise that is resolved when the UI is shown.
- *
+ *
* @remarks
- * This method applies only to centrally deployed or sideloaded add-ins. For add-ins published in the Microsoft Marketplace, the method is ignored and the task pane doesn't open.
- *
* **Requirement set**: {@link https://learn.microsoft.com/javascript/api/requirement-sets/common/shared-runtime-requirement-sets | SharedRuntime 1.1}
*/
showAsTaskpane(): Promise;