@gtkx/react 1.0.0-rc.2 → 1.0.0-rc.4
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 +4 -5
- package/dist/adw/config.d.ts +1 -0
- package/dist/adw/config.d.ts.map +1 -1
- package/dist/adw/config.js +1 -0
- package/dist/adw/config.js.map +1 -1
- package/dist/adw/dialog.d.ts +1 -0
- package/dist/adw/dialog.d.ts.map +1 -1
- package/dist/adw/dialog.js +1 -0
- package/dist/adw/dialog.js.map +1 -1
- package/dist/adw/element-behaviors.js +8 -39
- package/dist/adw/element-behaviors.js.map +1 -1
- package/dist/adw/element-config.d.ts +7 -4
- package/dist/adw/element-config.d.ts.map +1 -1
- package/dist/adw/element-config.js +32 -41
- package/dist/adw/element-config.js.map +1 -1
- package/dist/adw/index.d.ts +1 -0
- package/dist/adw/index.d.ts.map +1 -1
- package/dist/adw/index.js +1 -0
- package/dist/adw/index.js.map +1 -1
- package/dist/adw/prop-types.d.ts +1 -1
- package/dist/adw/prop-types.d.ts.map +1 -1
- package/dist/adw/prop-types.js.map +1 -1
- package/dist/bootstrap.js +1 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/components/application.d.ts +1 -0
- package/dist/components/application.d.ts.map +1 -1
- package/dist/components/application.js +1 -0
- package/dist/components/application.js.map +1 -1
- package/dist/components/element.d.ts +0 -1
- package/dist/components/element.d.ts.map +1 -1
- package/dist/components/element.js +0 -1
- package/dist/components/element.js.map +1 -1
- package/dist/components/window.d.ts +1 -0
- package/dist/components/window.d.ts.map +1 -1
- package/dist/components/window.js +14 -2
- package/dist/components/window.js.map +1 -1
- package/dist/config.d.ts +5 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/element-behaviors.js +0 -1
- package/dist/element-behaviors.js.map +1 -1
- package/dist/element-config.d.ts +4 -3
- package/dist/element-config.d.ts.map +1 -1
- package/dist/element-config.js +12 -8
- package/dist/element-config.js.map +1 -1
- package/dist/hooks/use-bind-setting.d.ts +8 -7
- package/dist/hooks/use-bind-setting.d.ts.map +1 -1
- package/dist/hooks/use-bind-setting.js +2 -7
- package/dist/hooks/use-bind-setting.js.map +1 -1
- package/dist/hooks/use-parent-window.d.ts +3 -1
- package/dist/hooks/use-parent-window.d.ts.map +1 -1
- package/dist/hooks/use-parent-window.js +3 -1
- package/dist/hooks/use-parent-window.js.map +1 -1
- package/dist/hooks/use-property.d.ts +2 -2
- package/dist/hooks/use-property.d.ts.map +1 -1
- package/dist/hooks/use-property.js +1 -2
- package/dist/hooks/use-property.js.map +1 -1
- package/dist/hooks/use-setting.d.ts +2 -3
- package/dist/hooks/use-setting.d.ts.map +1 -1
- package/dist/hooks/use-setting.js +2 -3
- package/dist/hooks/use-setting.js.map +1 -1
- package/dist/hooks/use-signal.d.ts +17 -7
- package/dist/hooks/use-signal.d.ts.map +1 -1
- package/dist/hooks/use-signal.js +10 -8
- package/dist/hooks/use-signal.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +5 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +3 -3
- package/dist/internal.js.map +1 -1
- package/dist/prop-types.d.ts +60 -0
- package/dist/prop-types.d.ts.map +1 -1
- package/dist/prop-types.js.map +1 -1
- package/dist/reconciler/apply-props.d.ts.map +1 -1
- package/dist/reconciler/apply-props.js +12 -6
- package/dist/reconciler/apply-props.js.map +1 -1
- package/dist/reconciler/behaviors.d.ts +0 -15
- package/dist/reconciler/behaviors.d.ts.map +1 -1
- package/dist/reconciler/behaviors.js +12 -22
- package/dist/reconciler/behaviors.js.map +1 -1
- package/dist/reconciler/host-config.d.ts +1 -1
- package/dist/reconciler/host-config.d.ts.map +1 -1
- package/dist/reconciler/host-config.js +2 -6
- package/dist/reconciler/host-config.js.map +1 -1
- package/dist/reconciler/instance.js +1 -1
- package/dist/reconciler/instance.js.map +1 -1
- package/dist/reconciler/metadata.d.ts +1 -1
- package/dist/reconciler/metadata.d.ts.map +1 -1
- package/dist/reconciler/metadata.js +7 -7
- package/dist/reconciler/metadata.js.map +1 -1
- package/dist/reconciler/node.d.ts +2 -2
- package/dist/reconciler/node.d.ts.map +1 -1
- package/dist/reconciler/node.js +1 -1
- package/dist/reconciler/node.js.map +1 -1
- package/dist/reconciler/placement.d.ts.map +1 -1
- package/dist/reconciler/placement.js +28 -12
- package/dist/reconciler/placement.js.map +1 -1
- package/dist/reconciler/registry.d.ts +56 -29
- package/dist/reconciler/registry.d.ts.map +1 -1
- package/dist/reconciler/registry.js +27 -26
- package/dist/reconciler/registry.js.map +1 -1
- package/dist/reconciler/root-element.d.ts +0 -1
- package/dist/reconciler/root-element.d.ts.map +1 -1
- package/dist/reconciler/root-element.js +0 -1
- package/dist/reconciler/root-element.js.map +1 -1
- package/dist/reconciler/root.d.ts +8 -22
- package/dist/reconciler/root.d.ts.map +1 -1
- package/dist/reconciler/root.js +5 -23
- package/dist/reconciler/root.js.map +1 -1
- package/dist/reconciler/signals.d.ts +3 -4
- package/dist/reconciler/signals.d.ts.map +1 -1
- package/dist/reconciler/signals.js +14 -26
- package/dist/reconciler/signals.js.map +1 -1
- package/dist/reconciler/text.d.ts.map +1 -1
- package/dist/reconciler/text.js +18 -13
- package/dist/reconciler/text.js.map +1 -1
- package/dist/utils/accessible-metadata.d.ts +0 -7
- package/dist/utils/accessible-metadata.d.ts.map +1 -1
- package/dist/utils/accessible-metadata.js +0 -7
- package/dist/utils/accessible-metadata.js.map +1 -1
- package/dist/utils/accessible-props.d.ts +49 -1
- package/dist/utils/accessible-props.d.ts.map +1 -1
- package/dist/utils/accessible-props.js.map +1 -1
- package/dist/utils/ref-prop.d.ts +0 -6
- package/dist/utils/ref-prop.d.ts.map +1 -1
- package/dist/utils/ref-prop.js +0 -6
- package/dist/utils/ref-prop.js.map +1 -1
- package/dist/utils/settings.d.ts +6 -0
- package/dist/utils/settings.d.ts.map +1 -1
- package/dist/utils/settings.js.map +1 -1
- package/env.d.ts +11 -4
- package/package.json +5 -5
- package/src/adw/config.ts +1 -0
- package/src/adw/dialog.tsx +1 -0
- package/src/adw/element-behaviors.ts +8 -39
- package/src/adw/element-config.ts +33 -41
- package/src/adw/index.ts +1 -0
- package/src/adw/prop-types.ts +1 -1
- package/src/bootstrap.ts +1 -1
- package/src/components/application.tsx +1 -0
- package/src/components/element.tsx +0 -1
- package/src/components/window.tsx +16 -2
- package/src/config.ts +5 -2
- package/src/element-behaviors.ts +0 -1
- package/src/element-config.ts +12 -8
- package/src/hooks/use-bind-setting.ts +8 -7
- package/src/hooks/use-parent-window.ts +3 -1
- package/src/hooks/use-property.ts +2 -2
- package/src/hooks/use-setting.ts +2 -3
- package/src/hooks/use-signal.ts +20 -10
- package/src/index.ts +10 -2
- package/src/internal.ts +5 -3
- package/src/prop-types.ts +86 -5
- package/src/reconciler/apply-props.ts +12 -6
- package/src/reconciler/behaviors.ts +14 -23
- package/src/reconciler/host-config.ts +3 -8
- package/src/reconciler/instance.ts +1 -1
- package/src/reconciler/metadata.ts +8 -8
- package/src/reconciler/node.ts +3 -3
- package/src/reconciler/placement.ts +33 -13
- package/src/reconciler/registry.ts +70 -41
- package/src/reconciler/root-element.ts +0 -1
- package/src/reconciler/root.ts +9 -26
- package/src/reconciler/signals.ts +16 -37
- package/src/reconciler/text.ts +21 -14
- package/src/utils/accessible-metadata.ts +0 -7
- package/src/utils/accessible-props.ts +49 -1
- package/src/utils/ref-prop.ts +0 -6
- package/src/utils/settings.ts +6 -0
package/dist/reconciler/root.js
CHANGED
|
@@ -3,7 +3,6 @@ import { createLogger } from "@gtkx/utils";
|
|
|
3
3
|
import { ConcurrentRoot } from "react-reconciler/constants.js";
|
|
4
4
|
import { reconciler } from "./host-config.js";
|
|
5
5
|
import { rootElement } from "./root-element.js";
|
|
6
|
-
import { endSuppressionNow } from "./signals.js";
|
|
7
6
|
const log = createLogger("react");
|
|
8
7
|
const activeRoots = new Set();
|
|
9
8
|
const errorHandlerSlot = createErrorHandlerSlot();
|
|
@@ -18,19 +17,11 @@ function createErrorHandlerSlot() {
|
|
|
18
17
|
},
|
|
19
18
|
};
|
|
20
19
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Installs a process-wide handler for errors thrown while rendering or applying an update.
|
|
23
|
-
*
|
|
24
|
-
* @param handler The handler to install.
|
|
25
|
-
* @returns The previously installed handler, or null.
|
|
26
|
-
*/
|
|
27
20
|
const setReconcilerErrorHandler = (handler) => errorHandlerSlot.set(handler);
|
|
28
21
|
const rethrowUncaughtRenderError = (error) => {
|
|
29
|
-
endSuppressionNow();
|
|
30
22
|
throw error;
|
|
31
23
|
};
|
|
32
24
|
const logCaughtRenderError = (error) => {
|
|
33
|
-
endSuppressionNow();
|
|
34
25
|
log.error("caught render error", error);
|
|
35
26
|
};
|
|
36
27
|
const openContainer = (containerInfo, callbacks) => {
|
|
@@ -50,12 +41,6 @@ const unmountContainer = (container) => {
|
|
|
50
41
|
reconciler.updateContainer(null, container, null, null);
|
|
51
42
|
activeRoots.delete(container);
|
|
52
43
|
};
|
|
53
|
-
/**
|
|
54
|
-
* Creates a root that mounts an element tree into a container, routing render errors to the supplied callbacks.
|
|
55
|
-
*
|
|
56
|
-
* @param options The container to render into and the error callbacks to route failures to.
|
|
57
|
-
* @returns A {@link ReconcilerRoot}.
|
|
58
|
-
*/
|
|
59
44
|
const createReconcilerRoot = (options) => {
|
|
60
45
|
const container = openContainer(options.containerInfo, options);
|
|
61
46
|
const root = {
|
|
@@ -70,10 +55,10 @@ const createReconcilerRoot = (options) => {
|
|
|
70
55
|
return root;
|
|
71
56
|
};
|
|
72
57
|
/**
|
|
73
|
-
* Creates a render root for a GTKX application.
|
|
58
|
+
* Creates a render root for a GTKX application. Uncaught render errors are rethrown and errors caught by an
|
|
59
|
+
* error boundary are logged.
|
|
74
60
|
*
|
|
75
|
-
* @param container The
|
|
76
|
-
* @returns A {@link Root} exposing render and unmount.
|
|
61
|
+
* @param container The GObject to render into; defaults to the shared {@link rootElement}, which holds no object.
|
|
77
62
|
*/
|
|
78
63
|
const createRoot = (container = rootElement) => {
|
|
79
64
|
const opaque = openContainer(container, {
|
|
@@ -99,11 +84,8 @@ const quit = () => {
|
|
|
99
84
|
/**
|
|
100
85
|
* Renders children into a container other than the surrounding tree.
|
|
101
86
|
*
|
|
102
|
-
* @param
|
|
103
|
-
* @param container The GObject, application, or {@link rootElement} to render into.
|
|
104
|
-
* @param key An optional stable key.
|
|
105
|
-
* @returns A React portal.
|
|
87
|
+
* @param container The GObject to render into, or {@link rootElement} to render at the top level.
|
|
106
88
|
*/
|
|
107
|
-
const createPortal = (children, container, key) =>
|
|
89
|
+
const createPortal = (children, container, key) => reconciler.createPortal(children, container, null, key ?? null);
|
|
108
90
|
export { setReconcilerErrorHandler, createReconcilerRoot, createRoot, quit, createPortal, };
|
|
109
91
|
//# sourceMappingURL=root.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/reconciler/root.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAkB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/reconciler/root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ErrorInfo, ReactNode, ReactPortal } from \"react\";\nimport * as Gdk from \"@gtkx/gi/gdk\";\nimport { createLogger, type Logger } from \"@gtkx/utils\";\nimport { ConcurrentRoot } from \"react-reconciler/constants.js\";\nimport { type Container, reconciler } from \"./host-config.js\";\nimport { rootElement } from \"./root-element.js\";\n\ntype OpaqueRoot = { [opaqueRoot]: true };\n\ntype RootErrorCallbacks = {\n onUncaughtError?: (error: unknown, info: ErrorInfo) => void;\n onCaughtError?: (error: unknown, info: ErrorInfo) => void;\n onRecoverableError?: (error: unknown, info: ErrorInfo) => void;\n};\n\ntype ReconcilerRootOptions = RootErrorCallbacks & { containerInfo: Container };\n\ntype ReconcilerRoot = {\n update: (element: ReactNode) => void;\n unmount: (teardown: (root: ReconcilerRoot) => Promise<void>) => Promise<void>;\n};\n\n/** The object {@link createRoot} returns: it renders an element tree into a container and can tear it down. */\ntype Root = {\n /** Mounts an element tree into the container, or updates the tree already mounted there. */\n render: (element: ReactNode) => void;\n /** Unmounts the rendered tree and runs its effect cleanups. */\n unmount: () => void;\n};\n\ntype ErrorHandler = (error: unknown) => void;\ntype ErrorHandlerSlot = { get: () => ErrorHandler | null; set: (handler: ErrorHandler) => ErrorHandler | null };\n\ndeclare const opaqueRoot: unique symbol;\nconst log: Logger = createLogger(\"react\");\nconst activeRoots: Set<OpaqueRoot> = new Set();\nconst errorHandlerSlot = createErrorHandlerSlot();\n\nfunction createErrorHandlerSlot(): ErrorHandlerSlot {\n let current: ErrorHandler | null = null;\n\n return {\n get: () => current,\n set: (handler) => {\n const previous = current;\n current = handler;\n\n return previous;\n },\n };\n}\n\nconst setReconcilerErrorHandler = (handler: ErrorHandler): ErrorHandler | null => errorHandlerSlot.set(handler);\n\nconst rethrowUncaughtRenderError = (error: unknown): never => {\n throw error;\n};\n\nconst logCaughtRenderError = (error: unknown): void => {\n log.error(\"caught render error\", error);\n};\n\nconst openContainer = (containerInfo: Container, callbacks: RootErrorCallbacks): OpaqueRoot => {\n const container = reconciler.createContainer(\n containerInfo,\n ConcurrentRoot,\n null,\n false,\n null,\n \"\",\n (error, info) => {\n errorHandlerSlot.get()?.(error);\n callbacks.onUncaughtError?.(error, info);\n },\n (error, info) => {\n errorHandlerSlot.get()?.(error);\n callbacks.onCaughtError?.(error, info);\n },\n (error, info) => {\n callbacks.onRecoverableError?.(error, info);\n },\n (): void => undefined,\n ) as OpaqueRoot;\n\n activeRoots.add(container);\n\n return container;\n};\n\nconst unmountContainer = (container: OpaqueRoot): void => {\n reconciler.updateContainer(null, container, null, null);\n activeRoots.delete(container);\n};\n\nconst createReconcilerRoot = (options: ReconcilerRootOptions): ReconcilerRoot => {\n const container = openContainer(options.containerInfo, options);\n\n const root: ReconcilerRoot = {\n update: (element) => {\n reconciler.updateContainer(element, container, null, null);\n },\n unmount: async (teardown) => {\n await teardown(root);\n activeRoots.delete(container);\n },\n };\n\n return root;\n};\n\n/**\n * Creates a render root for a GTKX application. Uncaught render errors are rethrown and errors caught by an\n * error boundary are logged.\n *\n * @param container The GObject to render into; defaults to the shared {@link rootElement}, which holds no object.\n */\nconst createRoot = (container: Container = rootElement): Root => {\n const opaque = openContainer(container, {\n onUncaughtError: rethrowUncaughtRenderError,\n onCaughtError: logCaughtRenderError,\n });\n\n return {\n render: (element) => {\n reconciler.updateContainer(element, opaque, null, null);\n },\n unmount: () => {\n unmountContainer(opaque);\n },\n };\n};\n\n/** Unmounts every active render root and stops the originating signal from propagating further. */\nconst quit = (): typeof Gdk.EVENT_STOP => {\n for (const container of activeRoots) {\n unmountContainer(container);\n }\n\n return Gdk.EVENT_STOP;\n};\n\n/**\n * Renders children into a container other than the surrounding tree.\n *\n * @param container The GObject to render into, or {@link rootElement} to render at the top level.\n */\nconst createPortal = (children: ReactNode, container: Container, key?: string): ReactPortal =>\n reconciler.createPortal(children, container, null, key ?? null) as unknown as ReactPortal;\n\nexport {\n setReconcilerErrorHandler,\n createReconcilerRoot,\n createRoot,\n quit,\n createPortal,\n type ReconcilerRoot,\n type Root,\n};\n"]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { type SignalHandler } from "@gtkx/runtime";
|
|
2
2
|
import type { SignalTarget } from "./node.js";
|
|
3
|
-
declare const
|
|
4
|
-
declare const
|
|
5
|
-
declare const endSuppressionNow: () => void;
|
|
3
|
+
declare const isApplyingWrite: () => boolean;
|
|
4
|
+
declare const applyWrite: <T>(write: () => T) => T;
|
|
6
5
|
declare const connectHandler: (target: SignalTarget, prop: string, signal: string, handler: SignalHandler) => void;
|
|
7
6
|
declare const disconnectHandler: (target: SignalTarget, prop: string) => void;
|
|
8
7
|
declare const disconnectAllHandlers: (target: SignalTarget) => void;
|
|
9
|
-
export {
|
|
8
|
+
export { applyWrite, isApplyingWrite, connectHandler, disconnectHandler, disconnectAllHandlers, };
|
|
10
9
|
//# sourceMappingURL=signals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/reconciler/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/reconciler/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,WAAW,CAAC;AAM7D,QAAA,MAAM,eAAe,QAAO,OAA+B,CAAC;AAE5D,QAAA,MAAM,UAAU,GAAI,CAAC,EAAE,OAAO,MAAM,CAAC,KAAG,CAQvC,CAAC;AA2BF,QAAA,MAAM,cAAc,GAAI,QAAQ,YAAY,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,SAAS,aAAa,KAAG,IAmBpG,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,YAAY,EAAE,MAAM,MAAM,KAAG,IAS/D,CAAC;AAEF,QAAA,MAAM,qBAAqB,GAAI,QAAQ,YAAY,KAAG,IAMrD,CAAC;AAEF,OAAO,EACH,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,qBAAqB,GACxB,CAAC"}
|
|
@@ -2,36 +2,24 @@ import { getSignalBaseName } from "@gtkx/runtime";
|
|
|
2
2
|
import { camelCase } from "@gtkx/utils";
|
|
3
3
|
import { typeInfoFor } from "./metadata.js";
|
|
4
4
|
const NOTIFY_DETAIL_PREFIX = "notify::";
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
17
|
-
return {
|
|
18
|
-
beginSuppression: () => {
|
|
19
|
-
depth += 1;
|
|
20
|
-
},
|
|
21
|
-
endSuppression: () => {
|
|
22
|
-
queueMicrotask(release);
|
|
23
|
-
},
|
|
24
|
-
endSuppressionNow: release,
|
|
25
|
-
isSuppressed: () => depth > 0,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
5
|
+
const writeState = { depth: 0 };
|
|
6
|
+
const isApplyingWrite = () => writeState.depth > 0;
|
|
7
|
+
const applyWrite = (write) => {
|
|
8
|
+
writeState.depth += 1;
|
|
9
|
+
try {
|
|
10
|
+
return write();
|
|
11
|
+
}
|
|
12
|
+
finally {
|
|
13
|
+
writeState.depth = Math.max(0, writeState.depth - 1);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
28
16
|
const getNotifyProperty = (signal) => signal.startsWith(NOTIFY_DETAIL_PREFIX) ? camelCase(signal.slice(NOTIFY_DETAIL_PREFIX.length)) : null;
|
|
29
17
|
const isBlockableSignal = (info, signal) => info.userEventSignals.has(getSignalBaseName(signal));
|
|
30
18
|
const invokeHandler = (target, record, notifyProperty, args) => notifyProperty === null
|
|
31
19
|
? record.handler(...args, target.object)
|
|
32
20
|
: record.handler(Reflect.get(target.object, notifyProperty), target.object);
|
|
33
21
|
const wrapHandler = (target, record, notifyProperty) => (...args) => {
|
|
34
|
-
if (record.
|
|
22
|
+
if (record.isBlockable && isApplyingWrite()) {
|
|
35
23
|
return undefined;
|
|
36
24
|
}
|
|
37
25
|
return target.dispatch(() => invokeHandler(target, record, notifyProperty, args));
|
|
@@ -47,7 +35,7 @@ const connectHandler = (target, prop, signal, handler) => {
|
|
|
47
35
|
}
|
|
48
36
|
const isBlockable = isBlockableSignal(typeInfoFor(target.typeName), signal);
|
|
49
37
|
const notifyProperty = getNotifyProperty(signal);
|
|
50
|
-
const record = { signal, handler, wrapped: () => undefined,
|
|
38
|
+
const record = { signal, handler, wrapped: () => undefined, isBlockable };
|
|
51
39
|
record.wrapped = wrapHandler(target, record, notifyProperty);
|
|
52
40
|
target.object.on(signal, record.wrapped);
|
|
53
41
|
target.handlers.set(prop, record);
|
|
@@ -66,5 +54,5 @@ const disconnectAllHandlers = (target) => {
|
|
|
66
54
|
}
|
|
67
55
|
target.handlers.clear();
|
|
68
56
|
};
|
|
69
|
-
export {
|
|
57
|
+
export { applyWrite, isApplyingWrite, connectHandler, disconnectHandler, disconnectAllHandlers, };
|
|
70
58
|
//# sourceMappingURL=signals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/reconciler/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAsB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAiB,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/reconciler/signals.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSignalBaseName, type SignalHandler } from \"@gtkx/runtime\";\nimport { camelCase } from \"@gtkx/utils\";\nimport type { HandlerRecord, SignalTarget } from \"./node.js\";\nimport { type TypeInfo, typeInfoFor } from \"./metadata.js\";\n\nconst NOTIFY_DETAIL_PREFIX = \"notify::\";\nconst writeState: { depth: number } = { depth: 0 };\n\nconst isApplyingWrite = (): boolean => writeState.depth > 0;\n\nconst applyWrite = <T>(write: () => T): T => {\n writeState.depth += 1;\n\n try {\n return write();\n } finally {\n writeState.depth = Math.max(0, writeState.depth - 1);\n }\n};\n\nconst getNotifyProperty = (signal: string): string | null =>\n signal.startsWith(NOTIFY_DETAIL_PREFIX) ? camelCase(signal.slice(NOTIFY_DETAIL_PREFIX.length)) : null;\n\nconst isBlockableSignal = (info: TypeInfo, signal: string): boolean =>\n info.userEventSignals.has(getSignalBaseName(signal));\n\nconst invokeHandler = (\n target: SignalTarget,\n record: HandlerRecord,\n notifyProperty: string | null,\n args: unknown[],\n): unknown =>\n notifyProperty === null\n ? record.handler(...args, target.object)\n : record.handler(Reflect.get(target.object, notifyProperty), target.object);\n\nconst wrapHandler = (target: SignalTarget, record: HandlerRecord, notifyProperty: string | null): SignalHandler =>\n (...args: unknown[]): unknown => {\n if (record.isBlockable && isApplyingWrite()) {\n return undefined;\n }\n\n return target.dispatch(() => invokeHandler(target, record, notifyProperty, args));\n };\n\nconst connectHandler = (target: SignalTarget, prop: string, signal: string, handler: SignalHandler): void => {\n const existing = target.handlers.get(prop);\n\n if (existing?.signal === signal) {\n existing.handler = handler;\n\n return;\n }\n\n if (existing !== undefined) {\n target.object.off(existing.signal, existing.wrapped);\n }\n\n const isBlockable = isBlockableSignal(typeInfoFor(target.typeName), signal);\n const notifyProperty = getNotifyProperty(signal);\n const record: HandlerRecord = { signal, handler, wrapped: (): undefined => undefined, isBlockable };\n record.wrapped = wrapHandler(target, record, notifyProperty);\n target.object.on(signal, record.wrapped);\n target.handlers.set(prop, record);\n};\n\nconst disconnectHandler = (target: SignalTarget, prop: string): void => {\n const record = target.handlers.get(prop);\n\n if (record === undefined) {\n return;\n }\n\n target.object.off(record.signal, record.wrapped);\n target.handlers.delete(prop);\n};\n\nconst disconnectAllHandlers = (target: SignalTarget): void => {\n for (const record of target.handlers.values()) {\n target.object.off(record.signal, record.wrapped);\n }\n\n target.handlers.clear();\n};\n\nexport {\n applyWrite,\n isApplyingWrite,\n connectHandler,\n disconnectHandler,\n disconnectAllHandlers,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/reconciler/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAe,WAAW,EAAc,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/reconciler/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAe,WAAW,EAAc,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAgB3C,QAAA,MAAM,SAAS,SAAS,CAAC;AAsBzB,QAAA,MAAM,UAAU,GAAI,QAAQ,GAAG,CAAC,UAAU,KAAG,MACwB,CAAC;AActE,QAAA,MAAM,WAAW,GAAI,QAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,OAAO,KAAG,OACQ,CAAC;AA4DrF,QAAA,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,KAIxC,CAAC;AAEN,QAAA,MAAM,aAAa,GAAI,MAAM,WAAW,KAAG,OAC8B,CAAC;AAuB1E,QAAA,MAAM,aAAa,GAAI,MAAM,WAAW,KAAG,IAM1C,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,MAAM,QAAQ,KAAG,WAAW,GAAG,IAAkD,CAAC;AAEzG,QAAA,MAAM,UAAU,GAAI,MAAM,WAAW,EAAE,OAAO,YAAY,EAAE,QAAQ,YAAY,GAAG,IAAI,KAAG,IAgBzF,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,MAAM,WAAW,EAAE,OAAO,YAAY,KAAG,IAQ/D,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,MAAM,WAAW,EAAE,OAAO,KAAK,KAAG,IAY7D,CAAC;AAsDF,QAAA,MAAM,sBAAsB,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,OACN,CAAC;AA6F7D,QAAA,MAAM,cAAc,QAAO,IAQ1B,CAAC;AAiBF,QAAA,MAAM,uBAAuB,GAAI,MAAM,WAAW,EAAE,MAAM,QAAQ,EAAE,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,OAyBtG,CAAC;AAEF,OAAO,EACH,SAAS,EACT,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GAC1B,CAAC"}
|
package/dist/reconciler/text.js
CHANGED
|
@@ -2,6 +2,7 @@ import * as Gdk from "@gtkx/gi/gdk";
|
|
|
2
2
|
import * as Gtk from "@gtkx/gi/gtk";
|
|
3
3
|
import { drain, indexBeforeOrEnd } from "@gtkx/utils";
|
|
4
4
|
import { ELEMENT_KIND, TEXT_KIND } from "./node.js";
|
|
5
|
+
import { applyWrite } from "./signals.js";
|
|
5
6
|
const dirtyHosts = new Set();
|
|
6
7
|
const tagTables = new WeakMap();
|
|
7
8
|
const TEXT_CONTENT_KINDS = new Set(["label", "buffer", "tag"]);
|
|
@@ -48,23 +49,23 @@ const contentTextLength = (node) => {
|
|
|
48
49
|
const isTagElement = (node) => node.kind === ELEMENT_KIND && node.contentKind === "tag";
|
|
49
50
|
const stepOffset = (node, target, offset) => {
|
|
50
51
|
if (node === target) {
|
|
51
|
-
return {
|
|
52
|
+
return { wasFound: true, offset };
|
|
52
53
|
}
|
|
53
54
|
if (isTagElement(node)) {
|
|
54
55
|
return getOffset(node.content, target, offset);
|
|
55
56
|
}
|
|
56
|
-
return {
|
|
57
|
+
return { wasFound: false, offset: offset + contentTextLength(node) };
|
|
57
58
|
};
|
|
58
59
|
const getOffset = (nodes, target, start) => {
|
|
59
60
|
let offset = start;
|
|
60
61
|
for (const node of nodes) {
|
|
61
62
|
const step = stepOffset(node, target, offset);
|
|
62
|
-
if (step.
|
|
63
|
+
if (step.wasFound) {
|
|
63
64
|
return step;
|
|
64
65
|
}
|
|
65
66
|
offset = step.offset;
|
|
66
67
|
}
|
|
67
|
-
return {
|
|
68
|
+
return { wasFound: false, offset };
|
|
68
69
|
};
|
|
69
70
|
const enclosingTagNodes = (node) => {
|
|
70
71
|
const nodes = [];
|
|
@@ -220,12 +221,14 @@ const rebuildBuffer = (node) => {
|
|
|
220
221
|
if (node.props.text !== undefined || !(buffer instanceof Gtk.TextBuffer)) {
|
|
221
222
|
return;
|
|
222
223
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
224
|
+
applyWrite(() => {
|
|
225
|
+
buffer.setText("", -1);
|
|
226
|
+
const build = { buffer, view: node.bufferView, marks: [] };
|
|
227
|
+
insertContent(build, node.content);
|
|
228
|
+
for (const mark of build.marks) {
|
|
229
|
+
placeMark(buffer, mark.node, mark.offset);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
229
232
|
};
|
|
230
233
|
const rebuildLabel = (node) => {
|
|
231
234
|
if (node.props.label !== undefined) {
|
|
@@ -261,12 +264,14 @@ const didUpdateTextSurgically = (host, node, oldText, newText) => {
|
|
|
261
264
|
return false;
|
|
262
265
|
}
|
|
263
266
|
const located = getOffset(host.content, node, 0);
|
|
264
|
-
if (!located.
|
|
267
|
+
if (!located.wasFound) {
|
|
265
268
|
return false;
|
|
266
269
|
}
|
|
267
270
|
const start = located.offset;
|
|
268
|
-
|
|
269
|
-
|
|
271
|
+
applyWrite(() => {
|
|
272
|
+
buffer.delete(buffer.getIterAtOffset(start), buffer.getIterAtOffset(start + charLength(oldText)));
|
|
273
|
+
buffer.insert(buffer.getIterAtOffset(start), newText, -1);
|
|
274
|
+
});
|
|
270
275
|
const startIter = buffer.getIterAtOffset(start);
|
|
271
276
|
const endIter = buffer.getIterAtOffset(start + charLength(newText));
|
|
272
277
|
applyEnclosingTags(buffer, node, startIter, endIter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/reconciler/text.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { drain, indexBeforeOrEnd } from \"@gtkx/utils\";\nimport type { ContentChild, ContentKind, ElementNode, ParentNode, TextNode } from \"./node.js\";\nimport type { Props } from \"./registry.js\";\nimport { ELEMENT_KIND, TEXT_KIND } from \"./node.js\";\n\ntype OffsetResult = { found: boolean; offset: number };\n\ntype BufferBuild = {\n buffer: Gtk.TextBuffer;\n view: Gtk.TextView | null;\n marks: { node: ElementNode; offset: number }[];\n};\n\nconst dirtyHosts: Set<ElementNode> = new Set();\nconst tagTables: WeakMap<object, Gtk.TextTagTable> = new WeakMap();\nconst TEXT_CONTENT_KINDS: Set<string> = new Set([\"label\", \"buffer\", \"tag\"]);\nconst PAINTABLE_PROP = \"paintable\";\nconst TEXT_PROP = \"text\";\n\nconst CONTENT_MIX_RULES: { kind: ContentKind; prop: string; message: string }[] = [\n {\n kind: \"label\",\n prop: \"label\",\n message: \"<GtkLabel> cannot mix a `label` prop with text children; use one or the other\",\n },\n {\n kind: \"buffer\",\n prop: \"text\",\n message: \"<GtkTextBuffer> cannot mix a `text` prop with content children; use one or the other\",\n },\n {\n kind: \"anchor\",\n prop: PAINTABLE_PROP,\n message: \"<GtkTextChildAnchor> cannot mix a `paintable` prop with a child widget; use one or the other\",\n },\n];\n\nconst charLength = (text: string): number => text[Symbol.iterator]().toArray().length;\n\nconst bufferText = (buffer: Gtk.TextBuffer): string =>\n buffer.getText(buffer.getStartIter(), buffer.getEndIter(), false);\n\nconst currentText = (object: GObject.Object): string | null => {\n if (object instanceof Gtk.TextBuffer) {\n return bufferText(object);\n }\n\n if (object instanceof Gtk.Editable || object instanceof Gtk.EntryBuffer) {\n return object.getText();\n }\n\n return null;\n};\n\nconst hasSameText = (object: GObject.Object, prop: string, value: unknown): boolean =>\n prop === TEXT_PROP && typeof value === \"string\" && currentText(object) === value;\n\nconst contentTextLength = (node: ContentChild): number => {\n if (node.kind === TEXT_KIND) {\n return charLength(node.text);\n }\n\n if (node.contentKind === \"tag\") {\n return node.content.reduce((sum, child) => sum + contentTextLength(child), 0);\n }\n\n return node.contentKind === \"anchor\" ? 1 : 0;\n};\n\nconst isTagElement = (node: ContentChild): node is ElementNode =>\n node.kind === ELEMENT_KIND && node.contentKind === \"tag\";\n\nconst stepOffset = (node: ContentChild, target: TextNode, offset: number): OffsetResult => {\n if (node === target) {\n return { found: true, offset };\n }\n\n if (isTagElement(node)) {\n return getOffset(node.content, target, offset);\n }\n\n return { found: false, offset: offset + contentTextLength(node) };\n};\n\nconst getOffset = (nodes: ContentChild[], target: TextNode, start: number): OffsetResult => {\n let offset = start;\n\n for (const node of nodes) {\n const step = stepOffset(node, target, offset);\n\n if (step.found) {\n return step;\n }\n\n offset = step.offset;\n }\n\n return { found: false, offset };\n};\n\nconst enclosingTagNodes = (node: TextNode): ElementNode[] => {\n const nodes: ElementNode[] = [];\n let current: ParentNode | null = node.parent;\n\n while (current !== null && current.kind === ELEMENT_KIND) {\n if (current.contentKind === \"tag\") {\n nodes.push(current);\n }\n\n current = current.parent;\n }\n\n return nodes;\n};\n\nconst textRestrictionError = (text: string): Error =>\n new Error(\n \"Text strings must be rendered within a <GtkLabel> or <GtkTextBuffer> element; \" +\n `received ${JSON.stringify(text)}`,\n );\n\nconst canAcceptText = (host: ElementNode): boolean =>\n host.contentKind !== null && TEXT_CONTENT_KINDS.has(host.contentKind);\n\nconst isRootHost = (node: ElementNode): boolean => node.contentKind === \"label\" || node.contentKind === \"buffer\";\n\nconst mapElementParent = <T>(parent: ParentNode | null, map: (element: ElementNode) => T): T | null =>\n parent !== null && parent.kind === ELEMENT_KIND ? map(parent) : null;\n\nconst parentElement = (node: ElementNode): ElementNode | null => mapElementParent(node.parent, (parent) => parent);\n\nconst getRootHost = (node: ElementNode): ElementNode | null => {\n let current: ElementNode | null = node;\n\n while (current !== null) {\n if (isRootHost(current)) {\n return current;\n }\n\n current = parentElement(current);\n }\n\n return null;\n};\n\nconst markTextDirty = (host: ElementNode): void => {\n const root = getRootHost(host);\n\n if (root !== null) {\n dirtyHosts.add(root);\n }\n};\n\nconst enclosingHost = (node: TextNode): ElementNode | null => mapElementParent(node.parent, getRootHost);\n\nconst addContent = (host: ElementNode, child: ContentChild, before: ContentChild | null): void => {\n const content = host.content;\n const existing = content.indexOf(child);\n\n if (existing !== -1) {\n content.splice(existing, 1);\n }\n\n content.splice(\n indexBeforeOrEnd(content, before, (item, target) => item === target),\n 0,\n child,\n );\n\n child.parent = host;\n markTextDirty(host);\n};\n\nconst removeContent = (host: ElementNode, child: ContentChild): void => {\n const index = host.content.indexOf(child);\n\n if (index !== -1) {\n host.content.splice(index, 1);\n }\n\n markTextDirty(host);\n};\n\nconst validateContentMix = (node: ElementNode, props: Props): void => {\n if (node.content.length === 0) {\n return;\n }\n\n const violated = CONTENT_MIX_RULES.find(\n (rule) => rule.kind === node.contentKind && props[rule.prop] !== undefined,\n );\n\n if (violated !== undefined) {\n throw new Error(violated.message);\n }\n};\n\nconst detachTag = (tag: Gtk.TextTag, table: Gtk.TextTagTable, name: string | null): void => {\n const previous = tagTables.get(tag);\n\n if (previous !== undefined && previous !== table) {\n previous.remove(tag);\n }\n\n if (name === null) {\n return;\n }\n\n const existing = table.lookup(name);\n\n if (existing !== null && existing !== tag) {\n table.remove(existing);\n }\n};\n\nconst ensureTag = (table: Gtk.TextTagTable, node: ElementNode): void => {\n const tag = node.object;\n\n if (!(tag instanceof Gtk.TextTag) || tagTables.get(tag) === table) {\n return;\n }\n\n const name = typeof node.props.name === \"string\" ? node.props.name : null;\n detachTag(tag, table, name);\n\n if (name === null || table.lookup(name) !== tag) {\n table.add(tag);\n }\n\n tagTables.set(tag, table);\n};\n\nconst insertTag = (build: BufferBuild, node: ElementNode): void => {\n const start = build.buffer.getCharCount();\n insertContent(build, node.content);\n const tag = node.object;\n\n if (tag instanceof Gtk.TextTag) {\n ensureTag(build.buffer.getTagTable(), node);\n build.buffer.applyTag(tag, build.buffer.getIterAtOffset(start), build.buffer.getEndIter());\n }\n};\n\nconst contentPaintable = (node: ElementNode): Gdk.Paintable | null => {\n const value = node.props[PAINTABLE_PROP];\n\n return value instanceof Gdk.Paintable ? value : null;\n};\n\nconst isContentPaintableProp = (node: ElementNode, name: string): boolean =>\n name === PAINTABLE_PROP && node.contentKind === \"anchor\";\n\nconst insertAnchor = (build: BufferBuild, node: ElementNode): void => {\n const paintable = contentPaintable(node);\n\n if (paintable !== null) {\n build.buffer.insertPaintable(build.buffer.getEndIter(), paintable);\n\n return;\n }\n\n const anchor = node.object;\n\n if (!(anchor instanceof Gtk.TextChildAnchor)) {\n return;\n }\n\n build.buffer.insertChildAnchor(build.buffer.getEndIter(), anchor);\n const child = node.content[0];\n\n if (build.view !== null && child?.kind === ELEMENT_KIND && child.object instanceof Gtk.Widget) {\n build.view.addChildAtAnchor(child.object, anchor);\n }\n};\n\nconst insertElement = (build: BufferBuild, node: ElementNode): void => {\n if (node.contentKind === \"tag\") {\n insertTag(build, node);\n } else if (node.contentKind === \"anchor\") {\n insertAnchor(build, node);\n } else {\n build.marks.push({ node, offset: build.buffer.getCharCount() });\n }\n};\n\nconst insertContent = (build: BufferBuild, nodes: ContentChild[]): void => {\n for (const child of nodes) {\n if (child.kind === TEXT_KIND) {\n build.buffer.insert(build.buffer.getEndIter(), child.text, -1);\n } else {\n insertElement(build, child);\n }\n }\n};\n\nconst placeMark = (buffer: Gtk.TextBuffer, node: ElementNode, offset: number): void => {\n const mark = node.object;\n\n if (!(mark instanceof Gtk.TextMark)) {\n return;\n }\n\n const iter = buffer.getIterAtOffset(offset);\n\n if (mark.getBuffer() === null) {\n buffer.addMark(mark, iter);\n } else {\n buffer.moveMark(mark, iter);\n }\n};\n\nconst rebuildBuffer = (node: ElementNode): void => {\n const buffer = node.object;\n\n if (node.props.text !== undefined || !(buffer instanceof Gtk.TextBuffer)) {\n return;\n }\n\n buffer.setText(\"\", -1);\n const build: BufferBuild = { buffer, view: node.bufferView, marks: [] };\n insertContent(build, node.content);\n\n for (const mark of build.marks) {\n placeMark(buffer, mark.node, mark.offset);\n }\n};\n\nconst rebuildLabel = (node: ElementNode): void => {\n if (node.props.label !== undefined) {\n return;\n }\n\n const label = node.object;\n\n if (!(label instanceof Gtk.Label)) {\n return;\n }\n\n label.setLabel(node.content.map((child) => (child.kind === TEXT_KIND ? child.text : \"\")).join(\"\"));\n};\n\nconst flushTextHosts = (): void => {\n drain(dirtyHosts, (host) => {\n if (host.contentKind === \"label\") {\n rebuildLabel(host);\n } else if (host.contentKind === \"buffer\") {\n rebuildBuffer(host);\n }\n });\n};\n\nconst applyEnclosingTags = (\n buffer: Gtk.TextBuffer,\n node: TextNode,\n startIter: Gtk.TextIter,\n endIter: Gtk.TextIter,\n): void => {\n for (const tagNode of enclosingTagNodes(node)) {\n ensureTag(buffer.getTagTable(), tagNode);\n\n if (tagNode.object instanceof Gtk.TextTag) {\n buffer.applyTag(tagNode.object, startIter, endIter);\n }\n }\n};\n\nconst didUpdateTextSurgically = (host: ElementNode, node: TextNode, oldText: string, newText: string): boolean => {\n const buffer = host.object;\n\n if (host.contentKind !== \"buffer\" || !(buffer instanceof Gtk.TextBuffer)) {\n return false;\n }\n\n const located = getOffset(host.content, node, 0);\n\n if (!located.found) {\n return false;\n }\n\n const start = located.offset;\n buffer.delete(buffer.getIterAtOffset(start), buffer.getIterAtOffset(start + charLength(oldText)));\n buffer.insert(buffer.getIterAtOffset(start), newText, -1);\n const startIter = buffer.getIterAtOffset(start);\n const endIter = buffer.getIterAtOffset(start + charLength(newText));\n applyEnclosingTags(buffer, node, startIter, endIter);\n\n return true;\n};\n\nexport {\n TEXT_PROP,\n textRestrictionError,\n bufferText,\n hasSameText,\n canAcceptText,\n isContentPaintableProp,\n markTextDirty,\n enclosingHost,\n addContent,\n removeContent,\n validateContentMix,\n flushTextHosts,\n didUpdateTextSurgically,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/reconciler/text.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gdk from \"@gtkx/gi/gdk\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport { drain, indexBeforeOrEnd } from \"@gtkx/utils\";\nimport type { ContentChild, ContentKind, ElementNode, ParentNode, TextNode } from \"./node.js\";\nimport type { Props } from \"./registry.js\";\nimport { ELEMENT_KIND, TEXT_KIND } from \"./node.js\";\nimport { applyWrite } from \"./signals.js\";\n\ntype OffsetResult = { wasFound: boolean; offset: number };\n\ntype BufferBuild = {\n buffer: Gtk.TextBuffer;\n view: Gtk.TextView | null;\n marks: { node: ElementNode; offset: number }[];\n};\n\nconst dirtyHosts: Set<ElementNode> = new Set();\nconst tagTables: WeakMap<object, Gtk.TextTagTable> = new WeakMap();\nconst TEXT_CONTENT_KINDS: Set<string> = new Set([\"label\", \"buffer\", \"tag\"]);\nconst PAINTABLE_PROP = \"paintable\";\nconst TEXT_PROP = \"text\";\n\nconst CONTENT_MIX_RULES: { kind: ContentKind; prop: string; message: string }[] = [\n {\n kind: \"label\",\n prop: \"label\",\n message: \"<GtkLabel> cannot mix a `label` prop with text children; use one or the other\",\n },\n {\n kind: \"buffer\",\n prop: \"text\",\n message: \"<GtkTextBuffer> cannot mix a `text` prop with content children; use one or the other\",\n },\n {\n kind: \"anchor\",\n prop: PAINTABLE_PROP,\n message: \"<GtkTextChildAnchor> cannot mix a `paintable` prop with a child widget; use one or the other\",\n },\n];\n\nconst charLength = (text: string): number => text[Symbol.iterator]().toArray().length;\n\nconst bufferText = (buffer: Gtk.TextBuffer): string =>\n buffer.getText(buffer.getStartIter(), buffer.getEndIter(), false);\n\nconst currentText = (object: GObject.Object): string | null => {\n if (object instanceof Gtk.TextBuffer) {\n return bufferText(object);\n }\n\n if (object instanceof Gtk.Editable || object instanceof Gtk.EntryBuffer) {\n return object.getText();\n }\n\n return null;\n};\n\nconst hasSameText = (object: GObject.Object, prop: string, value: unknown): boolean =>\n prop === TEXT_PROP && typeof value === \"string\" && currentText(object) === value;\n\nconst contentTextLength = (node: ContentChild): number => {\n if (node.kind === TEXT_KIND) {\n return charLength(node.text);\n }\n\n if (node.contentKind === \"tag\") {\n return node.content.reduce((sum, child) => sum + contentTextLength(child), 0);\n }\n\n return node.contentKind === \"anchor\" ? 1 : 0;\n};\n\nconst isTagElement = (node: ContentChild): node is ElementNode =>\n node.kind === ELEMENT_KIND && node.contentKind === \"tag\";\n\nconst stepOffset = (node: ContentChild, target: TextNode, offset: number): OffsetResult => {\n if (node === target) {\n return { wasFound: true, offset };\n }\n\n if (isTagElement(node)) {\n return getOffset(node.content, target, offset);\n }\n\n return { wasFound: false, offset: offset + contentTextLength(node) };\n};\n\nconst getOffset = (nodes: ContentChild[], target: TextNode, start: number): OffsetResult => {\n let offset = start;\n\n for (const node of nodes) {\n const step = stepOffset(node, target, offset);\n\n if (step.wasFound) {\n return step;\n }\n\n offset = step.offset;\n }\n\n return { wasFound: false, offset };\n};\n\nconst enclosingTagNodes = (node: TextNode): ElementNode[] => {\n const nodes: ElementNode[] = [];\n let current: ParentNode | null = node.parent;\n\n while (current !== null && current.kind === ELEMENT_KIND) {\n if (current.contentKind === \"tag\") {\n nodes.push(current);\n }\n\n current = current.parent;\n }\n\n return nodes;\n};\n\nconst textRestrictionError = (text: string): Error =>\n new Error(\n \"Text strings must be rendered within a <GtkLabel> or <GtkTextBuffer> element; \" +\n `received ${JSON.stringify(text)}`,\n );\n\nconst canAcceptText = (host: ElementNode): boolean =>\n host.contentKind !== null && TEXT_CONTENT_KINDS.has(host.contentKind);\n\nconst isRootHost = (node: ElementNode): boolean => node.contentKind === \"label\" || node.contentKind === \"buffer\";\n\nconst mapElementParent = <T>(parent: ParentNode | null, map: (element: ElementNode) => T): T | null =>\n parent !== null && parent.kind === ELEMENT_KIND ? map(parent) : null;\n\nconst parentElement = (node: ElementNode): ElementNode | null => mapElementParent(node.parent, (parent) => parent);\n\nconst getRootHost = (node: ElementNode): ElementNode | null => {\n let current: ElementNode | null = node;\n\n while (current !== null) {\n if (isRootHost(current)) {\n return current;\n }\n\n current = parentElement(current);\n }\n\n return null;\n};\n\nconst markTextDirty = (host: ElementNode): void => {\n const root = getRootHost(host);\n\n if (root !== null) {\n dirtyHosts.add(root);\n }\n};\n\nconst enclosingHost = (node: TextNode): ElementNode | null => mapElementParent(node.parent, getRootHost);\n\nconst addContent = (host: ElementNode, child: ContentChild, before: ContentChild | null): void => {\n const content = host.content;\n const existing = content.indexOf(child);\n\n if (existing !== -1) {\n content.splice(existing, 1);\n }\n\n content.splice(\n indexBeforeOrEnd(content, before, (item, target) => item === target),\n 0,\n child,\n );\n\n child.parent = host;\n markTextDirty(host);\n};\n\nconst removeContent = (host: ElementNode, child: ContentChild): void => {\n const index = host.content.indexOf(child);\n\n if (index !== -1) {\n host.content.splice(index, 1);\n }\n\n markTextDirty(host);\n};\n\nconst validateContentMix = (node: ElementNode, props: Props): void => {\n if (node.content.length === 0) {\n return;\n }\n\n const violated = CONTENT_MIX_RULES.find(\n (rule) => rule.kind === node.contentKind && props[rule.prop] !== undefined,\n );\n\n if (violated !== undefined) {\n throw new Error(violated.message);\n }\n};\n\nconst detachTag = (tag: Gtk.TextTag, table: Gtk.TextTagTable, name: string | null): void => {\n const previous = tagTables.get(tag);\n\n if (previous !== undefined && previous !== table) {\n previous.remove(tag);\n }\n\n if (name === null) {\n return;\n }\n\n const existing = table.lookup(name);\n\n if (existing !== null && existing !== tag) {\n table.remove(existing);\n }\n};\n\nconst ensureTag = (table: Gtk.TextTagTable, node: ElementNode): void => {\n const tag = node.object;\n\n if (!(tag instanceof Gtk.TextTag) || tagTables.get(tag) === table) {\n return;\n }\n\n const name = typeof node.props.name === \"string\" ? node.props.name : null;\n detachTag(tag, table, name);\n\n if (name === null || table.lookup(name) !== tag) {\n table.add(tag);\n }\n\n tagTables.set(tag, table);\n};\n\nconst insertTag = (build: BufferBuild, node: ElementNode): void => {\n const start = build.buffer.getCharCount();\n insertContent(build, node.content);\n const tag = node.object;\n\n if (tag instanceof Gtk.TextTag) {\n ensureTag(build.buffer.getTagTable(), node);\n build.buffer.applyTag(tag, build.buffer.getIterAtOffset(start), build.buffer.getEndIter());\n }\n};\n\nconst contentPaintable = (node: ElementNode): Gdk.Paintable | null => {\n const value = node.props[PAINTABLE_PROP];\n\n return value instanceof Gdk.Paintable ? value : null;\n};\n\nconst isContentPaintableProp = (node: ElementNode, name: string): boolean =>\n name === PAINTABLE_PROP && node.contentKind === \"anchor\";\n\nconst insertAnchor = (build: BufferBuild, node: ElementNode): void => {\n const paintable = contentPaintable(node);\n\n if (paintable !== null) {\n build.buffer.insertPaintable(build.buffer.getEndIter(), paintable);\n\n return;\n }\n\n const anchor = node.object;\n\n if (!(anchor instanceof Gtk.TextChildAnchor)) {\n return;\n }\n\n build.buffer.insertChildAnchor(build.buffer.getEndIter(), anchor);\n const child = node.content[0];\n\n if (build.view !== null && child?.kind === ELEMENT_KIND && child.object instanceof Gtk.Widget) {\n build.view.addChildAtAnchor(child.object, anchor);\n }\n};\n\nconst insertElement = (build: BufferBuild, node: ElementNode): void => {\n if (node.contentKind === \"tag\") {\n insertTag(build, node);\n } else if (node.contentKind === \"anchor\") {\n insertAnchor(build, node);\n } else {\n build.marks.push({ node, offset: build.buffer.getCharCount() });\n }\n};\n\nconst insertContent = (build: BufferBuild, nodes: ContentChild[]): void => {\n for (const child of nodes) {\n if (child.kind === TEXT_KIND) {\n build.buffer.insert(build.buffer.getEndIter(), child.text, -1);\n } else {\n insertElement(build, child);\n }\n }\n};\n\nconst placeMark = (buffer: Gtk.TextBuffer, node: ElementNode, offset: number): void => {\n const mark = node.object;\n\n if (!(mark instanceof Gtk.TextMark)) {\n return;\n }\n\n const iter = buffer.getIterAtOffset(offset);\n\n if (mark.getBuffer() === null) {\n buffer.addMark(mark, iter);\n } else {\n buffer.moveMark(mark, iter);\n }\n};\n\nconst rebuildBuffer = (node: ElementNode): void => {\n const buffer = node.object;\n\n if (node.props.text !== undefined || !(buffer instanceof Gtk.TextBuffer)) {\n return;\n }\n\n applyWrite(() => {\n buffer.setText(\"\", -1);\n const build: BufferBuild = { buffer, view: node.bufferView, marks: [] };\n insertContent(build, node.content);\n\n for (const mark of build.marks) {\n placeMark(buffer, mark.node, mark.offset);\n }\n });\n};\n\nconst rebuildLabel = (node: ElementNode): void => {\n if (node.props.label !== undefined) {\n return;\n }\n\n const label = node.object;\n\n if (!(label instanceof Gtk.Label)) {\n return;\n }\n\n label.setLabel(node.content.map((child) => (child.kind === TEXT_KIND ? child.text : \"\")).join(\"\"));\n};\n\nconst flushTextHosts = (): void => {\n drain(dirtyHosts, (host) => {\n if (host.contentKind === \"label\") {\n rebuildLabel(host);\n } else if (host.contentKind === \"buffer\") {\n rebuildBuffer(host);\n }\n });\n};\n\nconst applyEnclosingTags = (\n buffer: Gtk.TextBuffer,\n node: TextNode,\n startIter: Gtk.TextIter,\n endIter: Gtk.TextIter,\n): void => {\n for (const tagNode of enclosingTagNodes(node)) {\n ensureTag(buffer.getTagTable(), tagNode);\n\n if (tagNode.object instanceof Gtk.TextTag) {\n buffer.applyTag(tagNode.object, startIter, endIter);\n }\n }\n};\n\nconst didUpdateTextSurgically = (host: ElementNode, node: TextNode, oldText: string, newText: string): boolean => {\n const buffer = host.object;\n\n if (host.contentKind !== \"buffer\" || !(buffer instanceof Gtk.TextBuffer)) {\n return false;\n }\n\n const located = getOffset(host.content, node, 0);\n\n if (!located.wasFound) {\n return false;\n }\n\n const start = located.offset;\n\n applyWrite(() => {\n buffer.delete(buffer.getIterAtOffset(start), buffer.getIterAtOffset(start + charLength(oldText)));\n buffer.insert(buffer.getIterAtOffset(start), newText, -1);\n });\n\n const startIter = buffer.getIterAtOffset(start);\n const endIter = buffer.getIterAtOffset(start + charLength(newText));\n applyEnclosingTags(buffer, node, startIter, endIter);\n\n return true;\n};\n\nexport {\n TEXT_PROP,\n textRestrictionError,\n bufferText,\n hasSameText,\n canAcceptText,\n isContentPaintableProp,\n markTextDirty,\n enclosingHost,\n addContent,\n removeContent,\n validateContentMix,\n flushTextHosts,\n didUpdateTextSurgically,\n};\n"]}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
declare const setAccessibleMetadata: (widget: object, name: string, value: unknown) => void;
|
|
2
2
|
declare const deleteAccessibleMetadata: (widget: object, name: string) => void;
|
|
3
|
-
/**
|
|
4
|
-
* Returns the last value applied for an accessible prop on a widget, or null when none was applied.
|
|
5
|
-
*
|
|
6
|
-
* @param widget The widget to read from.
|
|
7
|
-
* @param name The accessible prop name.
|
|
8
|
-
* @returns The last applied value, or null.
|
|
9
|
-
*/
|
|
10
3
|
declare const getAccessibleMetadata: (widget: object, name: string) => unknown;
|
|
11
4
|
export { setAccessibleMetadata, deleteAccessibleMetadata, getAccessibleMetadata };
|
|
12
5
|
//# sourceMappingURL=accessible-metadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessible-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,OAAO,KAAG,IAS7E,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,IAEhE,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"accessible-metadata.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,OAAO,KAAG,IAS7E,CAAC;AAEF,QAAA,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,IAEhE,CAAC;AAEF,QAAA,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,OAI7D,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -10,13 +10,6 @@ const setAccessibleMetadata = (widget, name, value) => {
|
|
|
10
10
|
const deleteAccessibleMetadata = (widget, name) => {
|
|
11
11
|
metadataStore.get(widget)?.delete(name);
|
|
12
12
|
};
|
|
13
|
-
/**
|
|
14
|
-
* Returns the last value applied for an accessible prop on a widget, or null when none was applied.
|
|
15
|
-
*
|
|
16
|
-
* @param widget The widget to read from.
|
|
17
|
-
* @param name The accessible prop name.
|
|
18
|
-
* @returns The last applied value, or null.
|
|
19
|
-
*/
|
|
20
13
|
const getAccessibleMetadata = (widget, name) => {
|
|
21
14
|
const value = metadataStore.get(widget)?.get(name);
|
|
22
15
|
return value === undefined ? null : value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessible-metadata.js","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAA0C,IAAI,OAAO,EAAE,CAAC;AAE3E,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,KAAc,EAAQ,EAAE;IACjF,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACpB,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAQ,EAAE;IACpE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"accessible-metadata.js","sourceRoot":"","sources":["../../src/utils/accessible-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAA0C,IAAI,OAAO,EAAE,CAAC;AAE3E,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,KAAc,EAAQ,EAAE;IACjF,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACpB,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAQ,EAAE;IACpE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAW,EAAE;IACpE,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAEnD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC","sourcesContent":["const metadataStore: WeakMap<object, Map<string, unknown>> = new WeakMap();\n\nconst setAccessibleMetadata = (widget: object, name: string, value: unknown): void => {\n let entries = metadataStore.get(widget);\n\n if (entries === undefined) {\n entries = new Map();\n metadataStore.set(widget, entries);\n }\n\n entries.set(name, value);\n};\n\nconst deleteAccessibleMetadata = (widget: object, name: string): void => {\n metadataStore.get(widget)?.delete(name);\n};\n\nconst getAccessibleMetadata = (widget: object, name: string): unknown => {\n const value = metadataStore.get(widget)?.get(name);\n\n return value === undefined ? null : value;\n};\n\nexport { setAccessibleMetadata, deleteAccessibleMetadata, getAccessibleMetadata };\n"]}
|
|
@@ -3,55 +3,103 @@ import type { Props } from "../reconciler/registry.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* Accessibility props available on every widget. Each member maps to a GTK4 accessible attribute
|
|
5
5
|
* (a `Gtk.AccessibleProperty`, `Gtk.AccessibleState`, or `Gtk.AccessibleRelation`) and is applied
|
|
6
|
-
* to the widget's accessible interface
|
|
6
|
+
* to the widget's accessible interface. Setting a member to `null` or `undefined`, or dropping it from the
|
|
7
|
+
* props, resets that attribute to its default.
|
|
7
8
|
*/
|
|
8
9
|
type AccessibleProps = {
|
|
10
|
+
/** How the widget completes the text being typed into it. */
|
|
9
11
|
accessibleAutocomplete?: Gtk.AccessibleAutocomplete | null | undefined;
|
|
12
|
+
/** Longer description announced after the label. */
|
|
10
13
|
accessibleDescription?: string | null | undefined;
|
|
14
|
+
/** Whether activating the widget opens a popup. */
|
|
11
15
|
accessibleHasPopup?: boolean | null | undefined;
|
|
16
|
+
/** Keyboard shortcuts that activate the widget. */
|
|
12
17
|
accessibleKeyShortcuts?: string | null | undefined;
|
|
18
|
+
/** Short name announced for the widget. */
|
|
13
19
|
accessibleLabel?: string | null | undefined;
|
|
20
|
+
/** Depth of the widget within a hierarchy of headings, list items, or tree rows. */
|
|
14
21
|
accessibleLevel?: number | null | undefined;
|
|
22
|
+
/** Whether the widget blocks interaction with everything behind it. */
|
|
15
23
|
accessibleModal?: boolean | null | undefined;
|
|
24
|
+
/** Whether the text input accepts more than one line. */
|
|
16
25
|
accessibleMultiLine?: boolean | null | undefined;
|
|
26
|
+
/** Whether more than one of the widget's items can be selected at a time. */
|
|
17
27
|
accessibleMultiSelectable?: boolean | null | undefined;
|
|
28
|
+
/** Whether the widget arranges its items horizontally or vertically. */
|
|
18
29
|
accessibleOrientation?: Gtk.Orientation | null | undefined;
|
|
30
|
+
/** Hint announced while the input is empty. */
|
|
19
31
|
accessiblePlaceholder?: string | null | undefined;
|
|
32
|
+
/** Whether the value can be read but not changed. */
|
|
20
33
|
accessibleReadOnly?: boolean | null | undefined;
|
|
34
|
+
/** Whether a value has to be supplied before the form can be submitted. */
|
|
21
35
|
accessibleRequired?: boolean | null | undefined;
|
|
36
|
+
/** Wording that replaces the default announcement of the widget's role. */
|
|
22
37
|
accessibleRoleDescription?: string | null | undefined;
|
|
38
|
+
/** Direction the widget's items are sorted in. */
|
|
23
39
|
accessibleSort?: Gtk.AccessibleSort | null | undefined;
|
|
40
|
+
/** Upper bound of the widget's value range. */
|
|
24
41
|
accessibleValueMax?: number | null | undefined;
|
|
42
|
+
/** Lower bound of the widget's value range. */
|
|
25
43
|
accessibleValueMin?: number | null | undefined;
|
|
44
|
+
/** Current value within the widget's range. */
|
|
26
45
|
accessibleValueNow?: number | null | undefined;
|
|
46
|
+
/** Wording announced in place of the numeric value. */
|
|
27
47
|
accessibleValueText?: string | null | undefined;
|
|
48
|
+
/** Help text describing how to use the widget. */
|
|
28
49
|
accessibleHelpText?: string | null | undefined;
|
|
50
|
+
/** Whether the widget is still loading and its content may yet change. */
|
|
29
51
|
accessibleBusy?: boolean | null | undefined;
|
|
52
|
+
/** Checked state of a check button or menu item, which may be mixed. */
|
|
30
53
|
accessibleChecked?: Gtk.AccessibleTristate | null | undefined;
|
|
54
|
+
/** Whether the widget is visible but cannot be edited or operated. */
|
|
31
55
|
accessibleDisabled?: boolean | null | undefined;
|
|
56
|
+
/** Whether the content the widget discloses is showing. */
|
|
32
57
|
accessibleExpanded?: boolean | null | undefined;
|
|
58
|
+
/** Whether the widget is kept out of the accessibility tree. */
|
|
33
59
|
accessibleHidden?: boolean | null | undefined;
|
|
60
|
+
/** Whether the entered value fails validation, and in what way. */
|
|
34
61
|
accessibleInvalid?: Gtk.AccessibleInvalidState | null | undefined;
|
|
62
|
+
/** Pressed state of a toggle button, which may be mixed. */
|
|
35
63
|
accessiblePressed?: Gtk.AccessibleTristate | null | undefined;
|
|
64
|
+
/** Whether the widget is selected within its container. */
|
|
36
65
|
accessibleSelected?: boolean | null | undefined;
|
|
66
|
+
/** Whether the link has already been followed. */
|
|
37
67
|
accessibleVisited?: boolean | null | undefined;
|
|
68
|
+
/** Descendant that holds the focus while the widget itself keeps it. */
|
|
38
69
|
accessibleActiveDescendant?: Gtk.Widget | null | undefined;
|
|
70
|
+
/** Total number of columns in the table, including any that are not rendered. */
|
|
39
71
|
accessibleColCount?: number | null | undefined;
|
|
72
|
+
/** One-based column position of the cell within its table. */
|
|
40
73
|
accessibleColIndex?: number | null | undefined;
|
|
74
|
+
/** Wording announced in place of the numeric column position. */
|
|
41
75
|
accessibleColIndexText?: string | null | undefined;
|
|
76
|
+
/** Number of columns the cell spans. */
|
|
42
77
|
accessibleColSpan?: number | null | undefined;
|
|
78
|
+
/** Widgets whose content or presence this widget controls. */
|
|
43
79
|
accessibleControls?: Gtk.Widget[] | null | undefined;
|
|
80
|
+
/** Widgets that describe this one. */
|
|
44
81
|
accessibleDescribedBy?: Gtk.Widget[] | null | undefined;
|
|
82
|
+
/** Widgets holding extended detail about this one. */
|
|
45
83
|
accessibleDetails?: Gtk.Widget[] | null | undefined;
|
|
84
|
+
/** Widgets holding the message that explains why the value is invalid. */
|
|
46
85
|
accessibleErrorMessage?: Gtk.Widget[] | null | undefined;
|
|
86
|
+
/** Widgets to read next, overriding the default reading order. */
|
|
47
87
|
accessibleFlowTo?: Gtk.Widget[] | null | undefined;
|
|
88
|
+
/** Widgets that label this one. */
|
|
48
89
|
accessibleLabelledBy?: Gtk.Widget[] | null | undefined;
|
|
90
|
+
/** Widgets this one owns that the widget hierarchy does not already imply. */
|
|
49
91
|
accessibleOwns?: Gtk.Widget[] | null | undefined;
|
|
92
|
+
/** One-based position of the widget within its set. */
|
|
50
93
|
accessiblePosInSet?: number | null | undefined;
|
|
94
|
+
/** Total number of rows in the table, including any that are not rendered. */
|
|
51
95
|
accessibleRowCount?: number | null | undefined;
|
|
96
|
+
/** One-based row position of the cell within its table. */
|
|
52
97
|
accessibleRowIndex?: number | null | undefined;
|
|
98
|
+
/** Wording announced in place of the numeric row position. */
|
|
53
99
|
accessibleRowIndexText?: string | null | undefined;
|
|
100
|
+
/** Number of rows the cell spans. */
|
|
54
101
|
accessibleRowSpan?: number | null | undefined;
|
|
102
|
+
/** Total number of items in the set the widget belongs to. */
|
|
55
103
|
accessibleSetSize?: number | null | undefined;
|
|
56
104
|
};
|
|
57
105
|
declare const isAccessibleProp: (name: string) => name is keyof AccessibleProps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessible-props.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-props.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD
|
|
1
|
+
{"version":3,"file":"accessible-props.d.ts","sourceRoot":"","sources":["../../src/utils/accessible-props.ts"],"names":[],"mappings":"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"}
|