@notionhq/custom-blocks 0.1.41 → 0.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -19
- package/dist/bridge/SandboxBridge.d.ts.map +1 -1
- package/dist/bridge/SandboxBridge.js +8 -5
- package/dist/bridge/hostState.d.ts.map +1 -1
- package/dist/bridge/hostState.js +8 -5
- package/dist/bridge/sandboxClient.d.ts +10 -1
- package/dist/bridge/sandboxClient.d.ts.map +1 -1
- package/dist/bridge/sandboxClient.js +20 -2
- package/dist/react/NotionCustomBlock.js +1 -1
- package/dist/types.d.ts +14 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/docs/block-location.md +2 -2
- package/docs/data-sources.md +15 -10
- package/docs/deployment.md +3 -1
- package/docs/pages.md +16 -6
- package/package.json +1 -1
- package/src/bridge/SandboxBridge.ts +8 -6
- package/src/bridge/hostState.ts +9 -6
- package/src/bridge/sandboxClient.ts +24 -2
- package/src/react/NotionCustomBlock.tsx +1 -1
- package/src/types.ts +19 -2
package/README.md
CHANGED
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
SDK for building Notion custom blocks.
|
|
7
7
|
|
|
8
|
-
A custom block runs
|
|
8
|
+
A custom block runs in a sandboxed `<iframe>` inside Notion. It has no direct
|
|
9
|
+
access to the internet. A local `postMessage` bridge connects the block to
|
|
10
|
+
Notion.
|
|
11
|
+
|
|
12
|
+
This package provides the sandbox side of the bridge. It exports a
|
|
13
|
+
framework-neutral TypeScript API and typed React hooks.
|
|
9
14
|
|
|
10
15
|
## Bundle tooling
|
|
11
16
|
|
|
@@ -14,17 +19,18 @@ Node build tools can import `build` and `upload` from
|
|
|
14
19
|
|
|
15
20
|
## Install
|
|
16
21
|
|
|
17
|
-
Create a worker project with `ntn workers new --template custom
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
`@notionhq/custom-blocks/react
|
|
22
|
+
Create a worker project with `ntn workers new --template custom`. Use the
|
|
23
|
+
dependencies and entrypoint that the Notion CLI generates.
|
|
24
|
+
|
|
25
|
+
React is optional. Blocks that import `@notionhq/custom-blocks/react` need
|
|
26
|
+
`react` and `react-dom`. This repository's fixtures use the workspace SDK.
|
|
21
27
|
|
|
22
|
-
For local preview, run `ntn customblocks dev` from the worker project
|
|
23
|
-
open `http://localhost:9873`. Install
|
|
28
|
+
For local preview, run `ntn workers customblocks dev` from the worker project.
|
|
29
|
+
Then open `http://localhost:9873`. Install
|
|
24
30
|
[`@notionhq/custom-blocks-dev-shell`](https://www.npmjs.com/package/@notionhq/custom-blocks-dev-shell)
|
|
25
31
|
as a devDependency to pin the shell and get its reference docs in
|
|
26
|
-
`node_modules
|
|
27
|
-
serving
|
|
32
|
+
`node_modules`. See [`docs/deployment.md`](./docs/deployment.md) for local
|
|
33
|
+
serving details.
|
|
28
34
|
|
|
29
35
|
## Quick start
|
|
30
36
|
|
|
@@ -43,7 +49,7 @@ worker.customBlock("hello", {
|
|
|
43
49
|
});
|
|
44
50
|
```
|
|
45
51
|
|
|
46
|
-
|
|
52
|
+
Wrap your React app in `<NotionCustomBlock>` at the block's entry point:
|
|
47
53
|
|
|
48
54
|
```tsx
|
|
49
55
|
// blocks/hello/src/index.tsx
|
|
@@ -52,10 +58,14 @@ import {
|
|
|
52
58
|
NotionCustomBlock,
|
|
53
59
|
NotionTokenScope,
|
|
54
60
|
} from "@notionhq/custom-blocks/react";
|
|
55
|
-
import
|
|
61
|
+
import { createRoot } from "react-dom/client";
|
|
56
62
|
import { App } from "./App";
|
|
63
|
+
import "./style.css";
|
|
57
64
|
|
|
58
|
-
|
|
65
|
+
const root = document.getElementById("root");
|
|
66
|
+
if (!root) throw new Error("The root element is missing.");
|
|
67
|
+
|
|
68
|
+
createRoot(root).render(
|
|
59
69
|
<NotionCustomBlock>
|
|
60
70
|
<NotionTokenScope>
|
|
61
71
|
<App />
|
|
@@ -76,6 +86,8 @@ export function App() {
|
|
|
76
86
|
}
|
|
77
87
|
```
|
|
78
88
|
|
|
89
|
+
Save these styles in `blocks/hello/src/style.css`:
|
|
90
|
+
|
|
79
91
|
```css
|
|
80
92
|
.app {
|
|
81
93
|
color: var(--content-primary);
|
|
@@ -86,26 +98,36 @@ export function App() {
|
|
|
86
98
|
}
|
|
87
99
|
```
|
|
88
100
|
|
|
89
|
-
`<NotionCustomBlock>`
|
|
101
|
+
`<NotionCustomBlock>` connects the SDK to the host and waits for host state before rendering its children.
|
|
102
|
+
It reports the initial content height so the host can size the iframe before displaying it.
|
|
103
|
+
It also reports later height changes automatically.
|
|
90
104
|
|
|
91
105
|
## Notion design tokens
|
|
92
106
|
|
|
93
|
-
The optional `@notionhq/custom-blocks/nds.css` stylesheet provides
|
|
107
|
+
The optional `@notionhq/custom-blocks/nds.css` stylesheet provides Notion CSS variables for matching Notion's UI.
|
|
108
|
+
These variables cover colors, spacing, typography, and borders.
|
|
109
|
+
Import the stylesheet once. Place components that use the variables inside `<NotionTokenScope>`, as shown above.
|
|
94
110
|
|
|
95
|
-
`<NotionTokenScope>` applies the display and contrast modes
|
|
111
|
+
`<NotionTokenScope>` applies the host's display and contrast modes to these variables.
|
|
112
|
+
Hosts that omit a contrast mode use standard contrast.
|
|
96
113
|
|
|
97
114
|
`NotionTokenScopeProps` has one required `children` prop.
|
|
98
115
|
|
|
99
|
-
The
|
|
116
|
+
The CSS variables apply within the scope, not globally.
|
|
117
|
+
Place portal containers inside `<NotionTokenScope>`, or wrap the portal content in another `<NotionTokenScope>`.
|
|
118
|
+
Framework-neutral renderers can read the current appearance with `customBlock.getTheme()` and `customBlock.getContrastMode()`.
|
|
119
|
+
See [Block location and appearance](./docs/block-location.md).
|
|
100
120
|
|
|
101
121
|
## Reference
|
|
102
122
|
|
|
103
|
-
|
|
123
|
+
Each page covers one API category. Import framework-neutral APIs from
|
|
124
|
+
`@notionhq/custom-blocks`. Import React hooks and components from
|
|
125
|
+
`@notionhq/custom-blocks/react`.
|
|
104
126
|
|
|
105
127
|
- [`docs/lifecycle.md`](./docs/lifecycle.md) — `<NotionCustomBlock>`, `useCustomBlockInit`, `initCustomBlock`, `NotInIframeError`, `useCustomBlockAutoResize`. The handshake, the React wrapper, sizing.
|
|
106
|
-
- [`docs/block-location.md`](./docs/block-location.md) — `useBlockId`, `useParent`, `usePage`, `useTheme`, and `
|
|
128
|
+
- [`docs/block-location.md`](./docs/block-location.md) — `useBlockId`, `useParent`, `usePage`, `useTheme`, `useContrastMode`, `NotionTokenScope`, and `NotionTokenScopeProps`. Where the block sits and how to read the host's appearance.
|
|
107
129
|
- [`docs/data-sources.md`](./docs/data-sources.md) — `useDataSource`, `useManifest`, `customBlock.getManifest`, the row, property, and date-value types, plus a worked example.
|
|
108
|
-
- [`docs/pages.md`](./docs/pages.md) — `pages.create / get / update /
|
|
130
|
+
- [`docs/pages.md`](./docs/pages.md) — `pages.create / get / update / archive / unarchive`, parent variants (including the recommended `data_source_key`), property input shapes.
|
|
109
131
|
- [`docs/users.md`](./docs/users.md) — `users.list / get`, the `NotionUser` shape, paging.
|
|
110
132
|
- [`docs/errors.md`](./docs/errors.md) — request results, error format, error codes, retries, and initialization failures.
|
|
111
133
|
- [`docs/deployment.md`](./docs/deployment.md) — worker-backed deploys, localhost self-hosted fallback, where the manifest comes from.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SandboxBridge.d.ts","sourceRoot":"","sources":["../../src/bridge/SandboxBridge.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SandboxBridge.d.ts","sourceRoot":"","sources":["../../src/bridge/SandboxBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -725,17 +725,20 @@ export class SandboxBridge {
|
|
|
725
725
|
});
|
|
726
726
|
}
|
|
727
727
|
updatePage(args) {
|
|
728
|
+
// Prefer is_archived over the deprecated archived argument.
|
|
729
|
+
// TODO(custom-blocks): Remove the archived fallback when upgrading to bridge protocol v4.
|
|
730
|
+
const isArchived = args.is_archived ?? args.archived;
|
|
728
731
|
return new Promise(resolve => {
|
|
729
732
|
if ((args.properties === undefined ||
|
|
730
733
|
Object.keys(args.properties).length === 0) &&
|
|
731
734
|
args.icon === undefined &&
|
|
732
735
|
args.cover === undefined &&
|
|
733
|
-
|
|
736
|
+
isArchived === undefined) {
|
|
734
737
|
resolve({
|
|
735
738
|
status: "error",
|
|
736
739
|
error: {
|
|
737
740
|
code: "invalid_page_update",
|
|
738
|
-
message: "updatePage requires at least one
|
|
741
|
+
message: "updatePage requires at least one property.",
|
|
739
742
|
isRetryable: false,
|
|
740
743
|
},
|
|
741
744
|
});
|
|
@@ -756,8 +759,8 @@ export class SandboxBridge {
|
|
|
756
759
|
if (args.cover !== undefined) {
|
|
757
760
|
outbound.cover = args.cover;
|
|
758
761
|
}
|
|
759
|
-
if (
|
|
760
|
-
outbound.archived =
|
|
762
|
+
if (isArchived !== undefined) {
|
|
763
|
+
outbound.archived = isArchived;
|
|
761
764
|
}
|
|
762
765
|
this.postToHost(outbound);
|
|
763
766
|
});
|
|
@@ -784,7 +787,7 @@ export class SandboxBridge {
|
|
|
784
787
|
properties: resolvedProperties?.properties,
|
|
785
788
|
icon: pageUpdateArgs.icon,
|
|
786
789
|
cover: pageUpdateArgs.cover,
|
|
787
|
-
|
|
790
|
+
is_archived: pageUpdateArgs.is_archived ?? pageUpdateArgs.archived,
|
|
788
791
|
});
|
|
789
792
|
}
|
|
790
793
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hostState.d.ts","sourceRoot":"","sources":["../../src/bridge/hostState.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hostState.d.ts","sourceRoot":"","sources":["../../src/bridge/hostState.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge/hostState.js
CHANGED
|
@@ -43,17 +43,20 @@ export function getDataSourceQueryView(hostState, key, subscriptionId, updateDat
|
|
|
43
43
|
propertiesByKey[key] =
|
|
44
44
|
propertyId === undefined ? undefined : entry.propertiesById[propertyId];
|
|
45
45
|
}
|
|
46
|
+
const update = (args) => updateDataSourcePage({
|
|
47
|
+
dataSource,
|
|
48
|
+
pageId: entry.id,
|
|
49
|
+
pageUpdateArgs: args,
|
|
50
|
+
});
|
|
46
51
|
return {
|
|
47
52
|
id: entry.id,
|
|
48
53
|
is_archived: entry.is_archived,
|
|
49
54
|
in_trash: entry.in_trash,
|
|
50
55
|
propertiesById: entry.propertiesById,
|
|
51
56
|
propertiesByKey,
|
|
52
|
-
update
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
pageUpdateArgs: args,
|
|
56
|
-
}),
|
|
57
|
+
update,
|
|
58
|
+
archive: () => update({ is_archived: true }),
|
|
59
|
+
unarchive: () => update({ is_archived: false }),
|
|
57
60
|
};
|
|
58
61
|
});
|
|
59
62
|
const propertySchemasByKey = {};
|
|
@@ -45,7 +45,16 @@ export declare const pages: {
|
|
|
45
45
|
*/
|
|
46
46
|
update: (input: UpdatePageArgs) => Promise<UpdatePageResult>;
|
|
47
47
|
/**
|
|
48
|
-
*
|
|
48
|
+
* Archives a page.
|
|
49
|
+
*/
|
|
50
|
+
archive: (pageId: NotionPageId) => Promise<UpdatePageResult>;
|
|
51
|
+
/**
|
|
52
|
+
* Unarchives a page.
|
|
53
|
+
*/
|
|
54
|
+
unarchive: (pageId: NotionPageId) => Promise<UpdatePageResult>;
|
|
55
|
+
/**
|
|
56
|
+
* @deprecated This method archives the page. It does not move the page to Trash.
|
|
57
|
+
* Use `pages.archive(pageId)` instead.
|
|
49
58
|
*/
|
|
50
59
|
delete: (pageId: NotionPageId) => Promise<UpdatePageResult>;
|
|
51
60
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandboxClient.d.ts","sourceRoot":"","sources":["../../src/bridge/sandboxClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mDAAmD,CAAA;AACpF,OAAO,KAAK,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAExB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAiB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"sandboxClient.d.ts","sourceRoot":"","sources":["../../src/bridge/sandboxClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mDAAmD,CAAA;AACpF,OAAO,KAAK,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,MAAM,aAAa,CAAA;AACpB,OAAO,EACN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAExB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAiB,MAAM,oBAAoB,CAAA;AAYxE,eAAO,MAAM,eAAe;IAC3B,KAAK;IAIL,WAAW,mBAAmB,kBAAkB;IAIhD,SAAS,YAAY,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,SAAS,aAAa,MAAM,IAAI;IAIhC,QAAQ,QAAM,oBAAoB;IAIlC;;;OAGG;IACH,YAAY,YAAY,WAAW;IAInC,sBAAsB;IAItB,UAAU,WAAW,MAAM;CAG3B,CAAA;AAED,eAAO,MAAM,sBAAsB;IAClC,oBAAoB;IAIpB,KAAK,mBACY,MAAM,OACjB,MAAM,YACD,oBAAoB;IAK/B,OAAO,mBAAmB,MAAM;IAIhC,OAAO,cACK,oBAAoB,OAC1B,MAAM,kBACK,MAAM,KACpB,mBAAmB;CAQtB,CAAA;AAED,eAAO,MAAM,UAAU;IACtB,WAAW,QAAM,SAAS,eAAe,EAAE;IAI3C,SAAS,aAAa,MAAM,IAAI;CAGhC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;IACjB;;OAEG;IACH,MAAM,UAAU,cAAc,KAAG,OAAO,CAAC,gBAAgB,CAAC;IAI1D;;OAEG;IACH,GAAG,WAAW,YAAY,KAAG,OAAO,CAAC,aAAa,CAAC;IAInD;;OAEG;IACH,MAAM,UAAU,cAAc,KAAG,OAAO,CAAC,gBAAgB,CAAC;IAI1D;;OAEG;IACH,OAAO,WAAW,YAAY,KAAG,OAAO,CAAC,gBAAgB,CAAC;IAI1D;;OAEG;IACH,SAAS,WAAW,YAAY,KAAG,OAAO,CAAC,gBAAgB,CAAC;IAI5D;;;OAGG;IACH,MAAM,WAAW,YAAY,KAAG,OAAO,CAAC,gBAAgB,CAAC;CASzD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,KAAK;IACjB;;OAEG;IACH,IAAI,WAAW,aAAa,KAAG,OAAO,CAAC,eAAe,CAAC;IAIvD;;OAEG;IACH,GAAG,WAAW,YAAY,KAAG,OAAO,CAAC,aAAa,CAAC;CAGnD,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getDataSourceQueryView as getDataSourceQueryViewWithBridge, } from "./hostState.js";
|
|
2
2
|
import { SandboxBridge } from "./SandboxBridge.js";
|
|
3
3
|
let bridge;
|
|
4
|
+
let didWarnAboutPagesDelete = false;
|
|
4
5
|
function getBridge() {
|
|
5
6
|
if (!bridge) {
|
|
6
7
|
bridge = new SandboxBridge();
|
|
@@ -82,10 +83,27 @@ export const pages = {
|
|
|
82
83
|
return getBridge().updatePage(input);
|
|
83
84
|
},
|
|
84
85
|
/**
|
|
85
|
-
*
|
|
86
|
+
* Archives a page.
|
|
87
|
+
*/
|
|
88
|
+
archive: (pageId) => {
|
|
89
|
+
return getBridge().updatePage({ pageId, is_archived: true });
|
|
90
|
+
},
|
|
91
|
+
/**
|
|
92
|
+
* Unarchives a page.
|
|
93
|
+
*/
|
|
94
|
+
unarchive: (pageId) => {
|
|
95
|
+
return getBridge().updatePage({ pageId, is_archived: false });
|
|
96
|
+
},
|
|
97
|
+
/**
|
|
98
|
+
* @deprecated This method archives the page. It does not move the page to Trash.
|
|
99
|
+
* Use `pages.archive(pageId)` instead.
|
|
86
100
|
*/
|
|
87
101
|
delete: (pageId) => {
|
|
88
|
-
|
|
102
|
+
if (!didWarnAboutPagesDelete) {
|
|
103
|
+
didWarnAboutPagesDelete = true;
|
|
104
|
+
console.warn("[Notion Custom Blocks] DEPRECATED: pages.delete() archives the page. It does not move the page to Trash. Use pages.archive() instead.");
|
|
105
|
+
}
|
|
106
|
+
return getBridge().updatePage({ pageId, is_archived: true });
|
|
89
107
|
},
|
|
90
108
|
};
|
|
91
109
|
/**
|
|
@@ -75,7 +75,7 @@ export function NotionCustomBlock({ children, timeoutMs, fallback = null, errorF
|
|
|
75
75
|
if (host.status !== "initialized") {
|
|
76
76
|
return _jsx(_Fragment, { children: fallback });
|
|
77
77
|
}
|
|
78
|
-
return (_jsxs(_Fragment, { children: [_jsx("div", { role: "status", className: "custom-blocks-standalone-banner", children: "Host not detected \u2014 running in standalone preview. Try `ntn customblocks dev` to run the block in a local development environment." }), children] }));
|
|
78
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", { role: "status", className: "custom-blocks-standalone-banner", children: "Host not detected \u2014 running in standalone preview. Try `ntn workers customblocks dev` to run the block in a local development environment." }), children] }));
|
|
79
79
|
}
|
|
80
80
|
if (!init.isLoaded) {
|
|
81
81
|
return _jsx(_Fragment, { children: fallback });
|
package/dist/types.d.ts
CHANGED
|
@@ -60,11 +60,18 @@ export type NotionDataSourcePage = {
|
|
|
60
60
|
* keys to raw property IDs before sending the bridge message to the host.
|
|
61
61
|
*/
|
|
62
62
|
update: (args: NotionDataSourcePageUpdateArgs) => Promise<UpdatePageResult>;
|
|
63
|
+
/** Archives this page. Shorthand for update({ is_archived: true }). */
|
|
64
|
+
archive: () => Promise<UpdatePageResult>;
|
|
65
|
+
/** Unarchives this page. Shorthand for update({ is_archived: false }). */
|
|
66
|
+
unarchive: () => Promise<UpdatePageResult>;
|
|
63
67
|
};
|
|
64
68
|
export type NotionDataSourcePageUpdateArgs = {
|
|
65
69
|
properties?: NotionPagePropertyInputMap;
|
|
66
70
|
icon?: NotionPageIcon;
|
|
67
71
|
cover?: NotionPageCover;
|
|
72
|
+
/** Whether to archive this page. Takes precedence over archived. */
|
|
73
|
+
is_archived?: boolean;
|
|
74
|
+
/** @deprecated Use is_archived instead. */
|
|
68
75
|
archived?: boolean;
|
|
69
76
|
};
|
|
70
77
|
/**
|
|
@@ -217,7 +224,12 @@ export type CreatePageInput = CreatePageArgs;
|
|
|
217
224
|
* The result of a `sdk.pages.create` API call.
|
|
218
225
|
*/
|
|
219
226
|
export type CreatePageResult = BridgeMessagePayload<CreatePageResultMessage, CustomBlockCreatePageErrorInfo>;
|
|
220
|
-
export type UpdatePageArgs = Omit<UpdatePageMessage, "type" | "requestId"
|
|
227
|
+
export type UpdatePageArgs = Omit<UpdatePageMessage, "type" | "requestId" | "archived"> & {
|
|
228
|
+
/** Whether to archive this page. Takes precedence over archived. */
|
|
229
|
+
is_archived?: boolean;
|
|
230
|
+
/** @deprecated Use is_archived instead. */
|
|
231
|
+
archived?: boolean;
|
|
232
|
+
};
|
|
221
233
|
/**
|
|
222
234
|
* @deprecated Use `UpdatePageArgs` instead.
|
|
223
235
|
*
|
|
@@ -229,7 +241,7 @@ export type UpdatePageInput = UpdatePageArgs;
|
|
|
229
241
|
*/
|
|
230
242
|
export type GetPageResult = BridgeMessagePayload<GetPageResultMessage, CustomBlockGetPageErrorInfo>;
|
|
231
243
|
/**
|
|
232
|
-
* Result of `sdk.pages.update`
|
|
244
|
+
* Result of `sdk.pages.update`, `sdk.pages.archive`, and `sdk.pages.unarchive`.
|
|
233
245
|
*/
|
|
234
246
|
export type UpdatePageResult = BridgeMessagePayload<UpdatePageResultMessage, CustomBlockUpdatePageErrorInfo>;
|
|
235
247
|
export type ListUsersArgs = Omit<ListUsersMessage, "type" | "requestId">;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4DAA4D,CAAA;AACxG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAA;AAC5G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gEAAgE,CAAA;AAC1G,OAAO,KAAK,EACX,kBAAkB,EAClB,YAAY,EACZ,MAAM,yCAAyC,CAAA;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAA;AAC9F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yDAAyD,CAAA;AACvG,OAAO,KAAK,EACX,uBAAuB,EACvB,8BAA8B,EAC9B,MAAM,+DAA+D,CAAA;AACtE,OAAO,KAAK,EACX,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,sDAAsD,CAAA;AAC7D,OAAO,KAAK,EACX,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,sDAAsD,CAAA;AAC7D,OAAO,KAAK,EACX,6BAA6B,EAC7B,gBAAgB,EAChB,sBAAsB,EACtB,MAAM,wDAAwD,CAAA;AAC/D,OAAO,KAAK,EACX,iCAAiC,EACjC,iCAAiC,EACjC,6BAA6B,EAC7B,+BAA+B,EAC/B,+BAA+B,EAC/B,6BAA6B,EAC7B,MAAM,8DAA8D,CAAA;AACrE,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,oEAAoE,CAAA;AAC7H,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAA;AAChG,OAAO,KAAK,EACX,8BAA8B,EAC9B,uBAAuB,EACvB,MAAM,+DAA+D,CAAA;AACtE,OAAO,KAAK,EACX,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,MAAM,gDAAgD,CAAA;AAEvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAA;AACtF,YAAY,EACX,kBAAkB,EAClB,aAAa,GACb,MAAM,yCAAyC,CAAA;AAChD,YAAY,EACX,UAAU,EACV,YAAY,EACZ,cAAc,GACd,MAAM,gDAAgD,CAAA;AACvD,YAAY,EACX,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,mCAAmC,EACnC,8BAA8B,GAC9B,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GACvC,uBAAuB,SAAS,MAAM,aAAa,GAChD,aAAa,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACnC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,KAAK,GACN,KAAK,CAAA;AAET,MAAM,MAAM,0BAA0B,GAAG;IACxC,CAAC,eAAe,EAAE,MAAM,GAAG,4BAA4B,CAAA;CACvD,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC,EAAE,EAAE,YAAY,CAAA;IAEhB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,cAAc,EAAE;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAA;KAAE,CAAA;IAC3E;;;OAGG;IACH,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAA;KAAE,CAAA;IACrE;;;OAGG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,8BAA8B,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/version.js
CHANGED
package/docs/block-location.md
CHANGED
|
@@ -118,7 +118,7 @@ const theme = customBlock.getTheme();
|
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
```tsx
|
|
121
|
-
import { usePage, useTheme } from "@notionhq/custom-blocks";
|
|
121
|
+
import { usePage, useTheme } from "@notionhq/custom-blocks/react";
|
|
122
122
|
|
|
123
123
|
export function Header() {
|
|
124
124
|
const page = usePage();
|
|
@@ -137,4 +137,4 @@ function useContrastMode(): NotionContrastMode; // "standard" | "high"
|
|
|
137
137
|
|
|
138
138
|
For non-React renderers, use `customBlock.getContrastMode()` after `initCustomBlock()` resolves.
|
|
139
139
|
|
|
140
|
-
For React apps, `<NotionTokenScope>` applies both appearance values to the bundled Notion
|
|
140
|
+
For React apps, `<NotionTokenScope>` applies both appearance values to the bundled Notion CSS variables automatically.
|
package/docs/data-sources.md
CHANGED
|
@@ -10,7 +10,7 @@ At runtime, your code references the semantic key and the SDK handles the lookup
|
|
|
10
10
|
|
|
11
11
|
## Pages within a data source
|
|
12
12
|
|
|
13
|
-
Each row returned by `useDataSource` is a `NotionDataSourcePage` — `{ id, propertiesById, propertiesByKey, update }`. Read property values through either of the two views:
|
|
13
|
+
Each row returned by `useDataSource` is a `NotionDataSourcePage` — `{ id, propertiesById, propertiesByKey, update, archive, unarchive }`. Read property values through either of the two views:
|
|
14
14
|
|
|
15
15
|
- `propertiesByKey[key]` — keyed by the semantic property keys you declared in the manifest.
|
|
16
16
|
- `propertiesById[propertyId]` — keyed by the raw Notion property ID.
|
|
@@ -32,7 +32,14 @@ await row.update({
|
|
|
32
32
|
|
|
33
33
|
Property values can be keyed by **either** semantic keys or raw IDs. The SDK resolves semantic keys to IDs before sending the request.
|
|
34
34
|
|
|
35
|
-
Use `row.update(...)` whenever you already have a row in hand. For pages you don't have a row for (e.g. you only have a `pageId`), drop down to the top-level [`pages` API](./pages.md) — it covers create / get / update /
|
|
35
|
+
Use `row.update(...)` whenever you already have a row in hand. For pages you don't have a row for (e.g. you only have a `pageId`), drop down to the top-level [`pages` API](./pages.md) — it covers create / get / update / archive / unarchive and accepts raw property IDs only.
|
|
36
|
+
|
|
37
|
+
### Archiving and unarchiving a row
|
|
38
|
+
|
|
39
|
+
`row.archive()` is shorthand for calling `row.update({ is_archived: true })`.
|
|
40
|
+
`row.unarchive()` is shorthand for calling `row.update({ is_archived: false })`.
|
|
41
|
+
Both methods return an `UpdatePageResult`.
|
|
42
|
+
Use `row.update` to change archive status and other fields in one request.
|
|
36
43
|
|
|
37
44
|
## API
|
|
38
45
|
|
|
@@ -137,9 +144,10 @@ renderManifest(customBlock.getManifest());
|
|
|
137
144
|
|
|
138
145
|
## Example: querying a data source
|
|
139
146
|
|
|
140
|
-
|
|
147
|
+
This example calls `useDataSource` with a declared key. It validates each row’s values before rendering:
|
|
141
148
|
|
|
142
149
|
```tsx
|
|
150
|
+
import { useState } from "react";
|
|
143
151
|
import type { NotionDataSourcePage } from "@notionhq/custom-blocks";
|
|
144
152
|
import { useDataSource } from "@notionhq/custom-blocks/react";
|
|
145
153
|
|
|
@@ -163,10 +171,7 @@ export function ScoreList() {
|
|
|
163
171
|
const displayItems = items.filter(isComplete);
|
|
164
172
|
if (displayItems.length === 0) {
|
|
165
173
|
return (
|
|
166
|
-
<div>
|
|
167
|
-
Map a data source with key <code>{KEY}</code> exposing <code>name</code>{" "}
|
|
168
|
-
(text) and <code>score</code> (number).
|
|
169
|
-
</div>
|
|
174
|
+
<div>No rows have both a text name and a finite score.</div>
|
|
170
175
|
);
|
|
171
176
|
}
|
|
172
177
|
|
|
@@ -198,9 +203,9 @@ export function ScoreList() {
|
|
|
198
203
|
|
|
199
204
|
### Rows & values
|
|
200
205
|
|
|
201
|
-
- `NotionDataSource` — a resolved data source: semantic key, `collectionSchema`, `propertyIdsByKey`, `propertySchemasById`.
|
|
202
|
-
- `NotionDataSourcePage` — a single row exposed to app code: `{ id, propertiesById, propertiesByKey, update }`.
|
|
203
|
-
- `NotionDataSourceValue` — the
|
|
206
|
+
- `NotionDataSource` — a resolved data source: semantic key, optional `collectionSchema`, `propertyIdsByKey`, and `propertySchemasById`.
|
|
207
|
+
- `NotionDataSourcePage` — a single row exposed to app code: `{ id, propertiesById, propertiesByKey, update, archive, unarchive }`.
|
|
208
|
+
- `NotionDataSourceValue` — the value union for `propertiesById` and `propertiesByKey`.
|
|
204
209
|
- `NotionDataSourcePageUpdateArgs` / `UpdatePageResult` — arguments and result for the per-page `update` helper.
|
|
205
210
|
- `NotionDataSourcePageUpdateInput` — deprecated alias for `NotionDataSourcePageUpdateArgs`.
|
|
206
211
|
- `NotionDataSourcePageUpdateResult` — deprecated alias for `UpdatePageResult`.
|
package/docs/deployment.md
CHANGED
|
@@ -7,9 +7,11 @@ A custom block manifest describes the data sources a block requires, including t
|
|
|
7
7
|
- **Deployed** — deploying persists the manifest on the block's definition record in Notion. The host reads it from there and sends it to the SDK during initialization.
|
|
8
8
|
- **Local development** — the dev shell extracts the same worker declaration at runtime and serves the selected block's manifest dynamically at `/manifest`.
|
|
9
9
|
|
|
10
|
+
Notion reconciles custom block definitions by their Worker capability keys during deployment.
|
|
11
|
+
|
|
10
12
|
## Local development
|
|
11
13
|
|
|
12
|
-
Run `ntn customblocks dev` from a worker. It builds the worker, extracts its custom block declarations, starts one localhost Vite server per block, and renders them in the mock host at http://localhost:9873.
|
|
14
|
+
Run `ntn workers customblocks dev` from a worker. It builds the worker, extracts its custom block declarations, starts one localhost Vite server per block, and renders them in the mock host at http://localhost:9873.
|
|
13
15
|
|
|
14
16
|
At startup, the SDK fetches the page-relative `manifest` path only when the bundle's hostname is exactly `localhost`, then forwards the response in `connect`. On every other hostname, the SDK skips this fetch and relies on the host-provided manifest from `init`.
|
|
15
17
|
|
package/docs/pages.md
CHANGED
|
@@ -97,7 +97,7 @@ Read `in_trash` on a page or data source row. It is `true` when the page or an a
|
|
|
97
97
|
|
|
98
98
|
## Updating pages
|
|
99
99
|
|
|
100
|
-
`pages.update` writes back to a page. The optional fields (`properties`, `icon`, `cover`, `
|
|
100
|
+
`pages.update` writes back to a page. The optional fields (`properties`, `icon`, `cover`, `is_archived`) are independent — supply only what you want to change:
|
|
101
101
|
|
|
102
102
|
```ts
|
|
103
103
|
const result = await pages.update({
|
|
@@ -115,17 +115,27 @@ const result = await pages.update({
|
|
|
115
115
|
|
|
116
116
|
The `properties` map (a `NotionPagePropertyWriteMap`) is keyed by **raw Notion property ID**, and each value must repeat that ID as its own `id` field — semantic data source keys aren't accepted here. To update a row by configured custom-block key without writing out the raw IDs, use the `update` helper on the row returned from `useDataSource` instead; the SDK handles the key → ID resolution for you.
|
|
117
117
|
|
|
118
|
-
If you call `pages.update` with no fields to change, it short-circuits and resolves with `{ status: "error", error: { code: "invalid_page_update", message: "updatePage requires at least one
|
|
118
|
+
If you call `pages.update` with no fields to change, it short-circuits and resolves with `{ status: "error", error: { code: "invalid_page_update", message: "updatePage requires at least one property.", isRetryable: false } }` — no request is sent.
|
|
119
119
|
|
|
120
|
-
##
|
|
120
|
+
## Archiving and unarchiving pages
|
|
121
121
|
|
|
122
|
-
`pages.
|
|
122
|
+
`pages.archive(pageId)` archives a page. `pages.unarchive(pageId)` removes its archive state.
|
|
123
123
|
|
|
124
124
|
```ts
|
|
125
|
-
await pages.
|
|
125
|
+
const result = await pages.archive(pageId);
|
|
126
|
+
if (result.status === "error") {
|
|
127
|
+
console.error(result.error.message);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const restored = await pages.unarchive(pageId);
|
|
131
|
+
if (restored.status === "error") {
|
|
132
|
+
console.error(restored.error.message);
|
|
133
|
+
}
|
|
126
134
|
```
|
|
127
135
|
|
|
128
|
-
|
|
136
|
+
`pages.archive` is shorthand for calling `pages.update` with `is_archived: true`.
|
|
137
|
+
`pages.unarchive` is shorthand for calling `pages.update` with `is_archived: false`.
|
|
138
|
+
Both methods return an `UpdatePageResult`.
|
|
129
139
|
|
|
130
140
|
## Icons, covers, and file uploads
|
|
131
141
|
|
package/package.json
CHANGED
|
@@ -923,20 +923,22 @@ export class SandboxBridge {
|
|
|
923
923
|
}
|
|
924
924
|
|
|
925
925
|
updatePage(args: UpdatePageArgs): Promise<UpdatePageResult> {
|
|
926
|
+
// Prefer is_archived over the deprecated archived argument.
|
|
927
|
+
// TODO(custom-blocks): Remove the archived fallback when upgrading to bridge protocol v4.
|
|
928
|
+
const isArchived = args.is_archived ?? args.archived
|
|
926
929
|
return new Promise(resolve => {
|
|
927
930
|
if (
|
|
928
931
|
(args.properties === undefined ||
|
|
929
932
|
Object.keys(args.properties).length === 0) &&
|
|
930
933
|
args.icon === undefined &&
|
|
931
934
|
args.cover === undefined &&
|
|
932
|
-
|
|
935
|
+
isArchived === undefined
|
|
933
936
|
) {
|
|
934
937
|
resolve({
|
|
935
938
|
status: "error",
|
|
936
939
|
error: {
|
|
937
940
|
code: "invalid_page_update",
|
|
938
|
-
message:
|
|
939
|
-
"updatePage requires at least one of: properties, icon, cover, archived.",
|
|
941
|
+
message: "updatePage requires at least one property.",
|
|
940
942
|
isRetryable: false,
|
|
941
943
|
},
|
|
942
944
|
})
|
|
@@ -958,8 +960,8 @@ export class SandboxBridge {
|
|
|
958
960
|
if (args.cover !== undefined) {
|
|
959
961
|
outbound.cover = args.cover
|
|
960
962
|
}
|
|
961
|
-
if (
|
|
962
|
-
outbound.archived =
|
|
963
|
+
if (isArchived !== undefined) {
|
|
964
|
+
outbound.archived = isArchived
|
|
963
965
|
}
|
|
964
966
|
this.postToHost(outbound)
|
|
965
967
|
})
|
|
@@ -993,7 +995,7 @@ export class SandboxBridge {
|
|
|
993
995
|
properties: resolvedProperties?.properties,
|
|
994
996
|
icon: pageUpdateArgs.icon,
|
|
995
997
|
cover: pageUpdateArgs.cover,
|
|
996
|
-
|
|
998
|
+
is_archived: pageUpdateArgs.is_archived ?? pageUpdateArgs.archived,
|
|
997
999
|
})
|
|
998
1000
|
}
|
|
999
1001
|
|
package/src/bridge/hostState.ts
CHANGED
|
@@ -139,18 +139,21 @@ export function getDataSourceQueryView(
|
|
|
139
139
|
propertiesByKey[key] =
|
|
140
140
|
propertyId === undefined ? undefined : entry.propertiesById[propertyId]
|
|
141
141
|
}
|
|
142
|
+
const update = (args: NotionDataSourcePageUpdateArgs) =>
|
|
143
|
+
updateDataSourcePage({
|
|
144
|
+
dataSource,
|
|
145
|
+
pageId: entry.id,
|
|
146
|
+
pageUpdateArgs: args,
|
|
147
|
+
})
|
|
142
148
|
return {
|
|
143
149
|
id: entry.id,
|
|
144
150
|
is_archived: entry.is_archived,
|
|
145
151
|
in_trash: entry.in_trash,
|
|
146
152
|
propertiesById: entry.propertiesById,
|
|
147
153
|
propertiesByKey,
|
|
148
|
-
update
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
pageId: entry.id,
|
|
152
|
-
pageUpdateArgs: args,
|
|
153
|
-
}),
|
|
154
|
+
update,
|
|
155
|
+
archive: () => update({ is_archived: true }),
|
|
156
|
+
unarchive: () => update({ is_archived: false }),
|
|
154
157
|
}
|
|
155
158
|
})
|
|
156
159
|
|
|
@@ -21,6 +21,7 @@ import type { ManifestLoadResult } from "./loadManifest.js"
|
|
|
21
21
|
import { type MessageLogEntry, SandboxBridge } from "./SandboxBridge.js"
|
|
22
22
|
|
|
23
23
|
let bridge: SandboxBridge | undefined
|
|
24
|
+
let didWarnAboutPagesDelete = false
|
|
24
25
|
|
|
25
26
|
function getBridge(): SandboxBridge {
|
|
26
27
|
if (!bridge) {
|
|
@@ -134,10 +135,31 @@ export const pages = {
|
|
|
134
135
|
},
|
|
135
136
|
|
|
136
137
|
/**
|
|
137
|
-
*
|
|
138
|
+
* Archives a page.
|
|
139
|
+
*/
|
|
140
|
+
archive: (pageId: NotionPageId): Promise<UpdatePageResult> => {
|
|
141
|
+
return getBridge().updatePage({ pageId, is_archived: true })
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Unarchives a page.
|
|
146
|
+
*/
|
|
147
|
+
unarchive: (pageId: NotionPageId): Promise<UpdatePageResult> => {
|
|
148
|
+
return getBridge().updatePage({ pageId, is_archived: false })
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @deprecated This method archives the page. It does not move the page to Trash.
|
|
153
|
+
* Use `pages.archive(pageId)` instead.
|
|
138
154
|
*/
|
|
139
155
|
delete: (pageId: NotionPageId): Promise<UpdatePageResult> => {
|
|
140
|
-
|
|
156
|
+
if (!didWarnAboutPagesDelete) {
|
|
157
|
+
didWarnAboutPagesDelete = true
|
|
158
|
+
console.warn(
|
|
159
|
+
"[Notion Custom Blocks] DEPRECATED: pages.delete() archives the page. It does not move the page to Trash. Use pages.archive() instead.",
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
return getBridge().updatePage({ pageId, is_archived: true })
|
|
141
163
|
},
|
|
142
164
|
}
|
|
143
165
|
|
|
@@ -119,7 +119,7 @@ export function NotionCustomBlock({
|
|
|
119
119
|
return (
|
|
120
120
|
<>
|
|
121
121
|
<div role="status" className="custom-blocks-standalone-banner">
|
|
122
|
-
Host not detected — running in standalone preview. Try `ntn
|
|
122
|
+
Host not detected — running in standalone preview. Try `ntn workers
|
|
123
123
|
customblocks dev` to run the block in a local development environment.
|
|
124
124
|
</div>
|
|
125
125
|
{children}
|
package/src/types.ts
CHANGED
|
@@ -106,12 +106,20 @@ export type NotionDataSourcePage = {
|
|
|
106
106
|
* keys to raw property IDs before sending the bridge message to the host.
|
|
107
107
|
*/
|
|
108
108
|
update: (args: NotionDataSourcePageUpdateArgs) => Promise<UpdatePageResult>
|
|
109
|
+
/** Archives this page. Shorthand for update({ is_archived: true }). */
|
|
110
|
+
archive: () => Promise<UpdatePageResult>
|
|
111
|
+
/** Unarchives this page. Shorthand for update({ is_archived: false }). */
|
|
112
|
+
unarchive: () => Promise<UpdatePageResult>
|
|
109
113
|
}
|
|
110
114
|
|
|
111
115
|
export type NotionDataSourcePageUpdateArgs = {
|
|
112
116
|
properties?: NotionPagePropertyInputMap
|
|
113
117
|
icon?: NotionPageIcon
|
|
114
118
|
cover?: NotionPageCover
|
|
119
|
+
/** Whether to archive this page. Takes precedence over archived. */
|
|
120
|
+
is_archived?: boolean
|
|
121
|
+
/** @deprecated Use is_archived instead. */
|
|
122
|
+
// TODO(custom-blocks): Remove archived when upgrading to bridge protocol v4.
|
|
115
123
|
archived?: boolean
|
|
116
124
|
}
|
|
117
125
|
|
|
@@ -260,7 +268,16 @@ export type CreatePageResult = BridgeMessagePayload<
|
|
|
260
268
|
CustomBlockCreatePageErrorInfo
|
|
261
269
|
>
|
|
262
270
|
|
|
263
|
-
export type UpdatePageArgs = Omit<
|
|
271
|
+
export type UpdatePageArgs = Omit<
|
|
272
|
+
UpdatePageMessage,
|
|
273
|
+
"type" | "requestId" | "archived"
|
|
274
|
+
> & {
|
|
275
|
+
/** Whether to archive this page. Takes precedence over archived. */
|
|
276
|
+
is_archived?: boolean
|
|
277
|
+
/** @deprecated Use is_archived instead. */
|
|
278
|
+
// TODO(custom-blocks): Remove archived when upgrading to bridge protocol v4.
|
|
279
|
+
archived?: boolean
|
|
280
|
+
}
|
|
264
281
|
|
|
265
282
|
/**
|
|
266
283
|
* @deprecated Use `UpdatePageArgs` instead.
|
|
@@ -278,7 +295,7 @@ export type GetPageResult = BridgeMessagePayload<
|
|
|
278
295
|
>
|
|
279
296
|
|
|
280
297
|
/**
|
|
281
|
-
* Result of `sdk.pages.update`
|
|
298
|
+
* Result of `sdk.pages.update`, `sdk.pages.archive`, and `sdk.pages.unarchive`.
|
|
282
299
|
*/
|
|
283
300
|
export type UpdatePageResult = BridgeMessagePayload<
|
|
284
301
|
UpdatePageResultMessage,
|